{"version":3,"file":"favian-favian-ui.mjs","sources":["../../../projects/favian-ui/src/animations/fade-in-out.ts","../../../projects/favian-ui/src/common/coordinate/coordinate.ts","../../../projects/favian-ui/src/common/event-manager/event-manager.ts","../../../projects/favian-ui/src/utils/validate.util.ts","../../../projects/favian-ui/src/utils/date.util.ts","../../../projects/favian-ui/src/common/extended-validators/extended-validators.ts","../../../projects/favian-ui/src/common/position-observer/position-change-entry.ts","../../../projects/favian-ui/src/common/position-observer/position-observer.ts","../../../projects/favian-ui/src/utils/convert.util.ts","../../../projects/favian-ui/src/components/abstracts/custom-control/custom-control.ts","../../../projects/favian-ui/src/components/abstracts/theme-class-binder/theme-class-binder.ts","../../../projects/favian-ui/src/components/abstracts/customizable/customizable.ts","../../../projects/favian-ui/src/components/abstracts/custom-control-with-theme-class/custom-control-with-theme-class.ts","../../../projects/favian-ui/src/services/favi-app/favi-app.service.ts","../../../projects/favian-ui/src/constants/values.ts","../../../projects/favian-ui/src/services/history-state/history-state.service.ts","../../../projects/favian-ui/src/utils/random.util.ts","../../../projects/favian-ui/src/services/subscription-manager/subscription-observer.ts","../../../projects/favian-ui/src/services/subscription-manager/subscription-manager.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/services/favi-overlay-data.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/favi-overlay-backdrop/favi-overlay-backdrop.component.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/services/favi-overlay-ref.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/services/favi-overlay.service.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/favi-overlay-outlet/favi-overlay-outlet.component.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/favi-overlay-outlet/favi-overlay-outlet.component.html","../../../projects/favian-ui/src/components/common/favi-icon/favi-icon.component.ts","../../../projects/favian-ui/src/components/common/favi-icon/favi-icon.component.html","../../../projects/favian-ui/src/components/common/favi-effector/favi-effector.directive.ts","../../../projects/favian-ui/src/components/toast/favi-toast/favi-toast.component.ts","../../../projects/favian-ui/src/components/toast/favi-toast/favi-toast.component.html","../../../projects/favian-ui/src/components/toast/favi-toast/services/favi-toast-ref.ts","../../../projects/favian-ui/src/components/toast/favi-toast/services/favi-toast.service.ts","../../../projects/favian-ui/src/components/toast/favi-toast/favi-toast-outlet/favi-toast-outlet.component.ts","../../../projects/favian-ui/src/components/toast/favi-toast/favi-toast-outlet/favi-toast-outlet.component.html","../../../projects/favian-ui/src/components/app/favi-app/favi-app.component.ts","../../../projects/favian-ui/src/components/app/favi-app/favi-app.component.html","../../../projects/favian-ui/src/components/overlay/favi-overlay/favi-overlay.module.ts","../../../projects/favian-ui/src/components/common/favi-icon/favi-icon.module.ts","../../../projects/favian-ui/src/components/common/favi-effector/favi-effector.module.ts","../../../projects/favian-ui/src/components/toast/favi-toast/favi-toast.module.ts","../../../projects/favian-ui/src/components/app/favi-app/favi-app.module.ts","../../../projects/favian-ui/src/components/app/favi-app-bar/favi-app-bar.component.ts","../../../projects/favian-ui/src/components/app/favi-app-bar/favi-app-bar.component.html","../../../projects/favian-ui/src/components/app/favi-app-bar/favi-app-bar.module.ts","../../../projects/favian-ui/src/components/app/favi-sidebar/favi-sidebar.component.ts","../../../projects/favian-ui/src/components/app/favi-sidebar/favi-sidebar.component.html","../../../projects/favian-ui/src/components/app/favi-sidebar/favi-sidebar.module.ts","../../../projects/favian-ui/src/components/buttons/favi-button/favi-button.directive.ts","../../../projects/favian-ui/src/components/buttons/favi-button/favi-button.module.ts","../../../projects/favian-ui/src/components/buttons/favi-flat-button/favi-flat-button.directive.ts","../../../projects/favian-ui/src/components/buttons/favi-flat-button/favi-flat-button.module.ts","../../../projects/favian-ui/src/components/buttons/favi-stroke-button/favi-stroke-button.directive.ts","../../../projects/favian-ui/src/components/buttons/favi-stroke-button/favi-stroke-button.module.ts","../../../projects/favian-ui/src/components/calendar/favi-calendar-date-replacer/favi-calendar-date-replacer.directive.ts","../../../projects/favian-ui/src/errors/view-child-required-error.ts","../../../projects/favian-ui/src/utils/event.util.ts","../../../projects/favian-ui/src/components/calendar/common/favi-calendar-label-provider.ts","../../../projects/favian-ui/src/components/calendar/abstracts/favi-base-calendar/favi-base-calendar.ts","../../../projects/favian-ui/src/components/calendar/favi-multi-calendar/favi-multi-calendar.component.ts","../../../projects/favian-ui/src/components/calendar/favi-multi-calendar/favi-multi-calendar.component.html","../../../projects/favian-ui/src/components/calendar/favi-multi-calendar/favi-multi-calendar.module.ts","../../../projects/favian-ui/src/components/calendar/favi-ranged-calendar/favi-ranged-calendar.component.ts","../../../projects/favian-ui/src/components/calendar/favi-ranged-calendar/favi-ranged-calendar.component.html","../../../projects/favian-ui/src/components/calendar/favi-ranged-calendar/favi-ranged-calendar.module.ts","../../../projects/favian-ui/src/components/calendar/favi-single-calendar/favi-single-calendar.component.ts","../../../projects/favian-ui/src/components/calendar/favi-single-calendar/favi-single-calendar.component.html","../../../projects/favian-ui/src/components/calendar/favi-single-calendar/favi-single-calendar.module.ts","../../../projects/favian-ui/src/components/common/abstracts/favi-tab-item-like/favi-tab-item-like.ts","../../../projects/favian-ui/src/components/common/abstracts/favi-tab-like/favi-tab-like.ts","../../../projects/favian-ui/src/components/common/favi-accordion/favi-accordion-button/favi-accordion-button.component.ts","../../../projects/favian-ui/src/components/common/favi-accordion/favi-accordion-button/favi-accordion-button.component.html","../../../projects/favian-ui/src/components/common/favi-accordion/favi-accordion.component.ts","../../../projects/favian-ui/src/components/common/favi-accordion/favi-accordion.component.html","../../../projects/favian-ui/src/components/common/favi-accordion/favi-accordion.module.ts","../../../projects/favian-ui/src/components/common/favi-auto-resize-textarea/favi-auto-resize-textarea.directive.ts","../../../projects/favian-ui/src/components/common/favi-auto-resize-textarea/favi-auto-resize-textarea.module.ts","../../../projects/favian-ui/src/components/common/favi-autofocus/favi-autofocus.directive.ts","../../../projects/favian-ui/src/components/common/favi-autofocus/favi-autofocus.module.ts","../../../projects/favian-ui/src/errors/input-required-error.ts","../../../projects/favian-ui/src/components/common/favi-avatar/favi-avatar.component.ts","../../../projects/favian-ui/src/components/common/favi-avatar/favi-avatar.component.html","../../../projects/favian-ui/src/components/common/favi-avatar/favi-avatar.module.ts","../../../projects/favian-ui/src/components/common/favi-chip/favi-chip-avatar.directive.ts","../../../projects/favian-ui/src/components/common/favi-chip/favi-chip.component.ts","../../../projects/favian-ui/src/components/common/favi-chip/favi-chip.component.html","../../../projects/favian-ui/src/components/common/favi-chip/favi-chip.module.ts","../../../projects/favian-ui/src/components/common/favi-container/favi-container.component.ts","../../../projects/favian-ui/src/components/common/favi-container/favi-container.component.html","../../../projects/favian-ui/src/components/common/favi-container/favi-container.module.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay.ts","../../../projects/favian-ui/src/components/common/favi-theme/favi-theme.directive.ts","../../../projects/favian-ui/src/components/common/favi-context-menu/favi-context-menu.component.ts","../../../projects/favian-ui/src/components/common/favi-context-menu/favi-context-menu.component.html","../../../projects/favian-ui/src/components/common/favi-theme/favi-theme.module.ts","../../../projects/favian-ui/src/components/common/favi-context-menu/favi-context-menu.module.ts","../../../projects/favian-ui/src/components/common/favi-context-menu/services/favi-context-menu.service.ts","../../../projects/favian-ui/src/utils/touch-slide.util.ts","../../../projects/favian-ui/src/utils/animation.util.ts","../../../projects/favian-ui/src/components/common/favi-horizontal-scroller/favi-horizontal-scroller.component.ts","../../../projects/favian-ui/src/components/common/favi-horizontal-scroller/favi-horizontal-scroller.component.html","../../../projects/favian-ui/src/components/common/favi-horizontal-scroller/favi-horizontal-scroller.module.ts","../../../projects/favian-ui/src/components/controls/favi-options-overlay/favi-options-overlay.component.ts","../../../projects/favian-ui/src/components/controls/favi-options-overlay/favi-options-overlay.component.html","../../../projects/favian-ui/src/components/controls/favi-option/favi-option.component.ts","../../../projects/favian-ui/src/components/controls/favi-option/favi-option.component.html","../../../projects/favian-ui/src/components/controls/favi-select-value/favi-select-value.directive.ts","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal-backdrop/favi-modal-backdrop.component.ts","../../../projects/favian-ui/src/components/controls/abstracts/favi-base-select/favi-base-select.ts","../../../projects/favian-ui/src/components/controls/favi-select/favi-select.component.ts","../../../projects/favian-ui/src/components/controls/favi-select/favi-select.component.html","../../../projects/favian-ui/src/components/common/favi-paginator/favi-paginator.component.ts","../../../projects/favian-ui/src/components/common/favi-paginator/favi-paginator.component.html","../../../projects/favian-ui/src/components/controls/favi-options-overlay/favi-options-overlay.module.ts","../../../projects/favian-ui/src/components/controls/favi-select/favi-select.module.ts","../../../projects/favian-ui/src/components/controls/favi-option/favi-option.module.ts","../../../projects/favian-ui/src/components/common/favi-paginator/favi-paginator.module.ts","../../../projects/favian-ui/src/components/common/favi-progress-bar/favi-progress-bar.component.ts","../../../projects/favian-ui/src/components/common/favi-progress-bar/favi-progress-bar.component.html","../../../projects/favian-ui/src/components/common/favi-progress-bar/favi-progress-bar.module.ts","../../../projects/favian-ui/src/components/common/favi-spinner/favi-spinner.component.ts","../../../projects/favian-ui/src/components/common/favi-spinner/favi-spinner.component.html","../../../projects/favian-ui/src/components/common/favi-spinner/favi-spinner.module.ts","../../../projects/favian-ui/src/components/common/favi-stepper/favi-step-item/favi-step-item.component.ts","../../../projects/favian-ui/src/components/common/favi-stepper/favi-step-item/favi-step-item.component.html","../../../projects/favian-ui/src/components/common/favi-stepper/favi-stepper.component.ts","../../../projects/favian-ui/src/components/common/favi-stepper/favi-stepper.component.html","../../../projects/favian-ui/src/components/common/favi-stepper/favi-stepper.module.ts","../../../projects/favian-ui/src/components/common/favi-tabs/favi-tab-item.directive.ts","../../../projects/favian-ui/src/components/common/favi-tabs/favi-tabs.component.ts","../../../projects/favian-ui/src/components/common/favi-tabs/favi-tabs.component.html","../../../projects/favian-ui/src/components/common/favi-tabs/favi-tabs.module.ts","../../../projects/favian-ui/src/components/common/favi-toggle-button/favi-toggle-button-item.directive.ts","../../../projects/favian-ui/src/components/common/favi-toggle-button/favi-toggle-button.component.ts","../../../projects/favian-ui/src/components/common/favi-toggle-button/favi-toggle-button.component.html","../../../projects/favian-ui/src/components/common/favi-toggle-button/favi-toggle-button.module.ts","../../../projects/favian-ui/src/components/common/favi-tooltip/favi-tooltip.component.ts","../../../projects/favian-ui/src/components/common/favi-tooltip/favi-tooltip.component.html","../../../projects/favian-ui/src/utils/element.util.ts","../../../projects/favian-ui/src/components/common/favi-tooltip/favi-tooltip.directive.ts","../../../projects/favian-ui/src/components/common/favi-tooltip/favi-tooltip.module.ts","../../../projects/favian-ui/src/components/common/favi-value-field/favi-value-field.component.ts","../../../projects/favian-ui/src/components/common/favi-value-field/favi-value-field.component.html","../../../projects/favian-ui/src/components/common/favi-value-field/favi-value-field.module.ts","../../../projects/favian-ui/src/components/controls/favi-autocomplete-options-overlay/favi-autocomplete-options-overlay.component.ts","../../../projects/favian-ui/src/components/controls/favi-autocomplete-options-overlay/favi-autocomplete-options-overlay.component.html","../../../projects/favian-ui/src/components/modal/favi-modal/services/favi-modal.service.ts","../../../projects/favian-ui/src/components/controls/abstracts/favi-base-autocomplete/favi-base-autocomplete.ts","../../../projects/favian-ui/src/components/controls/abstracts/favi-base-common-datepicker/favi-base-common-datepicker.ts","../../../projects/favian-ui/src/components/modal/favi-modal/abstracts/favi-base-modal/favi-base-modal.ts","../../../projects/favian-ui/src/components/controls/abstracts/favi-base-datepicker-calendar/favi-base-datepicker-calendar.ts","../../../projects/favian-ui/src/components/controls/abstracts/favi-base-slider/favi-base-slider.ts","../../../projects/favian-ui/src/components/controls/abstracts/favi-base-toggleable/favi-base-toggleable.ts","../../../projects/favian-ui/src/components/controls/common/correct-date-string.ts","../../../projects/favian-ui/src/components/controls/common/date-input-mask.ts","../../../projects/favian-ui/src/components/controls/datepickers/abstracts/favi-base-ranged-datepicker/favi-base-ranged-datepicker.ts","../../../projects/favian-ui/src/components/controls/datepickers/abstracts/favi-base-single-datepicker/favi-base-single-datepicker.ts","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal-actions/favi-modal-actions.component.ts","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal-actions/favi-modal-actions.component.html","../../../projects/favian-ui/src/components/controls/datepickers/favi-datepicker/favi-single-datepicker-calendar/favi-single-datepicker-calendar.component.ts","../../../projects/favian-ui/src/components/controls/datepickers/favi-datepicker/favi-single-datepicker-calendar/favi-single-datepicker-calendar.component.html","../../../projects/favian-ui/src/components/controls/datepickers/favi-datepicker/favi-single-datepicker.component.ts","../../../projects/favian-ui/src/components/controls/datepickers/favi-datepicker/favi-single-datepicker.component.html","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal-header/favi-modal-header.component.ts","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal-header/favi-modal-header.component.html","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal-content/favi-modal-content.component.ts","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal-content/favi-modal-content.component.html","../../../projects/favian-ui/src/components/modal/favi-modal/favi-modal.module.ts","../../../projects/favian-ui/src/components/controls/datepickers/favi-datepicker/favi-single-datepicker.module.ts","../../../projects/favian-ui/src/components/controls/datepickers/favi-ranged-datepicker/favi-ranged-datepicker-calendar/favi-ranged-datepicker-calendar.component.ts","../../../projects/favian-ui/src/components/controls/datepickers/favi-ranged-datepicker/favi-ranged-datepicker-calendar/favi-ranged-datepicker-calendar.component.html","../../../projects/favian-ui/src/components/controls/datepickers/favi-ranged-datepicker/favi-ranged-datepicker.component.ts","../../../projects/favian-ui/src/components/controls/datepickers/favi-ranged-datepicker/favi-ranged-datepicker.component.html","../../../projects/favian-ui/src/components/controls/favi-input-mask/favi-input-mask.directive.ts","../../../projects/favian-ui/src/components/controls/favi-input-mask/favi-input-mask.module.ts","../../../projects/favian-ui/src/components/controls/datepickers/favi-ranged-datepicker/favi-ranged-datepicker.module.ts","../../../projects/favian-ui/src/components/controls/favi-autocomplete/favi-autocomplete.component.ts","../../../projects/favian-ui/src/components/controls/favi-autocomplete/favi-autocomplete.component.html","../../../projects/favian-ui/src/components/controls/favi-autocomplete-options/favi-autocomplete-options.component.ts","../../../projects/favian-ui/src/components/controls/favi-autocomplete-options/favi-autocomplete-options.component.html","../../../projects/favian-ui/src/components/controls/favi-autocomplete-options/favi-autocomplete-options.module.ts","../../../projects/favian-ui/src/components/controls/favi-autocomplete/favi-autocomplete.module.ts","../../../projects/favian-ui/src/components/controls/favi-autocomplete-options-overlay/favi-autocomplete-options-overlay.module.ts","../../../projects/favian-ui/src/components/controls/favi-checkbox/favi-checkbox.component.ts","../../../projects/favian-ui/src/components/controls/favi-checkbox/favi-checkbox.component.html","../../../projects/favian-ui/src/components/controls/favi-checkbox/favi-checkbox.module.ts","../../../projects/favian-ui/src/components/controls/favi-form-field/favi-error/favi-error.component.ts","../../../projects/favian-ui/src/components/controls/favi-form-field/favi-error/favi-error.component.html","../../../projects/favian-ui/src/components/controls/favi-textarea/favi-textarea.component.ts","../../../projects/favian-ui/src/components/controls/favi-textarea/favi-textarea.component.html","../../../projects/favian-ui/src/components/controls/favi-input/favi-input-prefix.directive.ts","../../../projects/favian-ui/src/components/controls/favi-input/favi-input-suffix.directive.ts","../../../projects/favian-ui/src/components/controls/favi-input/favi-input.component.ts","../../../projects/favian-ui/src/components/controls/favi-input/favi-input.component.html","../../../projects/favian-ui/src/components/controls/favi-multi-select/favi-multi-select.component.ts","../../../projects/favian-ui/src/components/controls/favi-multi-select/favi-multi-select.component.html","../../../projects/favian-ui/src/components/controls/favi-form-field/favi-form-field.component.ts","../../../projects/favian-ui/src/components/controls/favi-form-field/favi-form-field.component.html","../../../projects/favian-ui/src/components/controls/favi-form-field/favi-hint/favi-hint.component.ts","../../../projects/favian-ui/src/components/controls/favi-form-field/favi-hint/favi-hint.component.html","../../../projects/favian-ui/src/components/controls/favi-form-field/favi-form-field.module.ts","../../../projects/favian-ui/src/components/controls/favi-input/favi-input.module.ts","../../../projects/favian-ui/src/components/controls/favi-multi-select/favi-multi-select.module.ts","../../../projects/favian-ui/src/components/controls/favi-radio-group/favi-radio/favi-radio.component.ts","../../../projects/favian-ui/src/components/controls/favi-radio-group/favi-radio/favi-radio.component.html","../../../projects/favian-ui/src/utils/query-list.util.ts","../../../projects/favian-ui/src/components/controls/favi-radio-group/favi-radio-group.component.ts","../../../projects/favian-ui/src/components/controls/favi-radio-group/favi-radio-group.component.html","../../../projects/favian-ui/src/components/controls/favi-radio-group/favi-radio-group.module.ts","../../../projects/favian-ui/src/components/controls/favi-select-value/favi-select-value.module.ts","../../../projects/favian-ui/src/components/controls/favi-slider/favi-slider.component.ts","../../../projects/favian-ui/src/components/controls/favi-slider/favi-slider.component.html","../../../projects/favian-ui/src/components/controls/favi-slider/favi-slider.module.ts","../../../projects/favian-ui/src/components/controls/favi-switch/favi-switch.component.ts","../../../projects/favian-ui/src/components/controls/favi-switch/favi-switch.component.html","../../../projects/favian-ui/src/components/controls/favi-switch/favi-switch.module.ts","../../../projects/favian-ui/src/components/controls/favi-textarea/favi-textarea.module.ts","../../../projects/favian-ui/src/components/controls/favi-time-input/favi-time-input.component.ts","../../../projects/favian-ui/src/components/controls/favi-time-input/favi-time-input.component.html","../../../projects/favian-ui/src/components/controls/favi-time-input/favi-time-input.module.ts","../../../projects/favian-ui/src/components/drag-and-drop/favi-drag-and-drop/favi-drag-handle.directive.ts","../../../projects/favian-ui/src/components/drag-and-drop/favi-drag-and-drop/favi-draggable.directive.ts","../../../projects/favian-ui/src/components/drag-and-drop/favi-drag-and-drop/favi-dropzone.directive.ts","../../../projects/favian-ui/src/components/drag-and-drop/favi-drag-and-drop/favi-dragging-element-template.directive.ts","../../../projects/favian-ui/src/components/drag-and-drop/favi-drag-and-drop/favi-drag-container.directive.ts","../../../projects/favian-ui/src/components/drag-and-drop/favi-drag-and-drop/favi-drag-and-drop.module.ts","../../../projects/favian-ui/src/components/drawer/abstracts/favi-base-drawer/favi-base-drawer.ts","../../../projects/favian-ui/src/components/drawer/favi-drawer-actions/favi-drawer-actions.component.ts","../../../projects/favian-ui/src/components/drawer/favi-drawer-actions/favi-drawer-actions.component.html","../../../projects/favian-ui/src/components/drawer/favi-drawer-content/favi-drawer-content.component.ts","../../../projects/favian-ui/src/components/drawer/favi-drawer-content/favi-drawer-content.component.html","../../../projects/favian-ui/src/components/drawer/favi-drawer-header/favi-drawer-header.component.ts","../../../projects/favian-ui/src/components/drawer/favi-drawer-header/favi-drawer-header.component.html","../../../projects/favian-ui/src/components/drawer/favi-drawer.module.ts","../../../projects/favian-ui/src/components/drawer/favi-drawer.service.ts","../../../projects/favian-ui/src/components/markdown-editor/services/favi-markdown-editor.service.ts","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-editor.component.ts","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-editor.component.html","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-heading-options/favi-markdown-heading-options.component.ts","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-heading-options/favi-markdown-heading-options.component.html","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-insert-link-labels.ts","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-insert-link/favi-markdown-insert-link.component.ts","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-insert-link/favi-markdown-insert-link.component.html","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-toolbar/favi-markdown-toolbar.component.ts","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-toolbar/favi-markdown-toolbar.component.html","../../../projects/favian-ui/src/components/markdown-editor/favi-markdown-editor/favi-markdown-editor.module.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/abstracts/favi-base-overlay-with-theme-class/favi-base-overlay-with-theme-class.ts","../../../projects/favian-ui/src/components/overlay/favi-overlay/guards/favi-overlay-can-deactivate.ts","../../../projects/favian-ui/src/components/table/favi-table/abstract/favi-table-cell/favi-table-cell.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table-body/favi-table-body.component.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table-body/favi-table-body.component.html","../../../projects/favian-ui/src/components/table/favi-table/favi-table-body-cell/favi-table-body-cell.component.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table-body-cell/favi-table-body-cell.component.html","../../../projects/favian-ui/src/components/table/favi-table/favi-table-footer/favi-table-footer.component.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table-footer/favi-table-footer.component.html","../../../projects/favian-ui/src/components/table/favi-table/favi-table-header/favi-table-header.component.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table-header/favi-table-header.component.html","../../../projects/favian-ui/src/components/table/favi-table/favi-table-header-cell/favi-table-header-cell.component.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table-header-cell/favi-table-header-cell.component.html","../../../projects/favian-ui/src/components/table/favi-table/favi-table-row/favi-table-row.component.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table-row/favi-table-row.component.html","../../../projects/favian-ui/src/components/table/favi-table/favi-table.component.ts","../../../projects/favian-ui/src/components/table/favi-table/favi-table.component.html","../../../projects/favian-ui/src/components/table/favi-table/favi-table.module.ts","../../../projects/favian-ui/src/pipes/favi-pipe/favi-elapsed-time.pipe.ts","../../../projects/favian-ui/src/pipes/favi-pipe/favi-pipe.module.ts","../../../projects/favian-ui/src/utils/api.util.ts","../../../projects/favian-ui/src/utils/array.util.ts","../../../projects/favian-ui/src/utils/color.util.ts","../../../projects/favian-ui/src/utils/object.util.ts","../../../projects/favian-ui/src/utils/selection.util.ts","../../../projects/favian-ui/src/utils/sort.util.ts","../../../projects/favian-ui/src/utils/type.util.ts","../../../projects/favian-ui/src/components/showcase/favi-showcase/favi-showcase.component.ts","../../../projects/favian-ui/src/components/showcase/favi-showcase/favi-showcase.component.html","../../../projects/favian-ui/src/components/showcase/favi-showcase/favi-showcase-routing.module.ts","../../../projects/favian-ui/src/components/showcase/favi-showcase/favi-showcase.module.ts","../../../projects/favian-ui/src/favian-favian-ui.ts"],"sourcesContent":["import {animate, AnimationTriggerMetadata, state, style, transition, trigger} from '@angular/animations';\r\n\r\n/**\r\n * Create simple fadeInOut animation.\r\n * Use '@fadeInOut' to bound to component.\r\n * Animation state can be 'void' or' show'.\r\n *\r\n * @param timings\r\n */\r\nexport function fadeInOut(timings = '.1s'): AnimationTriggerMetadata {\r\n  return trigger('fadeInOut', [\r\n    state('void', style({\r\n      opacity: 0,\r\n    })),\r\n    state('show', style({\r\n      opacity: 1,\r\n    })),\r\n    transition('void <=> show', animate(timings)),\r\n  ]);\r\n}\r\n","export interface CoordinateOptions {\r\n  // X position.\r\n  x: number;\r\n\r\n  // Y position.\r\n  y: number;\r\n}\r\n\r\n/**\r\n * XY coordinate.\r\n */\r\nexport class Coordinate {\r\n  /**\r\n   * Create coordinate from the event.\r\n   *\r\n   * @param event - One of MouseEvent, PointerEvent, or TouchEvent.\r\n   */\r\n  static fromEvent(event: MouseEvent | PointerEvent | TouchEvent): Coordinate {\r\n    if (event instanceof MouseEvent || event instanceof PointerEvent) {\r\n      return new Coordinate({\r\n        x: event.x,\r\n        y: event.y,\r\n      });\r\n    } else {\r\n      return new Coordinate({\r\n        x: event.touches[0].pageX,\r\n        y: event.touches[0].pageY,\r\n      });\r\n    }\r\n  }\r\n\r\n  // X position.\r\n  x: number;\r\n\r\n  // Y position.\r\n  y: number;\r\n\r\n  constructor(options: CoordinateOptions) {\r\n    const {x, y} = options;\r\n\r\n    this.x = x;\r\n    this.y = y;\r\n  }\r\n}\r\n","/**\r\n * Event manager can manage listeners with name for target.\r\n * Each listener will have unique name, and manager can remove registered listener by their name.\r\n */\r\nexport class EventManager {\r\n  // Map of registered events.\r\n  private static _registeredEvents: {[k: string]: RegisteredEvent<any>} = {};\r\n\r\n  /**\r\n   * Register event to manager.\r\n   * When name is duplicated, previous event will be unregistered.\r\n   *\r\n   * @param name - Unique name of event to register.\r\n   *  It can be used to unregister event.\r\n   * @param target - Event target.\r\n   * @param type - Type of event. Set generic <T> to define the type of event.\r\n   * @param listener - Event listener.\r\n   * @param options - Options for event listener.\r\n   */\r\n  static register<T>(name: string, target: EventTarget, type: keyof T, listener: any, options?: boolean | AddEventListenerOptions): void {\r\n    this.unregister(name);\r\n\r\n    target.addEventListener(type as any, listener, options);\r\n\r\n    this._registeredEvents[name] = {\r\n      target,\r\n      type,\r\n      listener,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Unregister existing event by name.\r\n   *\r\n   * @param name - Unique name of registered event.\r\n   */\r\n  static unregister(name: string): void {\r\n    if (this._registeredEvents[name]) {\r\n      const {\r\n        target,\r\n        type,\r\n        listener,\r\n      } = this._registeredEvents[name];\r\n\r\n      target.removeEventListener(type as any, listener);\r\n\r\n      delete this._registeredEvents[name];\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Map of registered event.\r\n */\r\nexport interface RegisteredEvent<T> {\r\n  // Event target.\r\n  target: EventTarget;\r\n\r\n  // Type of event.\r\n  // Can be defined by generic <T>.\r\n  type: T;\r\n\r\n  // Registered event listener for target and type.\r\n  listener: EventListenerOrEventListenerObject | null;\r\n}\r\n","import {ThemeColors} from './type.util';\r\n\r\n/**\r\n * Validate whether the value is defined or not.\r\n * If value is not undefined and null, it is defined value.\r\n *\r\n * @param value\r\n */\r\nexport function isDefined<T>(value: any): value is T {\r\n  return value !== undefined && value !== null;\r\n}\r\n\r\n/**\r\n * Validate whether the value is valid number or not.\r\n * It checks isDefined() and checks number isn't Infinity or NaN.\r\n *\r\n * @param value\r\n */\r\nexport function isValidNumber(value: any): value is number {\r\n  return isDefined(value) && Number.isFinite(value) && !Number.isNaN(value);\r\n}\r\n\r\n/**\r\n * Validate whether the value is one of the ThemeColors or not.\r\n *\r\n * @param color\r\n */\r\nexport function isThemeColor(color: any | ThemeColors): color is ThemeColors {\r\n  return ['default', 'amber', 'purple', 'indigo', 'dark-green', 'dark-grey', 'red', 'primary', 'secondary'].includes(color);\r\n}\r\n\r\n/**\r\n * Validate whether the value is valid Date object or not.\r\n *\r\n * @param value\r\n */\r\nexport function isValidDate(value: any): value is Date {\r\n  return value instanceof Date && !isNaN(value.valueOf());\r\n}\r\n","import {DateLike} from './type.util';\r\n\r\nexport const SECOND_IN_MILLS = 1000;\r\nexport const MINUTE_IN_MILLS = SECOND_IN_MILLS * 60;\r\nexport const HOUR_IN_MILLS = MINUTE_IN_MILLS * 60;\r\nexport const DAY_IN_MILLS = HOUR_IN_MILLS * 24;\r\nexport const WEEK_IN_MILLS = DAY_IN_MILLS * 7;\r\nexport const YEAR_IN_MILLS = DAY_IN_MILLS * 365;\r\n\r\n/**\r\n * Check whether both provided dates are equal.\r\n * It only compares year, month, and date.\r\n *\r\n * @param targetDate\r\n * @param comparisonDate\r\n */\r\nexport function isDateEqual(targetDate: DateLike, comparisonDate: DateLike): boolean {\r\n  targetDate = new Date(targetDate);\r\n  comparisonDate = new Date(comparisonDate);\r\n\r\n  return (\r\n    targetDate.getFullYear() === comparisonDate.getFullYear()\r\n    && targetDate.getMonth() === comparisonDate.getMonth()\r\n    && targetDate.getDate() === comparisonDate.getDate()\r\n  );\r\n}\r\n\r\n/**\r\n * Check whether targetDate is bigger than comparisonDate.\r\n * It only compares year, month, and date.\r\n *\r\n * @param targetDate\r\n * @param comparisonDate\r\n */\r\nexport function isDateBigger(targetDate: DateLike, comparisonDate: DateLike): boolean {\r\n  targetDate = new Date(targetDate);\r\n  comparisonDate = new Date(comparisonDate);\r\n\r\n  // Truncate under date.\r\n  targetDate.setHours(0, 0, 0, 0);\r\n  comparisonDate.setHours(0, 0, 0, 0);\r\n\r\n  return targetDate.valueOf() > comparisonDate.valueOf();\r\n}\r\n\r\n/**\r\n * Check whether targetDate is bigger than or equal to comparisonDate.\r\n * It only compares year, month, and date.\r\n *\r\n * @param targetDate\r\n * @param comparisonDate\r\n */\r\nexport function isDateBiggerOrEqual(targetDate: DateLike, comparisonDate: DateLike): boolean {\r\n  targetDate = new Date(targetDate);\r\n  comparisonDate = new Date(comparisonDate);\r\n\r\n  // Truncate under date.\r\n  targetDate.setHours(0, 0, 0, 0);\r\n  comparisonDate.setHours(0, 0, 0, 0);\r\n\r\n  return targetDate.valueOf() >= comparisonDate.valueOf();\r\n}\r\n\r\n/**\r\n * Depart date to year, month, date, hours, minutes, seconds, milliseconds.\r\n *\r\n * @param date\r\n */\r\nexport function departDate(date: DateLike): DepartedDate {\r\n  if (!(date instanceof Date)) {\r\n    date = new Date(date);\r\n  }\r\n\r\n  return {\r\n    year: date.getFullYear(),\r\n    month: date.getMonth(),\r\n    date: date.getDate(),\r\n    hours: date.getHours(),\r\n    minutes: date.getMinutes(),\r\n    seconds: date.getSeconds(),\r\n    milliseconds: date.getMilliseconds(),\r\n  };\r\n}\r\n\r\nexport interface DepartedDate {\r\n  year: number;\r\n  month: number;\r\n  date: number;\r\n  hours: number;\r\n  minutes: number;\r\n  seconds: number;\r\n  milliseconds: number;\r\n}\r\n","import {AbstractControl, ValidationErrors, Validators} from '@angular/forms';\r\nimport {isDefined, isValidDate} from '../../utils/validate.util';\r\nimport {Nullable} from '../../utils/type.util';\r\nimport {isDateBigger} from '../../utils/date.util';\r\n\r\n/**\r\n * Extender of Angular Validators.\r\n */\r\nexport class ExtendedValidators extends Validators {\r\n  /**\r\n   * The original Validator.required() doesn't check the empty string.\r\n   * This method will check empty string or only string with spaces as an error as well.\r\n   * It will set 'required' error to control.\r\n   *\r\n   * @param control\r\n   */\r\n  static textRequired(control: AbstractControl): Nullable<ValidationErrors> {\r\n    if (!isDefined<string>(control.value) || control.value.trim() === '') {\r\n      return {\r\n        required: true,\r\n      };\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Validate 'required' error for an array value.\r\n   * If array is empty, 'required' error will be set to control.\r\n   *\r\n   * @param control\r\n   */\r\n  static arrayRequired(control: AbstractControl): Nullable<ValidationErrors> {\r\n    const {\r\n      value,\r\n    } = control;\r\n\r\n    if (!isDefined(value) || !(value instanceof Array) || value.length === 0) {\r\n      return {\r\n        required: true,\r\n      };\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Validate whether value is a valid date or not.\r\n   * It will set 'date' error to control.\r\n   *\r\n   * @param control\r\n   */\r\n  static date(control: AbstractControl): Nullable<ValidationErrors> {\r\n    if (control.value && !isValidDate(control.value)) {\r\n      return {\r\n        date: true,\r\n      };\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Composition validator for ranged date.\r\n   * The 'required' error will be set when start date or end date are not selected.\r\n   * The 'date' error will be set when start date or end date are invalid.\r\n   * The 'range' error will be set when range is invalid.\r\n   *\r\n   * @param control\r\n   */\r\n  static rangedDate(control: AbstractControl): Nullable<ValidationErrors> {\r\n    const {\r\n      value,\r\n    } = control;\r\n\r\n    if (value instanceof Array && value.length === 2) {\r\n      const startDate = value[0];\r\n      const endDate = value[1];\r\n\r\n      if (startDate === null || endDate === null) {\r\n        return {\r\n          required: true,\r\n        };\r\n      }\r\n\r\n      if (!isValidDate(startDate) || !isValidDate(endDate)) {\r\n        return {\r\n          date: true,\r\n        };\r\n      }\r\n\r\n      if (isDateBigger(startDate, endDate)) {\r\n        return {\r\n          range: true,\r\n        };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import {EventEmitter} from '@angular/core';\r\n\r\n/**\r\n * Position change entry to detect actual position of target\r\n * with RequestAnimationFrame.\r\n *\r\n * It compares current DOMRect and previous stored DOMRect to emit changed emitter.\r\n */\r\nexport class PositionChangeEntry {\r\n  target: HTMLElement;\r\n\r\n  // Previous DOMRect for current target.\r\n  domRect: DOMRect;\r\n\r\n  // Emit when position has changed.\r\n  changed = new EventEmitter();\r\n\r\n  private _disconnected = false;\r\n  private _timer: any;\r\n\r\n  constructor(element: HTMLElement) {\r\n    this.target = element;\r\n    this.domRect = element.getBoundingClientRect();\r\n\r\n    requestAnimationFrame(() => this._observeDomRect());\r\n  }\r\n\r\n  disconnect(): void {\r\n    this._disconnected = true;\r\n  }\r\n\r\n  private _observeDomRect(): void {\r\n    const domRect = this.target.getBoundingClientRect();\r\n\r\n    if (\r\n      this.domRect.x !== domRect.x\r\n      || this.domRect.y !== domRect.y\r\n      || this.domRect.top !== domRect.top\r\n      || this.domRect.left !== domRect.left\r\n      || this.domRect.bottom !== domRect.bottom\r\n      || this.domRect.right !== domRect.right\r\n      || this.domRect.width !== domRect.width\r\n      || this.domRect.height !== domRect.height\r\n    ) {\r\n      console.debug(`Position is changed for target: ${this.target.nodeName}`);\r\n\r\n      this.domRect = domRect;\r\n      this.changed.emit();\r\n    }\r\n\r\n    if (!this._disconnected) {\r\n      clearTimeout(this._timer);\r\n\r\n      this._timer = setTimeout(() => {\r\n        requestAnimationFrame(() => this._observeDomRect());\r\n      }, 20);\r\n    }\r\n  }\r\n}\r\n","import {Subscription} from 'rxjs';\r\nimport {PositionChangeEntry} from './position-change-entry';\r\n\r\n/**\r\n * Position observer.\r\n * It allows user to detect position change of HTMLElement.\r\n * When observing elements DOMRect has changed, registered callback function will be called.\r\n */\r\nexport class PositionObserver {\r\n  private _entries: PositionChangeEntry[] = [];\r\n  private _subscription = new Subscription();\r\n\r\n  // Callback function to call when change has detected.\r\n  // The entries are an array of observing elements.\r\n  private readonly _callback: (entries: PositionChangeEntry[]) => void;\r\n\r\n  constructor(callback: (entries: PositionChangeEntry[]) => void) {\r\n    this._callback = callback;\r\n  }\r\n\r\n  /**\r\n   * Observe an element position.\r\n   * @param element\r\n   */\r\n  observe(element: HTMLElement): void {\r\n    const entry = new PositionChangeEntry(element);\r\n\r\n    this._entries.push(entry);\r\n\r\n    if (this._subscription.closed) {\r\n      this._subscription = new Subscription();\r\n    }\r\n\r\n    this._subscription.add(entry.changed.subscribe(() => (\r\n      this._callback(this._entries)\r\n    )));\r\n  }\r\n\r\n  /**\r\n   * Disconnect all entries.\r\n   * It should be called when Observer isn't needed anymore.\r\n   */\r\n  disconnect(): void {\r\n    this._entries.forEach(entry => entry.disconnect());\r\n    this._subscription.unsubscribe();\r\n  }\r\n}\r\n","import {BooleanAttribute, Nullable, NumberLike} from './type.util';\r\n\r\n/**\r\n * A function to convert a boolean attribute to boolean.\r\n * The boolean attribute is considered as o falsy only when value is null, undefined, false\r\n * Other values like empty string, zero are considered as truthy.\r\n *\r\n * @param value\r\n */\r\nexport function convertBooleanAttribute(value: BooleanAttribute): boolean {\r\n  const stringify = String(value);\r\n\r\n  return (\r\n    stringify !== 'null'\r\n    && stringify !== 'undefined'\r\n    && stringify !== 'false'\r\n  );\r\n}\r\n\r\n/**\r\n * Convert provided number-like value to integer.\r\n *\r\n * @param value\r\n */\r\nexport function toInteger(value: NumberLike): number {\r\n  if (typeof value === 'string') {\r\n    return parseInt(value);\r\n  }\r\n\r\n  return value;\r\n}\r\n\r\n/**\r\n * Convert provided number-like value to floating point number.\r\n *\r\n * @param value\r\n */\r\nexport function toFloat(value: NumberLike): number {\r\n  if (typeof value === 'string') {\r\n    return parseFloat(value);\r\n  }\r\n\r\n  return value;\r\n}\r\n\r\n/**\r\n * Convert kebab-cased text to camel-cased text.\r\n *\r\n * @param text\r\n */\r\nexport function fromKebabToCamel(text: string): string {\r\n  const words = text.split('-');\r\n\r\n  const upperCasedWords = words.slice(1).map(word => word[0].toUpperCase() + word.slice(1));\r\n\r\n  return [words[0], ...upperCasedWords].join('');\r\n}\r\n\r\n/**\r\n * Convert file to base64 url.\r\n *\r\n * @param file\r\n */\r\nexport function fileToBase64Url(file: File): Promise<string> {\r\n  const fileReader = new FileReader();\r\n\r\n  return new Promise<string>((resolve, reject) => {\r\n    fileReader.onload = () => {\r\n      resolve(fileReader.result as string);\r\n    };\r\n\r\n    fileReader.onerror = () => {\r\n      reject(fileReader.error);\r\n    };\r\n\r\n    fileReader.readAsDataURL(file);\r\n  });\r\n}\r\n\r\n/**\r\n * Convert blob to string.\r\n * When error occurred, return null.\r\n *\r\n * @param blob\r\n */\r\nexport function blobToString(blob: Blob): Promise<Nullable<string>> {\r\n  return new Promise<Nullable<string>>((resolve, reject) => {\r\n    const fileReader = new FileReader();\r\n\r\n    fileReader.onload = () => {\r\n      resolve(fileReader.result as string);\r\n    }\r\n\r\n    fileReader.onerror = () => {\r\n      resolve(null);\r\n    }\r\n\r\n    fileReader.readAsText(blob);\r\n  });\r\n}\r\n","import {Directive, HostBinding, Input, Optional} from '@angular/core';\r\nimport {ControlValueAccessor, NgControl} from '@angular/forms';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\n\r\n/**\r\n * An abstract class to create custom form control component.\r\n */\r\n@Directive()\r\nexport abstract class CustomControl implements ControlValueAccessor {\r\n  // Disabled state.\r\n  protected _disabled = false;\r\n\r\n  // Registered onChange function.\r\n  protected _onChange: any;\r\n\r\n  // Registered onTouched function.\r\n  protected _onTouched: any;\r\n\r\n  constructor(\r\n    @Optional() public ngControl: NgControl,\r\n  ) {\r\n    if (ngControl) {\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get disabled state and bind class.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.favi-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Set disabled state.\r\n   *\r\n   * @param value\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n\r\n    const {\r\n      ngControl,\r\n    } = this;\r\n\r\n    if (ngControl && ngControl.control) {\r\n      // If control is bound to the component, update disabled state of control.\r\n      if (this._disabled) {\r\n        ngControl.control.disable();\r\n      } else {\r\n        ngControl.control.enable();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update disabled state by control.\r\n   *\r\n   * @param isDisabled\r\n   */\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this._disabled = isDisabled;\r\n  }\r\n\r\n  /**\r\n   * Set value to component.\r\n   *\r\n   * @param value\r\n   */\r\n  setValue(value: any): void {\r\n    if (this.ngControl?.control) {\r\n      this.ngControl.control.setValue(value);\r\n      this.ngControl.control.markAsDirty();\r\n    } else if (this._onChange) {\r\n      this._onChange(value);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Register onChange function to component to update value.\r\n   *\r\n   * @param fn\r\n   */\r\n  registerOnChange(fn: any): void {\r\n    this._onChange = fn;\r\n  }\r\n\r\n  /**\r\n   * Register onTouched function to component to mark component as touched.\r\n   *\r\n   * @param fn\r\n   */\r\n  registerOnTouched(fn: any): void {\r\n    this._onTouched = fn;\r\n  }\r\n\r\n  /**\r\n   * Mark component as touched.\r\n   */\r\n  markAsTouched(): void {\r\n    if (this.ngControl?.control) {\r\n      this.ngControl.control.markAsTouched();\r\n    } else if (this._onTouched) {\r\n      this._onTouched();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Mark component as dirty.\r\n   */\r\n  markAsDirty(): void {\r\n    if (this.ngControl?.control) {\r\n      this.ngControl.control.markAsDirty();\r\n    } else if (this._onChange) {\r\n      this._onChange();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Write value to component.\r\n   *\r\n   * @param obj\r\n   */\r\n  abstract writeValue(obj: any): void;\r\n\r\n  /**\r\n   * Set focus to focusable element in component.\r\n   */\r\n  abstract focus(): void;\r\n\r\n  /**\r\n   * Remove focus from focusable element in component.\r\n   */\r\n  abstract blur(): void;\r\n}\r\n","import {Directive, HostBinding, Input} from '@angular/core';\r\nimport {Nullable, ThemeColors} from '../../../utils/type.util';\r\n\r\n/**\r\n * An abstract class to bind theme class attribute to element with inputted theme color.\r\n */\r\n@Directive()\r\nexport abstract class ThemeClassBinder {\r\n  protected _theme: Nullable<ThemeColors> = null;\r\n\r\n  @Input()\r\n  set theme(theme: Nullable<ThemeColors>) {\r\n    this._theme = theme;\r\n  }\r\n\r\n  get theme(): Nullable<ThemeColors> {\r\n    return this._theme;\r\n  }\r\n\r\n  @HostBinding('class.favi-primary-theme')\r\n  get isPrimary(): boolean {\r\n    return this.theme === 'primary';\r\n  }\r\n\r\n  @HostBinding('class.favi-secondary-theme')\r\n  get isSecondary(): boolean {\r\n    return this.theme === 'secondary';\r\n  }\r\n\r\n  @HostBinding('class.favi-tertiary-theme')\r\n  get isTertiary(): boolean {\r\n    return this.theme === 'tertiary';\r\n  }\r\n\r\n  @HostBinding('class.favi-quaternary-theme')\r\n  get isQuaternary(): boolean {\r\n    return this.theme === 'quaternary';\r\n  }\r\n\r\n  @HostBinding('class.favi-error-theme')\r\n  get isError(): boolean {\r\n    return this.theme === 'error';\r\n  }\r\n\r\n  @HostBinding('class.favi-warning-theme')\r\n  get isWarning(): boolean {\r\n    return this.theme === 'warning';\r\n  }\r\n\r\n  @HostBinding('class.favi-success-theme')\r\n  get isSuccess(): boolean {\r\n    return this.theme === 'success';\r\n  }\r\n}\r\n","import {Directive, HostBinding, Input} from '@angular/core';\r\nimport {CustomizableAppearances} from './customizable-appearances';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\nimport {ThemeClassBinder} from '../theme-class-binder/theme-class-binder';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\n\r\n/**\r\n * An abstract class for customizable component or directive.\r\n * It allows size, theme, or appearance to add proper class dynamically.\r\n */\r\n@Directive()\r\nexport abstract class Customizable extends ThemeClassBinder {\r\n  protected _appearance: CustomizableAppearances = 'default';\r\n  protected _disabled = false;\r\n\r\n  @Input()\r\n  set appearance(appearance: CustomizableAppearances) {\r\n    this._appearance = appearance;\r\n  }\r\n\r\n  get appearance(): CustomizableAppearances {\r\n    return this._appearance;\r\n  }\r\n\r\n  set disabled(disabled: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(disabled);\r\n  }\r\n\r\n  @Input()\r\n  @HostBinding('disabled') // For interactive element.\r\n  get disabled(): BooleanAttribute {\r\n    return this._disabled;\r\n  }\r\n\r\n  @HostBinding('class.favi-disabled')\r\n  get isDisabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  @HostBinding('class.favi-default-appearance')\r\n  get isDefaultAppearance(): boolean {\r\n    return this._appearance === 'default';\r\n  }\r\n\r\n  @HostBinding('class.favi-round-appearance')\r\n  get isRoundAppearance(): boolean {\r\n    return this._appearance === 'round';\r\n  }\r\n\r\n  @HostBinding('attr.tabindex')\r\n  get tabIndex(): string {\r\n    return this.disabled ? '-1' : '';\r\n  }\r\n}\r\n","import {Directive, ElementRef, EventEmitter, HostListener, Optional, Output} from '@angular/core';\r\nimport {ControlValueAccessor, NgControl} from '@angular/forms';\r\nimport {Customizable} from '../customizable/customizable';\r\n\r\n/**\r\n * A custom control which has extended Customizable to set\r\n * size, theme, and appearance for control component.\r\n */\r\n@Directive({\r\n  host: {\r\n    class: 'favi-control',\r\n  },\r\n})\r\nexport abstract class CustomControlWithThemeClass extends Customizable implements ControlValueAccessor {\r\n  @Output() onFocus = new EventEmitter();\r\n  @Output() onBlur = new EventEmitter();\r\n\r\n  protected _onChange: any;\r\n  protected _onTouched: any;\r\n\r\n  protected constructor(\r\n    @Optional() public ngControl: NgControl,\r\n  ) {\r\n    super();\r\n\r\n    if (ngControl) {\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  abstract get elementRef(): ElementRef<HTMLElement>;\r\n\r\n  @HostListener('focus')\r\n  onHostFocus(): void {\r\n    this.onFocus.emit();\r\n  }\r\n\r\n  @HostListener('blur')\r\n  onHostBlur(): void {\r\n    this.onBlur.emit();\r\n  }\r\n\r\n  abstract focus(): void;\r\n\r\n  abstract blur(): void;\r\n\r\n  setValue(value: any): void {\r\n    if (this._onChange) {\r\n      this._onChange(value);\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this._onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this._onTouched = fn;\r\n  }\r\n\r\n  abstract writeValue(obj: any): void;\r\n}\r\n","import {Inject, Injectable} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {Coordinate} from '../../common/coordinate/coordinate';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Service to communicate with 'favi-app' container.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class FaviAppService {\n  /** Scroll position of container. */\n  private _scrollPosition$ = new BehaviorSubject<Coordinate>({\n    x: 0,\n    y: 0,\n  });\n\n  constructor(\n    @Inject(DOCUMENT) private _document: Document,\n  ) {\n  }\n\n  /**\n   * Get scroll position as BehaviorSubject.\n   */\n  get scrollPosition$(): BehaviorSubject<Coordinate> {\n    return this._scrollPosition$;\n  }\n\n  /**\n   * Get scroll position coordinates.\n   */\n  get scrollPosition(): Coordinate {\n    return this._scrollPosition$.value;\n  }\n\n  /**\n   * Set scroll position coordinates.\n   *\n   * @param value - Coordinates value for scroll position of container.\n   */\n  set scrollPosition(value: Coordinate) {\n    this._scrollPosition$.next(value);\n  }\n\n  /**\n   * Get enabled status of dark mode.\n   */\n  get isDarkMode(): boolean {\n    return this._document.body.classList.contains('favi-dark');\n  }\n\n  /**\n   * Enable darkMode.\n   */\n  enableDarkMode(): void {\n    this._document.body.classList.add('favi-dark');\n  }\n\n  /**\n   * Enable lightMode.\n   */\n  enableLightMode(): void {\n    this._document.body.classList.remove('favi-dark');\n  }\n\n  /**\n   * Toggle viewMode between dark and light.\n   */\n  toggleViewMode(): void {\n    this._document.body.classList.toggle('favi-dark');\n  }\n}\n","export const HISTORY_STATE_OPENED_OVERLAY_IDS_KEY = 'openedOverlayIds';\r\n","import {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {HISTORY_STATE_OPENED_OVERLAY_IDS_KEY} from '../../constants/values';\n\n/**\n * A service to manage history state.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class HistoryStateService {\n  /** Cached state. */\n  private _cachedState: any;\n\n  constructor(\n    @Inject(PLATFORM_ID) private _platformId: Object,\n  ) {\n    if (isPlatformBrowser(this._platformId)) {\n      // Proxy 'pushState()' method to update 'cachedState'.\n      history.pushState = new Proxy(history.pushState, {\n        apply: (target: (data: any, unused: string, url?: string | URL | null) => void, thisArg: History, args: [data: any, unused: string, url?: string | URL | null]): void => {\n          target.apply(thisArg, args);\n\n          this._cachedState = args[0]; // Save state.\n\n          console.debug(`State cached by 'pushState()'`, this._cachedState);\n        },\n      });\n\n      // Proxy 'replaceState()' method to update 'cachedState'.\n      history.replaceState = new Proxy(history.replaceState, {\n        apply: (target: (data: any, unused: string, url?: string | URL | null) => void, thisArg: History, args: [data: any, unused: string, url?: string | URL | null]): void => {\n          target.apply(thisArg, args);\n\n          this._cachedState = args[0]; // Save state.\n\n          console.debug(`State cached by 'replaceState()'`, this._cachedState);\n        },\n      });\n    }\n  }\n\n  /**\n   * Get current state from History. When there state data is empty, an empty object will be returned.\n   */\n  get state(): any {\n    return history.state || {};\n  }\n\n  /**\n   * Get cached state. It's a state that is only updated by 'pushState()' or 'replaceState()'.\n   */\n  get cachedState(): any {\n    return this._cachedState;\n  }\n\n  /**\n   * Get an openedOverlayIds from current state.\n   */\n  get openedOverlayIds(): string[] {\n    return this.state[HISTORY_STATE_OPENED_OVERLAY_IDS_KEY] || [];\n  }\n\n  /**\n   * Get a cachedOpenedOverlayIds from cached state.\n   */\n  get cachedOpenedOverlayIds(): string[] {\n    return this.cachedState?.[HISTORY_STATE_OPENED_OVERLAY_IDS_KEY] || [];\n  }\n}\n","/**\r\n * Create random id with given length.\r\n * Id will be created in hex.\r\n *\r\n * @param length\r\n */\r\nexport function createRandomId(length: number): string {\r\n  const hexes: string[] = [];\r\n\r\n  for (let i = 0; i < length; i++) {\r\n    hexes.push(getRandomNumber(0, 16).toString(16));\r\n  }\r\n\r\n  return hexes.join('');\r\n}\r\n\r\n/**\r\n * Get random number between min to max.\r\n * Both min and max value also selectable.\r\n *\r\n * @param min\r\n * @param max\r\n */\r\nexport function getRandomNumber(min: number, max: number): number {\r\n  return Math.floor(Math.random() * (max + 1 - min)) + min;\r\n}\r\n\r\n/**\r\n * Get a random item from provided array.\r\n *\r\n * @param items\r\n */\r\nexport function getRandomItem<T>(items: T[]): T {\r\n  return items[getRandomNumber(0, items.length - 1)];\r\n}\r\n","import {createRandomId} from '../../utils/random.util';\r\nimport {Subscription} from 'rxjs';\r\n\r\n/**\r\n * An observer to store subscriptions and manage.\r\n * It can observe multiple subscriptions at once, and\r\n * unobserve them by unsubscribing on SubscriptionManager destroyed.\r\n */\r\nexport class SubscriptionObserver {\r\n  // Unique identifier of observer.\r\n  readonly id = createRandomId(16);\r\n\r\n  // Observing subscriptions.\r\n  // Theses are unsubscribed when new subscriptions are observed by this class\r\n  // or SubscriptionManager is destroyed.\r\n  private _subscriptions: Subscription[] = [];\r\n\r\n  /**\r\n   * Observe new subscriptions.\r\n   *\r\n   * @param subscriptions\r\n   */\r\n  observe(...subscriptions: Subscription[]): void {\r\n    this.unobserve();\r\n    this._subscriptions.push(...subscriptions);\r\n  }\r\n\r\n  /**\r\n   * Unobserve all subscriptions and clear the _subscriptions array.\r\n   */\r\n  unobserve(): void {\r\n    this._subscriptions.forEach(subscription => subscription.unsubscribe());\r\n    this._subscriptions = [];\r\n  }\r\n}\r\n","import {Injectable, OnDestroy} from '@angular/core';\r\nimport {SubscriptionObserver} from './subscription-observer';\r\n\r\n/**\r\n * Service to create subscription observer and\r\n * manage subscriptions in component level.\r\n *\r\n * Before using it, it should be provided in component or directive rather than module.\r\n * However, there is a global SubscriptionManager in FaviAppComponent.\r\n */\r\n@Injectable()\r\nexport class SubscriptionManager implements OnDestroy {\r\n  // Created observers.\r\n  // These will be unobserved when SubscriptionManager is destroyed.\r\n  private _observers: SubscriptionObserver[] = [];\r\n\r\n  ngOnDestroy(): void {\r\n    this._observers.forEach(observer => observer.unobserve());\r\n    this._observers = [];\r\n  }\r\n\r\n  /**\r\n   * Create new observer.\r\n   */\r\n  createObserver(): SubscriptionObserver {\r\n    const observer = new SubscriptionObserver();\r\n\r\n    this._observers.push(observer);\r\n\r\n    return observer;\r\n  }\r\n\r\n  /**\r\n   * Remove observer from manager.\r\n   * When the observer is removed, every subscription in that observer will be unsubscribed.\r\n   *\r\n   * @param observer\r\n   */\r\n  removeObserver(observer: SubscriptionObserver): void {\r\n    observer.unobserve();\r\n\r\n    this._observers = this._observers.filter(_observer => _observer.id !== observer.id); // Filter removed observer from the list.\r\n  }\r\n}\r\n","import {InjectionToken} from '@angular/core';\r\n\r\n/**\r\n * Injection token for overlay data.\r\n */\r\nexport const FaviOverlayData = new InjectionToken('FaviOverlayData');\r\n","import {Component, HostListener, Inject, OnInit} from '@angular/core';\r\nimport {FaviOverlayRef} from '../services/favi-overlay-ref';\r\nimport {NavigationStart, Router} from '@angular/router';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {SubscriptionObserver} from '../../../../services/subscription-manager/subscription-observer';\r\n\r\n/**\r\n * Default backdrop for overlay.\r\n * It doesn't have any animation or color.\r\n * Only have click event listener to close overlay.\r\n */\r\n@Component({\r\n  selector: 'favi-overlay-backdrop',\r\n  template: '',\r\n  host: {\r\n    class: 'favi-overlay-backdrop',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviOverlayBackdropComponent implements OnInit {\r\n  // Pointer down detector to prevent unexpected behavior.\r\n  //\r\n  // Overlay should be closed when backdrop is clicked.\r\n  // But, if user pressed pointer from inside of overlay and then released from backdrop,\r\n  // the click event listener determines that click event triggered.\r\n  // It's not expected behavior.\r\n  // To prevent it, detecting pointer pressing location is required.\r\n  protected _pointerDownFromHost = false;\r\n\r\n  // Subscription observer for router events.\r\n  protected _routerEventObserver: SubscriptionObserver = this._subscriptionManager.createObserver();\r\n\r\n  constructor(\r\n    @Inject(FaviOverlayRef) protected _faviOverlayRef: FaviOverlayRef<any, any>,\r\n    protected _router: Router,\r\n    protected _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this._subscribeRouterEvents();\r\n  }\r\n\r\n  @HostListener('mousedown', ['$event'])\r\n  onHostPointerDown(event: MouseEvent): void {\r\n    if (event.button === 0) { // button '0' is main button.\r\n      this._pointerDownFromHost = true;\r\n    }\r\n  }\r\n\r\n  @HostListener('mouseup', ['$event'])\r\n  onHostPointerUp(event: MouseEvent): void {\r\n    if (this._pointerDownFromHost && event.button === 0) { // button '0' is main button.\r\n      this._faviOverlayRef.close();\r\n      this._pointerDownFromHost = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Subscribe router events to close overlay on router change.\r\n   */\r\n  protected _subscribeRouterEvents(): void {\r\n    const sub = this._router.events\r\n      .subscribe(event => {\r\n        if (event instanceof NavigationStart && !this._faviOverlayRef.preventClosing) {\r\n          this._faviOverlayRef.close();\r\n        }\r\n      });\r\n\r\n    this._routerEventObserver.observe(sub);\r\n  }\r\n}\r\n","import {createRandomId} from '../../../../utils/random.util';\r\nimport {FaviBaseOverlay} from '../abstracts/favi-base-overlay/favi-base-overlay';\r\nimport {ComponentRef, EventEmitter, Injector, Type, ViewContainerRef} from '@angular/core';\r\nimport {FaviOverlayOpenOptions} from './favi-overlay-open-options';\r\nimport {FaviOverlayData} from './favi-overlay-data';\r\nimport {FaviOverlayBackdropComponent} from '../favi-overlay-backdrop/favi-overlay-backdrop.component';\r\nimport {CanUndefined, Nullable} from '../../../../utils/type.util';\r\n\r\n/**\r\n * Reference of opened overlay.\r\n */\r\nexport class FaviOverlayRef<D, R = void> {\r\n  /** Unique random id. */\r\n  readonly id = createRandomId(16);\r\n\r\n  /** Emit when overlay has destroyed. */\r\n  destroyed = new EventEmitter<R>();\r\n\r\n  /** Ref to rendered overlay component. */\r\n  componentRef: ComponentRef<any>;\r\n\r\n  /** Ref to rendered overlay backdrop component. */\r\n  backdropRef: Nullable<ComponentRef<any>> = null;\r\n\r\n  /** Close event listener which is registered. */\r\n  private readonly _onClose?: (result?: R) => void;\r\n\r\n  /** Status of preventing closing by user. */\r\n  private readonly _preventClosing: boolean;\r\n\r\n  /** Status of preventing closing on window resize. */\r\n  private readonly _keepOnResize: boolean;\r\n\r\n  /** Status of pushing new state on opened. */\r\n  private readonly _pushState: boolean;\r\n\r\n  constructor(\r\n    viewContainerRef: ViewContainerRef,\r\n    component: Type<FaviBaseOverlay<D, R>>,\r\n    options: FaviOverlayOpenOptions<D, R>,\r\n  ) {\r\n    const {\r\n      backdrop,\r\n      providers = [],\r\n      data,\r\n      preventClosing = false,\r\n      keepOnResize = false,\r\n      pushState = true,\r\n      onClose,\r\n      width = '',\r\n      height = '',\r\n      maxWidth = '',\r\n      maxHeight = '',\r\n      top = '',\r\n      right = '',\r\n      bottom = '',\r\n      left = '',\r\n    } = options;\r\n\r\n    this._onClose = onClose; // Keep onClose() listener.\r\n    this._preventClosing = preventClosing;\r\n    this._keepOnResize = keepOnResize;\r\n    this._pushState = pushState;\r\n\r\n    const backdropComponent = backdrop === null ? null : backdrop === undefined ? FaviOverlayBackdropComponent : backdrop;\r\n\r\n    if (backdropComponent) {\r\n      this.backdropRef = viewContainerRef.createComponent(backdropComponent, {\r\n        injector: Injector.create({\r\n          providers: [\r\n            // Provide FaviOverlayRef to make overlay closeable from backdrop.\r\n            {\r\n              provide: FaviOverlayRef,\r\n              useValue: this,\r\n            },\r\n          ],\r\n        }),\r\n      });\r\n\r\n      this.backdropRef.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    this.componentRef = viewContainerRef.createComponent(component, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          {\r\n            provide: FaviOverlayRef,\r\n            useValue: this,\r\n          },\r\n          {\r\n            provide: FaviOverlayData,\r\n            useValue: data,\r\n          },\r\n          ...providers,\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.componentRef.setInput('width', width);\r\n    this.componentRef.setInput('height', height);\r\n    this.componentRef.setInput('maxWidth', maxWidth);\r\n    this.componentRef.setInput('maxHeight', maxHeight);\r\n    this.componentRef.setInput('top', top);\r\n    this.componentRef.setInput('right', right);\r\n    this.componentRef.setInput('bottom', bottom);\r\n    this.componentRef.setInput('left', left);\r\n\r\n    this.componentRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  /**\r\n   * Get the value of '_keepOnResize'.\r\n   */\r\n  get keepOnResize(): boolean {\r\n    return this._keepOnResize;\r\n  }\r\n\r\n  /**\r\n   * Get the value of '_preventClosing'.\r\n   */\r\n  get preventClosing(): boolean {\r\n    return this._preventClosing;\r\n  }\r\n\r\n  /**\r\n   * Get the value of '_pushState'.\r\n   */\r\n  get pushState(): boolean {\r\n    return this._pushState;\r\n  }\r\n\r\n  /**\r\n   * Get callback function to handle after overlay closed.\r\n   */\r\n  get onClose(): CanUndefined<(result?: R) => void> {\r\n    return this._onClose;\r\n  }\r\n\r\n  /**\r\n   * Close overlay when it is closeable.\r\n   * To close overlay with preventClosing, use forceClose() method instead.\r\n   *\r\n   * @param result\r\n   */\r\n  close(result?: R): void {\r\n    if (!this._preventClosing) {\r\n      this._close(result);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Force close overlay by ignoring preventClosing.\r\n   *\r\n   * @param result\r\n   */\r\n  forceClose(result?: R): void {\r\n    this._close(result);\r\n  }\r\n\r\n  /**\r\n   * Method to actually close the overlay.\r\n   *\r\n   * @param result - Result to return.\r\n   */\r\n  private _close(result?: R): void {\r\n    console.debug('Close overlay');\r\n\r\n    this.componentRef.destroy();\r\n    this.backdropRef?.destroy();\r\n    this.destroyed.emit(result); // Pass result to destroyed emitter.\r\n  }\r\n}\r\n","import {Injectable, Type} from '@angular/core';\r\nimport {FaviOverlayOutletComponent} from '../favi-overlay-outlet/favi-overlay-outlet.component';\r\nimport {CanUndefined, Nullable} from '../../../../utils/type.util';\r\nimport {FaviBaseOverlay} from '../abstracts/favi-base-overlay/favi-base-overlay';\r\nimport {FaviOverlayRef} from './favi-overlay-ref';\r\nimport {FaviOverlayOpenOptions} from './favi-overlay-open-options';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {SubscriptionObserver} from '../../../../services/subscription-manager/subscription-observer';\r\nimport {HISTORY_STATE_OPENED_OVERLAY_IDS_KEY} from '../../../../constants/values';\r\nimport {HistoryStateService} from '../../../../services/history-state/history-state.service';\r\n\r\n/**\r\n * Service to open and close overlay.\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FaviOverlayService {\r\n  /** Registered overlay outlet to render overlays. */\r\n  private _outlet: Nullable<FaviOverlayOutletComponent> = null;\r\n\r\n  /** Observers used for overlay. */\r\n  private _subscriptionObservers: SubscriptionObserver[] = [];\r\n\r\n  /** Opened overlayRefs. */\r\n  private _openedOverlayRefs: FaviOverlayRef<any, any>[] = [];\r\n\r\n  constructor(\r\n    private _subscriptionManager: SubscriptionManager,\r\n    private _historyStateService: HistoryStateService,\r\n  ) { }\r\n\r\n  /** Sets route changed status. It will be 'true' when 'NavigationStart' event is detected. */\r\n  private _routeHasChanged = false;\r\n\r\n  /**\r\n   * Gets route changed status.\r\n   */\r\n  get routeHasChanged(): boolean {\r\n    return this._routeHasChanged;\r\n  }\r\n\r\n  /**\r\n   * Sets route changed status.\r\n   *\r\n   * @param value - Route changed status.\r\n   */\r\n  set routeHasChanged(value: boolean) {\r\n    this._routeHasChanged = value;\r\n  }\r\n\r\n  get hasOpenedOverlayRefs(): boolean {\r\n    return this._openedOverlayRefs.length > 0;\r\n  }\r\n\r\n  get lastOpenedOverlayRef(): CanUndefined<FaviOverlayRef<any, any>> {\r\n    return this._openedOverlayRefs[this._openedOverlayRefs.length - 1];\r\n  }\r\n\r\n  /**\r\n   * Register overlay outlet.\r\n   * There can be only one outlet for application.\r\n   *\r\n   * @param outlet\r\n   */\r\n  registerOutlet(outlet: FaviOverlayOutletComponent): void {\r\n    if (!this._outlet) {\r\n      this._outlet = outlet;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Open new overlay.\r\n   * Overlay will be created in favi-overlay-outlet.\r\n   * When it is used with favi-app, favi-overlay-outlet doesn't need to be rendered in view\r\n   * since that's already rendered in favi-app.\r\n   *\r\n   * Also, only 1 overlay with same type can be opened at once by default.\r\n   * To allow multiple overlays with same type, set 'multi' property in option to 'true'.\r\n   * By default, when multi option isn't set, previous opened overlayRef will be returned\r\n   * when trying to open same type overlay.\r\n   *\r\n   * After overlayRef created, it changes history state to handle pop event.\r\n   * If you don't want this behavior, set 'pushState' option as 'false'.\r\n   * When route change is needed with 'pushState' enabled overlay, use 'replaceUrl: true' option to\r\n   * prevent keeping unnecessary history.\r\n   *\r\n   * When using preventClosing property in options,\r\n   * overlay only can be closed with forceClose() method.\r\n   *\r\n   * @param component\r\n   * @param options\r\n   */\r\n  open<D, R = void>(component: Type<FaviBaseOverlay<D, R>>, options: FaviOverlayOpenOptions<D, R> = {}): FaviOverlayRef<D, R> {\r\n    if (!this._outlet) {\r\n      throw new Error(`OverlayOutlet isn't registered. Please render 'favi-overlay-outlet' in app root.`);\r\n    }\r\n\r\n    this.routeHasChanged = false; // When new modal is opened, route changed status should be reset to allow closing.\r\n\r\n    const {\r\n      multi = false,\r\n      pushState = true,\r\n    } = options;\r\n    const previousOpenedOverlayRef = this._getOpenedOverlayRefByType(component);\r\n\r\n    if (!multi && previousOpenedOverlayRef) {\r\n      return previousOpenedOverlayRef;\r\n    }\r\n\r\n    const overlayRef = new FaviOverlayRef<D, R>(this._outlet.viewContainerRef, component, options);\r\n\r\n    this._openedOverlayRefs.push(overlayRef);\r\n    this._subscribeOverlayRefDestroyed(overlayRef);\r\n\r\n    if (pushState) {\r\n      // Use timeout to push new state to prevent closing newly opened overlay by 'popstate'.\r\n      setTimeout(() => {\r\n        console.debug('New modal is opened with pushState');\r\n\r\n        const {\r\n          state,\r\n          openedOverlayIds,\r\n        } = this._historyStateService;\r\n\r\n        history.pushState({\r\n          ...state,\r\n          [HISTORY_STATE_OPENED_OVERLAY_IDS_KEY]: [...openedOverlayIds, overlayRef.id],\r\n        }, '');\r\n      })\r\n    }\r\n\r\n    return overlayRef;\r\n  }\r\n\r\n  /**\r\n   * Close latest overlayRef.\r\n   * It can't close overlay which has preventClosing option.\r\n   */\r\n  closeLatest(): void {\r\n    this.lastOpenedOverlayRef?.close();\r\n  }\r\n\r\n  /**\r\n   * Close an overlay by id.\r\n   *\r\n   * @param id - Overlay id to close.\r\n   */\r\n  closeById(id: string): void {\r\n    const overlayRef = this._openedOverlayRefs.find(overlayRefItem => overlayRefItem.id === id);\r\n\r\n    overlayRef?.close();\r\n  }\r\n\r\n  /**\r\n   * Subscribe destroyed emitter to remove OverlayRef and SubscriptionObserver from service.\r\n   *\r\n   * @param overlayRef\r\n   */\r\n  private _subscribeOverlayRefDestroyed(overlayRef: FaviOverlayRef<any, any>): void {\r\n    const observer = this._subscriptionManager.createObserver();\r\n    const sub = overlayRef\r\n      .destroyed\r\n      .subscribe((result) => {\r\n        console.debug('Overlay destroyed');\r\n\r\n        this._subscriptionManager.removeObserver(observer);\r\n\r\n        this._openedOverlayRefs = this._openedOverlayRefs.filter(openedOverlayRef => openedOverlayRef !== overlayRef);\r\n        this._subscriptionObservers = this._subscriptionObservers.filter(subscriptionObserver => subscriptionObserver !== observer);\r\n\r\n        if (overlayRef.pushState) {\r\n          const {\r\n            openedOverlayIds,\r\n          } = this._historyStateService;\r\n\r\n          console.debug('OpenedOverlayIds from current state', openedOverlayIds);\r\n\r\n          if (openedOverlayIds.includes(overlayRef.id)) { // It means overlay has closed without 'popstate' event.\r\n            console.debug('Current OverlayRef is in state');\r\n\r\n            if (!this.routeHasChanged) {\r\n              console.debug('Route has not changed');\r\n\r\n              // At this moment, an id of current overlay is removed from the current state.\r\n              // From the 'popstate' listener, use 'cachedState' to get the last id.\r\n              history.back();\r\n            }\r\n          }\r\n        }\r\n\r\n        // Call 'onClose()' callback after overlay destroyed.\r\n        if (overlayRef.onClose) {\r\n          overlayRef.onClose(result);\r\n        }\r\n\r\n        this.routeHasChanged = false; // After modal closed, reset route changed status.\r\n      });\r\n\r\n    observer.observe(sub);\r\n\r\n    this._subscriptionObservers.push(observer);\r\n  }\r\n\r\n  /**\r\n   * Get opened overlay with type.\r\n   *\r\n   * @param component\r\n   */\r\n  private _getOpenedOverlayRefByType<D, R>(component: Type<FaviBaseOverlay<D, R>>): CanUndefined<FaviOverlayRef<D, R>> {\r\n    return this._openedOverlayRefs.find(openedOverlayRef => openedOverlayRef.componentRef.componentType === component);\r\n  }\r\n}\r\n","import {AfterViewInit, Component, HostListener, ViewChild, ViewContainerRef} from '@angular/core';\r\nimport {FaviOverlayService} from '../services/favi-overlay.service';\r\nimport {NavigationStart, Router} from '@angular/router';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {HistoryStateService} from '../../../../services/history-state/history-state.service';\r\n\r\n/**\r\n * Outlet to render overlays inside.\r\n * Every overlay is created by viewContainerRef.\r\n */\r\n@Component({\r\n  selector: 'favi-overlay-outlet',\r\n  templateUrl: './favi-overlay-outlet.component.html',\r\n  host: {\r\n    class: 'favi-overlay-outlet',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviOverlayOutletComponent implements AfterViewInit {\r\n  @ViewChild('container', {read: ViewContainerRef}) viewContainerRef!: ViewContainerRef;\r\n\r\n  /** Subscription observer for events of router. */\r\n  private _routeEventsObserver = this._subscriptionManager.createObserver();\r\n\r\n  constructor(\r\n    private _router: Router,\r\n    private _faviOverlayService: FaviOverlayService,\r\n    private _subscriptionManager: SubscriptionManager,\r\n    private _historyStateService: HistoryStateService,\r\n  ) {\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._faviOverlayService.registerOutlet(this);\r\n\r\n    // When 'NavigationStart' event detected, sets 'routeHasChanged' to prevent\r\n    // 'history.back()' triggered after overlay is closed.\r\n    const sub = this._router.events.subscribe(event => {\r\n      console.debug('Route event detected', event);\r\n\r\n      if (event instanceof NavigationStart) {\r\n        console.debug('Route change detected by event');\r\n        this._faviOverlayService.routeHasChanged = true;\r\n      }\r\n    });\r\n\r\n    this._routeEventsObserver.observe(sub);\r\n  }\r\n\r\n  @HostListener('window:keydown.escape')\r\n  onWindowEscapeKeyDown(): void {\r\n    this._faviOverlayService.closeLatest();\r\n  }\r\n\r\n  /**\r\n   * Listen popState event to close modal.\r\n   */\r\n  @HostListener('window:popstate')\r\n  onWindowPopstate(): void {\r\n    console.debug('PopState triggered');\r\n\r\n    const {\r\n      cachedOpenedOverlayIds,\r\n    } = this._historyStateService;\r\n\r\n    const lastOpenedOverlayId = cachedOpenedOverlayIds.pop();\r\n\r\n    if (lastOpenedOverlayId) {\r\n      this._faviOverlayService.closeById(lastOpenedOverlayId);\r\n    }\r\n  }\r\n}\r\n","<ng-container #container></ng-container>\n","import {Component, HostBinding, Input} from '@angular/core';\r\nimport {convertBooleanAttribute, toInteger} from '../../../utils/convert.util';\r\nimport {BooleanAttribute, NumberLike} from '../../../utils/type.util';\r\nimport {FaviIconGrades} from './favi-icon-grades';\r\nimport {FaviIconAppearances} from './favi-icon-appearances';\r\n\r\n/**\r\n * Render material symbols.\r\n */\r\n@Component({\r\n  selector: 'favi-icon',\r\n  templateUrl: './favi-icon.component.html',\r\n  host: {\r\n    class: 'favi-icon',\r\n  },\r\n})\r\nexport class FaviIconComponent {\r\n  // Symbol appearance.\r\n  // It binds different classes for host element.\r\n  private _appearance: FaviIconAppearances = 'outlined';\r\n\r\n  // Symbol filled state.\r\n  private _fill = false;\r\n\r\n  // Weight style.\r\n  // It affects to symbol thickness.\r\n  // 100, 200, 300, 400, 500, 600, 700 are available.\r\n  private _weight = 200;\r\n\r\n  // Icon grade to determine symbol thickness.\r\n  private _grade: FaviIconGrades = 'default';\r\n\r\n  /**\r\n   * Set appearance of icon.\r\n   * Default appearance is outlined.\r\n   * It binds different classes for host element.\r\n   *\r\n   * @param appearance\r\n   */\r\n  @Input()\r\n  set appearance(appearance: FaviIconAppearances) {\r\n    this._appearance = appearance;\r\n  }\r\n\r\n  get appearance(): FaviIconAppearances {\r\n    return this._appearance;\r\n  }\r\n\r\n  /**\r\n   * Set true to use filled icon.\r\n   *\r\n   * @param fill\r\n   */\r\n  set fill(fill: BooleanAttribute) {\r\n    this._fill = convertBooleanAttribute(fill);\r\n  }\r\n\r\n  @Input()\r\n  get fill(): BooleanAttribute {\r\n    return this._fill;\r\n  }\r\n\r\n  /**\r\n   * Set icon weight.\r\n   * Weight is affect to symbol thickness.\r\n   * 100, 200, 300, 400, 500, 600, 700 are available.\r\n   *\r\n   * @param weight\r\n   */\r\n  @Input()\r\n  set weight(weight: NumberLike) {\r\n    this._weight = toInteger(weight);\r\n  }\r\n\r\n  get weight(): NumberLike {\r\n    return this._weight;\r\n  }\r\n\r\n  /**\r\n   * Set icon grade.\r\n   * Grade is affect to symbol thickness.\r\n   * To know difference with weight, see material documentation.\r\n   *\r\n   * @param grade\r\n   */\r\n  @Input()\r\n  set grade(grade: FaviIconGrades) {\r\n    this._grade = grade;\r\n  }\r\n\r\n  get grade(): FaviIconGrades {\r\n    return this._grade;\r\n  }\r\n\r\n  @HostBinding('style.font-variation-settings')\r\n  get fontVariantSettings(): string {\r\n    return `'FILL' ${this._getParsedFill()}, 'wght' ${this.weight}, 'GRAD' ${this._getParsedGrade()}, 'opsz' 24`;\r\n  }\r\n\r\n  @HostBinding('class.material-symbols-outlined')\r\n  get isOutlinedSymbol(): boolean {\r\n    return this.appearance === 'outlined';\r\n  }\r\n\r\n  @HostBinding('class.material-symbols-rounded')\r\n  get isOutlinedRounded(): boolean {\r\n    return this.appearance === 'rounded';\r\n  }\r\n\r\n  @HostBinding('class.material-symbols-sharp')\r\n  get isOutlinedSharp(): boolean {\r\n    return this.appearance === 'sharp';\r\n  }\r\n\r\n  private _getParsedFill(): number {\r\n    return this.fill ? 1 : 0;\r\n  }\r\n\r\n  private _getParsedGrade(): number {\r\n    switch (this.grade) {\r\n      case 'low': {\r\n        return -25;\r\n      }\r\n\r\n      case 'default': {\r\n        return 0;\r\n      }\r\n\r\n      case 'high': {\r\n        return 200;\r\n      }\r\n    }\r\n  }\r\n}\r\n","<ng-content></ng-content>\n","import {Directive, HostBinding, Input} from '@angular/core';\r\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\n\r\n/**\r\n * Effector that adds hover, active effect to component.\r\n */\r\n@Directive({\r\n  selector: '[faviEffector]',\r\n  host: {\r\n    class: 'favi-effector',\r\n  }\r\n})\r\nexport class FaviEffectorDirective extends ThemeClassBinder {\r\n  // Foreground using state.\r\n  // When it's true, the effector will use foreground transparent color.\r\n  private _foreground = false;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Get foreground using state and bind to class.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.favi-foreground-effector')\r\n  get foreground(): boolean {\r\n    return this._foreground;\r\n  }\r\n\r\n  /**\r\n   * Set 'true' to use foreground transparent color for effector.\r\n   *\r\n   * @param value\r\n   */\r\n  set foreground(value: BooleanAttribute) {\r\n    this._foreground = convertBooleanAttribute(value);\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {FaviToastRef} from './services/favi-toast-ref';\r\nimport {animate, keyframes, style, transition, trigger} from '@angular/animations';\r\nimport {CanUndefined, Nullable} from '../../../utils/type.util';\r\n\r\n@Component({\r\n  selector: 'favi-toast',\r\n  templateUrl: './favi-toast.component.html',\r\n  host: {\r\n    class: 'favi-toast',\r\n  },\r\n  animations: [\r\n    trigger('shaking', [\r\n      transition('void => appear', [\r\n        animate('.05s', keyframes([\r\n          style({\r\n            opacity: 0,\r\n            marginBottom: -80,\r\n          }),\r\n          style({\r\n            opacity: 1,\r\n            marginBottom: 0,\r\n          }),\r\n        ])),\r\n        animate('.2s', keyframes([\r\n          style({\r\n            transform: 'translateY(-24px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(24px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(-12px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(12px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(-6px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(6px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(-3px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(3px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(-1px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(1px)',\r\n          }),\r\n          style({\r\n            transform: 'translateY(0)',\r\n          }),\r\n        ]))\r\n      ]),\r\n      transition('appear => void', animate('.1s', keyframes([\r\n        style({\r\n          opacity: 0,\r\n          transform: 'scale(0)',\r\n        }),\r\n      ]))),\r\n    ]),\r\n  ]\r\n})\r\nexport class FaviToastComponent extends ThemeClassBinder implements AfterViewInit, OnDestroy {\r\n  /** Messages of toast. Multiple messages can be displayed in a single toast. */\r\n  @Input() messages: string[] = [];\r\n\r\n  /**\r\n   * It defines toast showing time in milliseconds.\r\n   * When value is '0' it won't be closed until user click.\r\n   * Default is '0'.\r\n   */\r\n  @Input() duration = 0;\r\n\r\n  /** Bind shaking animation. */\r\n  @HostBinding('@shaking') shakingState = 'appear';\r\n\r\n  /** Svg circle element. */\r\n  @ViewChild('animatingCircle', {read: ElementRef}) animatingCircleRef!: ElementRef<SVGCircleElement>;\r\n\r\n  /** Index of message to display. */\r\n  messageIndex = 0;\r\n\r\n  /** Timer animation. */\r\n  private _timerAnimation: Nullable<Animation> = null;\r\n\r\n  constructor(\r\n    @Inject(FaviToastRef) private _faviToastRef: FaviToastRef,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Show timer when duration is more than 0.\r\n   */\r\n  get showTimer(): boolean {\r\n    return this.duration > 0;\r\n  }\r\n\r\n  /**\r\n   * Get a message for current index.\r\n   */\r\n  get currentMessage(): CanUndefined<string> {\r\n    return this.messages[this.messageIndex];\r\n  }\r\n\r\n  /**\r\n   * Get disabled status of a button that moves to previous message.\r\n   */\r\n  get previousMessageDisabled(): boolean {\r\n    return this.messageIndex === 0;\r\n  }\r\n\r\n  /**\r\n   * Get disabled status of a button that moves to next message.\r\n   */\r\n  get nextMessageDisabled(): boolean {\r\n    return this.messageIndex >= this.messages.length - 1;\r\n  }\r\n\r\n  /**\r\n   * Get the order of current message.\r\n   */\r\n  get currentMessageOrder(): number {\r\n    return this.messageIndex + 1;\r\n  }\r\n\r\n  /**\r\n   * Total number of messages.\r\n   */\r\n  get numberOfMessages(): number {\r\n    return this.messages.length;\r\n  }\r\n\r\n  /**\r\n   * Get display status of message navigator.\r\n   */\r\n  get displayMessageNavigator(): boolean {\r\n    return this.numberOfMessages > 1;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.duration > 0) {\r\n      this._startTimer();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    // When destroying component, finish the animation.\r\n    this._timerAnimation?.finish();\r\n  }\r\n\r\n  /**\r\n   * Add a new message to component.\r\n   *\r\n   * @param message - Message to add.\r\n   * @param duration - Duration to reset. When not provided, existing duration will be kept.\r\n   */\r\n  addMessage(message: string, duration = 0): void {\r\n    this.messages.unshift(message);\r\n\r\n    if (duration > 0) {\r\n      this.duration = duration;\r\n      this._startTimer();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Close toast.\r\n   */\r\n  close(): void {\r\n    this._faviToastRef.close();\r\n  }\r\n\r\n  /**\r\n   * Move to previous message.\r\n   */\r\n  toPreviousMessage(): void {\r\n    this.messageIndex = Math.max(this.messageIndex - 1, 0);\r\n  }\r\n\r\n  /**\r\n   * Move to next message.\r\n   */\r\n  toNextMessage(): void {\r\n    this.messageIndex = Math.min(this.messageIndex + 1, this.messages.length - 1);\r\n  }\r\n\r\n  /**\r\n   * Listen 'mouseenter' event to pause timer.\r\n   */\r\n  @HostListener('mouseenter')\r\n  onMouseEnter(): void {\r\n    this._pauseTimer();\r\n  }\r\n\r\n  /**\r\n   * Listen 'mouseleave' event to play timer.\r\n   */\r\n  @HostListener('mouseleave')\r\n  onMouseLeave(): void {\r\n    this._playTimer();\r\n  }\r\n\r\n  /**\r\n   * Listen 'touchstart' event to pause timer.\r\n   */\r\n  @HostListener('touchstart')\r\n  onTouchStart(): void {\r\n    this._pauseTimer();\r\n  }\r\n\r\n  /**\r\n   * Listen 'touchend' event to play timer.\r\n   */\r\n  @HostListener('touchend')\r\n  onTouchEnd(): void {\r\n    this._playTimer();\r\n  }\r\n\r\n  /**\r\n   * Listen 'touchcancel' event to play timer.\r\n   */\r\n  @HostListener('touchcancel')\r\n  onTouchCancel(): void {\r\n    this._playTimer();\r\n  }\r\n\r\n  /**\r\n   * Pause timer animation to stop timer.\r\n   */\r\n  private _pauseTimer(): void {\r\n    this._timerAnimation?.pause();\r\n  }\r\n\r\n  /**\r\n   * Play timer animation.\r\n   */\r\n  private _playTimer(): void {\r\n    this._timerAnimation?.play();\r\n  }\r\n\r\n  /**\r\n   * Start a timer with duration.\r\n   */\r\n  private _startTimer(): void {\r\n    const circleLength = Math.PI * 14 * 2;\r\n\r\n    this._timerAnimation?.cancel();\r\n\r\n    this._timerAnimation = this.animatingCircleRef.nativeElement.animate([\r\n      {\r\n        strokeDasharray: `${circleLength},${circleLength}`,\r\n      },\r\n      {\r\n        strokeDasharray: `0,${circleLength}`,\r\n      },\r\n    ], {\r\n      duration: this.duration,\r\n      fill: 'forwards',\r\n    });\r\n\r\n    this._timerAnimation.addEventListener('finish', () => {\r\n      this.close();\r\n    });\r\n  }\r\n}\r\n","<div class=\"favi-toast-message-container\">\r\n  <div\r\n    *ngIf=\"currentMessage\"\r\n    class=\"favi-toast-title\">{{currentMessage}}</div>\r\n\r\n  <div\r\n    *ngIf=\"displayMessageNavigator\"\r\n    class=\"favi-toast-actions\">\r\n    <button\r\n      (click)=\"toPreviousMessage()\"\r\n      [disabled]=\"previousMessageDisabled\"\r\n      type=\"button\"\r\n      class=\"favi-button-no-styles favi-icon-ball-button\">\r\n      <favi-icon>chevron_left</favi-icon>\r\n    </button>\r\n\r\n    <div class=\"favi-message-index\">\r\n      {{currentMessageOrder}} / {{numberOfMessages}}\r\n    </div>\r\n\r\n    <button\r\n      (click)=\"toNextMessage()\"\r\n      [disabled]=\"nextMessageDisabled\"\r\n      type=\"button\"\r\n      class=\"favi-button-no-styles favi-icon-ball-button\">\r\n      <favi-icon>chevron_right</favi-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<div\r\n  class=\"favi-toast-close-container\">\r\n  <button\r\n    (click)=\"$event.stopPropagation(); close()\"\r\n    [theme]=\"theme\"\r\n    class=\"favi-button-no-styles favi-toast-close-button\"\r\n    type=\"button\"\r\n    foreground\r\n    faviEffector>\r\n    <favi-icon>\r\n      close\r\n    </favi-icon>\r\n\r\n    <svg\r\n      *ngIf=\"showTimer\"\r\n      viewBox=\"0 0 32 32\">\r\n      <circle\r\n        fill=\"none\"\r\n        r=\"14\"\r\n        cx=\"16\"\r\n        cy=\"16\"\r\n        stroke=\"rgba(255, 255, 255, .15)\"\r\n        stroke-width=\"4\"></circle>\r\n\r\n      <circle\r\n        #animatingCircle\r\n        class=\"favi-toast-timer-circle\"\r\n        fill=\"none\"\r\n        r=\"14\"\r\n        cx=\"16\"\r\n        cy=\"16\"\r\n        stroke-width=\"4\"></circle>\r\n    </svg>\r\n  </button>\r\n</div>\r\n","import {createRandomId} from '../../../../utils/random.util';\r\nimport {FaviToastRefOptions} from './favi-toast-ref-options';\r\nimport {ComponentRef, EventEmitter, Injector} from '@angular/core';\r\nimport {FaviToastComponent} from '../favi-toast.component';\r\nimport {CanUndefined, ThemeColors} from '../../../../utils/type.util';\r\n\r\n/**\r\n * ToastRef to manage created toast.\r\n */\r\nexport class FaviToastRef {\r\n  /** Unique id of toast ref. */\r\n  readonly id = createRandomId(16);\r\n\r\n  /** Toast theme color. */\r\n  readonly theme: CanUndefined<ThemeColors>;\r\n\r\n  /** Destroyed emitter. */\r\n  destroyed = new EventEmitter<void>();\r\n\r\n  /** ComponentRef to toast component. */\r\n  componentRef: ComponentRef<FaviToastComponent>;\r\n\r\n  constructor(options: FaviToastRefOptions) {\r\n    const {\r\n      viewContainerRef,\r\n      message,\r\n      theme,\r\n      duration = 0,\r\n    } = options;\r\n\r\n    this.theme = theme;\r\n    this.componentRef = viewContainerRef.createComponent(FaviToastComponent, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          {\r\n            provide: FaviToastRef,\r\n            useValue: this,\r\n          },\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.componentRef.setInput('messages', [...(this.componentRef.instance.messages || []), message]);\r\n    this.componentRef.setInput('theme', theme);\r\n    this.componentRef.setInput('duration', duration);\r\n\r\n    this.componentRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  /**\r\n   * Add a new message to existing toast.\r\n   * When 'duration' is provided, existing duration will be reset to new duration.\r\n   *\r\n   * @param message - Message to add.\r\n   * @param duration - Duration to reset. When not provided, existing duration will be kept.\r\n   */\r\n  addMessage(message: string, duration = 0): void {\r\n    this.componentRef?.instance.addMessage(message, duration);\r\n  }\r\n\r\n  /**\r\n   * Close toast.\r\n   */\r\n  close(): void {\r\n    this.componentRef.destroy();\r\n    this.destroyed.emit();\r\n  }\r\n}\r\n","import {Inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {FaviToastOptions} from './favi-toast-options';\r\nimport {FaviToastOutletComponent} from '../favi-toast-outlet/favi-toast-outlet.component';\r\nimport {CanUndefined, Nullable, ThemeColors} from '../../../../utils/type.util';\r\nimport {FaviToastRef} from './favi-toast-ref';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {isPlatformBrowser} from '@angular/common';\r\n\r\n/**\r\n * Service to open and close toast.\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FaviToastService {\r\n  /** Registered toast outlet. */\r\n  private _outlet: Nullable<FaviToastOutletComponent> = null;\r\n\r\n  /**\r\n   * Opened toasts.\r\n   * Maximum 3 toasts can be opened at once.\r\n   */\r\n  private _openedToasts: FaviToastRef[] = [];\r\n\r\n  constructor(\r\n    @Inject(PLATFORM_ID) private _platformId: Object,\r\n    private _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Register toast outlet to service.\r\n   * Only 1 outlet can be registered at once.\r\n   *\r\n   * @param outlet\r\n   */\r\n  registerOutlet(outlet: FaviToastOutletComponent): void {\r\n    if (this._outlet) {\r\n      throw new Error('Only 1 outlet can be registered at once');\r\n    }\r\n\r\n    this._outlet = outlet;\r\n  }\r\n\r\n  /**\r\n   * Open toast. Only 1 toast can be opened for a theme.\r\n   * If there is an opened toast with provided 'theme' option,\r\n   * existing FaviToastRef will be used to add message.\r\n   *\r\n   * @param options - Options to open a new toast.\r\n   */\r\n  open(options: FaviToastOptions): FaviToastRef | void {\r\n    const {\r\n      theme,\r\n      message,\r\n      duration,\r\n    } = options;\r\n\r\n    const {\r\n      _outlet: outlet,\r\n    } = this;\r\n\r\n    if (!isPlatformBrowser(this._platformId)) {\r\n      return;\r\n    }\r\n\r\n    if (!outlet) {\r\n      throw new Error('Toast outlet is required');\r\n    }\r\n\r\n    const openedFaviToastRef = this._findOpenedToastByTheme(theme);\r\n\r\n    if (openedFaviToastRef) {\r\n      openedFaviToastRef.addMessage(message, duration);\r\n\r\n      return openedFaviToastRef;\r\n    } else {\r\n      const faviToastRef = new FaviToastRef({\r\n        theme,\r\n        message,\r\n        duration,\r\n        viewContainerRef: outlet.viewContainerRef,\r\n      });\r\n\r\n      this._openedToasts.push(faviToastRef);\r\n      this._subscribeToastDestroy(faviToastRef);\r\n\r\n      return faviToastRef;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Close oldest toast.\r\n   */\r\n  closeOldest(): void {\r\n    const latestToast = this._openedToasts.shift();\r\n\r\n    if (latestToast) {\r\n      latestToast.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Subscribe toast destroy.\r\n   *\r\n   * @param faviToastRef\r\n   */\r\n  private _subscribeToastDestroy(faviToastRef: FaviToastRef): void {\r\n    const observer = this._subscriptionManager.createObserver();\r\n\r\n    const sub = faviToastRef.destroyed\r\n      .subscribe(() => {\r\n        this._removeFromOpenedToasts(faviToastRef);\r\n        this._subscriptionManager.removeObserver(observer);\r\n      });\r\n\r\n    observer.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Remove provided toastRef from the opened toasts.\r\n   *\r\n   * @param faviToastRef\r\n   */\r\n  private _removeFromOpenedToasts(faviToastRef: FaviToastRef): void {\r\n    this._openedToasts = this._openedToasts.filter(openedToastItem => openedToastItem !== faviToastRef);\r\n  }\r\n\r\n  /**\r\n   * Find an opened toast with theme.\r\n   *\r\n   * @param theme - Theme color to find.\r\n   */\r\n  private _findOpenedToastByTheme(theme: CanUndefined<ThemeColors>): CanUndefined<FaviToastRef> {\r\n    return this._openedToasts.find(toastRef => toastRef.theme === theme);\r\n  }\r\n}\r\n","import {AfterViewInit, Component, ViewChild, ViewContainerRef} from '@angular/core';\r\nimport {FaviToastService} from '../services/favi-toast.service';\r\n\r\n/**\r\n * Toast outlet to render toasts.\r\n */\r\n@Component({\r\n  selector: 'favi-toast-outlet',\r\n  templateUrl: './favi-toast-outlet.component.html',\r\n  host: {\r\n    class: 'favi-toast-outlet',\r\n  },\r\n})\r\nexport class FaviToastOutletComponent implements AfterViewInit {\r\n  // Reference to view container to render toasts.\r\n  @ViewChild('container', {read: ViewContainerRef}) viewContainerRef!: ViewContainerRef;\r\n\r\n  constructor(\r\n    private _faviToastService: FaviToastService,\r\n  ) {\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._faviToastService.registerOutlet(this);\r\n  }\r\n}\r\n","<ng-container #container></ng-container>\r\n","import {Component, ElementRef, ViewChild} from '@angular/core';\r\nimport {FaviAppService} from '../../../services/favi-app/favi-app.service';\r\nimport {HistoryStateService} from '../../../services/history-state/history-state.service';\r\n\r\n/**\r\n * App container of Favian UI.\r\n * It is recommended to add this component in AppComponent.\r\n *\r\n * It allows to use Favian UI specific features like overlay.\r\n */\r\n@Component({\r\n  selector: 'favi-app',\r\n  templateUrl: './favi-app.component.html',\r\n  styleUrls: ['./favi-app.component.scss']\r\n})\r\nexport class FaviAppComponent {\r\n  /** App container element. */\r\n  @ViewChild('appContainer', {read: ElementRef}) appContainerRef!: ElementRef<HTMLElement>;\r\n\r\n  constructor(\r\n    private _faviAppService: FaviAppService,\r\n    private _historyStateService: HistoryStateService, // To create initial instance.\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Handle container scroll event.\r\n   */\r\n  onContainerScroll(): void {\r\n    const {\r\n      scrollLeft: x,\r\n      scrollTop: y,\r\n    } = this.appContainerRef.nativeElement;\r\n\r\n    this._faviAppService.scrollPosition = {\r\n      x,\r\n      y,\r\n    };\r\n  }\r\n}\r\n","<div\r\n  #appContainer\r\n  (scroll)=\"onContainerScroll()\"\r\n  class=\"favi-app\">\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<favi-overlay-outlet></favi-overlay-outlet>\r\n<favi-toast-outlet></favi-toast-outlet>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {FaviOverlayOutletComponent} from './favi-overlay-outlet/favi-overlay-outlet.component';\nimport {FaviOverlayBackdropComponent} from './favi-overlay-backdrop/favi-overlay-backdrop.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviOverlayOutletComponent,\n    FaviOverlayBackdropComponent,\n  ],\n  exports: [\n    FaviOverlayOutletComponent,\n    FaviOverlayBackdropComponent,\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviOverlayModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviIconComponent } from './favi-icon.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviIconComponent\n  ],\n  exports: [\n    FaviIconComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviIconModule { }\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviEffectorDirective} from './favi-effector.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviEffectorDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [\r\n    FaviEffectorDirective,\r\n  ],\r\n})\r\nexport class FaviEffectorModule { }\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviToastComponent} from './favi-toast.component';\r\nimport {FaviToastOutletComponent} from './favi-toast-outlet/favi-toast-outlet.component';\r\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviToastComponent,\r\n    FaviToastOutletComponent\r\n  ],\r\n  exports: [\r\n    FaviToastOutletComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule\r\n  ]\r\n})\r\nexport class FaviToastModule { }\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviAppComponent} from './favi-app.component';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {BrowserAnimationsModule} from '@angular/platform-browser/animations';\r\nimport {FaviOverlayModule} from '../../overlay/favi-overlay/favi-overlay.module';\r\nimport {FaviToastModule} from '../../toast/favi-toast/favi-toast.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviAppComponent\r\n  ],\r\n  exports: [\r\n    FaviAppComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    BrowserAnimationsModule,\r\n    FaviOverlayModule,\r\n    FaviToastModule,\r\n  ],\r\n  providers: [\r\n    SubscriptionManager, // Provide global subscription manager.\r\n  ],\r\n})\r\nexport class FaviAppModule { }\r\n","import {Component} from '@angular/core';\r\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {Nullable, ThemeColors} from '../../../utils/type.util';\r\n\r\n/**\r\n * An app bar that can be placed on the top of the application.\r\n * Anything can be contained to inside.\r\n *\r\n * Also, theme color and size are changeable.\r\n */\r\n@Component({\r\n  selector: 'favi-app-bar',\r\n  templateUrl: './favi-app-bar.component.html',\r\n  styleUrls: ['./favi-app-bar.component.scss']\r\n})\r\nexport class FaviAppBarComponent extends ThemeClassBinder {\r\n  // Override to set default theme.\r\n  protected override _theme: Nullable<ThemeColors> = 'primary';\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n}\r\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviAppBarComponent } from './favi-app-bar.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviAppBarComponent\n  ],\n  exports: [\n    FaviAppBarComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviAppBarModule { }\n","import {Component, HostBinding, Input} from '@angular/core';\nimport {FaviSidebarPositions} from './favi-sidebar-positions';\n\n/**\n * A sidebar component which can be rendered in FaviMainComponent.\n * It has 24px padding by default.\n */\n@Component({\n  selector: 'favi-sidebar',\n  templateUrl: './favi-sidebar.component.html',\n  styleUrls: ['./favi-sidebar.component.scss']\n})\nexport class FaviSidebarComponent {\n  // Set sidebar's position.\n  // It determines only border direction by sidebar's position.\n  // For example, when position is left, border will be rendered on the right side, however,\n  // component can be on the right side if it's put after FaviMainComponent.\n  @Input() position: FaviSidebarPositions = 'left';\n\n  @HostBinding('class.favi-position-left')\n  get isPositionLeft(): boolean {\n    return this.position === 'left';\n  }\n\n  @HostBinding('class.favi-position-right')\n  get isPositionRight(): boolean {\n    return this.position === 'right';\n  }\n}\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviSidebarComponent } from './favi-sidebar.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviSidebarComponent\n  ],\n  exports: [\n    FaviSidebarComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviSidebarModule { }\n","import {Directive, ElementRef, HostBinding, Input, OnChanges} from '@angular/core';\r\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\n\r\n@Directive({\r\n  selector: '[faviButton]',\r\n  host: {\r\n    class: 'favi-button favi-effector',\r\n    type: 'button',\r\n  },\r\n})\r\nexport class FaviButtonDirective extends ThemeClassBinder implements OnChanges {\r\n  constructor(\r\n    protected _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  /** Button disabled status. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Is it works?\r\n   */\r\n  @Input()\r\n  @HostBinding('class.favi-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Set disabled status. It adds 'favi-disabled' class to element, and set 'disabled' status\r\n   * if bounding element is 'button'.\r\n   *\r\n   * @param value - Status value.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    if (this._elementRef?.nativeElement instanceof HTMLButtonElement) {\r\n      this._elementRef.nativeElement.disabled = this._disabled;\r\n    }\r\n  }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviButtonDirective} from './favi-button.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviButtonDirective\r\n  ],\r\n  exports: [\r\n    FaviButtonDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviButtonModule { }\r\n","import {Directive, ElementRef} from '@angular/core';\r\nimport {FaviButtonDirective} from '../favi-button/favi-button.directive';\r\n\r\n@Directive({\r\n  selector: '[faviFlatButton]',\r\n  host: {\r\n    class: 'favi-flat-button',\r\n  },\r\n})\r\nexport class FaviFlatButtonDirective extends FaviButtonDirective {\r\n\r\n  constructor(\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(_elementRef);\r\n  }\r\n\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviFlatButtonDirective} from './favi-flat-button.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviFlatButtonDirective\r\n  ],\r\n  exports: [\r\n    FaviFlatButtonDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviFlatButtonModule { }\r\n","import {Directive, ElementRef} from '@angular/core';\r\nimport {FaviButtonDirective} from '../favi-button/favi-button.directive';\r\n\r\n@Directive({\r\n  selector: '[faviStrokeButton]',\r\n  host: {\r\n    class: 'favi-stroke-button',\r\n  },\r\n})\r\nexport class FaviStrokeButtonDirective extends FaviButtonDirective {\r\n\r\n  constructor(\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(_elementRef);\r\n  }\r\n\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviStrokeButtonDirective} from './favi-stroke-button.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviStrokeButtonDirective\r\n  ],\r\n  exports: [\r\n    FaviStrokeButtonDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviStrokeButtonModule { }\r\n","import {Directive, TemplateRef} from '@angular/core';\n\n/**\n * Directive to replace each date of calendar.\n * It only can replace the content of date.\n *\n * Also, it should be bound to ng-template to use let data.\n * The date object is passed implicitly to template.\n */\n@Directive({\n  selector: 'ng-template[faviCalendarDateReplacer]',\n  standalone: true\n})\nexport class FaviCalendarDateReplacerDirective {\n\n  constructor(\n    private _templateRef: TemplateRef<any>,\n  ) { }\n\n  get templateRef(): TemplateRef<any> {\n    return this._templateRef;\n  }\n}\n","export class ViewChildRequiredError extends Error {\r\n  constructor(name: string) {\r\n    super(`ViewChild '${name}' is required`);\r\n  }\r\n}\r\n","/**\r\n * Check whether keyboard event is triggered with specific key type or not.\r\n *\r\n * @param event\r\n * @param type\r\n */\r\nexport function isKey(event: KeyboardEvent, type: AvailableKey): boolean {\r\n  if (event) {\r\n    const key = event.code;\r\n    // `keyCode` is used for Safari on Mac.\r\n    // tslint:disable-next-line:deprecation\r\n    const code = event.keyCode;\r\n\r\n    return key === type || (KEY_MAP as any)[type].indexOf(code) !== -1;\r\n  } else {\r\n    return false;\r\n  }\r\n}\r\n\r\n/**\r\n * Disable the event.\r\n * Propagation and default behavior won't work.\r\n *\r\n * @param event\r\n */\r\nexport function disableEvent(event: Event): void {\r\n  event.stopPropagation();\r\n  event.preventDefault();\r\n}\r\n\r\n/**\r\n * Check whether specific command is triggered or not.\r\n *\r\n * @param event\r\n * @param commandKeys - Array of command keys.\r\n *  It allows composition command like Shift + Alt, Shift + Alt + Ctrl, etc.\r\n * @param key\r\n */\r\nexport function isCommand(event: KeyboardEvent, commandKeys: CommandKey[], key: AvailableKey): boolean {\r\n  if (event) {\r\n    return isKey(event, key) && _isOnlyCommand(event, commandKeys);\r\n  } else {\r\n    return false;\r\n  }\r\n}\r\n\r\n/**\r\n * Check if KeyboardEvent contains only keys which defined in commandKeys array.\r\n *\r\n * @param event\r\n * @param commandKeys\r\n *\r\n * @example\r\n * // It will true when only Ctrl and Alt command keys are pressed from KeyboardEvent.\r\n * _isOnlyCommand(event, [CommandKey.ctrl, CommandKey.alt]);\r\n */\r\nfunction _isOnlyCommand(event: KeyboardEvent, commandKeys: CommandKey[]): boolean {\r\n  if (event) {\r\n    const toBePressed: CommandKeyMap = {\r\n      [CommandKey.ctrl]: false,\r\n      [CommandKey.alt]: false,\r\n      [CommandKey.shift]: false,\r\n      [CommandKey.meta]: false,\r\n    };\r\n\r\n    const isPressed: CommandKeyMap = {\r\n      [CommandKey.ctrl]: false,\r\n      [CommandKey.alt]: false,\r\n      [CommandKey.shift]: false,\r\n      [CommandKey.meta]: false,\r\n    };\r\n\r\n    // check to be pressed\r\n    commandKeys.forEach(key => {\r\n      toBePressed[key] = true;\r\n    });\r\n\r\n    isPressed[CommandKey.ctrl] = event.ctrlKey;\r\n    isPressed[CommandKey.shift] = event.shiftKey;\r\n    isPressed[CommandKey.alt] = event.altKey;\r\n    isPressed[CommandKey.meta] = event.metaKey;\r\n\r\n    return Object.keys(toBePressed).every(key => {\r\n      return toBePressed[key as CommandKey] === isPressed[key as CommandKey];\r\n    });\r\n  } else {\r\n    return false;\r\n  }\r\n}\r\n\r\n/**\r\n * Enum of available keys.\r\n */\r\nexport enum AvailableKey {\r\n  ContextMenu = 'ContextMenu',\r\n  Backspace = 'Backspace',\r\n  Backquote = 'Backquote',\r\n  Asterisk = 'Asterisk',\r\n  Enter = 'Enter',\r\n  Space = 'Space',\r\n  Tab = 'Tab',\r\n  Delete = 'Delete',\r\n  End = 'End',\r\n  Help = 'Help',\r\n  Home = 'Home',\r\n  Insert = 'Insert',\r\n  PageDown = 'PageDown',\r\n  PageUp = 'PageUp',\r\n  ArrowDown = 'ArrowDown',\r\n  ArrowLeft = 'ArrowLeft',\r\n  ArrowRight = 'ArrowRight',\r\n  ArrowUp = 'ArrowUp',\r\n  Escape = 'Escape',\r\n  PrintScreen = 'PrintScreen',\r\n  ScrollLock = 'ScrollLock',\r\n  Pause = 'Pause',\r\n  AltLeft = 'AltLeft',\r\n  AltRight = 'AltRight',\r\n  CapsLock = 'CapsLock',\r\n  ControlLeft = 'ControlLeft',\r\n  ControlRight = 'ControlRight',\r\n  OSLeft = 'OSLeft',\r\n  OSRight = 'OSRight',\r\n  ShiftLeft = 'ShiftLeft',\r\n  ShiftRight = 'ShiftRight',\r\n  F1 = 'F1',\r\n  F2 = 'F2',\r\n  F3 = 'F3',\r\n  F4 = 'F4',\r\n  F5 = 'F5',\r\n  F6 = 'F6',\r\n  F7 = 'F7',\r\n  F8 = 'F8',\r\n  F9 = 'F9',\r\n  F10 = 'F10',\r\n  F11 = 'F11',\r\n  F12 = 'F12',\r\n  F13 = 'F13',\r\n  F14 = 'F14',\r\n  F15 = 'F15',\r\n  F16 = 'F16',\r\n  F17 = 'F17',\r\n  F18 = 'F18',\r\n  F19 = 'F19',\r\n  F20 = 'F20',\r\n  F21 = 'F21',\r\n  F22 = 'F22',\r\n  F23 = 'F23',\r\n  F24 = 'F24',\r\n  Digit1 = 'Digit1',\r\n  Digit2 = 'Digit2',\r\n  Digit3 = 'Digit3',\r\n  Digit4 = 'Digit4',\r\n  Digit5 = 'Digit5',\r\n  Digit6 = 'Digit6',\r\n  Digit7 = 'Digit7',\r\n  Digit8 = 'Digit8',\r\n  Digit9 = 'Digit9',\r\n  Digit0 = 'Digit0',\r\n  KeyA = 'KeyA',\r\n  KeyB = 'KeyB',\r\n  KeyC = 'KeyC',\r\n  KeyD = 'KeyD',\r\n  KeyE = 'KeyE',\r\n  KeyF = 'KeyF',\r\n  KeyG = 'KeyG',\r\n  KeyH = 'KeyH',\r\n  KeyI = 'KeyI',\r\n  KeyJ = 'KeyJ',\r\n  KeyK = 'KeyK',\r\n  KeyL = 'KeyL',\r\n  KeyM = 'KeyM',\r\n  KeyN = 'KeyN',\r\n  KeyO = 'KeyO',\r\n  KeyP = 'KeyP',\r\n  KeyQ = 'KeyQ',\r\n  KeyR = 'KeyR',\r\n  KeyS = 'KeyS',\r\n  KeyT = 'KeyT',\r\n  KeyU = 'KeyU',\r\n  KeyV = 'KeyV',\r\n  KeyW = 'KeyW',\r\n  KeyX = 'KeyX',\r\n  KeyY = 'KeyY',\r\n  KeyZ = 'KeyZ',\r\n}\r\n\r\n/**\r\n * JavaScript key map for keyCode.\r\n * These are applicable for Windows and macOS, or mobile.\r\n */\r\nexport const KEY_MAP = {\r\n  ContextMenu: [0, 93],\r\n  Backspace: [8],\r\n  Backquote: [192, 96],\r\n  Enter: [13],\r\n  Space: [32],\r\n  Tab: [9],\r\n  Delete: [46, 8], // Mac OS may use 8 for Delete\r\n  End: [35],\r\n  Help: [6, 45, 47],\r\n  Home: [36],\r\n  Insert: [45],\r\n  PageDown: [34],\r\n  PageUp: [33],\r\n  ArrowDown: [40],\r\n  ArrowLeft: [37],\r\n  ArrowRight: [39],\r\n  ArrowUp: [38],\r\n  Escape: [27],\r\n  PrintScreen: [124, 42, 44],\r\n  ScrollLock: [125, 145],\r\n  Pause: [126, 19, 1],\r\n  AltLeft: [18],\r\n  AltRight: [18],\r\n  CapsLock: [20],\r\n  ControlLeft: [17],\r\n  ControlRight: [17],\r\n  OSLeft: [224, 91],\r\n  OSRight: [92, 93, 91, 224],\r\n  ShiftLeft: [16],\r\n  ShiftRight: [16],\r\n  F1: [112],\r\n  F2: [113],\r\n  F3: [114],\r\n  F4: [115],\r\n  F5: [116],\r\n  F6: [117],\r\n  F7: [118],\r\n  F8: [119],\r\n  F9: [120],\r\n  F10: [121],\r\n  F11: [122],\r\n  F12: [123],\r\n  F13: [124, 44, 0],\r\n  F14: [125, 145, 0],\r\n  F15: [126, 19, 0],\r\n  F16: [127, 0],\r\n  F17: [128, 0],\r\n  F18: [129, 0],\r\n  F19: [130, 0],\r\n  F20: [229, 131, 0],\r\n  F21: [0, 132],\r\n  F22: [0, 133],\r\n  F23: [0, 134],\r\n  F24: [135, 0],\r\n  Digit1: [49],\r\n  Digit2: [50],\r\n  Digit3: [51],\r\n  Digit4: [52],\r\n  Digit5: [53],\r\n  Digit6: [54],\r\n  Digit7: [55],\r\n  Digit8: [56],\r\n  Digit9: [57],\r\n  Digit0: [48],\r\n  KeyA: [65],\r\n  KeyB: [66],\r\n  KeyC: [67],\r\n  KeyD: [68],\r\n  KeyE: [69],\r\n  KeyF: [70],\r\n  KeyG: [71],\r\n  KeyH: [72],\r\n  KeyI: [73],\r\n  KeyJ: [74],\r\n  KeyK: [75],\r\n  KeyL: [76],\r\n  KeyM: [77],\r\n  KeyN: [78],\r\n  KeyO: [79],\r\n  KeyP: [80],\r\n  KeyQ: [186, 81],\r\n  KeyR: [82],\r\n  KeyS: [83],\r\n  KeyT: [84],\r\n  KeyU: [85],\r\n  KeyV: [86],\r\n  KeyW: [87],\r\n  KeyX: [88],\r\n  KeyY: [89],\r\n  KeyZ: [90],\r\n};\r\n\r\n/**\r\n * Set of command keys.\r\n */\r\nexport enum CommandKey {\r\n  ctrl = 'ctrl',\r\n  shift = 'shift',\r\n  alt = 'alt',\r\n  meta = 'meta',\r\n}\r\n\r\n/**\r\n * Map of command keys which triggered.\r\n * Triggered command key will be true.\r\n */\r\nexport interface CommandKeyMap {\r\n  [CommandKey.ctrl]: boolean;\r\n  [CommandKey.shift]: boolean;\r\n  [CommandKey.alt]: boolean;\r\n  [CommandKey.meta]: boolean;\r\n}\r\n","export interface FaviCalendarLabelProviderOptions {\r\n  // Label for sunday.\r\n  sunday?: string;\r\n\r\n  // Label for monday.\r\n  monday?: string;\r\n\r\n  // Label for tuesday.\r\n  tuesday?: string;\r\n\r\n  // Label for wednesday.\r\n  wednesday?: string;\r\n\r\n  // Label for thursday.\r\n  thursday?: string;\r\n\r\n  // Label for friday.\r\n  friday?: string;\r\n\r\n  // Label for saturday.\r\n  saturday?: string;\r\n\r\n  // Format for year.\r\n  // Default is 'yyyy'.\r\n  yearFormat?: string;\r\n\r\n  // Format for month.\r\n  // Default is 'MMM'.\r\n  monthFormat?: string;\r\n\r\n  // Format for date.\r\n  // Default is 'd'.\r\n  dateFormat?: string;\r\n}\r\n\r\n/**\r\n * Provider for days of week labels and displaying formats.\r\n * It can set label from Sunday to Saturday, and displaying format of year, month, and dates.\r\n */\r\nexport class FaviCalendarLabelProvider {\r\n  // Label for sunday.\r\n  sunday: string;\r\n\r\n  // Label for monday.\r\n  monday: string;\r\n\r\n  // Label for tuesday.\r\n  tuesday: string;\r\n\r\n  // Label for wednesday.\r\n  wednesday: string;\r\n\r\n  // Label for thursday.\r\n  thursday: string;\r\n\r\n  // Label for friday.\r\n  friday: string;\r\n\r\n  // Label for saturday.\r\n  saturday: string;\r\n\r\n  // Format for year.\r\n  yearFormat: string;\r\n\r\n  // Format for month.\r\n  monthFormat: string;\r\n\r\n  // Format for date.\r\n  dateFormat: string;\r\n\r\n  constructor(options: FaviCalendarLabelProviderOptions = {}) {\r\n    const {\r\n      sunday = 'S',\r\n      monday = 'M',\r\n      tuesday = 'T',\r\n      wednesday = 'W',\r\n      thursday = 'T',\r\n      friday = 'F',\r\n      saturday = 'S',\r\n      yearFormat = 'yyyy',\r\n      monthFormat = 'MMM',\r\n      dateFormat = 'd',\r\n    } = options;\r\n\r\n    this.sunday = sunday;\r\n    this.monday = monday;\r\n    this.tuesday = tuesday;\r\n    this.wednesday = wednesday;\r\n    this.thursday = thursday;\r\n    this.friday = friday;\r\n    this.saturday = saturday;\r\n    this.yearFormat = yearFormat;\r\n    this.monthFormat = monthFormat;\r\n    this.dateFormat = dateFormat;\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChildren,\r\n  ElementRef,\r\n  HostBinding,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Optional,\r\n  QueryList,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {BooleanAttribute, DateLike, Nullable} from '../../../../utils/type.util';\r\nimport {isDefined} from '../../../../utils/validate.util';\r\nimport {isDateBigger, isDateBiggerOrEqual, isDateEqual} from '../../../../utils/date.util';\r\nimport {\r\n  FaviCalendarDateReplacerDirective\r\n} from '../../favi-calendar-date-replacer/favi-calendar-date-replacer.directive';\r\nimport {convertBooleanAttribute} from '../../../../utils/convert.util';\r\nimport {createRandomId} from '../../../../utils/random.util';\r\nimport {ViewChildRequiredError} from '../../../../errors/view-child-required-error';\r\nimport {EventManager} from '../../../../common/event-manager/event-manager';\r\nimport {disableEvent} from '../../../../utils/event.util';\r\nimport {FaviCalendarLabelProvider} from '../../common/favi-calendar-label-provider';\r\n\r\n/**\r\n * Base class to create calendar.\r\n * Styles for calendar is managed by _favi-calendar.scss.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-calendar',\r\n  },\r\n})\r\nexport abstract class FaviBaseCalendar implements OnInit, AfterViewInit, OnDestroy {\r\n  // Calendar id to handle with event manager.\r\n  readonly id = createRandomId(16);\r\n\r\n  // Ref to calendar scroll container to detect touch event.\r\n  @ViewChild('calendarScrollContainer', {read: ElementRef}) calendarScrollContainerRef!: ElementRef<HTMLElement>;\r\n\r\n  // Ref to calendar of previous month.\r\n  @ViewChild('previousMonthCalendar', {read: ElementRef}) previousMonthCalendarRef!: ElementRef<HTMLElement>;\r\n\r\n  // Ref to calendar of current month.\r\n  @ViewChild('currentMonthCalendar', {read: ElementRef}) currentMonthCalendarRef!: ElementRef<HTMLElement>;\r\n\r\n  // Ref to calendar of next month.\r\n  @ViewChild('nextMonthCalendar', {read: ElementRef}) nextMonthCalendarRef!: ElementRef<HTMLElement>;\r\n\r\n  // QueryList for date replacer.\r\n  // It will replace the content of each date.\r\n  @ContentChildren(FaviCalendarDateReplacerDirective, {descendants: true}) faviCalendarDateReplacerRefs!: QueryList<FaviCalendarDateReplacerDirective>;\r\n\r\n  // Weeks of previous month.\r\n  weeksOfPreviousMonth: Date[][] = [];\r\n\r\n  // 6 weeks to render calendar dates.\r\n  // Each row represents a week, and each week contains 7 days.\r\n  // It includes some previous/next months dates as well.\r\n  //\r\n  // Every week starts from Sunday.\r\n  weeksOfCurrentMonth: Date[][] = [];\r\n\r\n  // Weeks of next month.\r\n  weeksOfNextMonth: Date[][] = [];\r\n\r\n  // Labels to display days.\r\n  // It starts from Sunday.\r\n  dayLabels: string[] = [];\r\n\r\n  // Format to display label of year selector.\r\n  calendarYearFormat = 'yyyy';\r\n\r\n  // Format to display label of month selector.\r\n  calendarMonthFormat = 'MMM';\r\n\r\n  // Format to display label of date.\r\n  calendarDateFormat = 'd';\r\n\r\n  // Minimum selectable date.\r\n  protected _minDate: Nullable<DateLike> = null;\r\n\r\n  // Maximum selectable date.\r\n  protected _maxDate: Nullable<DateLike> = null;\r\n\r\n  // Date to display calendar.\r\n  // A date for _calendarDate should always be 1.\r\n  protected _calendarDate!: Date;\r\n\r\n  // Initialized state of calendar.\r\n  // When it's true, _initCalendarDate() method won't be called from ngOnInit().\r\n  protected _calendarInitialized = false;\r\n\r\n  // Readonly state of calendar.\r\n  protected _readOnly = false;\r\n\r\n  // Animation controller for previous month.\r\n  protected _previousMonthAnimation: Nullable<Animation> = null;\r\n\r\n  // Animation controller for current month.\r\n  protected _currentMonthAnimation: Nullable<Animation> = null;\r\n\r\n  // Animation controller for next month.\r\n  protected _nextMonthAnimation: Nullable<Animation> = null;\r\n\r\n  // Start x position to scroll calendar on touchstart or mousedown to scroll container.\r\n  protected _scrollStartX = 0;\r\n\r\n  // Moved x position from window.\r\n  protected _scrollMoveX = 0;\r\n\r\n  // Touch scroll enabled state.\r\n  protected _scrollEnabled = false;\r\n\r\n  // Animation duration for calendar scroll.\r\n  protected _scrollAnimationDuration = 200;\r\n\r\n  // Scrolling break point.\r\n  // When scroll moved distance is over this ratio, scroll will work.\r\n  protected _scrollBreakPoint = .3;\r\n\r\n  protected constructor(\r\n    @Inject(FaviCalendarLabelProvider) @Optional()\r\n    protected _calendarLabelProvider: FaviCalendarLabelProvider,\r\n  ) {\r\n  }\r\n\r\n  get minDate(): Nullable<DateLike> {\r\n    return this._minDate;\r\n  }\r\n\r\n  /**\r\n   * Set minimum selectable date.\r\n   * If it isn't set, there is no limitation for minimum date.\r\n   *\r\n   * @param date\r\n   */\r\n  @Input()\r\n  set minDate(date: Nullable<DateLike>) {\r\n    this._minDate = isDefined<DateLike>(date) ? new Date(date) : null;\r\n  }\r\n\r\n  get maxDate(): Nullable<DateLike> {\r\n    return this._maxDate;\r\n  }\r\n\r\n  /**\r\n   * Set maximum selectable date.\r\n   * If it isn't set, there is no limitation for maximum date.\r\n   *\r\n   * @param date\r\n   */\r\n  @Input()\r\n  set maxDate(date: Nullable<DateLike>) {\r\n    this._maxDate = isDefined<DateLike>(date) ? new Date(date) : null;\r\n  }\r\n\r\n  @Input()\r\n  get readOnly(): BooleanAttribute {\r\n    return this._readOnly;\r\n  }\r\n\r\n  /**\r\n   * Set it true to disable click event from each date.\r\n   * No visual changes with this.\r\n   *\r\n   * @param state\r\n   */\r\n  set readOnly(state: BooleanAttribute) {\r\n    this._readOnly = convertBooleanAttribute(state);\r\n  }\r\n\r\n  @HostBinding('class.favi-calendar-readonly')\r\n  get readOnlyClass(): boolean {\r\n    return this._readOnly;\r\n  }\r\n\r\n  /**\r\n   * Set _calendarDate to display calendar for year and month.\r\n   * And, call _createDates() method to render date items.\r\n   *\r\n   * Provided date will be converted to first date of month.\r\n   *\r\n   * @param date\r\n   */\r\n  set calendarDate(date: Date) {\r\n    this._calendarDate = new Date(date.getFullYear(), date.getMonth(), 1); // Ensure first date of month.\r\n    this._createCalendar();\r\n\r\n    this._calendarInitialized = true;\r\n  }\r\n\r\n  get calendarDate(): Date {\r\n    return this._calendarDate;\r\n  }\r\n\r\n  /**\r\n   * Get year of _calendarDate.\r\n   */\r\n  get calendarYear(): number {\r\n    return this._calendarDate.getFullYear();\r\n  }\r\n\r\n  /**\r\n   * Get month of _calendarDate.\r\n   * Month is from 0 to 11.\r\n   */\r\n  get calendarMonth(): number {\r\n    return this._calendarDate.getMonth();\r\n  }\r\n\r\n  /**\r\n   * Get state of having ContentChildren of FaviCalendarDateReplacerDirective.\r\n   */\r\n  get hasDateReplacers(): boolean {\r\n    return this.faviCalendarDateReplacerRefs.length > 0;\r\n  }\r\n\r\n  /**\r\n   * Touch pointer moved distance.\r\n   */\r\n  get movedDistance(): number {\r\n    return this._scrollMoveX - this._scrollStartX;\r\n  }\r\n\r\n  /**\r\n   * Get calendar transform value by scroll moved position.\r\n   */\r\n  get transformByScrollMoved(): Nullable<string> {\r\n    return this._scrollEnabled ? `translateX(calc(-100% + (${this.movedDistance}px)))` : null;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!this._calendarLabelProvider) {\r\n      this._calendarLabelProvider = new FaviCalendarLabelProvider();\r\n    }\r\n\r\n    const {\r\n      sunday,\r\n      monday,\r\n      tuesday,\r\n      wednesday,\r\n      thursday,\r\n      friday,\r\n      saturday,\r\n      yearFormat,\r\n      monthFormat,\r\n      dateFormat,\r\n    } = this._calendarLabelProvider;\r\n\r\n    this.dayLabels = [\r\n      sunday,\r\n      monday,\r\n      tuesday,\r\n      wednesday,\r\n      thursday,\r\n      friday,\r\n      saturday,\r\n    ];\r\n\r\n    this.calendarYearFormat = yearFormat;\r\n    this.calendarMonthFormat = monthFormat;\r\n    this.calendarDateFormat = dateFormat;\r\n\r\n    if (!this._calendarInitialized) {\r\n      this._initCalendarDate();\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (!this.calendarScrollContainerRef) {\r\n      throw new ViewChildRequiredError('calendarScrollContainer');\r\n    }\r\n\r\n    if (!this.previousMonthCalendarRef) {\r\n      throw new ViewChildRequiredError('previousMonthCalendar');\r\n    }\r\n\r\n    if (!this.currentMonthCalendarRef) {\r\n      throw new ViewChildRequiredError('currentMonthCalendar');\r\n    }\r\n\r\n    if (!this.nextMonthCalendarRef) {\r\n      throw new ViewChildRequiredError('nextMonthCalendar');\r\n    }\r\n\r\n    EventManager.register<HTMLElementEventMap>(\r\n      CALENDAR_TOUCHSTART + this.id,\r\n      this.calendarScrollContainerRef.nativeElement,\r\n      'touchstart',\r\n      (event: TouchEvent) => {\r\n        console.debug('touchstart');\r\n\r\n        if (event.touches.length > 0) {\r\n          this._startScrollDetecting(event.touches[0].pageX);\r\n        }\r\n      },\r\n    );\r\n\r\n    EventManager.register<HTMLElementEventMap>(\r\n      CALENDAR_MOUSEDOWN + this.id,\r\n      this.calendarScrollContainerRef.nativeElement,\r\n      'mousedown',\r\n      (event: MouseEvent) => {\r\n        console.debug('mousedown');\r\n\r\n        this._startScrollDetecting(event.x);\r\n      },\r\n    );\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n  }\r\n\r\n  /**\r\n   * Display next year's calendar.\r\n   */\r\n  toNextYear(): void {\r\n    const {calendarYear, calendarMonth} = this;\r\n\r\n    this._setCalendarDate(calendarYear + 1, calendarMonth);\r\n  }\r\n\r\n  /**\r\n   * Display previous year's calendar.\r\n   */\r\n  toPreviousYear(): void {\r\n    const {calendarYear, calendarMonth} = this;\r\n\r\n    this._setCalendarDate(calendarYear - 1, calendarMonth);\r\n  }\r\n\r\n  /**\r\n   * Display next month's calendar.\r\n   */\r\n  toNextMonth(): void {\r\n    const {calendarYear, calendarMonth} = this;\r\n\r\n    this._setCalendarDate(calendarYear, calendarMonth + 1);\r\n  }\r\n\r\n  /**\r\n   * Display previous month's calendar.\r\n   */\r\n  toPreviousMonth(): void {\r\n    const {calendarYear, calendarMonth} = this;\r\n\r\n    this._setCalendarDate(calendarYear, calendarMonth - 1);\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is included in previous month or not.\r\n   *\r\n   * @param date\r\n   */\r\n  isOutOfPreviousMonth(date: Date): boolean {\r\n    const {calendarYear, calendarMonth} = this;\r\n\r\n    return date.getFullYear() !== calendarYear || date.getMonth() !== calendarMonth - 1;\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is included in current month or not.\r\n   *\r\n   * @param date\r\n   */\r\n  isOutOfCurrentMonth(date: Date): boolean {\r\n    const {calendarYear, calendarMonth} = this;\r\n\r\n    return date.getFullYear() !== calendarYear || date.getMonth() !== calendarMonth;\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is included in next month or not.\r\n   *\r\n   * @param date\r\n   */\r\n  isOutOfNextMonth(date: Date): boolean {\r\n    const {calendarYear, calendarMonth} = this;\r\n\r\n    return date.getFullYear() !== calendarYear || date.getMonth() !== calendarMonth + 1;\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is out of min/max date range.\r\n   *\r\n   * @param date\r\n   */\r\n  isOutOfRange(date: Date): boolean {\r\n    let outOfMinDate = false;\r\n    let outOfMaxDate = false;\r\n\r\n    if (this.minDate) {\r\n      outOfMinDate = isDateBigger(this.minDate, date);\r\n    }\r\n\r\n    if (this.maxDate) {\r\n      outOfMaxDate = isDateBiggerOrEqual(date, this.maxDate);\r\n    }\r\n\r\n    return outOfMinDate || outOfMaxDate;\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is today or not.\r\n   *\r\n   * @param date\r\n   */\r\n  isToday(date: Date): boolean {\r\n    return isDateEqual(date, new Date());\r\n  }\r\n\r\n  /**\r\n   * TrackBy function for week lines.\r\n   *\r\n   * @param index\r\n   */\r\n  weekTrackBy(index: number): number {\r\n    return index;\r\n  }\r\n\r\n  /**\r\n   * TrackBy function for date items.\r\n   *\r\n   * @param index\r\n   * @param date\r\n   */\r\n  dateTrackBy(index: number, date: Date): string {\r\n    return date.toDateString();\r\n  }\r\n\r\n  /**\r\n   * Initialize calendarDate to current year and month.\r\n   */\r\n  protected _initCalendarDate(): void {\r\n    const today = new Date();\r\n\r\n    this.calendarDate = new Date(today.getFullYear(), today.getMonth(), 1);\r\n  }\r\n\r\n  /**\r\n   * Update _calendarDate with year and month.\r\n   * Date parameter always be first date of month.\r\n   *\r\n   * @param year\r\n   * @param month\r\n   */\r\n  protected _setCalendarDate(year: number, month: number): void {\r\n    this.calendarDate = new Date(year, month, 1); // Always set first date of month.\r\n  }\r\n\r\n  /**\r\n   * Create swiping calendar.\r\n   */\r\n  protected _createCalendar(): void {\r\n    const {\r\n      calendarYear,\r\n      calendarMonth,\r\n    } = this;\r\n\r\n    this.weeksOfPreviousMonth = this._createWeeks(calendarYear, calendarMonth - 1);\r\n    this.weeksOfCurrentMonth = this._createWeeks(calendarYear, calendarMonth);\r\n    this.weeksOfNextMonth = this._createWeeks(calendarYear, calendarMonth + 1);\r\n  }\r\n\r\n  /**\r\n   * Create weeks for provided year and month.\r\n   *\r\n   * @param year\r\n   * @param month\r\n   */\r\n  protected _createWeeks(year: number, month: number): Date[][] {\r\n    const weeks: Date[][] = [];\r\n\r\n    // S M T W T F S\r\n    // 0 1 2 3 4 5 6\r\n    const currentDayOfWeek = new Date(year, month, 1).getDay();\r\n\r\n    // The date parameter to get displayable dates of previous month.\r\n    const startingDate = 1 - currentDayOfWeek;\r\n\r\n    for (let weekIndex = 0; weekIndex < 6; weekIndex++) { // 6 weeks.\r\n      const week: Date[] = [];\r\n      const previousDatesCount = weekIndex * 7; // The number of already created dates.\r\n\r\n      for (let dateIndex = 0; dateIndex < 7; dateIndex++) { // 7 days.\r\n        week.push(new Date(year, month, startingDate + previousDatesCount + dateIndex));\r\n      }\r\n\r\n      weeks.push(week);\r\n    }\r\n\r\n    return weeks;\r\n  }\r\n\r\n  /**\r\n   * Start scroll detecting from scroll container.\r\n   *\r\n   * @param x - X position of touched or mouse downed.\r\n   */\r\n  protected _startScrollDetecting(x: number): void {\r\n    this._scrollStartX = x;\r\n    this._scrollMoveX = x;\r\n    this._addWindowScrollMoveDetectors();\r\n  }\r\n\r\n  /**\r\n   * Add window scroll move detection events.\r\n   */\r\n  protected _addWindowScrollMoveDetectors(): void {\r\n    EventManager.register<WindowEventMap>(\r\n      CALENDAR_WINDOW_TOUCHMOVE + this.id,\r\n      window,\r\n      'touchmove',\r\n      (event: TouchEvent) => {\r\n        console.debug('touchmove');\r\n\r\n        if (event.touches.length > 0) {\r\n          this._onScrollPositionMove(event, event.touches[0].pageX);\r\n        }\r\n      },\r\n      {\r\n        passive: false,\r\n      },\r\n    );\r\n\r\n    EventManager.register<WindowEventMap>(\r\n      CALENDAR_WINDOW_MOUSEMOVE + this.id,\r\n      window,\r\n      'mousemove',\r\n      (event: MouseEvent) => {\r\n        console.debug('mousemove');\r\n\r\n        this._onScrollPositionMove(event, event.x);\r\n      },\r\n    );\r\n\r\n    EventManager.register<WindowEventMap>(\r\n      CALENDAR_WINDOW_TOUCHEND + this.id,\r\n      window,\r\n      'touchend',\r\n      (event: TouchEvent) => {\r\n        console.debug('touchend');\r\n\r\n        this._stopScroll(event);\r\n      },\r\n    );\r\n\r\n    EventManager.register<WindowEventMap>(\r\n      CALENDAR_WINDOW_TOUCHCANCEL + this.id,\r\n      window,\r\n      'touchcancel',\r\n      (event: TouchEvent) => {\r\n        console.debug('touchcancel');\r\n\r\n        this._stopScroll(event);\r\n      },\r\n    );\r\n\r\n    EventManager.register<WindowEventMap>(\r\n      CALENDAR_WINDOW_MOUSEUP + this.id,\r\n      window,\r\n      'mouseup',\r\n      (event: MouseEvent) => {\r\n        console.debug('mouseup');\r\n\r\n        this._stopScroll(event);\r\n      },\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Handle scroll position move.\r\n   * Actual scroll will be enabled when touch has moved more than 10px.\r\n   *\r\n   * @param event\r\n   * @param x\r\n   */\r\n  protected _onScrollPositionMove(event: Event, x: number): void {\r\n    this._scrollMoveX = x;\r\n\r\n    if (this._scrollEnabled && event.cancelable) {\r\n      disableEvent(event);\r\n    } else if (!this._scrollEnabled) {\r\n      if (Math.abs(this.movedDistance) > 32) {\r\n        this._scrollStartX = x;\r\n        this._scrollEnabled = true;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Stop scroll.\r\n   * It animates calendars and re-draw the dates.\r\n   *\r\n   * @param event\r\n   */\r\n  protected _stopScroll(event: Event): void {\r\n    this._clearMoveDetectEvents();\r\n\r\n    if (!this._scrollEnabled) {\r\n      this._clearScrollProperties();\r\n      return;\r\n    }\r\n\r\n    if (event.cancelable) {\r\n      disableEvent(event);\r\n    }\r\n\r\n    const {\r\n      width,\r\n    } = this.calendarScrollContainerRef.nativeElement.getBoundingClientRect();\r\n\r\n    if (this.movedDistance / width > this._scrollBreakPoint) {\r\n      this._animateToPrevious();\r\n    } else if (this.movedDistance / width < -this._scrollBreakPoint) {\r\n      this._animateToNext();\r\n    } else {\r\n      this._animateToCurrent();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clear events that detect move position.\r\n   */\r\n  protected _clearMoveDetectEvents(): void {\r\n    EventManager.unregister(CALENDAR_WINDOW_TOUCHMOVE + this.id);\r\n    EventManager.unregister(CALENDAR_WINDOW_MOUSEMOVE + this.id);\r\n    EventManager.unregister(CALENDAR_WINDOW_TOUCHEND + this.id);\r\n    EventManager.unregister(CALENDAR_WINDOW_TOUCHCANCEL + this.id);\r\n    EventManager.unregister(CALENDAR_WINDOW_MOUSEUP + this.id);\r\n  }\r\n\r\n  /**\r\n   * Animate to previous month.\r\n   */\r\n  protected _animateToPrevious(): void {\r\n    console.debug('To previous');\r\n\r\n    this._scrollCalendarItems('translateX(0%)', () => {\r\n      this.toPreviousMonth();\r\n      this._clearScrollProperties();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Animate to current month.\r\n   */\r\n  protected _animateToCurrent(): void {\r\n    console.debug('To current');\r\n\r\n    this._scrollCalendarItems('translateX(-100%)', () => {\r\n      this._clearScrollProperties();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Animate to next month.\r\n   */\r\n  protected _animateToNext(): void {\r\n    console.debug('To next');\r\n\r\n    this._scrollCalendarItems('translateX(-200%)', () => {\r\n      this.toNextMonth();\r\n      this._clearScrollProperties();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Clear scroll properties.\r\n   */\r\n  protected _clearScrollProperties(): void {\r\n    this._scrollMoveX = 0;\r\n    this._scrollStartX = 0;\r\n    this._scrollEnabled = false;\r\n  }\r\n\r\n  /**\r\n   * Animate calendar items to display scroll animation.\r\n   *\r\n   * @param transform - Target transform state.\r\n   * @param callback - Callback function to call after all animations done.\r\n   */\r\n  protected _scrollCalendarItems(transform: string, callback?: () => void): void {\r\n    const duration = this._scrollAnimationDuration;\r\n\r\n    this._previousMonthAnimation = this.previousMonthCalendarRef.nativeElement.animate([\r\n      {\r\n        transform,\r\n      },\r\n    ], {\r\n      duration,\r\n    });\r\n\r\n    this._currentMonthAnimation = this.currentMonthCalendarRef.nativeElement.animate([\r\n      {\r\n        transform,\r\n      },\r\n    ], {\r\n      duration,\r\n    });\r\n\r\n    this._nextMonthAnimation = this.nextMonthCalendarRef.nativeElement.animate([\r\n      {\r\n        transform,\r\n      },\r\n    ], {\r\n      duration,\r\n    });\r\n\r\n    const previousAnimationPromise = new Promise<void>(resolve => {\r\n      this._previousMonthAnimation?.addEventListener('finish', () => {\r\n        resolve();\r\n      });\r\n\r\n      this._previousMonthAnimation?.addEventListener('cancel', () => {\r\n        resolve();\r\n      });\r\n    });\r\n\r\n    const currentAnimationPromise = new Promise<void>(resolve => {\r\n      this._currentMonthAnimation?.addEventListener('finish', () => {\r\n        resolve();\r\n      });\r\n\r\n      this._currentMonthAnimation?.addEventListener('cancel', () => {\r\n        resolve();\r\n      });\r\n    });\r\n\r\n    const nextAnimationPromise = new Promise<void>(resolve => {\r\n      this._nextMonthAnimation?.addEventListener('finish', () => {\r\n        resolve();\r\n      });\r\n\r\n      this._nextMonthAnimation?.addEventListener('cancel', () => {\r\n        resolve();\r\n      });\r\n    });\r\n\r\n    Promise.all([\r\n      previousAnimationPromise,\r\n      currentAnimationPromise,\r\n      nextAnimationPromise,\r\n    ]).then(() => {\r\n      if (callback) {\r\n        callback();\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nconst CALENDAR_TOUCHSTART = 'CALENDAR_TOUCHSTART';\r\nconst CALENDAR_MOUSEDOWN = 'CALENDAR_MOUSEDOWN';\r\nconst CALENDAR_WINDOW_TOUCHMOVE = 'CALENDAR_WINDOW_TOUCHMOVE';\r\nconst CALENDAR_WINDOW_MOUSEMOVE = 'CALENDAR_WINDOW_MOUSEMOVE';\r\nconst CALENDAR_WINDOW_TOUCHEND = 'CALENDAR_WINDOW_TOUCHEND';\r\nconst CALENDAR_WINDOW_TOUCHCANCEL = 'CALENDAR_WINDOW_TOUCHCANCEL';\r\nconst CALENDAR_WINDOW_MOUSEUP = 'CALENDAR_WINDOW_MOUSEUP';\r\n","import {Component, EventEmitter, Inject, Input, Optional, Output} from '@angular/core';\nimport {FaviBaseCalendar} from '../abstracts/favi-base-calendar/favi-base-calendar';\nimport {isDateEqual} from '../../../utils/date.util';\nimport {Nullable, ThemeColors} from '../../../utils/type.util';\nimport {formatDate} from '@angular/common';\nimport {FaviCalendarLabelProvider} from '../common/favi-calendar-label-provider';\n\n/**\n * A calendar component which allows multiple date selection.\n */\n@Component({\n  selector: 'favi-multi-calendar',\n  templateUrl: './favi-multi-calendar.component.html',\n  host: {\n    class: 'favi-multi-calendar',\n  },\n})\nexport class FaviMultiCalendarComponent extends FaviBaseCalendar {\n  @Output() selectedDatesChange = new EventEmitter<Date[]>();\n\n  private _selectedDates: Date[] = [];\n\n  constructor(\n    @Inject(FaviCalendarLabelProvider) @Optional()\n    protected override _calendarLabelProvider: FaviCalendarLabelProvider,\n  ) {\n    super(_calendarLabelProvider);\n  }\n\n  /**\n   * Set selected dates.\n   * When dates value isn't empty, calendarDate will be initialized\n   * to display month of the last selected date.\n   *\n   * @param dates\n   */\n  @Input()\n  set selectedDates(dates: Date[]) {\n    const previousLastSelectedDate = this._selectedDates[this._selectedDates.length - 1];\n\n    this._selectedDates = dates;\n\n    if (this._selectedDates.length > 0) {\n      const lastSelectedDate = this._selectedDates[this._selectedDates.length - 1];\n\n      if (!lastSelectedDate) {\n        this.calendarDate = new Date();\n      } else if (\n        previousLastSelectedDate\n        && formatDate(previousLastSelectedDate, 'yyyy-MM-dd', 'en-US') !== formatDate(lastSelectedDate, 'yyyy-MM-dd', 'en-US')) {\n        // Change calendar date if last selected date has changed.\n        this.calendarDate = lastSelectedDate;\n      }\n\n    } else { // When selectedDates is empty, reset calendarDate for default value.\n      this._initCalendarDate();\n    }\n  }\n\n  get selectedDates(): Date[] {\n    return this._selectedDates;\n  }\n\n  /**\n   * Check whether provided date is included in selectedDate or not.\n   *\n   * @param date\n   */\n  isSelectedDate(date: Date): boolean {\n    return !!this._selectedDates.find(selectedDate => isDateEqual(selectedDate, date));\n  }\n\n  /**\n   * It only emits when selectedDateChange is observed.\n   * If not, it updates selectedDate by self.\n   *\n   * It doesn't work when scroll is enabled.\n   *\n   * @param date\n   */\n  emitSelectedDateChange(date: Date): void {\n    if (this._scrollEnabled) {\n      return;\n    }\n\n    let newSelectedDates: Date[];\n\n    if (this.isSelectedDate(date)) {\n      newSelectedDates = this.selectedDates.filter(selectedDate => !isDateEqual(selectedDate, date));\n    } else {\n      newSelectedDates = [...this.selectedDates, date];\n    }\n\n    if (this.selectedDatesChange.observed) {\n      this.selectedDatesChange.emit(newSelectedDates);\n    } else {\n      this.selectedDates = newSelectedDates;\n    }\n  }\n\n  /**\n   * Get date item theme.\n   *\n   * @param date\n   */\n  getDateItemTheme(date: Date): Nullable<ThemeColors> {\n    return this.isSelectedDate(date) ? 'primary' : null;\n  }\n}\n","<div class=\"favi-calendar-header\">\r\n  <div class=\"favi-calendar-selector favi-calendar-year-selector\">\r\n    <button\r\n      (click)=\"toPreviousYear()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\">\r\n      <favi-icon>\r\n        chevron_left\r\n      </favi-icon>\r\n    </button>\r\n\r\n    <div class=\"favi-calendar-selector-value\">\r\n      {{calendarDate | date: calendarYearFormat}}\r\n    </div>\r\n\r\n    <button\r\n      (click)=\"toNextYear()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\">\r\n      <favi-icon>\r\n        chevron_right\r\n      </favi-icon>\r\n    </button>\r\n  </div>\r\n\r\n  <div class=\"favi-calendar-selector favi-calendar-month-selector\">\r\n    <button\r\n      (click)=\"toPreviousMonth()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\">\r\n      <favi-icon>\r\n        chevron_left\r\n      </favi-icon>\r\n    </button>\r\n\r\n    <div class=\"favi-calendar-selector-value\">\r\n      {{calendarDate | date: calendarMonthFormat}}\r\n    </div>\r\n\r\n    <button\r\n      (click)=\"toNextMonth()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\">\r\n      <favi-icon>\r\n        chevron_right\r\n      </favi-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"favi-calendar-days\">\r\n  <div\r\n    *ngFor=\"let day of dayLabels\"\r\n    class=\"favi-calendar-item-container\">\r\n    <div class=\"favi-calendar-item\">\r\n      {{day}}\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div\r\n  #calendarScrollContainer\r\n  class=\"favi-calendar-swipe-container\">\r\n  <!-- Previous month. -->\r\n  <div\r\n    #previousMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfPreviousMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"emitSelectedDateChange(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfPreviousMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable favi-button-no-styles\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Current month. -->\r\n  <div\r\n    #currentMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfCurrentMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"emitSelectedDateChange(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfCurrentMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable favi-button-no-styles\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Next month. -->\r\n  <div\r\n    #nextMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfNextMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"emitSelectedDateChange(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfNextMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable favi-button-no-styles\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviMultiCalendarComponent} from './favi-multi-calendar.component';\r\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviMultiCalendarComponent\r\n  ],\r\n  exports: [\r\n    FaviMultiCalendarComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule\r\n  ],\r\n})\r\nexport class FaviMultiCalendarModule { }\r\n","import {Component, EventEmitter, Inject, Input, Optional, Output} from '@angular/core';\r\nimport {FaviBaseCalendar} from '../abstracts/favi-base-calendar/favi-base-calendar';\r\nimport {Nullable, RangedValue, ThemeColors} from '../../../utils/type.util';\r\nimport {isDefined} from '../../../utils/validate.util';\r\nimport {isDateBigger, isDateBiggerOrEqual, isDateEqual} from '../../../utils/date.util';\r\nimport {FaviCalendarLabelProvider} from '../common/favi-calendar-label-provider';\r\n\r\n/**\r\n * Calendar which allows user to select ranged dates.\r\n */\r\n@Component({\r\n  selector: 'favi-ranged-calendar',\r\n  templateUrl: './favi-ranged-calendar.component.html',\r\n  host: {\r\n    class: 'favi-ranged-calendar',\r\n  },\r\n})\r\nexport class FaviRangedCalendarComponent extends FaviBaseCalendar {\r\n  // Selected date change emitter.\r\n  @Output() selectedDatesChange = new EventEmitter<[Nullable<Date>, Nullable<Date>]>();\r\n\r\n  // Selected date range.\r\n  private _selectedDates: RangedValue<Nullable<Date>> = [null, null];\r\n\r\n  // Selected start date.\r\n  private _startDate: Nullable<Date> = null;\r\n\r\n  // Selected end date.\r\n  private _endDate: Nullable<Date> = null;\r\n\r\n  constructor(\r\n    @Inject(FaviCalendarLabelProvider) @Optional()\r\n    protected override _calendarLabelProvider: FaviCalendarLabelProvider,\r\n  ) {\r\n    super(_calendarLabelProvider);\r\n  }\r\n\r\n  /**\r\n   * Set selectedDates which is an array that consist of startDate and endDate.\r\n   *\r\n   * @param selectedDates\r\n   */\r\n  @Input()\r\n  set selectedDates(selectedDates: RangedValue<Nullable<Date>>) {\r\n    this._selectedDates = selectedDates;\r\n    this._startDate = selectedDates[0];\r\n    this._endDate = selectedDates[1];\r\n\r\n    if (this.endDate) {\r\n      this.calendarDate = this.endDate;\r\n    } else if (this.startDate) {\r\n      this.calendarDate = this.startDate;\r\n    } else {\r\n      this._initCalendarDate();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get selected dates.\r\n   */\r\n  get selectedDates(): RangedValue<Nullable<Date>> {\r\n    return this._selectedDates;\r\n  }\r\n\r\n  /**\r\n   * Get _startDate.\r\n   * The _startDate should be updated by updating selectedDates.\r\n   */\r\n  get startDate(): Nullable<Date> {\r\n    return this._startDate;\r\n  }\r\n\r\n  /**\r\n   * Get _endDate.\r\n   * The _endDate should be updated by updating selectedDates.\r\n   */\r\n  get endDate(): Nullable<Date> {\r\n    return this._endDate;\r\n  }\r\n\r\n  /**\r\n   * Get theme of date item by selected state.\r\n   * If provided date is selected, 'primary' theme code will be returned.\r\n   *\r\n   * @param date\r\n   */\r\n  getDateItemTheme(date: Date): Nullable<ThemeColors> {\r\n    return this.isSelectedDate(date) ? 'primary' : null;\r\n  }\r\n\r\n  /**\r\n   * Check whether date is equal to startDate or endDate.\r\n   *\r\n   * @param date\r\n   */\r\n  isSelectedDate(date: Date): boolean {\r\n    return this.isStartDate(date) || this.isEndDate(date);\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is equal to selected start date.\r\n   *\r\n   * @param date\r\n   */\r\n  isStartDate(date: Date): boolean {\r\n    const {startDate} = this;\r\n\r\n    return isDefined<Date>(startDate) && isDateEqual(startDate, date);\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is equal to selected end date.\r\n   *\r\n   * @param date\r\n   */\r\n  isEndDate(date: Date): boolean {\r\n    const {endDate} = this;\r\n\r\n    return isDefined<Date>(endDate) && isDateEqual(endDate, date);\r\n  }\r\n\r\n  /**\r\n   * Check whether date is between startDate and endDate.\r\n   *\r\n   * @param date\r\n   */\r\n  isRangedDate(date: Date): boolean {\r\n    const {startDate, endDate} = this;\r\n\r\n    return (\r\n      isDefined<Date>(startDate)\r\n      && !isDateBigger(startDate, date)\r\n    ) && (\r\n      isDefined<Date>(endDate)\r\n      && !isDateBigger(date, endDate)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Handle date click event.\r\n   * It doesn't work when scroll is enabled.\r\n   *\r\n   * @param date\r\n   */\r\n  onDateClick(date: Date): void {\r\n    if (this._scrollEnabled) {\r\n      return;\r\n    }\r\n\r\n    const {startDate, endDate} = this;\r\n    let newStartDate: Nullable<Date>; // newStartDate will always be updated.\r\n    let newEndDate: Nullable<Date> = null;\r\n\r\n    // This if-else conditions are intended to make read and debug easy.\r\n    if (isDefined<Date>(startDate) && isDefined<Date>(endDate)) { // When there are both start and end dates, reset starting point.\r\n      newStartDate = date;\r\n\r\n      this.selectedDates = [newStartDate, newEndDate];\r\n    } else if (isDefined<Date>(endDate)) { // When there is endDate, reset starting point.\r\n      newStartDate = date;\r\n\r\n      this.selectedDates = [newStartDate, newEndDate];\r\n    } else if (isDefined<Date>(startDate)) { // When there is startDate, nested condition should be checked.\r\n      if (isDateBiggerOrEqual(date, startDate)) { // When date is bigger than or equal to startDate, set to newEndDate.\r\n        newStartDate = startDate;\r\n        newEndDate = date;\r\n      } else { // When date is smaller than startDate, reset starting point.\r\n        newStartDate = date;\r\n      }\r\n\r\n      this.selectedDates = [newStartDate, newEndDate];\r\n    } else { // In other cases, reset starting point.\r\n      newStartDate = date;\r\n\r\n      this.selectedDates = [newStartDate, newEndDate];\r\n    }\r\n\r\n    this.calendarDate = date; // Update calendar date display.\r\n\r\n    this.selectedDatesChange.emit(this.selectedDates);\r\n  }\r\n}\r\n","<div class=\"favi-calendar-header\">\r\n  <div class=\"favi-calendar-selector favi-calendar-year-selector\">\r\n    <button\r\n      (click)=\"toPreviousYear()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_left\r\n      </favi-icon>\r\n    </button>\r\n\r\n    <div class=\"favi-calendar-selector-value\">\r\n      {{calendarDate | date: calendarYearFormat}}\r\n    </div>\r\n\r\n    <button\r\n      (click)=\"toNextYear()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_right\r\n      </favi-icon>\r\n    </button>\r\n  </div>\r\n\r\n  <div class=\"favi-calendar-selector favi-calendar-month-selector\">\r\n    <button\r\n      (click)=\"toPreviousMonth()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_left\r\n      </favi-icon>\r\n    </button>\r\n\r\n    <div class=\"favi-calendar-selector-value\">\r\n      {{calendarDate | date: calendarMonthFormat}}\r\n    </div>\r\n\r\n    <button\r\n      (click)=\"toNextMonth()\"\r\n      type=\"button\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_right\r\n      </favi-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"favi-calendar-days\">\r\n  <div\r\n    *ngFor=\"let day of dayLabels\"\r\n    class=\"favi-calendar-item-container\">\r\n    <div class=\"favi-calendar-item\">\r\n      {{day}}\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div\r\n  #calendarScrollContainer\r\n  class=\"favi-calendar-swipe-container\">\r\n  <!-- Previous month. -->\r\n  <div\r\n    #previousMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfPreviousMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"onDateClick(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-start-date]=\"isStartDate(date)\"\r\n          [class.favi-end-date]=\"isEndDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfPreviousMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [class.favi-is-ranged]=\"isRangedDate(date)\"\r\n          [disabled]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Current month. -->\r\n  <div\r\n    #currentMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfCurrentMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"onDateClick(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-start-date]=\"isStartDate(date)\"\r\n          [class.favi-end-date]=\"isEndDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfCurrentMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [class.favi-is-ranged]=\"isRangedDate(date)\"\r\n          [disabled]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Next month. -->\r\n  <div\r\n    #nextMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfNextMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"onDateClick(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-start-date]=\"isStartDate(date)\"\r\n          [class.favi-end-date]=\"isEndDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfNextMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [class.favi-is-ranged]=\"isRangedDate(date)\"\r\n          [disabled]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviRangedCalendarComponent} from './favi-ranged-calendar.component';\r\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviRangedCalendarComponent\r\n  ],\r\n  exports: [\r\n    FaviRangedCalendarComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule\r\n  ],\r\n})\r\nexport class FaviRangedCalendarModule { }\r\n","import {Component, EventEmitter, Inject, Input, Optional, Output} from '@angular/core';\r\nimport {FaviBaseCalendar} from '../abstracts/favi-base-calendar/favi-base-calendar';\r\nimport {Nullable, ThemeColors} from '../../../utils/type.util';\r\nimport {isDateEqual} from '../../../utils/date.util';\r\nimport {FaviCalendarLabelProvider} from '../common/favi-calendar-label-provider';\r\n\r\n/**\r\n * Calendar which allows user to select a single date.\r\n */\r\n@Component({\r\n  selector: 'favi-single-calendar',\r\n  templateUrl: './favi-single-calendar.component.html',\r\n  host: {\r\n    class: 'favi-single-calendar',\r\n  },\r\n})\r\nexport class FaviSingleCalendarComponent extends FaviBaseCalendar {\r\n  @Output() selectedDateChange = new EventEmitter<Nullable<Date>>();\r\n\r\n  private _selectedDate: Nullable<Date> = null;\r\n\r\n  // Updated state of selectedDate.\r\n  // It determines whether to initialize of calendar or not.\r\n  private _selectedDateHasUpdated = false;\r\n\r\n  constructor(\r\n    @Inject(FaviCalendarLabelProvider) @Optional()\r\n    protected override _calendarLabelProvider: FaviCalendarLabelProvider,\r\n  ) {\r\n    super(_calendarLabelProvider);\r\n  }\r\n\r\n  /**\r\n   * Set selected date.\r\n   * When date value is null, calendarDate will be initialized\r\n   * to display today's month.\r\n   *\r\n   * @param date\r\n   */\r\n  @Input()\r\n  set selectedDate(date: Nullable<Date>) {\r\n    this._selectedDate = date;\r\n    this._selectedDateHasUpdated = true;\r\n\r\n    if (this._selectedDate) {\r\n      this.calendarDate = this._selectedDate;\r\n    } else { // When selectedDate is null, reset calendarDate for default value.\r\n      this._initCalendarDate();\r\n    }\r\n  }\r\n\r\n  get selectedDate(): Nullable<Date> {\r\n    return this._selectedDate;\r\n  }\r\n\r\n  /**\r\n   * Check whether provided date is selectedDate or not.\r\n   *\r\n   * @param date\r\n   */\r\n  isSelectedDate(date: Date): boolean {\r\n    if (!this.selectedDate) {\r\n      return false;\r\n    }\r\n\r\n    return isDateEqual(date, this.selectedDate);\r\n  }\r\n\r\n  /**\r\n   * Get theme of date item by selected state.\r\n   * If provided date is selected, 'primary' theme code will be returned.\r\n   *\r\n   * @param date\r\n   */\r\n  getDateItemTheme(date: Date): Nullable<ThemeColors> {\r\n    return this.isSelectedDate(date) ? 'primary' : null;\r\n  }\r\n\r\n  /**\r\n   * It only emits when selectedDateChange is observed.\r\n   * If not, it updates selectedDate by self.\r\n   *\r\n   * It doesn't work when scroll is enabled.\r\n   *\r\n   * @param date\r\n   */\r\n  emitSelectedDateChange(date: Date): void {\r\n    if (this._scrollEnabled) {\r\n      return;\r\n    }\r\n\r\n    if (this.selectedDateChange.observed) {\r\n      this.selectedDateChange.emit(date);\r\n    } else {\r\n      this.selectedDate = date;\r\n    }\r\n  }\r\n}\r\n","<div class=\"favi-calendar-header\">\r\n  <div class=\"favi-calendar-selector favi-calendar-year-selector\">\r\n    <button\r\n      (click)=\"toPreviousYear()\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      type=\"button\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_left\r\n      </favi-icon>\r\n    </button>\r\n\r\n    <div class=\"favi-calendar-selector-value\">\r\n      {{calendarDate | date: calendarYearFormat}}\r\n    </div>\r\n\r\n    <button\r\n      (click)=\"toNextYear()\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      type=\"button\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_right\r\n      </favi-icon>\r\n    </button>\r\n  </div>\r\n\r\n  <div class=\"favi-calendar-selector favi-calendar-month-selector\">\r\n    <button\r\n      (click)=\"toPreviousMonth()\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      type=\"button\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_left\r\n      </favi-icon>\r\n    </button>\r\n\r\n    <div class=\"favi-calendar-selector-value\">\r\n      {{calendarDate | date: calendarMonthFormat}}\r\n    </div>\r\n\r\n    <button\r\n      (click)=\"toNextMonth()\"\r\n      class=\"favi-calendar-selector-button favi-button-no-styles\"\r\n      type=\"button\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_right\r\n      </favi-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"favi-calendar-days\">\r\n  <div\r\n    *ngFor=\"let day of dayLabels\"\r\n    class=\"favi-calendar-item-container\">\r\n    <div class=\"favi-calendar-item\">\r\n      {{day}}\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div\r\n  #calendarScrollContainer\r\n  class=\"favi-calendar-swipe-container\">\r\n  <!-- Previous month. -->\r\n  <div\r\n    #previousMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfPreviousMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"emitSelectedDateChange(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfPreviousMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [disabled]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Current month. -->\r\n  <div\r\n    #currentMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfCurrentMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"emitSelectedDateChange(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfCurrentMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [disabled]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Next month. -->\r\n  <div\r\n    #nextMonthCalendar\r\n    [style.transform]=\"transformByScrollMoved\"\r\n    class=\"favi-calendar-swipe-item\">\r\n    <div\r\n      *ngFor=\"let week of weeksOfNextMonth; trackBy: weekTrackBy\"\r\n      class=\"favi-calendar-dates\">\r\n      <div\r\n        *ngFor=\"let date of week; trackBy: dateTrackBy\"\r\n        class=\"favi-calendar-item-container\">\r\n        <button\r\n          (click)=\"emitSelectedDateChange(date)\"\r\n          [class.favi-is-today]=\"isToday(date)\"\r\n          [class.favi-selected]=\"isSelectedDate(date)\"\r\n          [class.favi-out-of-month]=\"isOutOfNextMonth(date)\"\r\n          [class.favi-out-of-range]=\"isOutOfRange(date)\"\r\n          [disabled]=\"isOutOfRange(date)\"\r\n          [theme]=\"getDateItemTheme(date)\"\r\n          class=\"favi-calendar-item favi-selectable\"\r\n          type=\"button\"\r\n          faviEffector>\r\n          <ng-container *ngIf=\"isOutOfRange(date); else dateLabel\">\r\n            <favi-icon>\r\n              close\r\n            </favi-icon>\r\n          </ng-container>\r\n\r\n          <ng-template #dateLabel>\r\n            <ng-container *ngIf=\"hasDateReplacers; else defaultDateLabel\">\r\n              <ng-container\r\n                *ngFor=\"let faviCalendarDateReplacerRef of faviCalendarDateReplacerRefs\"\r\n                [ngTemplateOutlet]=\"faviCalendarDateReplacerRef.templateRef\"\r\n                [ngTemplateOutletContext]=\"{$implicit: date}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultDateLabel>\r\n              {{date | date: calendarDateFormat}}\r\n            </ng-template>\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviSingleCalendarComponent} from './favi-single-calendar.component';\r\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviSingleCalendarComponent\r\n  ],\r\n  exports: [\r\n    FaviSingleCalendarComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule\r\n  ],\r\n})\r\nexport class FaviSingleCalendarModule { }\r\n","import {\r\n  AfterViewInit,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  Optional,\r\n  Output\r\n} from '@angular/core';\r\nimport {RouterLinkActive} from '@angular/router';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * A directive to create component like tab item.\r\n * It has its own key and will be activated when key is equal to the current key of parent component.\r\n * Also, this will be used with RouterLink and RouterLinkActive to display subpages with router.\r\n *\r\n * When using with RouterLink and RouterLinkActive, the 'key' property will be ignored.\r\n */\r\n@Directive()\r\nexport abstract class FaviTabItemLike implements AfterViewInit {\r\n  // Unique key of tab item.\r\n  // It is required when not using RouterLink and RouterLinkActive for tab item.\r\n  @Input() key: any;\r\n\r\n  // Emit when this component is activated.\r\n  @Output() activeChange = new EventEmitter<void>();\r\n\r\n  // Tab active state.\r\n  private _isActive = false;\r\n\r\n  // Subscription observer to observe 'isActiveChange' emitter.\r\n  private _activeChangeObserver = this._subscriptionManager.createObserver();\r\n\r\n  protected constructor(\r\n    @Optional() public routerLinkActive: RouterLinkActive,\r\n    public elementRef: ElementRef<HTMLElement>,\r\n    protected _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get tab active state and bind class.\r\n   */\r\n  @HostBinding('class.favi-active')\r\n  get isActive(): boolean {\r\n    return this._isActive;\r\n  }\r\n\r\n  /**\r\n   * Set tab active state.\r\n   *\r\n   * @param value\r\n   */\r\n  set isActive(value: boolean) {\r\n    this._isActive = value;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._subscribeActiveChange();\r\n  }\r\n\r\n  /**\r\n   * Listen click event to emit 'activeChange' emitter.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('click', ['$event'])\r\n  onHostClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    if (!this.routerLinkActive) {\r\n      this.activeChange.emit();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Subscribe 'isActiveChange'.\r\n   */\r\n  protected _subscribeActiveChange(): void {\r\n    if (!this.routerLinkActive) {\r\n      return;\r\n    }\r\n\r\n    const sub = this.routerLinkActive\r\n      .isActiveChange\r\n      .subscribe(active => {\r\n        this._isActive = active;\r\n\r\n        if (active) {\r\n          this.activeChange.emit();\r\n        }\r\n      });\r\n\r\n    this._activeChangeObserver.observe(sub);\r\n  }\r\n}\r\n","import {ThemeClassBinder} from '../../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  PLATFORM_ID,\r\n  QueryList,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {FaviTabItemLike} from '../favi-tab-item-like/favi-tab-item-like';\r\nimport {CanUndefined} from '../../../../utils/type.util';\r\n\r\n/**\r\n * Base component to create tab-like component.\r\n */\r\n@Component({\r\n  template: '',\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport abstract class FaviTabLike<Item extends FaviTabItemLike> extends ThemeClassBinder implements AfterContentInit, AfterViewInit, OnDestroy {\r\n  /**\r\n   * Key change event emitter.\r\n   * This will be only emitted when FaviToggleButtonItemDirective isn't used with RouterLink and RouterLinkActive.\r\n   */\r\n  @Output() keyChange = new EventEmitter<any>();\r\n\r\n  /** Highlight element. */\r\n  @ViewChild('highlight', {read: ElementRef}) highlightRef!: ElementRef<HTMLElement>;\r\n\r\n  /** QueryList of items. */\r\n  abstract itemsQueryList: QueryList<Item>;\r\n\r\n  /** Current activated key. */\r\n  protected _key: any;\r\n\r\n  /** Subscription observer to observe 'changes' from QueryList of items. */\r\n  protected _itemChangeObserver = this._subscriptionManager.createObserver();\r\n\r\n  /** Subscription observer to observe 'activeChange' emitter from FaviToggleButtonItemDirective. */\r\n  protected _activeChangeObserver = this._subscriptionManager.createObserver();\r\n\r\n  /** Timeout timer for setting initial key. */\r\n  protected _initialKeyTimer: any;\r\n\r\n  protected constructor(\r\n    @Inject(PLATFORM_ID) protected _platformId: Object,\r\n    protected _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Get current focused key.\r\n   */\r\n  get key(): any {\r\n    return this._key;\r\n  }\r\n\r\n  /**\r\n   * Set the key of tab item to activate.\r\n   * It should be equal to 'key' of FaviToggleButtonItemDirective.\r\n   *\r\n   * When using RouterLink and RouterLinkActive with FaviToggleButtonItemDirective, it will be ignored.\r\n   *\r\n   * @param value - Key value to highlight.\r\n   */\r\n  @Input()\r\n  set key(value: any) {\r\n    this._key = value;\r\n    this._setActiveItemByKey();\r\n    this._setHighlight();\r\n  }\r\n\r\n  /**\r\n   * Get activated item.\r\n   */\r\n  get isActivatedItem(): CanUndefined<FaviTabItemLike> {\r\n    return this.itemsQueryList?.find(itemRef => itemRef.isActive);\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._subscribeItemChanges();\r\n    this._subscribeActiveChange();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._setInitialKey();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearTimeout(this._initialKeyTimer);\r\n  }\r\n\r\n  /**\r\n   * Listen window resize to update tab highlight position and size.\r\n   */\r\n  @HostListener('window:resize')\r\n  onWindowResize(): void {\r\n    this._setHighlight();\r\n  }\r\n\r\n  /**\r\n   * Subscribe 'changes' from QueryList of FaviToggleButtonItemDirective.\r\n   */\r\n  protected _subscribeItemChanges(): void {\r\n    const sub = this.itemsQueryList\r\n      .changes\r\n      .subscribe(() => {\r\n        this._subscribeActiveChange();\r\n        this._setInitialKey();\r\n      });\r\n\r\n    this._itemChangeObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Subscribe 'activeChange' emitter from FaviToggleButtonItemDirective.\r\n   */\r\n  protected _subscribeActiveChange(): void {\r\n    const subs = this.itemsQueryList\r\n      .map(itemRef => {\r\n        return itemRef.activeChange\r\n          .subscribe(() => {\r\n            if (itemRef.routerLinkActive) {\r\n              this._setHighlight();\r\n            } else {\r\n              this._emitKeyChange(itemRef.key);\r\n            }\r\n          });\r\n      });\r\n\r\n    this._activeChangeObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Set initial key after view initialized.\r\n   */\r\n  protected _setInitialKey(): void {\r\n    // To prevent NG0100 error.\r\n    this._initialKeyTimer = setTimeout(() => {\r\n      const activatedTabItemRef = this.itemsQueryList.find(tabItemRef => {\r\n        return !tabItemRef.routerLinkActive && tabItemRef.key === this.key;\r\n      });\r\n\r\n      if (activatedTabItemRef) {\r\n        activatedTabItemRef.isActive = true;\r\n\r\n        this._setHighlight();\r\n      } else {\r\n        const firstTabItemRef = this.itemsQueryList.find(tabItemRef => {\r\n          return !tabItemRef.routerLinkActive;\r\n        });\r\n\r\n        if (firstTabItemRef) {\r\n          this._emitKeyChange(firstTabItemRef.key);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Emit 'keyChange' emitter.\r\n   * When 'keyChange' is not observed, update the 'key' directly.\r\n   *\r\n   * @param key\r\n   */\r\n  protected _emitKeyChange(key: string): void {\r\n    if (this.keyChange.observed) {\r\n      this.keyChange.emit(key);\r\n    } else {\r\n      this.key = key;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set active tab item by key.\r\n   */\r\n  protected _setActiveItemByKey(): void {\r\n    this.itemsQueryList?.forEach(tabItemRef => {\r\n      if (!tabItemRef.routerLinkActive) {\r\n        tabItemRef.isActive = tabItemRef.key === this.key;\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Method to update UI of highlight.\r\n   */\r\n  protected abstract _setHighlight(): void;\r\n}\r\n","import {Component, EventEmitter, HostListener, Output} from '@angular/core';\r\n\r\n/**\r\n * A button component to toggle accordion opened state.\r\n * It can be focused by user tab event and toggled with 'Space' or 'Enter' key.\r\n *\r\n * It should be used inside FaviAccordionComponent.\r\n */\r\n@Component({\r\n  selector: 'favi-accordion-button',\r\n  templateUrl: './favi-accordion-button.component.html',\r\n  host: {\r\n    class: 'favi-accordion-button',\r\n    tabindex: '0',\r\n  },\r\n})\r\nexport class FaviAccordionButtonComponent {\r\n  // Button click emitter.\r\n  @Output() buttonClick = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Listen 'Enter' keydown to emit button click.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown.enter', ['$event'])\r\n  onHostEnter(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.buttonClick.emit();\r\n  }\r\n\r\n  /**\r\n   * Listen 'Space' keydown to emit button click.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown.space', ['$event'])\r\n  onHostSpace(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.buttonClick.emit();\r\n  }\r\n\r\n  /**\r\n   * Listen 'click' event to emit button click.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('click', ['$event'])\r\n  onHostClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.buttonClick.emit();\r\n  }\r\n}\r\n","<div class=\"favi-accordion-title\">\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<favi-icon>\r\n  expand_more\r\n</favi-icon>\r\n","import {AfterContentInit, Component, ContentChild, HostBinding} from '@angular/core';\r\nimport {FaviAccordionButtonComponent} from './favi-accordion-button/favi-accordion-button.component';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\n\r\n/**\r\n * An accordion component to toggle expandable content.\r\n */\r\n@Component({\r\n  selector: 'favi-accordion',\r\n  templateUrl: './favi-accordion.component.html',\r\n  host: {\r\n    class: 'favi-accordion',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n  animations: [\r\n    trigger('expand', [\r\n      state('collapse', style({\r\n        height: 0,\r\n        paddingBottom: 0,\r\n      })),\r\n      state('expand', style({\r\n        height: '*',\r\n      })),\r\n      transition('collapse <=> expand', animate('.2s ease-out')),\r\n    ]),\r\n  ]\r\n})\r\nexport class FaviAccordionComponent implements AfterContentInit {\r\n  // Content expanded state.\r\n  // It is bound to 'favi-expanded' class.\r\n  @HostBinding('class.favi-expanded') expanded = false;\r\n\r\n  // Reference to an accordion button.\r\n  @ContentChild(FaviAccordionButtonComponent) faviAccordionButtonRef?: FaviAccordionButtonComponent;\r\n\r\n  // Subscription observer for button click emitter.\r\n  private _buttonClickObserver = this._subscriptionManager.createObserver();\r\n\r\n  constructor(\r\n    private _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get 'expand' animation state.\r\n   */\r\n  get expandState(): string {\r\n    return  this.expanded ? 'expand' : 'collapse';\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._subscribeButtonClick();\r\n  }\r\n\r\n  /**\r\n   * Subscribe button click emitter of FaviAccordionButtonComponent.\r\n   */\r\n  private _subscribeButtonClick(): void {\r\n    if (!this.faviAccordionButtonRef) {\r\n      return;\r\n    }\r\n\r\n    const sub = this.faviAccordionButtonRef\r\n      .buttonClick\r\n      .subscribe(() => {\r\n        this.expanded = !this.expanded;\r\n      });\r\n\r\n    this._buttonClickObserver.observe(sub);\r\n  }\r\n}\r\n","<ng-content select=\"favi-accordion-button\"></ng-content>\r\n\r\n<div\r\n  [@expand]=\"expandState\"\r\n  class=\"favi-accordion-content\">\r\n  <ng-content></ng-content>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviAccordionComponent} from './favi-accordion.component';\r\nimport {FaviAccordionButtonComponent} from './favi-accordion-button/favi-accordion-button.component';\r\nimport {FaviIconModule} from '../favi-icon/favi-icon.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviAccordionComponent,\r\n    FaviAccordionButtonComponent,\r\n  ],\r\n  exports: [\r\n    FaviAccordionComponent,\r\n    FaviAccordionButtonComponent,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule\r\n  ]\r\n})\r\nexport class FaviAccordionModule { }\r\n","import {\r\n  AfterViewInit,\r\n  Directive,\r\n  ElementRef,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  PLATFORM_ID,\r\n  Renderer2\r\n} from '@angular/core';\r\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\r\nimport {BooleanAttribute, Nullable} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\n\r\n/**\r\n * A directive to make textarea to be resizable by its content.\r\n * It can be disabled with 'disableAutoResize' attribute.\r\n */\r\n@Directive({\r\n  selector: '[faviAutoResizeTextarea]'\r\n})\r\nexport class FaviAutoResizeTextareaDirective implements AfterViewInit, OnDestroy {\r\n  /** Pseudo-element to calculate height dynamically. */\r\n  private _pseudoTextarea: Nullable<HTMLDivElement> = null;\r\n\r\n  constructor(\r\n    @Inject(DOCUMENT) private _document: Document,\r\n    @Inject(PLATFORM_ID) private _platformId: Object,\r\n    private _renderer: Renderer2,\r\n    private _elementRef: ElementRef<HTMLTextAreaElement>,\r\n  ) { }\r\n\r\n  /** Auto resizing disabled status. */\r\n  private _disableAutoResize = false;\r\n\r\n  /**\r\n   * Get disabled status of auto-resizing.\r\n   */\r\n  @Input()\r\n  get disableAutoResize(): boolean {\r\n    return this._disableAutoResize;\r\n  }\r\n\r\n  /**\r\n   * Set disableAutoResize status of auto-resizing.\r\n   *\r\n   * @param value - Disabled status.\r\n   */\r\n  set disableAutoResize(value: BooleanAttribute) {\r\n    this._disableAutoResize = convertBooleanAttribute(value);\r\n\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      if (this._disableAutoResize) {\r\n        this._removePseudoElement();\r\n        this._resetHeight();\r\n      } else {\r\n        this._createPseudoElement();\r\n        this.resizeHeight();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (isPlatformBrowser(this._platformId) && !this.disableAutoResize) {\r\n      this._createPseudoElement();\r\n      this.resizeHeight();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._removePseudoElement();\r\n  }\r\n\r\n  @HostListener('keydown')\r\n  onHostKeyDown(): void {\r\n    this.resizeHeight();\r\n  }\r\n\r\n  @HostListener('keyup')\r\n  onHostKeyUp(): void {\r\n    this.resizeHeight();\r\n  }\r\n\r\n  @HostListener('input')\r\n  onHostInput(): void {\r\n    this.resizeHeight();\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  onWindowResize(): void {\r\n    this._updatePseudoElement();\r\n    this.resizeHeight();\r\n  }\r\n\r\n  /**\r\n   * Resize the height of textarea.\r\n   */\r\n  resizeHeight(): void {\r\n    const {\r\n      _pseudoTextarea: pseudoTextarea,\r\n    } = this;\r\n\r\n    if (!pseudoTextarea || this.disableAutoResize) {\r\n      return;\r\n    }\r\n\r\n    const host = this._elementRef.nativeElement;\r\n    const scrollBarHeight = pseudoTextarea.offsetHeight - pseudoTextarea.clientHeight;\r\n\r\n    const lines = host.value.replaceAll('<', '&lt;').split('\\n');\r\n    const lastLine = lines[lines.length - 1];\r\n\r\n    // For the last empty line, set p tag to correct the height.\r\n    if (lastLine === '') {\r\n      lines[lines.length - 1] = `<p> </p>`;\r\n    }\r\n\r\n    pseudoTextarea.innerHTML = lines.join('<br/>');\r\n\r\n    this._renderer.setStyle(host, 'width', `${pseudoTextarea.offsetWidth}px`);\r\n    this._renderer.setStyle(host, 'height', `${pseudoTextarea.scrollHeight + scrollBarHeight}px`);\r\n  }\r\n\r\n  /**\r\n   * Remove width and height to reset height.\r\n   */\r\n  private _resetHeight(): void {\r\n    if (this._elementRef) {\r\n      const host = this._elementRef.nativeElement;\r\n\r\n      this._renderer.setStyle(host, 'width', '');\r\n      this._renderer.setStyle(host, 'height', '');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Remove existing pseudo-element.\r\n   */\r\n  private _removePseudoElement(): void {\r\n    if (this._pseudoTextarea) {\r\n      this._renderer.removeChild(this._document.body, this._pseudoTextarea);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Create pseudo element to copy textarea content to calculate height.\r\n   */\r\n  private _createPseudoElement(): void {\r\n    this._removePseudoElement(); // Remove existing one before create.\r\n\r\n    this._pseudoTextarea = this._renderer.createElement('div') as HTMLDivElement;\r\n\r\n    this._updatePseudoElement();\r\n\r\n    this._renderer.setStyle(this._pseudoTextarea, 'position', 'fixed');\r\n    this._renderer.setStyle(this._pseudoTextarea, 'top', '-9999px');\r\n    this._renderer.setStyle(this._pseudoTextarea, 'left', '-9999px');\r\n    this._renderer.setStyle(this._pseudoTextarea, 'white-space', 'pre-wrap');\r\n    this._renderer.setStyle(this._pseudoTextarea, 'height', 'auto');\r\n\r\n    this._renderer.appendChild(this._document.body, this._pseudoTextarea);\r\n  }\r\n\r\n  /**\r\n   * Update style of pseudo-element when host resized.\r\n   */\r\n  private _updatePseudoElement(): void {\r\n    if (this._pseudoTextarea) {\r\n      const host = this._elementRef.nativeElement;\r\n\r\n      const hostStyles = getComputedStyle(host);\r\n\r\n      this._renderer.setStyle(this._pseudoTextarea, 'padding', hostStyles.padding);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'border', hostStyles.border);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'width', hostStyles.width);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'max-width', hostStyles.maxWidth);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'font-size', hostStyles.fontSize);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'line-height', hostStyles.lineHeight);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'font-family', hostStyles.fontFamily);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'word-break', hostStyles.wordBreak);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'word-spacing', hostStyles.wordSpacing);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'letter-spacing', hostStyles.letterSpacing);\r\n      this._renderer.setStyle(this._pseudoTextarea, 'overflow-wrap', hostStyles.overflowWrap);\r\n    }\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviAutoResizeTextareaDirective } from './favi-auto-resize-textarea.directive';\n\n\n\n@NgModule({\n  declarations: [\n    FaviAutoResizeTextareaDirective\n  ],\n  exports: [\n    FaviAutoResizeTextareaDirective\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviAutoResizeTextareaModule { }\n","import {AfterViewInit, Directive, ElementRef, Input} from '@angular/core';\r\n\r\n/**\r\n * Set focus to bound element after view initialized.\r\n *\r\n * When using 'focusTarget', it can search nested target element by using css selector.\r\n */\r\n@Directive({\r\n  selector: '[faviAutofocus]'\r\n})\r\nexport class FaviAutofocusDirective implements AfterViewInit {\r\n  /**\r\n   * CSS selector for target element. When it's not provided or target not found, it focuses to host element.\r\n   * It may be useful when used with Favian controls like FaviInputComponent or etc.\r\n   */\r\n  @Input() focusTarget = '';\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) { }\r\n\r\n  ngAfterViewInit(): void {\r\n    // Use Timeout timer to prevent NG0100 error and wait for content rendered.\r\n    setTimeout(() => {\r\n      if (this.focusTarget) {\r\n        try {\r\n          const target = this._elementRef.nativeElement.querySelector<HTMLElement>(this.focusTarget);\r\n\r\n          if (target) {\r\n            target.focus();\r\n            return;\r\n          }\r\n        } catch (e) {\r\n          console.error(`Focus target not found: ${this.focusTarget}`);\r\n        }\r\n      }\r\n\r\n      this._elementRef.nativeElement.focus();\r\n    });\r\n  }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviAutofocusDirective} from './favi-autofocus.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviAutofocusDirective\r\n  ],\r\n  exports: [\r\n    FaviAutofocusDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviAutofocusModule { }\r\n","/**\r\n * Error when @Input() decorated field isn't defined.\r\n */\r\nexport class InputRequiredError extends Error {\r\n  constructor(inputName: string) {\r\n    super(`${inputName} is required`);\r\n  }\r\n}\r\n","import {Component, HostBinding, Input, OnInit} from '@angular/core';\r\nimport {InputRequiredError} from '../../../errors/input-required-error';\r\nimport {CanOptional, Nullable} from '../../../utils/type.util';\r\n\r\n/**\r\n * An avatar component that displays circle image or specific background.\r\n */\r\n@Component({\r\n  selector: 'favi-avatar',\r\n  templateUrl: './favi-avatar.component.html',\r\n  host: {\r\n    class: 'favi-avatar',\r\n  },\r\n})\r\nexport class FaviAvatarComponent implements OnInit {\r\n  /**\r\n   * Name of user to display when image is unavailable.\r\n   * It will be used as 'alt' text of image.\r\n   */\r\n  @Input({ required: true }) name = '';\r\n\r\n  /**\r\n   * Set the background when image not available.\r\n   * It can any style value for 'background' style attribute.\r\n   */\r\n  @Input() color = '#B3B3B3';\r\n\r\n  /** Error state on loading image. */\r\n  private _loadError = false;\r\n\r\n  /** Image source url for avatar. */\r\n  private _src: CanOptional<string>;\r\n\r\n  get src(): CanOptional<string> {\r\n    return this._src;\r\n  }\r\n\r\n  /**\r\n   * Set image 'src' for avatar.\r\n   *\r\n   * @param src - Source url of image.\r\n   */\r\n  @Input()\r\n  set src(src: CanOptional<string>) {\r\n    this._src = src;\r\n    this._loadError = false; // To reload image, set it false.\r\n  }\r\n\r\n  /**\r\n   * Get 'true' when image can be shown.\r\n   */\r\n  get canShowImage(): boolean {\r\n    return !!this.src && !this._loadError;\r\n  }\r\n\r\n  /**\r\n   * Bind color property to background when image is unavailable.\r\n   */\r\n  @HostBinding('style.background')\r\n  get background(): Nullable<string> {\r\n    return this.canShowImage ? null : this.color;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.name) {\r\n      throw new InputRequiredError('name');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Mark error state to 'true' to display the first letter instead.\r\n   */\r\n  onImageLoadError(): void {\r\n    this._loadError = true;\r\n  }\r\n}\r\n","<img\r\n  (error)=\"onImageLoadError()\"\r\n  *ngIf=\"canShowImage\"\r\n  [src]=\"src!\"\r\n  [alt]=\"name\"/>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule, NgOptimizedImage} from '@angular/common';\r\nimport {FaviAvatarComponent} from './favi-avatar.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviAvatarComponent\r\n  ],\r\n  exports: [\r\n    FaviAvatarComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    NgOptimizedImage\r\n  ]\r\n})\r\nexport class FaviAvatarModule { }\r\n","import {Directive} from '@angular/core';\r\n\r\n/**\r\n * A directive to set avatar image in FaviChipComponent.\r\n * It will be placed on the left side of a chip.\r\n */\r\n@Directive({\r\n  selector: '[faviChipAvatar]',\r\n  host: {\r\n    class: 'favi-chip-avatar',\r\n  },\r\n})\r\nexport class FaviChipAvatarDirective {\r\n}\r\n","import {Component, ContentChild, EventEmitter, HostBinding, HostListener, Input, Output} from '@angular/core';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\nimport {FaviChipAppearance} from './favi-chip-appearance';\r\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {FaviChipAvatarDirective} from './favi-chip-avatar.directive';\r\n\r\n/**\r\n * A chip component which can be selectable or removable.\r\n * It can be displayed with custom avatar on the left side by using FaviChipAvatarDirective.\r\n */\r\n@Component({\r\n  selector: 'favi-chip',\r\n  templateUrl: './favi-chip.component.html',\r\n  host: {\r\n    class: 'favi-chip',\r\n    tabindex: '0',\r\n  },\r\n})\r\nexport class FaviChipComponent extends ThemeClassBinder {\r\n  // Chip appearance.\r\n  // Default is 'rectangle'.\r\n  @Input() appearance: FaviChipAppearance = 'rectangle';\r\n\r\n  // Emit when remove button clicked.\r\n  @Output() remove = new EventEmitter<void>();\r\n\r\n  // Selected state.\r\n  @Input() @HostBinding('class.favi-selected') selected = false;\r\n\r\n  // Selected state change emitter.\r\n  @Output() selectedChange = new EventEmitter<boolean>();\r\n\r\n  // Ref to chip avatar content.\r\n  @ContentChild(FaviChipAvatarDirective) faviChipAvatarRef?: FaviChipAvatarDirective;\r\n\r\n  // To display the remove icon of a chip, set this to 'true'.\r\n  private _removable = false;\r\n\r\n  // To make chip selectable, set this to 'true'.\r\n  private _selectable = false;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Bind rectangle class.\r\n   */\r\n  @HostBinding('class.favi-rectangle-appearance')\r\n  get isRectangle(): boolean {\r\n    return this.appearance === 'rectangle';\r\n  }\r\n\r\n  /**\r\n   * Bind round class.\r\n   */\r\n  @HostBinding('class.favi-round-appearance')\r\n  get isRound(): boolean {\r\n    return this.appearance === 'round';\r\n  }\r\n\r\n  /**\r\n   * Get removable state.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.favi-chip-has-remove')\r\n  get removable(): boolean {\r\n    return this._removable;\r\n  }\r\n\r\n  /**\r\n   * Set removable state to display 'remove' button.\r\n   *\r\n   * @param value\r\n   */\r\n  set removable(value: BooleanAttribute) {\r\n    this._removable = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * Get selectable state and bind class.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.favi-selectable')\r\n  get selectable(): boolean {\r\n    return this._selectable;\r\n  }\r\n\r\n  /**\r\n   * Set selectable state to make chip toggleable by clicking.\r\n   *\r\n   * @param value\r\n   */\r\n  set selectable(value: BooleanAttribute) {\r\n    this._selectable = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * Get state of having avatar directive.\r\n   */\r\n  @HostBinding('class.favi-chip-has-avatar')\r\n  get hasAvatar(): boolean {\r\n    return !!this.faviChipAvatarRef;\r\n  }\r\n\r\n  /**\r\n   * Toggle selected state when component is selectable.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('click', ['$event'])\r\n  toggleSelectedState(event: Event): void {\r\n    event.stopPropagation();\r\n\r\n    if (this.selectable) {\r\n      if (this.selectedChange.observed) {\r\n        this.selectedChange.emit(!this.selected);\r\n      } else {\r\n        this.selected = !this.selected;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Listen enter event for accessibility.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown.enter', ['$event'])\r\n  onHostEnter(event: Event): void {\r\n    this.toggleSelectedState(event);\r\n  }\r\n\r\n  /**\r\n   * Listen space event for accessibility.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown.space', ['$event'])\r\n  onHostSpace(event: Event): void {\r\n    this.toggleSelectedState(event);\r\n  }\r\n\r\n  /**\r\n   * Emit 'remove' emitter.\r\n   */\r\n  emitRemove(): void {\r\n    this.remove.emit();\r\n  }\r\n}\r\n","<div\r\n  *ngIf=\"hasAvatar\"\r\n  class=\"favi-chip-avatar-container\">\r\n  <ng-content select=\"[faviChipAvatar]\"></ng-content>\r\n</div>\r\n\r\n<div class=\"favi-chip-content\">\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<button\r\n  (click)=\"$event.stopPropagation(); emitRemove()\"\r\n  *ngIf=\"removable\"\r\n  type=\"button\"\r\n  class=\"favi-button-no-styles favi-chip-remove\"\r\n  faviEffector>\r\n  <favi-icon>\r\n    close\r\n  </favi-icon>\r\n</button>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviChipComponent} from './favi-chip.component';\r\nimport {FaviIconModule} from '../favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../favi-effector/favi-effector.module';\r\nimport {FaviChipAvatarDirective} from './favi-chip-avatar.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviChipComponent,\r\n    FaviChipAvatarDirective\r\n  ],\r\n  exports: [\r\n    FaviChipComponent,\r\n    FaviChipAvatarDirective,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule\r\n  ]\r\n})\r\nexport class FaviChipModule { }\r\n","import {Component} from '@angular/core';\r\n\r\n/**\r\n * A simple container element.\r\n * It can contain anything inside.\r\n */\r\n@Component({\r\n  selector: 'favi-container',\r\n  templateUrl: './favi-container.component.html',\r\n  host: {\r\n    class: 'favi-container',\r\n  },\r\n})\r\nexport class FaviContainerComponent {\r\n\r\n}\r\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviContainerComponent } from './favi-container.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviContainerComponent\n  ],\n  exports: [\n    FaviContainerComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviContainerModule { }\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChildren,\r\n  HostBinding,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  QueryList,\r\n  ViewChildren\r\n} from '@angular/core';\r\nimport {NumberLike} from '../../../../../utils/type.util';\r\nimport {FaviOverlayRef} from '../../services/favi-overlay-ref';\r\nimport {RouterLink} from '@angular/router';\r\nimport {SubscriptionManager} from '../../../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * Component that need to be displayed as an overlay\r\n * should extend this class.\r\n *\r\n * Every routerLinks in the overlay will use 'replaceUrl' option when 'pushState' is enabled.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-overlay',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport abstract class FaviBaseOverlay<D = any, R = void> implements AfterViewInit {\r\n  /** QueryList of content children routerLinks to add replaceUrl options. */\r\n  @ViewChildren(RouterLink) routerLinkViewQueryList!: QueryList<RouterLink>;\r\n\r\n  /** QueryList of content children for routerLinks to add replaceUrl options. */\r\n  @ContentChildren(RouterLink, {descendants: true }) routerLinkContentQueryList!: QueryList<RouterLink>;\r\n\r\n  /**\r\n   * Width style property.\r\n   * By default, width is empty string to use stylesheet value.\r\n   */\r\n  private _width = '';\r\n\r\n  /**\r\n   * Height style property.\r\n   * By default, height is empty string to use stylesheet value.\r\n   */\r\n  private _height = '';\r\n\r\n  /**\r\n   * Max width style property.\r\n   * By default, max width is empty string to use stylesheet value.\r\n   */\r\n  private _maxWidth = '';\r\n\r\n  /**\r\n   * Max height style property.\r\n   * By default, max height is empty string to use stylesheet value.\r\n   */\r\n  private _maxHeight = '';\r\n\r\n  /**\r\n   * Top style property.\r\n   * By default, top is empty string to use stylesheet value.\r\n   */\r\n  private _top = '';\r\n\r\n  /**\r\n   * Right style property.\r\n   * By default, right is empty string to use stylesheet value.\r\n   */\r\n  private _right = '';\r\n\r\n  /**\r\n   * Bottom style property.\r\n   * By default, bottom is empty string to use stylesheet value.\r\n   */\r\n  private _bottom = '';\r\n\r\n  /**\r\n   * Left style property.\r\n   * By default, left is empty string to use stylesheet value.\r\n   */\r\n  private _left = '';\r\n\r\n  /** Subscription observer for changes of routerLink. */\r\n  private _routerLinkChangesObserver = this._subscriptionManager.createObserver();\r\n\r\n  protected constructor(\r\n    @Inject(FaviOverlayRef) protected _faviOverlayRef: FaviOverlayRef<D, R>,\r\n    protected _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Set width style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param width\r\n   */\r\n  @Input()\r\n  set width(width: NumberLike) {\r\n    this._width = typeof width === 'number' ? `${width}px` : width;\r\n  }\r\n\r\n  get width(): NumberLike {\r\n    return this._width;\r\n  }\r\n\r\n  /**\r\n   * Set height style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param height\r\n   */\r\n  @Input()\r\n  set height(height: NumberLike) {\r\n    this._height = typeof height === 'number' ? `${height}px` : height;\r\n  }\r\n\r\n  get height(): NumberLike {\r\n    return this._height;\r\n  }\r\n\r\n  /**\r\n   * Set max width style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param maxWidth\r\n   */\r\n  @Input()\r\n  set maxWidth(maxWidth: NumberLike) {\r\n    this._maxWidth = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth;\r\n  }\r\n\r\n  get maxWidth(): NumberLike {\r\n    return this._maxWidth;\r\n  }\r\n\r\n  /**\r\n   * Set max height style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param maxHeight\r\n   */\r\n  @Input()\r\n  set maxHeight(maxHeight: NumberLike) {\r\n    this._maxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\r\n  }\r\n\r\n  get maxHeight(): NumberLike {\r\n    return this._maxHeight;\r\n  }\r\n\r\n  /**\r\n   * Set top style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param top\r\n   */\r\n  @Input()\r\n  set top(top: NumberLike) {\r\n    this._top = typeof top === 'number' ? `${top}px` : top;\r\n  }\r\n\r\n  get top(): NumberLike {\r\n    return this._top;\r\n  }\r\n\r\n  /**\r\n   * Set right style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param right\r\n   */\r\n  @Input()\r\n  set right(right: NumberLike) {\r\n    this._right = typeof right === 'number' ? `${right}px` : right;\r\n  }\r\n\r\n  get right(): NumberLike {\r\n    return this._right;\r\n  }\r\n\r\n  /**\r\n   * Set bottom style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param bottom\r\n   */\r\n  @Input()\r\n  set bottom(bottom: NumberLike) {\r\n    this._bottom = typeof bottom === 'number' ? `${bottom}px` : bottom;\r\n  }\r\n\r\n  get bottom(): NumberLike {\r\n    return this._bottom;\r\n  }\r\n\r\n  /**\r\n   * Set left style for overlay.\r\n   * When number is set, it is considered as a pixel.\r\n   * When string is set, just use string value.\r\n   *\r\n   * Set empty string to use stylesheet value.\r\n   *\r\n   * @param left\r\n   */\r\n  @Input()\r\n  set left(left: NumberLike) {\r\n    this._left = typeof left === 'number' ? `${left}px` : left;\r\n  }\r\n\r\n  get left(): NumberLike {\r\n    return this._left;\r\n  }\r\n\r\n  @HostBinding('style.width')\r\n  get widthStyle(): string {\r\n    return this._width;\r\n  }\r\n\r\n  @HostBinding('style.height')\r\n  get heightStyle(): string {\r\n    return this._height;\r\n  }\r\n\r\n  @HostBinding('style.max-width')\r\n  get maxWidthStyle(): string {\r\n    return this._maxWidth;\r\n  }\r\n\r\n  @HostBinding('style.max-height')\r\n  get maxHeightStyle(): string {\r\n    return this._maxHeight;\r\n  }\r\n\r\n  @HostBinding('style.top')\r\n  get topStyle(): string {\r\n    return this._top;\r\n  }\r\n\r\n  @HostBinding('style.right')\r\n  get rightStyle(): string {\r\n    return this._right;\r\n  }\r\n\r\n  @HostBinding('style.bottom')\r\n  get bottomStyle(): string {\r\n    return this._bottom;\r\n  }\r\n\r\n  @HostBinding('style.left')\r\n  get leftStyle(): string {\r\n    return this._left;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._subscribeRouterLinkChanges();\r\n    this._enableReplaceUrlOfRouterLinks();\r\n  }\r\n\r\n  /**\r\n   * When 'keepOnResize' isn't set, overlay will be closed forcefully on window resize.\r\n   */\r\n  @HostListener('window:resize')\r\n  closeOnResize(): void {\r\n    if (!this._faviOverlayRef.keepOnResize) {\r\n      this.forceClose();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Close overlay with result.\r\n   *\r\n   * @param result\r\n   */\r\n  close(result?: R): void {\r\n    this._faviOverlayRef.close(result);\r\n  }\r\n\r\n  /**\r\n   * Force close overlay with result.\r\n   *\r\n   * @param result\r\n   */\r\n  forceClose(result?: R): void {\r\n    this._faviOverlayRef.forceClose(result);\r\n  }\r\n\r\n  /**\r\n   * When 'pushState' of overlay is enabled, 'replaceUrl' of every routerLinks will be enabled.\r\n   */\r\n  private _enableReplaceUrlOfRouterLinks(): void {\r\n    if (this._faviOverlayRef.pushState) {\r\n      [...this.routerLinkViewQueryList, ...this.routerLinkContentQueryList].forEach(routerLink => {\r\n        routerLink.replaceUrl = true;\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Subscribe changes of routerLinks to re-enable 'replaceUrl'.\r\n   */\r\n  private _subscribeRouterLinkChanges(): void {\r\n    const subs = [\r\n      this.routerLinkViewQueryList.changes.subscribe(() => this._enableReplaceUrlOfRouterLinks()),\r\n      this.routerLinkContentQueryList.changes.subscribe(() => this._enableReplaceUrlOfRouterLinks()),\r\n    ];\r\n\r\n    this._routerLinkChangesObserver.observe(...subs);\r\n  }\r\n}\r\n","import {Directive} from '@angular/core';\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\n\n/**\n * Implementation of theme class binder.\n */\n@Directive({\n  selector: '[faviTheme]'\n})\nexport class FaviThemeDirective extends ThemeClassBinder {\n  constructor() {\n    super();\n  }\n}\n","import {Component, HostBinding, Inject} from '@angular/core';\nimport {FaviBaseOverlay} from '../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\nimport {FaviOverlayRef} from '../../overlay/favi-overlay/services/favi-overlay-ref';\nimport {FaviContextMenuData} from './favi-context-menu-data';\nimport {FaviOverlayData} from '../../overlay/favi-overlay/services/favi-overlay-data';\nimport {FaviContextMenuItem} from './favi-context-menu-item';\nimport {fadeInOut} from '../../../animations/fade-in-out';\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\n\n/**\n * Context menu component.\n */\n@Component({\n  selector: 'favi-context-menu',\n  templateUrl: './favi-context-menu.component.html',\n  host: {\n    class: 'favi-context-menu',\n  },\n  animations: [\n    fadeInOut(),\n  ],\n})\nexport class FaviContextMenuComponent extends FaviBaseOverlay<FaviContextMenuData> {\n  // Width.\n  static width = 160;\n\n  // Min height.\n  static minHeight = 320;\n\n  // Vertical margin.\n  static verticalMargin = 16;\n\n  // Horizontal margin.\n  static horizontalMargin = 16;\n\n  // Bind fadeInOut animation.\n  @HostBinding('@fadeInOut') fadeInOutState = 'show';\n\n  constructor(\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<FaviContextMenuData>,\n    protected override _subscriptionManager: SubscriptionManager,\n    @Inject(FaviOverlayData) private _data: FaviContextMenuData,\n  ) {\n    super(_faviOverlayRef, _subscriptionManager);\n  }\n\n  /**\n   * Get context menu groups.\n   */\n  get groups(): FaviContextMenuItem[][] {\n    return this._data.groups;\n  }\n}\n","<div\n  *ngFor=\"let group of groups\"\n  class=\"favi-context-menu-group\">\n  <button\n    (click)=\"$event.stopPropagation(); item.onClick(); close()\"\n    *ngFor=\"let item of group\"\n    [theme]=\"item.theme || null\"\n    class=\"favi-button-no-styles favi-context-menu-item\"\n    type=\"button\"\n    faviTheme>\n    {{item.label}}\n  </button>\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviThemeDirective} from './favi-theme.directive';\n\n\n@NgModule({\n  declarations: [\n    FaviThemeDirective\n  ],\n  exports: [\n    FaviThemeDirective\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviThemeModule { }\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviContextMenuComponent} from './favi-context-menu.component';\nimport {FaviThemeModule} from '../favi-theme/favi-theme.module';\n\n\n@NgModule({\n  declarations: [\n    FaviContextMenuComponent\n  ],\n  imports: [\n    CommonModule,\n    FaviThemeModule\n  ],\n  exports: [\n    FaviContextMenuComponent\n  ]\n})\nexport class FaviContextMenuModule { }\n","import {Injectable} from '@angular/core';\nimport {FaviOverlayService} from '../../../overlay/favi-overlay/services/favi-overlay.service';\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\nimport {FaviContextMenuData} from '../favi-context-menu-data';\nimport {FaviContextMenuComponent} from '../favi-context-menu.component';\nimport {FaviOverlayOpenOptions} from '../../../overlay/favi-overlay/services/favi-overlay-open-options';\n\n/**\n * Service to open and close context menu.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class FaviContextMenuService {\n  constructor(\n    private _faviOverlayService: FaviOverlayService,\n  ) { }\n\n  /**\n   * Open context menu.\n   *\n   * @param host - Host element to calculate position.\n   * @param data\n   */\n  open(host: HTMLElement, data: FaviContextMenuData): FaviOverlayRef<FaviContextMenuData> {\n    const {\n      top,\n      bottom,\n      right,\n    } = host.getBoundingClientRect();\n\n    const {\n      width,\n      minHeight,\n      verticalMargin,\n      horizontalMargin,\n    } = FaviContextMenuComponent;\n\n    const options: FaviOverlayOpenOptions<FaviContextMenuData> = {\n      data,\n      left: right - width + horizontalMargin,\n    };\n\n    if (top - (verticalMargin * 2) - minHeight > 0) {\n      options.bottom = window.innerHeight - (top - verticalMargin);\n      options.maxHeight = top - (verticalMargin * 2);\n    } else {\n      options.top = bottom + verticalMargin;\n      options.maxHeight = window.innerHeight - (bottom + (verticalMargin * 2));\n    }\n\n    return this._faviOverlayService.open(FaviContextMenuComponent, options);\n  }\n}\n","import {EventManager} from '../common/event-manager/event-manager';\r\nimport {createRandomId} from './random.util';\r\nimport {Nullable} from './type.util';\r\n\r\n/**\r\n * Detected touch slide direction.\r\n */\r\nexport type TouchSlideDetectedDirection = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * Touch slide direction for options.\r\n */\r\nexport type TouchSlideDirection = 'horizontal' | 'vertical' | 'both';\r\n\r\n/**\r\n * Event to use detect touch slide.\r\n */\r\nexport type TouchSlideDetectEvent = 'mouse' | 'touch' | 'both';\r\n\r\n/**\r\n * Options to create touch slide detector.\r\n */\r\nexport interface TouchSlideDetectorOptions {\r\n  /** Target element to detect touch slide start. */\r\n  target: HTMLElement;\r\n\r\n  /** Directions to detect touch slide behavior. */\r\n  direction: TouchSlideDirection;\r\n\r\n  /** The threshold value in pixels that determines when the touch slide behavior starts. */\r\n  threshold: number;\r\n\r\n  /**\r\n   * Event to use detect touch slide.\r\n   * If the element has default behavior for 'touch' like scrollbar, only 'mouse' event will be needed.\r\n   */\r\n  event: TouchSlideDetectEvent;\r\n\r\n  /** Callback to handle on touch stated. */\r\n  onTouchStart?: (event: TouchStartEvent) => void;\r\n\r\n  /** Callback to handle on touch slide. */\r\n  onTouchSlide?: (event: TouchSlideEvent) => void;\r\n\r\n  /** Callback to handle on touch end. */\r\n  onTouchEnd?: () => void;\r\n}\r\n\r\n/**\r\n * Event on touchStart.\r\n */\r\nexport class TouchStartEvent {\r\n  /** Touched x position. */\r\n  x!: number;\r\n\r\n  /** Touched y position. */\r\n  y!: number;\r\n}\r\n\r\n/**\r\n * Event on touchSlide.\r\n */\r\nexport class TouchSlideEvent {\r\n  /** Detected touch direction. */\r\n  direction!: TouchSlideDetectedDirection;\r\n\r\n  /** Initial touch started x position. */\r\n  startX!: number;\r\n\r\n  /** Initial touch started y position. */\r\n  startY!: number;\r\n\r\n  /** Current x position. */\r\n  movedX!: number;\r\n\r\n  /** Current y position. */\r\n  movedY!: number;\r\n\r\n  /** Touch slide detected x position. */\r\n  detectedX!: number;\r\n\r\n  /** Touch slide detected y position. */\r\n  detectedY!: number;\r\n}\r\n\r\n/**\r\n * TouchSlideDetector can detect slide behavior by touch and mouse.\r\n * It detects horizontal or vertical slide behavior when touch moved distance exceeded threshold.\r\n */\r\nexport class TouchSlideDetector {\r\n  /** Unique id for an instance. */\r\n  private readonly _id = createRandomId(16);\r\n\r\n  /** Target element to detect touch slide start. */\r\n  private readonly _target: HTMLElement;\r\n\r\n  /** Directions to detect touch slide behavior. */\r\n  private readonly _direction: TouchSlideDirection;\r\n\r\n  /** The threshold value in pixels that determines when the touch slide behavior starts. */\r\n  private readonly _threshold: number;\r\n\r\n  /** Event to use detect touch slide. */\r\n  private readonly _event: TouchSlideDetectEvent;\r\n\r\n  /** Callback to handle on touch stated. */\r\n  private readonly _onTouchStart?: (event: TouchStartEvent) => void;\r\n\r\n  /** Callback to handle on touch slide. */\r\n  private readonly _onTouchSlide?: (event: TouchSlideEvent) => void;\r\n\r\n  /** Callback to handle on touch end. */\r\n  private readonly _onTouchEnd?: () => void;\r\n\r\n  /** Event name for 'mousedown' on target. */\r\n  private readonly _mouseDownEventName = `touch-slide-mousedown-${this._id}`;\r\n\r\n  /** Event name for 'mousemove' on target. */\r\n  private readonly _mouseMoveEventName = `touch-slide-mousemove-${this._id}`;\r\n\r\n  /** Event name for 'mouseup' on target. */\r\n  private readonly _mouseUpEventName = `touch-slide-mouseup-${this._id}`;\r\n\r\n  /** Event name for 'touchstart' on target. */\r\n  private readonly _touchStartEventName = `touch-slide-touchstart-${this._id}`;\r\n\r\n  /** Event name for 'touchmove' on window. */\r\n  private readonly _touchMoveEventName = `touch-slide-touchmove-${this._id}`;\r\n\r\n  /** Event name for 'touchcancel' on window. */\r\n  private readonly _touchCancelEventName = `touch-slide-touchcancel-${this._id}`;\r\n\r\n  /** Event name for 'touchend' on window. */\r\n  private readonly _touchEndEventName = `touch-slide-touchend-${this._id}`;\r\n\r\n  /** X position on touch start. */\r\n  private _startX = 0;\r\n\r\n  /** Y position on touch start. */\r\n  private _startY = 0;\r\n\r\n  /** X position on touch move. */\r\n  private _movedX = 0;\r\n\r\n  /** Y position on touch move. */\r\n  private _movedY = 0;\r\n\r\n  /** X position on touch slide detected. */\r\n  private _detectedX = 0;\r\n\r\n  /** Y position on touch slide detected. */\r\n  private _detectedY = 0;\r\n\r\n  /** Status of whether moved distance exceeded threshold. */\r\n  private _thresholdExceeded = false;\r\n\r\n  /** Detected slide direction. */\r\n  private _detectedDirection: Nullable<TouchSlideDetectedDirection> = null;\r\n\r\n  constructor(options: TouchSlideDetectorOptions) {\r\n    const {\r\n      target,\r\n      direction,\r\n      threshold,\r\n      event,\r\n      onTouchStart,\r\n      onTouchSlide,\r\n      onTouchEnd,\r\n    } = options;\r\n\r\n    this._target = target;\r\n    this._direction = direction;\r\n    this._threshold = threshold;\r\n    this._event = event;\r\n    this._onTouchStart = onTouchStart;\r\n    this._onTouchSlide = onTouchSlide;\r\n    this._onTouchEnd = onTouchEnd;\r\n\r\n    this._addTouchStartEvent();\r\n  }\r\n\r\n  /**\r\n   * Get status of whether 'mouse' event can be bound to target element or not.\r\n   */\r\n  private get canAddMouseEvent(): boolean {\r\n    return this._event === 'mouse' || this._event === 'both';\r\n  }\r\n\r\n  /**\r\n   * Get status of whether 'touch' event can be bound to target element or not.\r\n   */\r\n  private get canAddTouchEvent(): boolean {\r\n    return this._event === 'touch' || this._event === 'both';\r\n  }\r\n\r\n  /**\r\n   * Destroy instance.\r\n   */\r\n  destroy(): void {\r\n    EventManager.unregister(this._touchStartEventName);\r\n    EventManager.unregister(this._mouseDownEventName);\r\n    this._removeMoveDetectionEvents();\r\n  }\r\n\r\n  /**\r\n   * Add 'touchstart' and 'mousedown' event listener to target.\r\n   */\r\n  private _addTouchStartEvent(): void {\r\n    if (this.canAddTouchEvent) {\r\n      EventManager.register<HTMLElementEventMap>(this._touchStartEventName, this._target, 'touchstart', (event: TouchEvent) => {\r\n        if (event.touches.length > 0) {\r\n          const touch = event.touches.item(0)!;\r\n\r\n          this._startX = touch.pageX;\r\n          this._startY = touch.pageY;\r\n\r\n          this._callTouchStartHandler();\r\n\r\n          this._addTouchMoveEvent();\r\n          this._addTouchStopEvents();\r\n        }\r\n      });\r\n    }\r\n\r\n    if (this.canAddMouseEvent) {\r\n      EventManager.register<HTMLElementEventMap>(this._mouseDownEventName, this._target, 'mousedown', (event: MouseEvent) => {\r\n        this._startX = event.x;\r\n        this._startY = event.y;\r\n\r\n        this._callTouchStartHandler();\r\n\r\n        this._addTouchMoveEvent();\r\n        this._addTouchStopEvents();\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Add 'touchmove' and 'mousemove' event listener to window to detect moved distance.\r\n   */\r\n  private _addTouchMoveEvent(): void {\r\n    if (this.canAddTouchEvent) {\r\n      EventManager.register<WindowEventMap>(this._touchMoveEventName, window, 'touchmove', (event: TouchEvent) => {\r\n        if (event.touches.length > 0) {\r\n          const touch = event.touches.item(0)!;\r\n\r\n          this._movedX = touch.pageX;\r\n          this._movedY = touch.pageY;\r\n\r\n          this._checkThresholdExceeded();\r\n\r\n          if (this._thresholdExceeded) {\r\n            this._callTouchSlideHandler();\r\n          }\r\n        }\r\n      }, {\r\n        passive: false,\r\n      });\r\n    }\r\n\r\n    if (this.canAddMouseEvent) {\r\n      EventManager.register<WindowEventMap>(this._mouseMoveEventName, window, 'mousemove', (event: MouseEvent) => {\r\n        this._movedX = event.x;\r\n        this._movedY = event.y;\r\n\r\n        this._checkThresholdExceeded();\r\n\r\n        if (this._thresholdExceeded) {\r\n          this._callTouchSlideHandler();\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check whether moved distance exceeded threshold or not.\r\n   * It does nothing when threshold already exceeded.\r\n   */\r\n  private _checkThresholdExceeded(): void {\r\n    if (this._thresholdExceeded) {\r\n      return;\r\n    }\r\n\r\n    const distanceX = Math.abs(this._movedX - this._startX);\r\n    const distanceY = Math.abs(this._movedY - this._startY);\r\n\r\n    const horizontalDirectionDetected = distanceX >= this._threshold;\r\n    const verticalDirectionDetected = distanceY >= this._threshold;\r\n\r\n    switch (this._direction) {\r\n      case 'horizontal': {\r\n        this._thresholdExceeded = horizontalDirectionDetected;\r\n        this._detectedDirection = 'horizontal';\r\n        break;\r\n      }\r\n\r\n      case 'vertical': {\r\n        this._thresholdExceeded = verticalDirectionDetected;\r\n        this._detectedDirection = 'vertical';\r\n        break;\r\n      }\r\n\r\n      case 'both': {\r\n        if (horizontalDirectionDetected) {\r\n          this._thresholdExceeded = true;\r\n          this._detectedDirection = 'horizontal';\r\n        } else if (verticalDirectionDetected) {\r\n          this._thresholdExceeded = true;\r\n          this._detectedDirection = 'vertical';\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._thresholdExceeded) {\r\n      this._detectedX = this._movedX;\r\n      this._detectedY = this._movedY;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Add 'mouseup', 'touchcancel' and 'touchend' events to stop move detection.\r\n   */\r\n  private _addTouchStopEvents(): void {\r\n    if (this.canAddTouchEvent) {\r\n      EventManager.register<WindowEventMap>(this._touchCancelEventName, window, 'touchcancel', () => {\r\n        this._removeMoveDetectionEvents();\r\n        this._callTouchEndHandler();\r\n      });\r\n\r\n      EventManager.register<WindowEventMap>(this._touchEndEventName, window, 'touchend', () => {\r\n        this._removeMoveDetectionEvents();\r\n        this._callTouchEndHandler();\r\n      });\r\n    }\r\n\r\n    if (this.canAddMouseEvent) {\r\n      EventManager.register<WindowEventMap>(this._mouseUpEventName, window, 'mouseup', () => {\r\n        this._removeMoveDetectionEvents();\r\n        this._callTouchEndHandler();\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Remove move detection events.\r\n   */\r\n  private _removeMoveDetectionEvents(): void {\r\n    EventManager.unregister(this._touchMoveEventName);\r\n    EventManager.unregister(this._touchCancelEventName);\r\n    EventManager.unregister(this._touchEndEventName);\r\n    EventManager.unregister(this._mouseMoveEventName);\r\n    EventManager.unregister(this._mouseUpEventName);\r\n\r\n    this._resetTouchValues();\r\n  }\r\n\r\n  /**\r\n   * Call touch start event handler.\r\n   */\r\n  private _callTouchStartHandler(): void {\r\n    if (this._onTouchStart) {\r\n      this._onTouchStart({\r\n        x: this._startX,\r\n        y: this._startY,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Call touch slide event handler.\r\n   */\r\n  private _callTouchSlideHandler(): void {\r\n    if (this._onTouchSlide) {\r\n      this._onTouchSlide({\r\n        direction: this._detectedDirection!,\r\n        startX: this._startX,\r\n        startY: this._startY,\r\n        movedX: this._movedX,\r\n        movedY: this._movedY,\r\n        detectedX: this._detectedX,\r\n        detectedY: this._detectedY,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Call touch end event handler.\r\n   */\r\n  private _callTouchEndHandler(): void {\r\n    if (this._onTouchEnd) {\r\n      this._onTouchEnd();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Reset touch values.\r\n   */\r\n  private _resetTouchValues(): void {\r\n    this._thresholdExceeded = false;\r\n    this._detectedDirection = null;\r\n    this._startX = 0;\r\n    this._startY = 0;\r\n    this._movedX = 0;\r\n    this._movedY = 0;\r\n    this._detectedX = 0;\r\n    this._detectedY = 0;\r\n  }\r\n}\r\n","import {createRandomId} from './random.util';\r\nimport {Nullable} from './type.util';\r\n\r\n/**\r\n * Options to animate a value with various timing functions.\r\n */\r\nexport interface AnimateOptions<Value = number | Record<string, number>> {\r\n  /** Start value. */\r\n  start: Value;\r\n\r\n  /** End value. */\r\n  end: Value;\r\n\r\n  /** Animation duration in milliseconds. */\r\n  duration: number;\r\n\r\n  /** Callback function to handle for each frame. */\r\n  onUpdate: (value: Value) => void;\r\n\r\n  /** Timing function (easing function). Default is 'ease-out'. */\r\n  easingFunction?: (progress: number) => number;\r\n}\r\n\r\n/**\r\n * Animate a value with ease-out timing function.\r\n * It returns a function to cancel animation.\r\n *\r\n * Since it's a singleton, use 'getInstance()' method.\r\n */\r\nexport class FaviAnimationController {\r\n  /** Built in ease-out timing function. */\r\n  static easeOut = (progress: number) => 1 - Math.pow(1 - progress, 2);\r\n\r\n  /** Built in ease-out timing function. */\r\n  static easeIn = (progress: number) => Math.pow(progress, 2);\r\n\r\n  /** Built in ease-in-out timing function. */\r\n  static easeInOut = (progress: number) => progress < 0.5 ? 2 * Math.pow(progress, 2) : 1 - Math.pow(-2 * progress + 2, 2) / 2;\r\n\r\n  /** Built in linear timing function. */\r\n  static linear = (progress: number) => progress;\r\n\r\n  /**\r\n   * Get instance.\r\n   */\r\n  static getInstance(): FaviAnimationController {\r\n    if (!FaviAnimationController._instance) {\r\n      FaviAnimationController._instance = new FaviAnimationController();\r\n    }\r\n    return FaviAnimationController._instance;\r\n  }\r\n\r\n  /** Created instance for singleton. */\r\n  private static _instance: FaviAnimationController | null = null;\r\n\r\n  /** Running animations. */\r\n  private _animations: Map<string, AnimateOptions<any>> = new Map();\r\n\r\n  /** Animation frame id. */\r\n  private _animationFrameId: Nullable<number> = null;\r\n\r\n  /** Animation start time. */\r\n  private _startTime = 0;\r\n\r\n  /**\r\n   * Start an animation with provided options.\r\n   *\r\n   * @param options - Options to animate some value.\r\n   */\r\n  startAnimation<Value = number | Record<string, number>>(options: AnimateOptions<Value>): string {\r\n    const id = createRandomId(16);\r\n    this._animations.set(id, options);\r\n\r\n    if (this._animationFrameId === null) {\r\n      this._animationFrameId = requestAnimationFrame((currentTime) => {\r\n        this._startTime = currentTime;\r\n        this._updateAnimations(currentTime);\r\n      });\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  /**\r\n   * Stop animation by id.\r\n   *\r\n   * @param id - Unique id of animation that is created by 'startAnimation()' method.\r\n   */\r\n  stopAnimation(id: string): void {\r\n    this._animations.delete(id);\r\n  }\r\n\r\n  /**\r\n   * Cancel all running animations.\r\n   */\r\n  cancelAllAnimations(): void {\r\n    this._animations.clear();\r\n  }\r\n\r\n  /**\r\n   * Update animation by frame.\r\n   *\r\n   * @param currentTime - Current timestamp.\r\n   */\r\n  private _updateAnimations(currentTime: number): void {\r\n    const elapsedTime = currentTime - this._startTime;\r\n\r\n    this._animations.forEach((options, id) => {\r\n      const {\r\n        start,\r\n        end,\r\n        duration,\r\n        onUpdate,\r\n        easingFunction = FaviAnimationController.easeOut,\r\n      } = options;\r\n      const progress = Math.min(elapsedTime / duration, 1);\r\n      const easedProgress = easingFunction(progress);\r\n\r\n      if (typeof start === 'number' && typeof end === 'number') {\r\n        const animatedValue = start + (end - start) * easedProgress;\r\n\r\n        onUpdate(animatedValue);\r\n      } else {\r\n        const animatedValue: Record<string, number> = {};\r\n\r\n        Object.keys(start).forEach(key => {\r\n          const startValue = (start as Record<string, number>)[key];\r\n          const endValue = (end as Record<string, number>)[key];\r\n\r\n          animatedValue[key] = startValue + (endValue - startValue) * easedProgress;\r\n        });\r\n\r\n        onUpdate(animatedValue);\r\n      }\r\n\r\n      if (progress >= 1) {\r\n        this._animations.delete(id);\r\n      }\r\n    });\r\n\r\n    if (this._animations.size > 0) {\r\n      this._animationFrameId = requestAnimationFrame(this._updateAnimations.bind(this));\r\n    } else {\r\n      this._animationFrameId = null;\r\n    }\r\n  }\r\n}\r\n","import {AfterViewInit, Component, ElementRef, HostListener, Inject, OnDestroy, PLATFORM_ID} from '@angular/core';\nimport {Nullable} from '../../../utils/type.util';\nimport {TouchSlideDetector} from '../../../utils/touch-slide.util';\nimport {isPlatformBrowser} from '@angular/common';\nimport {FaviAnimationController} from '../../../utils/animation.util';\n\n/**\n * Interface of scroll distance from start to end.\n */\ninterface ScrollDistance {\n  /** Start position of scrolling. */\n  start: number;\n\n  /** End position of scrolling. */\n  end: number;\n}\n\n/**\n * Interface of scroll time checker from slide start to end to calculate velocity.\n */\ninterface ScrollTimeChecker {\n  /** Start time in milliseconds. */\n  start: number;\n\n  /** End time in milliseconds. */\n  end: number;\n}\n\n/**\n * Scroll container that allows horizontal scroll by dragging.\n */\n@Component({\n  selector: 'favi-horizontal-scroller',\n  templateUrl: './favi-horizontal-scroller.component.html',\n  host: {\n    class: 'favi-horizontal-scroller',\n  },\n})\nexport class FaviHorizontalScrollerComponent implements AfterViewInit, OnDestroy {\n  /** Touch slide controller. */\n  private _touchSlideDetector: Nullable<TouchSlideDetector> = null;\n\n  /** Initial scroll left position when touch started. */\n  private _initialScrollLeft = 0;\n\n  /** Distance to check scroll velocity. */\n  private _distance: ScrollDistance = {\n    start: 0,\n    end: 0,\n  };\n\n  /** Time checker of scroll start to end to calculate velocity. */\n  private _timer: ScrollTimeChecker = {\n    start: 0,\n    end: 0,\n  };\n\n  /** Distance checking status. */\n  private _checkingDistance = false;\n\n  /** Timeout timer to check velocity of scroll. */\n  private _distanceTimer: any;\n\n  /** Animation id. */\n  private _animationId: Nullable<string> = null;\n\n  /** Animation controller. */\n  private _animationController = FaviAnimationController.getInstance();\n\n  constructor(\n    @Inject(PLATFORM_ID) private _platformId: Object,\n    private _elementRef: ElementRef<HTMLElement>,\n  ) {\n  }\n\n  ngAfterViewInit(): void {\n    // Only works for browser platform.\n    if (!isPlatformBrowser(this._platformId)) {\n      return;\n    }\n\n    this._touchSlideDetector = new TouchSlideDetector({\n      target: this._elementRef.nativeElement,\n      direction: 'horizontal',\n      event: 'mouse',\n      threshold: 16,\n      onTouchStart: event => {\n        this._stopAnimation();\n\n        const {\n          x,\n        } = event;\n\n        this._initialScrollLeft = this._elementRef.nativeElement.scrollLeft;\n        this._distance.start = x;\n        this._distance.end = x;\n      },\n      onTouchSlide: event => {\n        clearTimeout(this._distanceTimer);\n\n        const {\n          detectedX,\n          startX,\n          movedX,\n        } = event;\n\n        if (!this._checkingDistance) {\n          this._distance.start = startX;\n          this._timer.start = Date.now();\n          this._checkingDistance = true;\n        }\n\n        this._elementRef.nativeElement.scrollLeft = this._initialScrollLeft - (movedX - detectedX);\n\n        this._distance.end = movedX;\n        this._distanceTimer = setTimeout(() => this._checkingDistance = false, 100);\n      },\n      onTouchEnd: () => {\n        clearTimeout(this._distanceTimer);\n\n        this._timer.end = Date.now();\n\n        const distance = this._distance.end - this._distance.start;\n        const duration = Math.max(this._timer.end - this._timer.start, 1);\n        const slidingDistance = distance / duration * 10;\n\n        this._resetProperties();\n\n        this._animationId = this._animationController.startAnimation({\n          start: slidingDistance,\n          end: 0,\n          duration: 2000,\n          onUpdate: value => {\n            this._elementRef.nativeElement.scrollLeft -= value;\n          },\n        });\n      },\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._touchSlideDetector?.destroy();\n    this._stopAnimation();\n  }\n\n  @HostListener('wheel')\n  onHostWheel(): void {\n    this._stopAnimation();\n  }\n\n  /**\n   * Reset all properties.\n   */\n  private _resetProperties(): void {\n    this._distance.start = 0;\n    this._distance.end = 0;\n    this._timer.start = 0;\n    this._timer.end = 0;\n    this._initialScrollLeft = 0;\n    this._checkingDistance = false;\n  }\n\n  /**\n   * Stop current running animation.\n   */\n  private _stopAnimation(): void {\n    if (this._animationId) {\n      this._animationController.stopAnimation(this._animationId);\n    }\n  }\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviHorizontalScrollerComponent} from './favi-horizontal-scroller.component';\n\n\n@NgModule({\n  declarations: [\n    FaviHorizontalScrollerComponent\n  ],\n  exports: [\n    FaviHorizontalScrollerComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviHorizontalScrollerModule { }\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  HostBinding,\r\n  HostListener,\r\n  Inject,\r\n  QueryList,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\nimport {FaviOverlayRef} from '../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviOverlayData} from '../../overlay/favi-overlay/services/favi-overlay-data';\r\nimport {FaviOptionsOverlayData} from './favi-options-overlay-data';\r\nimport {FaviOptionsOverlayPositions} from './favi-options-overlay-positions';\r\nimport {AvailableKey, disableEvent, isKey} from '../../../utils/event.util';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {FaviOptionComponent} from '../favi-option/favi-option.component';\r\nimport {CanUndefined, Nullable} from '../../../utils/type.util';\r\nimport {FaviBaseOverlay} from '../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\r\nimport {fadeInOut} from '../../../animations/fade-in-out';\r\n\r\n/**\r\n * Overlay to display options for select base component.\r\n * It has global styles which named _favi-options-overlay.scss.\r\n *\r\n * Basically, the position of options overlay should be calculated from the outer component.\r\n * But, if using 'null' value for 'position' property in FaviOptionsOverlayData,\r\n * no positionable values are allowed.\r\n */\r\n@Component({\r\n  selector: 'favi-options-overlay',\r\n  templateUrl: './favi-options-overlay.component.html',\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n  host: {\r\n    // Use favi-options-overlay class to apply global style.\r\n    class: 'favi-options-overlay',\r\n  },\r\n  animations: [\r\n    fadeInOut(),\r\n  ]\r\n})\r\nexport class FaviOptionsOverlayComponent extends FaviBaseOverlay implements AfterViewInit {\r\n  // Available max height of options overlay.\r\n  static maxHeight = 240;\r\n\r\n  // ViewContainerRef to render templateRef inside.\r\n  @ViewChild('container', {read: ViewContainerRef}) viewContainerRef!: ViewContainerRef;\r\n\r\n  // Bind 'fadeInOut' animation.\r\n  @HostBinding('@fadeInOut') fadeInOutState = 'show';\r\n\r\n  private _focusedIndex = -1;\r\n  private _optionsChangesObserver = this._subscriptionManager.createObserver();\r\n  private _optionsOnFocusObserver = this._subscriptionManager.createObserver();\r\n\r\n  constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<any>,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n    @Inject(FaviOverlayData) private _data: FaviOptionsOverlayData,\r\n  ) {\r\n    super(_faviOverlayRef, _subscriptionManager);\r\n  }\r\n\r\n  @HostBinding('class.favi-bottom-position')\r\n  get isBottomPosition(): boolean {\r\n    return this.position === 'bottom';\r\n  }\r\n\r\n  @HostBinding('class.favi-top-position')\r\n  get isTopPosition(): boolean {\r\n    return this.position === 'top';\r\n  }\r\n\r\n  @HostBinding('class.favi-center-position')\r\n  get isCenterPosition(): boolean {\r\n    return this.position === null;\r\n  }\r\n\r\n  get position(): Nullable<FaviOptionsOverlayPositions> {\r\n    return this._data.position;\r\n  }\r\n\r\n  get optionsTemplateRef(): TemplateRef<any> {\r\n    return this._data.optionsTemplateRef;\r\n  }\r\n\r\n  get optionsQueryList(): QueryList<FaviOptionComponent> {\r\n    return this._data.optionsQueryList;\r\n  }\r\n\r\n  /**\r\n   * Get last index of options.\r\n   */\r\n  get lastIndex(): number {\r\n    return this.optionsQueryList.length - 1;\r\n  }\r\n\r\n  get focusedOption(): CanUndefined<FaviOptionComponent> {\r\n    return this.optionsQueryList.find(optionRef => optionRef.focused);\r\n  }\r\n\r\n  override ngAfterViewInit(): void {\r\n    super.ngAfterViewInit();\r\n\r\n    this.viewContainerRef.createEmbeddedView(this.optionsTemplateRef);\r\n\r\n    this._setInitialFocusedIndex();\r\n\r\n    this._subscribeOptionsQueryListOnFocus();\r\n    this._subscribeOptionsQueryListChanges();\r\n  }\r\n\r\n  @HostListener('window:keydown', ['$event'])\r\n  onWindowKeyDown(event: KeyboardEvent): void {\r\n    if (isKey(event, AvailableKey.ArrowDown)) {\r\n      disableEvent(event);\r\n\r\n      if (this.lastIndex < this._focusedIndex + 1) {\r\n        this.setFocusedIndex(0, true);\r\n      } else {\r\n        this.setFocusedIndex(this._focusedIndex + 1, true);\r\n      }\r\n    } else if (isKey(event, AvailableKey.ArrowUp)) {\r\n      disableEvent(event);\r\n\r\n      if (this._focusedIndex - 1 < 0) {\r\n        this.setFocusedIndex(this.lastIndex, true);\r\n      } else {\r\n        this.setFocusedIndex(this._focusedIndex - 1, true);\r\n      }\r\n    } else if (isKey(event, AvailableKey.Enter)) {\r\n      disableEvent(event);\r\n\r\n      const {focusedOption} = this;\r\n\r\n      if (focusedOption) {\r\n        // Emit onClick emitter rather than calling close() method\r\n        // to handle differently from each component.\r\n        focusedOption.onClick.emit(focusedOption.value);\r\n      }\r\n    } else if (!isKey(event, AvailableKey.Escape)) {\r\n      // When other keys are triggered except Escape, ignore it.\r\n      disableEvent(event);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set _focusedIndex and scroll the container to focused option if needed.\r\n   *\r\n   * @param index\r\n   * @param scroll - Set it true to scroll the element into center of view.\r\n   */\r\n  setFocusedIndex(index: number, scroll = false): void {\r\n    this._focusedIndex = index\r\n    this._updateFocusedOptionRef(scroll);\r\n  }\r\n\r\n  /**\r\n   * Search selected option and set focus to it.\r\n   * Container will be scrolled to selected option.\r\n   */\r\n  private _setInitialFocusedIndex(): void {\r\n    this.optionsQueryList.forEach((optionRef, index) => {\r\n      if (optionRef.selected) {\r\n        this.setFocusedIndex(index, true);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Subscribe changes of options query to ensure listening\r\n   * changed options' event as well.\r\n   */\r\n  private _subscribeOptionsQueryListChanges(): void {\r\n    const sub = this.optionsQueryList\r\n      .changes\r\n      .subscribe(() => {\r\n        this._subscribeOptionsQueryListOnFocus();\r\n      });\r\n\r\n    this._optionsChangesObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Subscribe onFocus emitter for each option\r\n   * to close options overlay and update value.\r\n   */\r\n  private _subscribeOptionsQueryListOnFocus(): void {\r\n    const subs = this.optionsQueryList.map((optionRef, index) => {\r\n      return optionRef\r\n        .onFocus\r\n        .subscribe(() => {\r\n          // onFocus will be emitted when user's pointer is entered.\r\n          // In this case, no need to scroll.\r\n          this.setFocusedIndex(index);\r\n        });\r\n    });\r\n\r\n    this._optionsOnFocusObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Update focused state of FaviOptionComponent.\r\n   *\r\n   * @param scroll - Set it true to scroll the element into center of view.\r\n   */\r\n  private _updateFocusedOptionRef(scroll: boolean): void {\r\n    this.optionsQueryList.forEach((optionRef, index) => {\r\n      optionRef.focused = index === this._focusedIndex;\r\n\r\n      if (scroll && optionRef.focused) {\r\n        optionRef.elementRef.nativeElement.scrollIntoView({\r\n          block: 'center',\r\n        });\r\n      }\r\n    });\r\n  }\r\n}\r\n","<ng-container #container></ng-container>\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {CanUndefined} from '../../../utils/type.util';\r\n\r\n/**\r\n * Option item for select base component.\r\n */\r\n@Component({\r\n  selector: 'favi-option',\r\n  templateUrl: './favi-option.component.html',\r\n  styleUrls: ['./favi-option.component.scss'],\r\n  host: {\r\n    // When using this component inside the contenteditable,\r\n    // click event passthrough this component when 'tabindex' isn't set.\r\n    // That causes wrong event target from the window or document event.\r\n    tabindex: '-1',\r\n  }\r\n})\r\nexport class FaviOptionComponent implements AfterViewInit {\r\n  // Click event emitter.\r\n  @Output() onClick = new EventEmitter<any>();\r\n\r\n  // Focus event emitter.\r\n  @Output() onFocus = new EventEmitter();\r\n\r\n  // Ref to label element to get label of raw content.\r\n  // The label will be used to set the label of selected value in FaviSelectComponent.\r\n  @ViewChild('label', {read: ElementRef}) labelElementRef!: ElementRef<HTMLElement>;\r\n\r\n  // Focused state that is bound to focused class.\r\n  @HostBinding('class.favi-focused') focused = false;\r\n\r\n  // Selected state that is bound to selected class.\r\n  @HostBinding('class.favi-selected') selected = false;\r\n\r\n  // Representing value.\r\n  // When it's not set, label will replace the _value.\r\n  private _value: any;\r\n\r\n  // Label will be set after view initialized.\r\n  // Basically, label is innerText of label element.\r\n  private _label?: string;\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get current value or label.\r\n   * When value isn't set by setter, label will be returned.\r\n   */\r\n  get value(): any {\r\n    return this._value === undefined ? this.label : this._value;\r\n  }\r\n\r\n  /**\r\n   * Set value when actual value is different with label.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set value(value: any) {\r\n    this._value = value;\r\n  }\r\n\r\n  /**\r\n   * Get label of option component.\r\n   * It's equal to the displaying raw content.\r\n   */\r\n  get label(): CanUndefined<string> {\r\n    return this._label;\r\n  }\r\n\r\n  /**\r\n   * Set label of option component.\r\n   *\r\n   * @param label\r\n   */\r\n  @Input()\r\n  set label(label: CanUndefined<string>) {\r\n    this._label = label;\r\n  }\r\n\r\n  /**\r\n   * Get ref of host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this._label === undefined) {\r\n      this._label = this.labelElementRef.nativeElement.innerText.trim() || '';\r\n    }\r\n  }\r\n\r\n  @HostListener('click', ['$event'])\r\n  onHostClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.onClick.emit(this.value);\r\n  }\r\n\r\n  @HostListener('pointerenter')\r\n  onHostPointerEnter(): void {\r\n    this.onFocus.emit();\r\n  }\r\n}\r\n","<favi-icon *ngIf=\"selected\">\n  done\n</favi-icon>\n\n<div\n  #label\n  class=\"favi-label\">\n  <ng-content></ng-content>\n</div>\n","import { Directive } from '@angular/core';\n\n/**\n * A value replacer for FaviSelectComponent and FaviMultiSelectComponent.\n * To replace displaying selected value, use this directive in content of each component.\n */\n@Directive({\n  selector: '[faviSelectValue]'\n})\nexport class FaviSelectValueDirective {\n}\n","import {Component, HostBinding, Inject} from '@angular/core';\r\nimport {\r\n  FaviOverlayBackdropComponent\r\n} from '../../../overlay/favi-overlay/favi-overlay-backdrop/favi-overlay-backdrop.component';\r\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {fadeInOut} from '../../../../animations/fade-in-out';\r\nimport {Router} from '@angular/router';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * Backdrop for modal.\r\n * It will be provided to overlay service on modal open.\r\n */\r\n@Component({\r\n  selector: 'favi-modal-backdrop',\r\n  template: '',\r\n  host: {\r\n    class: 'favi-modal-backdrop',\r\n  },\r\n  animations: [\r\n    fadeInOut(),\r\n  ],\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviModalBackdropComponent extends FaviOverlayBackdropComponent {\r\n  // Bind 'fadeInOut' animation.\r\n  @HostBinding('@fadeInOut') fadeInOutState = 'show';\r\n\r\n  constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<any, any>,\r\n    protected override _router: Router,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(_faviOverlayRef, _router, _subscriptionManager);\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChild,\r\n  ContentChildren,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  Optional,\r\n  QueryList,\r\n  TemplateRef,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {Nullable} from '../../../../utils/type.util';\r\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviOptionsOverlayData} from '../../favi-options-overlay/favi-options-overlay-data';\r\nimport {FaviOptionsOverlayPositions} from '../../favi-options-overlay/favi-options-overlay-positions';\r\nimport {FaviOverlayOpenOptions} from '../../../overlay/favi-overlay/services/favi-overlay-open-options';\r\nimport {FaviOptionsOverlayComponent} from '../../favi-options-overlay/favi-options-overlay.component';\r\nimport {FaviOptionComponent} from '../../favi-option/favi-option.component';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {FaviOverlayService} from '../../../overlay/favi-overlay/services/favi-overlay.service';\r\nimport {FaviSelectValueDirective} from '../../favi-select-value/favi-select-value.directive';\r\nimport {disableEvent} from '../../../../utils/event.util';\r\nimport {CustomControl} from '../../../abstracts/custom-control/custom-control';\r\nimport {SubscriptionObserver} from '../../../../services/subscription-manager/subscription-observer';\r\nimport {FaviModalBackdropComponent} from '../../../modal/favi-modal/favi-modal-backdrop/favi-modal-backdrop.component';\r\n\r\n/**\r\n * Abstract class to implement select-like component.\r\n * In template, there should be ng-template with name of optionsTemplates.\r\n * optionsTemplates must contain ng-content to render options from the outside of component,\r\n * and optionsTemplates will be rendered in FaviOptionsOverlayComponent.\r\n */\r\n@Component({\r\n  template: '',\r\n})\r\nexport abstract class FaviBaseSelect extends CustomControl implements AfterViewInit {\r\n  @Input() placeholder = '';\r\n\r\n  // TemplateRef which contains options content.\r\n  // This will be rendered to FaviOptionsComponent overlay.\r\n  @ViewChild('optionsTemplate', {read: TemplateRef}) optionsTemplateRef!: TemplateRef<any>;\r\n\r\n  // Ref to alternative element that displays select value.\r\n  @ContentChild(FaviSelectValueDirective, {descendants: true}) faviSelectValueRef?: FaviSelectValueDirective;\r\n\r\n  // Ref to option components.\r\n  @ContentChildren(FaviOptionComponent, {descendants: true}) optionsQueryList?: QueryList<FaviOptionComponent>;\r\n\r\n  // Options opened state.\r\n  optionsOpened = false;\r\n\r\n  // It doesn't determine the options actual position, but only\r\n  // determine the appearance of select component by options position.\r\n  protected _position: FaviOptionsOverlayPositions = 'bottom';\r\n\r\n  // Keep _focused state as protected property to use getter and setter\r\n  // to bind favi-focused class with optionsOpened property as well.\r\n  protected _focused = false;\r\n\r\n  protected _optionsOverlayRef: Nullable<FaviOverlayRef<FaviOptionsOverlayData, any>> = null;\r\n  protected _optionsChangesObserver: SubscriptionObserver = this._subscriptionManager.createObserver();\r\n  protected _optionsOnClickObserver: SubscriptionObserver = this._subscriptionManager.createObserver();\r\n\r\n  protected constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected _elementRef: ElementRef<HTMLElement>,\r\n    protected _faviOverlayService: FaviOverlayService,\r\n    protected _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  set focused(focused: boolean) {\r\n    this._focused = focused;\r\n  }\r\n\r\n  /**\r\n   * To display focused appearance when options opened,\r\n   * favi-focused should be bound when optionsOpened is set to true.\r\n   */\r\n  @HostBinding('class.favi-focused')\r\n  get focused(): boolean {\r\n    return this._focused || this.optionsOpened;\r\n  }\r\n\r\n  /**\r\n   * Get and bind tabindex.\r\n   */\r\n  @HostBinding('attr.tabindex')\r\n  get tabIndex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._setOptionsQueryListSelected();\r\n    this._subscribeOptionsQueryListOnClick();\r\n    this._subscribeOptionsQueryListChanges();\r\n  }\r\n\r\n  /**\r\n   * Click event listener to open options.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('click', ['$event'])\r\n  onHostClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.openOptions();\r\n  }\r\n\r\n  /**\r\n   * Enter event listener to open options.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown.enter', ['$event'])\r\n  onHostEnterKeyDown(event: KeyboardEvent): void {\r\n    // Event shouldn't be propagated to prevent closing of overlay right after opening.\r\n    // The overlay also listening enter keydown to close it.\r\n    disableEvent(event);\r\n\r\n    this.openOptions();\r\n  }\r\n\r\n  /**\r\n   * Get ref of host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  /**\r\n   * Set focus to host element.\r\n   */\r\n  override focus(): void {\r\n    this.elementRef.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * Remove focus from host element.\r\n   */\r\n  override blur(): void {\r\n    this.elementRef.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * Listen focus event to set focused state.\r\n   */\r\n  @HostListener('focus')\r\n  onHostFocus(): void {\r\n    this.focused = true;\r\n  }\r\n\r\n  /**\r\n   * Listen blur event to remove focused state.\r\n   */\r\n  @HostListener('blur')\r\n  onHostBlur(): void {\r\n    this.focused = false;\r\n  }\r\n\r\n  /**\r\n   * Class to open options.\r\n   * Options should be opened as an overlay.\r\n   */\r\n  openOptions(): void {\r\n    if (!this.optionsQueryList || this.disabled) {\r\n      return;\r\n    }\r\n\r\n    this.blur(); // When opening options, blur from current component to make keyboard event work from overlay.\r\n\r\n    this._position = 'bottom'; // Reset to initial position.\r\n\r\n    const overlayOptions: Partial<FaviOverlayOpenOptions<FaviOptionsOverlayData>> = {}; // It should contain only positionable values.\r\n\r\n    // When having containingFormField, use domRect of containingFormField.\r\n    const domRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n    const {maxHeight} = FaviOptionsOverlayComponent;\r\n    const hasBottomSpace = domRect.bottom + maxHeight < window.innerHeight;\r\n\r\n    overlayOptions.onClose = (value?: any) => {\r\n      this._onOptionsClosed(value);\r\n\r\n      // When option is closed, mark component as dirty and touched to enable validation.\r\n      this.markAsDirty();\r\n      this.markAsTouched();\r\n\r\n      this.focus(); // Restore focus.\r\n      this.optionsOpened = false;\r\n    };\r\n\r\n    this.optionsOpened = true;\r\n\r\n    if (window.innerWidth < 768) {\r\n      this._optionsOverlayRef = this._faviOverlayService.open<FaviOptionsOverlayData>(FaviOptionsOverlayComponent, {\r\n        data: {\r\n          position: null,\r\n          optionsTemplateRef: this.optionsTemplateRef,\r\n          optionsQueryList: this.optionsQueryList,\r\n        },\r\n        backdrop: FaviModalBackdropComponent,\r\n        ...overlayOptions,\r\n      });\r\n    } else {\r\n      overlayOptions.left = domRect.left;\r\n      overlayOptions.width = domRect.width;\r\n\r\n      if (hasBottomSpace) {\r\n        overlayOptions.top = domRect.bottom;\r\n      } else {\r\n        this._position = 'top';\r\n\r\n        overlayOptions.bottom = window.innerHeight - domRect.top;\r\n      }\r\n\r\n      this._optionsOverlayRef = this._faviOverlayService.open<FaviOptionsOverlayData>(FaviOptionsOverlayComponent, {\r\n        data: {\r\n          position: this._position, // Inherit position.\r\n          optionsTemplateRef: this.optionsTemplateRef,\r\n          optionsQueryList: this.optionsQueryList,\r\n        },\r\n        ...overlayOptions,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Subscribe changes of options query to ensure listening\r\n   * changed options' event as well.\r\n   */\r\n  protected _subscribeOptionsQueryListChanges(): void {\r\n    if (!this.optionsQueryList) {\r\n      return;\r\n    }\r\n\r\n    const sub = this.optionsQueryList\r\n      .changes\r\n      .subscribe(() => {\r\n        this._setOptionsQueryListSelected();\r\n        this._subscribeOptionsQueryListOnClick();\r\n      });\r\n\r\n    this._optionsChangesObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Implement this method to listen onClick event from option.\r\n   */\r\n  protected abstract _subscribeOptionsQueryListOnClick(): void;\r\n\r\n  /**\r\n   * Implement this method to update selected property of options.\r\n   */\r\n  protected abstract _setOptionsQueryListSelected(): void;\r\n\r\n  /**\r\n   * Implement this method to handle after options overlay closed with value.\r\n   *\r\n   * @param value\r\n   */\r\n  protected abstract _onOptionsClosed(value?: any): void;\r\n}\r\n","import {Component, ElementRef, OnDestroy, Optional} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {FaviBaseSelect} from '../abstracts/favi-base-select/favi-base-select';\r\nimport {FaviOverlayService} from '../../overlay/favi-overlay/services/favi-overlay.service';\r\nimport {CanUndefined, Nullable} from '../../../utils/type.util';\r\nimport {FaviOptionComponent} from '../favi-option/favi-option.component';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * Select component to replace select element of browser.\r\n * Styles should be managed by _favi-select.scss.\r\n */\r\n@Component({\r\n  selector: 'favi-select',\r\n  templateUrl: './favi-select.component.html',\r\n  host: {\r\n    // Bind favi-input class to treat as input element.\r\n    class: 'favi-input favi-select',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviSelectComponent extends FaviBaseSelect implements OnDestroy {\r\n  // Selected value.\r\n  private _value: Nullable<any> = null;\r\n\r\n  // Timeout timer to updated 'selected' property of option items\r\n  // by preventing NG0100 error.\r\n  private _selectedUpdateTimer: any;\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n    protected override _faviOverlayService: FaviOverlayService,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(ngControl, _elementRef, _faviOverlayService, _subscriptionManager);\r\n  }\r\n\r\n  get selectedOption(): CanUndefined<FaviOptionComponent> {\r\n    return this.optionsQueryList?.find(optionRef => optionRef.selected);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearInterval(this._selectedUpdateTimer);\r\n  }\r\n\r\n  override writeValue(obj: any): void {\r\n    this._value = obj;\r\n    this._setOptionsQueryListSelected();\r\n  }\r\n\r\n  /**\r\n   * Subscribe onClick emitter for each option\r\n   * to close options overlay and update value.\r\n   */\r\n  protected override _subscribeOptionsQueryListOnClick(): void {\r\n    if (!this.optionsQueryList) {\r\n      return;\r\n    }\r\n\r\n    const subs = this.optionsQueryList.map(optionRef => {\r\n      return optionRef\r\n        .onClick\r\n        .subscribe(value => this._optionsOverlayRef?.close(value));\r\n    });\r\n\r\n    this._optionsOnClickObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Set selected status of each option.\r\n   * The selected property will be true when value of option is equal to _value.\r\n   */\r\n  protected override _setOptionsQueryListSelected(): void {\r\n    clearTimeout(this._selectedUpdateTimer);\r\n\r\n    this._selectedUpdateTimer = setTimeout(() => {\r\n      this.optionsQueryList?.forEach(optionRef => {\r\n        optionRef.selected = optionRef.value === this._value;\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Update value when options overlay closed.\r\n   *\r\n   * @param value\r\n   */\r\n  protected override _onOptionsClosed(value?: any): void {\r\n    if (value !== undefined) {\r\n      this.setValue(value);\r\n      this.writeValue(value); // Write value as well to update value even model isn't bound.\r\n    }\r\n  }\r\n}\r\n","<div class=\"favi-input-inner\">\r\n  <div class=\"favi-pseudo-input\">\r\n    <ng-container *ngIf=\"selectedOption; else placeholderTemplate\">\r\n      <ng-content select=\"[faviSelectValue]\"></ng-content>\r\n\r\n      <ng-container *ngIf=\"!faviSelectValueRef\">\r\n        {{selectedOption.label}}\r\n      </ng-container>\r\n    </ng-container>\r\n\r\n    <ng-template #placeholderTemplate>\r\n      <div class=\"favi-placeholder\">\r\n        {{placeholder}}\r\n      </div>\r\n    </ng-template>\r\n  </div>\r\n\r\n  <favi-icon>\r\n    arrow_drop_down\r\n  </favi-icon>\r\n</div>\r\n\r\n<div class=\"favi-input-bottom-line\"></div>\r\n<div class=\"favi-input-bottom-line favi-activated\"></div>\r\n\r\n<ng-template #optionsTemplate>\r\n  <ng-content></ng-content>\r\n</ng-template>\r\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\r\nimport {BooleanAttribute, NumberLike} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute, toInteger} from '../../../utils/convert.util';\r\n\r\n/**\r\n * A paginator component.\r\n * User can click arrows to move page by 1.\r\n * User can select pages to move specific page.\r\n * After moved to page with select, the value of select will be reset.\r\n */\r\n@Component({\r\n  selector: 'favi-paginator',\r\n  templateUrl: './favi-paginator.component.html',\r\n  host: {\r\n    class: 'favi-paginator',\r\n  },\r\n})\r\nexport class FaviPaginatorComponent implements OnInit, OnChanges {\r\n  // Page change emitter.\r\n  @Output() pageChange = new EventEmitter<number>();\r\n\r\n  // Size change emitter.\r\n  @Output() sizeChange = new EventEmitter<number>();\r\n\r\n  // Range start number for current page.\r\n  start = 0;\r\n\r\n  // Range end number for current page.\r\n  end = 0;\r\n\r\n  // State of having previous page.\r\n  hasPrevious = false;\r\n\r\n  // State of having next page.\r\n  hasNext = false;\r\n\r\n  // Page options.\r\n  pageOptions: number[] = [];\r\n\r\n  // Current page.\r\n  private _page = 1;\r\n\r\n  // Displaying size.\r\n  private _size = 10;\r\n\r\n  // The number of total items.\r\n  private _total = 0;\r\n\r\n  // Total page number.\r\n  private _totalPages = 0;\r\n\r\n  // Available size per page options.\r\n  private _sizes: number[] = [];\r\n\r\n  // State of using page control.\r\n  private _usePageControl = false;\r\n\r\n  /**\r\n   * Get current page.\r\n   */\r\n  get page(): number {\r\n    return this._page;\r\n  }\r\n\r\n  /**\r\n   * Set current page.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set page(value: NumberLike) {\r\n    this._page = toInteger(value);\r\n  }\r\n\r\n  /**\r\n   * Get displaying size.\r\n   */\r\n  get size(): number {\r\n    return this._size;\r\n  }\r\n\r\n  /**\r\n   * Set displaying size.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set size(value: NumberLike) {\r\n    this._size = toInteger(value);\r\n  }\r\n\r\n  /**\r\n   * Get the number of total items.\r\n   */\r\n  get total(): number {\r\n    return this._total;\r\n  }\r\n\r\n  /**\r\n   * Set the number of total items.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set total(value: NumberLike) {\r\n    this._total = toInteger(value);\r\n  }\r\n\r\n  /**\r\n   * Get size per page options.\r\n   */\r\n  get sizes(): number[] {\r\n    return this._sizes;\r\n  }\r\n\r\n  /**\r\n   * Set size per page options.\r\n   * When there are some items in 'sizes', size control will be displayed.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set sizes(value: number[]) {\r\n    this._sizes = value;\r\n  }\r\n\r\n  /**\r\n   * Get state of using page control.\r\n   */\r\n  @Input()\r\n  get usePageControl(): boolean {\r\n    return this._usePageControl;\r\n  }\r\n\r\n  /**\r\n   * Set state of using page control.\r\n   *\r\n   * @param value\r\n   */\r\n  set usePageControl(value: BooleanAttribute) {\r\n    this._usePageControl = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * Get state of having size options.\r\n   */\r\n  get hasSizeOptions(): boolean {\r\n    return this.sizes.length > 0;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this._calculateRange();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const {\r\n      page,\r\n      size,\r\n      total,\r\n    } = changes;\r\n\r\n    // Redraw when one of page, size, total attribute changed.\r\n    if (page || size || total) {\r\n      this._calculateRange();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Emit 'pageChange' with provided 'page'.\r\n   *\r\n   * @param page\r\n   */\r\n  toPage(page: number): void {\r\n    this.pageChange.emit(page);\r\n  }\r\n\r\n  /**\r\n   * Emit 'sizeChange' emitter with provided 'size' value.\r\n   * After size has changed, 'page' should be changed to 1 from the outside.\r\n   *\r\n   * @param size\r\n   */\r\n  changeSize(size: number): void {\r\n    this.sizeChange.emit(size);\r\n  }\r\n\r\n  /**\r\n   * Calculate range for current page.\r\n   */\r\n  private _calculateRange(): void {\r\n    this.start = Math.min((this.page - 1) * this.size + 1, this.total);\r\n    this.end = Math.min(this.page * this.size, this.total);\r\n    this._totalPages = Math.ceil(this.total / this.size);\r\n\r\n    this.hasPrevious = this.page > 1;\r\n    this.hasNext = this.page < this._totalPages;\r\n\r\n    this._createPageOptions();\r\n  }\r\n\r\n  /**\r\n   * Create page options.\r\n   */\r\n  private _createPageOptions(): void {\r\n    this.pageOptions = [];\r\n\r\n    for (let i = 1; i <= this._totalPages; i++) {\r\n      this.pageOptions.push(i);\r\n    }\r\n  }\r\n}\r\n","<div\r\n  *ngIf=\"usePageControl || hasSizeOptions\"\r\n  class=\"favi-paginator-controls\">\r\n  <div\r\n    *ngIf=\"hasSizeOptions\"\r\n    class=\"favi-paginator-control\">\r\n    <label>\r\n      Items per page\r\n    </label>\r\n\r\n    <favi-select\r\n      (ngModelChange)=\"changeSize($event)\"\r\n      [ngModel]=\"size\"\r\n      placeholder=\"Size\">\r\n      <favi-option\r\n        *ngFor=\"let option of sizes\"\r\n        [value]=\"option\">\r\n        {{option}}\r\n      </favi-option>\r\n    </favi-select>\r\n  </div>\r\n\r\n  <div\r\n    *ngIf=\"usePageControl\"\r\n    class=\"favi-paginator-control\">\r\n    <label>\r\n      Go to\r\n    </label>\r\n\r\n    <favi-select\r\n      (ngModelChange)=\"toPage($event)\"\r\n      [ngModel]=\"page\"\r\n      placeholder=\"Page\">\r\n      <favi-option\r\n        *ngFor=\"let option of pageOptions\"\r\n        [value]=\"option\">\r\n        {{option}}\r\n      </favi-option>\r\n    </favi-select>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"favi-paginator-range\">\r\n  <div class=\"favi-paginator-label\">\r\n    {{start}} - {{end}} / {{total}}\r\n  </div>\r\n\r\n  <div class=\"favi-paginator-buttons\">\r\n    <button\r\n      (click)=\"toPage(page - 1)\"\r\n      [disabled]=\"!hasPrevious\"\r\n      class=\"favi-button-no-styles\"\r\n      type=\"button\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_left\r\n      </favi-icon>\r\n    </button>\r\n\r\n    <button\r\n      (click)=\"toPage(page + 1)\"\r\n      [disabled]=\"!hasNext\"\r\n      class=\"favi-button-no-styles\"\r\n      type=\"button\"\r\n      faviEffector>\r\n      <favi-icon>\r\n        chevron_right\r\n      </favi-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviOptionsOverlayComponent } from './favi-options-overlay.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviOptionsOverlayComponent\n  ],\n  exports: [\n    FaviOptionsOverlayComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviOptionsOverlayModule { }\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviSelectComponent} from './favi-select.component';\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\nimport {FaviOptionsOverlayModule} from '../favi-options-overlay/favi-options-overlay.module';\n\n\n@NgModule({\n  declarations: [\n    FaviSelectComponent\n  ],\n  exports: [\n    FaviSelectComponent\n  ],\n  imports: [\n    CommonModule,\n    FaviIconModule,\n    FaviOptionsOverlayModule,\n  ]\n})\nexport class FaviSelectModule { }\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviOptionComponent} from './favi-option.component';\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\n\n\n@NgModule({\n  declarations: [\n    FaviOptionComponent\n  ],\n  exports: [\n    FaviOptionComponent\n  ],\n  imports: [\n    CommonModule,\n    FaviIconModule\n  ]\n})\nexport class FaviOptionModule { }\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviPaginatorComponent} from './favi-paginator.component';\r\nimport {FaviSelectModule} from '../../controls/favi-select/favi-select.module';\r\nimport {FaviEffectorModule} from '../favi-effector/favi-effector.module';\r\nimport {FaviIconModule} from '../favi-icon/favi-icon.module';\r\nimport {FaviOptionModule} from '../../controls/favi-option/favi-option.module';\r\nimport {FormsModule} from '@angular/forms';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviPaginatorComponent\r\n  ],\r\n  exports: [\r\n    FaviPaginatorComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviSelectModule,\r\n    FaviEffectorModule,\r\n    FaviIconModule,\r\n    FaviOptionModule,\r\n    FormsModule\r\n  ]\r\n})\r\nexport class FaviPaginatorModule { }\r\n","import {Component, Input} from '@angular/core';\r\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {NumberLike} from '../../../utils/type.util';\r\nimport {toFloat} from '../../../utils/convert.util';\r\n\r\n/**\r\n * A progress bar to display 0% to 100% progress status.\r\n */\r\n@Component({\r\n  selector: 'favi-progress-bar',\r\n  templateUrl: './favi-progress-bar.component.html',\r\n  host: {\r\n    class: 'favi-progress-bar',\r\n  }\r\n})\r\nexport class FaviProgressBarComponent extends ThemeClassBinder {\r\n  // Progress value in percentage.\r\n  private _value = 0;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Get percentage value.\r\n   */\r\n  get value(): number {\r\n    return this._value;\r\n  }\r\n\r\n  /**\r\n   * Set percentage value.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set value(value: NumberLike) {\r\n    this._value = toFloat(value);\r\n  }\r\n}\r\n","<div\r\n  [style.width]=\"value + '%'\"\r\n  class=\"favi-progress-thumb\"></div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviProgressBarComponent} from './favi-progress-bar.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviProgressBarComponent\r\n  ],\r\n  exports: [\r\n    FaviProgressBarComponent\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviProgressBarModule { }\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  Inject,\r\n  Input,\r\n  OnChanges,\r\n  PLATFORM_ID,\r\n  SimpleChanges,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {NumberLike} from '../../../utils/type.util';\r\nimport {toFloat} from '../../../utils/convert.util';\r\nimport {ThemeClassBinder} from '../../abstracts/theme-class-binder/theme-class-binder';\r\nimport {isPlatformBrowser} from '@angular/common';\r\n\r\n/**\r\n * Spinner component.\r\n */\r\n@Component({\r\n  selector: 'favi-spinner',\r\n  templateUrl: './favi-spinner.component.html',\r\n  styleUrls: ['./favi-spinner.component.scss']\r\n})\r\nexport class FaviSpinnerComponent extends ThemeClassBinder implements AfterViewInit, OnChanges {\r\n  // Ref to svg element.\r\n  @ViewChild('svgRef', {read: ElementRef}) svgRef!: ElementRef<SVGElement>;\r\n\r\n  // Ref to circle element.\r\n  @ViewChild('circleRef', {read: ElementRef}) circleRef!: ElementRef<SVGCircleElement>;\r\n\r\n  // View initialized state.\r\n  private _viewInit = false;\r\n\r\n  // Spinner size.\r\n  // It's different with host element size.\r\n  private _size: number = 24;\r\n\r\n  // Stroke width of spinner.\r\n  private _strokeWidth: number = 2;\r\n\r\n  // Animation duration for rotating in ms.\r\n  private _rotateDuration = 2000;\r\n\r\n  // Animation duration for stroke in ms.\r\n  private _strokeDuration = 1500;\r\n\r\n  constructor(\r\n    @Inject(PLATFORM_ID) private _platformId: Object,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Set spinner size.\r\n   * It will be bound to 'width' and' height'.\r\n   *\r\n   * @param size - NumberLike size value.\r\n   */\r\n  @Input()\r\n  set size(size: NumberLike) {\r\n    this._size = toFloat(size);\r\n  }\r\n\r\n  get size(): NumberLike {\r\n    return this._size;\r\n  }\r\n\r\n  /**\r\n   * Set stroke width of spinner.\r\n   *\r\n   * @param value - NumberLike value.\r\n   */\r\n  @Input()\r\n  set strokeWidth(value: NumberLike) {\r\n    this._strokeWidth = toFloat(value);\r\n  }\r\n\r\n  get strokeWidth(): NumberLike {\r\n    return this._strokeWidth;\r\n  }\r\n\r\n  /**\r\n   * Set animation duration for rotating in ms.\r\n   *\r\n   * @param value - NumberLike value.\r\n   */\r\n  @Input()\r\n  set rotateDuration(value: NumberLike) {\r\n    this._rotateDuration = toFloat(value);\r\n  }\r\n\r\n  get rotateDuration(): NumberLike {\r\n    return this._rotateDuration;\r\n  }\r\n\r\n  /**\r\n   * Set animation duration for stroke in ms.\r\n   *\r\n   * @param value - NumberLike value.\r\n   */\r\n  @Input()\r\n  set strokeDuration(value: NumberLike) {\r\n    this._strokeDuration = toFloat(value);\r\n  }\r\n\r\n  get strokeDuration(): NumberLike {\r\n    return this._strokeDuration;\r\n  }\r\n\r\n  /**\r\n   * Get and bind width style.\r\n   */\r\n  @HostBinding('style.width')\r\n  get width(): string {\r\n    return `${this.size}px`;\r\n  }\r\n\r\n  /**\r\n   * Get and bind height style.\r\n   */\r\n  @HostBinding('style.height')\r\n  get height(): string {\r\n    return `${this.size}px`;\r\n  }\r\n\r\n  /**\r\n   * Get value for stroke-width style.\r\n   */\r\n  get strokeWidthValue(): string {\r\n    return `${this._strokeWidth}px`;\r\n  }\r\n\r\n  /**\r\n   * Get value for radius attribute of circle.\r\n   */\r\n  get radius(): number {\r\n    return (this._size - (this._strokeWidth * 2)) / 2;\r\n  }\r\n\r\n  /**\r\n   * Get center of circle.\r\n   */\r\n  get center(): number {\r\n    return this._size / 2;\r\n  }\r\n\r\n  /**\r\n   * Get value for viewBox attribute.\r\n   */\r\n  get viewBoxValue(): string {\r\n    return `${this.center} ${this.center} ${this.size} ${this.size}`;\r\n  }\r\n\r\n  /**\r\n   * 10 multiplied radius.\r\n   */\r\n  get dashArray(): number {\r\n    return this.radius * 10;\r\n  }\r\n\r\n  /**\r\n   * Get value for stroke-dasharray style.\r\n   */\r\n  get strokeDashArrayValue(): string {\r\n    return `1, ${this.dashArray}`;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    // Make spinner to be work only for browser to prevent server-side error.\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._viewInit = true;\r\n      this._animateSpinner();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const {size, strokeWidth} = changes;\r\n\r\n    if (\r\n      (size && size.previousValue !== size.currentValue)\r\n      && (strokeWidth && strokeWidth.previousValue !== strokeWidth.currentValue)\r\n    ) {\r\n      // Re-calculate animation.\r\n      this._animateSpinner();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Animate the spinner.\r\n   */\r\n  private _animateSpinner(): void {\r\n    console.debug('Animate spinner');\r\n\r\n    if (!this._viewInit) {\r\n      return;\r\n    }\r\n\r\n    const {dashArray} = this;\r\n\r\n    this.svgRef.nativeElement.animate([\r\n      {\r\n        transform: `rotate(360deg)`\r\n      }\r\n    ], {\r\n      duration: this.rotateDuration,\r\n      iterations: Infinity,\r\n    });\r\n\r\n    this.circleRef.nativeElement.animate([\r\n      {\r\n        strokeDasharray: this.strokeDashArrayValue,\r\n        strokeDashoffset: '0',\r\n      },\r\n      {\r\n        strokeDasharray: `${dashArray * .45}, ${dashArray}`,\r\n        strokeDashoffset: `-${dashArray * .175}px`,\r\n      },\r\n      {\r\n        strokeDashoffset: `-${dashArray * .6}px`,\r\n      }\r\n    ], {\r\n      duration: this.strokeDuration,\r\n      easing: 'ease-in-out',\r\n      iterations: Infinity,\r\n    });\r\n  }\r\n}\r\n","<svg\n  #svgRef\n  [attr.viewBox]=\"viewBoxValue\">\n  <circle\n    #circleRef\n    [style.stroke-dasharray]=\"strokeDashArrayValue\"\n    [style.stroke-width]=\"strokeWidthValue\"\n    [attr.r]=\"radius\"\n    [attr.cy]=\"size\"\n    [attr.cx]=\"size\"></circle>\n</svg>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviSpinnerComponent} from './favi-spinner.component';\n\n\n@NgModule({\n  declarations: [\n    FaviSpinnerComponent\n  ],\n  exports: [\n    FaviSpinnerComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviSpinnerModule { }\n","import {Component, ElementRef, HostBinding, Input, OnInit, Optional} from '@angular/core';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {FaviTabItemLike} from '../../abstracts/favi-tab-item-like/favi-tab-item-like';\r\nimport {RouterLinkActive} from '@angular/router';\r\nimport {InputRequiredError} from '../../../../errors/input-required-error';\r\nimport {BooleanAttribute, NumberLike} from '../../../../utils/type.util';\r\nimport {convertBooleanAttribute, toInteger} from '../../../../utils/convert.util';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\n\r\n/**\r\n * A step item to display step.\r\n * It can be used with RouterLink and RouterLinkActive to change the route of subpage.\r\n */\r\n@Component({\r\n  selector: 'favi-step-item',\r\n  templateUrl: './favi-step-item.component.html',\r\n  host: {\r\n    class: 'favi-step-item favi-effector-container',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n  animations: [\r\n    trigger('expand', [\r\n      state('collapse', style({\r\n        width: '0',\r\n        paddingRight: 0,\r\n        marginLeft: 0,\r\n      })),\r\n      state('expand', style({\r\n        width: '*',\r\n        paddingRight: 16,\r\n        marginLeft: 8,\r\n      })),\r\n      transition('collapse <=> expand', animate('.2s')),\r\n    ]),\r\n  ],\r\n})\r\nexport class FaviStepItemComponent extends FaviTabItemLike implements OnInit {\r\n  // Step index.\r\n  // It is required.\r\n  private _index!: number;\r\n\r\n  // Step done state.\r\n  private _done = false;\r\n\r\n  constructor(\r\n    @Optional() public override routerLinkActive: RouterLinkActive,\r\n    public override elementRef: ElementRef<HTMLElement>,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(routerLinkActive, elementRef, _subscriptionManager);\r\n  }\r\n\r\n  /**\r\n   * Get step active state and bind class.\r\n   */\r\n  @HostBinding('class.favi-step-item-active')\r\n  override get isActive(): boolean {\r\n    return super.isActive;\r\n  }\r\n\r\n  /**\r\n   * Set step active state.\r\n   *\r\n   * @param value\r\n   */\r\n  override set isActive(value: boolean) {\r\n    super.isActive = value;\r\n  }\r\n\r\n  /**\r\n   * Get step index.\r\n   */\r\n  get index(): number {\r\n    return this._index;\r\n  }\r\n\r\n  /**\r\n   * Set step index.\r\n   * It is required.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set index(value: NumberLike) {\r\n    this._index = toInteger(value);\r\n  }\r\n\r\n  /**\r\n   * Get done state and bind favi-step-done class.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.favi-step-done')\r\n  get done(): boolean {\r\n    return this._done;\r\n  }\r\n\r\n  /**\r\n   * Set done state when step is done.\r\n   *\r\n   * @param value\r\n   */\r\n  set done(value: BooleanAttribute) {\r\n    this._done = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * Get expand state for label.\r\n   */\r\n  get expandState(): string {\r\n    return this.isActive ? 'expand' : 'collapse';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.index === undefined || this.index === null) {\r\n      throw new InputRequiredError('index');\r\n    }\r\n  }\r\n}\r\n","<div\r\n  [class.favi-primary-theme]=\"isActive || done\"\r\n  class=\"favi-step-ball favi-effector\">\r\n  <ng-container *ngIf=\"done; else stepIndex\">\r\n    <favi-icon>\r\n      done\r\n    </favi-icon>\r\n  </ng-container>\r\n\r\n  <ng-template #stepIndex>\r\n    {{index}}\r\n  </ng-template>\r\n</div>\r\n\r\n<div\r\n  [@expand]=\"expandState\"\r\n  class=\"favi-step-label\">\r\n  <ng-content></ng-content>\r\n</div>\r\n","import {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChildren,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  QueryList\r\n} from '@angular/core';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {FaviStepItemComponent} from './favi-step-item/favi-step-item.component';\r\n\r\n/**\r\n * Stepper to restrict user action by step.\r\n */\r\n@Component({\r\n  selector: 'favi-stepper',\r\n  templateUrl: './favi-stepper.component.html',\r\n  host: {\r\n    class: 'favi-stepper',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviStepperComponent implements AfterContentInit, AfterViewInit, OnDestroy {\r\n  // Key change event emitter.\r\n  // This will be only emitted when FaviStepItemComponent isn't used with RouterLink and RouterLinkActive.\r\n  @Output() keyChange = new EventEmitter<any>();\r\n\r\n  // Step item content children.\r\n  @ContentChildren(FaviStepItemComponent, {descendants: true}) faviStepItemRefs!: QueryList<FaviStepItemComponent>;\r\n\r\n  // Current activated key.\r\n  private _key: any;\r\n\r\n  // Subscription observer to observe 'changes' from QueryList of FaviStepItemComponent.\r\n  private _stepItemChangeObserver = this._subscriptionManager.createObserver();\r\n\r\n  // Subscription observer to observe 'activeChange' emitter from FaviStepItemComponent.\r\n  private _activeChangeObserver = this._subscriptionManager.createObserver();\r\n\r\n  // Timeout timer for setting initial key.\r\n  private _initialKeyTimer: any;\r\n\r\n  constructor(\r\n    private _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get current focused key.\r\n   */\r\n  get key(): any {\r\n    return this._key;\r\n  }\r\n\r\n  /**\r\n   * Set the key of step item to activate.\r\n   * It should be equal to 'key' of FaviStepItemComponent.\r\n   *\r\n   * When using RouterLink and RouterLinkActive with FaviStepItemComponent, it will be ignored.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set key(value: any) {\r\n    this._key = value;\r\n    this._setActiveStepItemByKey();\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._subscribeStepItemChanges();\r\n    this._subscribeActiveChange();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._setInitialKey();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearTimeout(this._initialKeyTimer);\r\n  }\r\n\r\n  /**\r\n   * Subscribe 'changes' from QueryList of FaviStepItemComponent.\r\n   */\r\n  private _subscribeStepItemChanges(): void {\r\n    const sub = this.faviStepItemRefs\r\n      .changes\r\n      .subscribe(() => {\r\n        this._subscribeActiveChange();\r\n        this._setInitialKey();\r\n      });\r\n\r\n    this._stepItemChangeObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Subscribe 'activeChange' emitter from FaviStepItemComponent.\r\n   */\r\n  private _subscribeActiveChange(): void {\r\n    const subs = this.faviStepItemRefs\r\n      .map(stepItemRef => {\r\n        return stepItemRef.activeChange\r\n          .subscribe(() => {\r\n            if (!stepItemRef.routerLinkActive) {\r\n              this._emitKeyChange(stepItemRef.key);\r\n            }\r\n          });\r\n      });\r\n\r\n    this._activeChangeObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Set initial key after view initialized.\r\n   */\r\n  private _setInitialKey(): void {\r\n    // To prevent NG0100 error.\r\n    this._initialKeyTimer = setTimeout(() => {\r\n      const activatedStepItemRef = this.faviStepItemRefs.find(stepItemRef => {\r\n        return !stepItemRef.routerLinkActive && stepItemRef.key === this.key;\r\n      });\r\n\r\n      if (activatedStepItemRef) {\r\n        activatedStepItemRef.isActive = true;\r\n      } else {\r\n        const firstStepItemRef = this.faviStepItemRefs.find(stepItemRef => {\r\n          return !stepItemRef.routerLinkActive;\r\n        });\r\n\r\n        if (firstStepItemRef) {\r\n          this._emitKeyChange(firstStepItemRef.key);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Emit 'keyChange' emitter.\r\n   * When 'keyChange' is not observed, update the 'key' directly.\r\n   *\r\n   * @param key\r\n   */\r\n  private _emitKeyChange(key: string): void {\r\n    if (this.keyChange.observed) {\r\n      this.keyChange.emit(key);\r\n    } else {\r\n      this.key = key;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set active step item by key.\r\n   */\r\n  private _setActiveStepItemByKey(): void {\r\n    this.faviStepItemRefs?.forEach(stepItemRef => {\r\n      if (!stepItemRef.routerLinkActive) {\r\n        stepItemRef.isActive = stepItemRef.key === this.key;\r\n      }\r\n    });\r\n  }\r\n}\r\n","<ng-content select=\"favi-step-item\"></ng-content>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviStepperComponent} from './favi-stepper.component';\r\nimport {FaviStepItemComponent} from './favi-step-item/favi-step-item.component';\r\nimport {FaviIconModule} from '../favi-icon/favi-icon.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviStepperComponent,\r\n    FaviStepItemComponent,\r\n  ],\r\n  exports: [\r\n    FaviStepperComponent,\r\n    FaviStepItemComponent,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule\r\n  ]\r\n})\r\nexport class FaviStepperModule { }\r\n","import {Directive, ElementRef, Optional} from '@angular/core';\nimport {FaviTabItemLike} from '../abstracts/favi-tab-item-like/favi-tab-item-like';\nimport {RouterLinkActive} from '@angular/router';\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\n\n/**\n * A directive for item of Tabs.\n */\n@Directive({\n  selector: '[faviTabItem]',\n  host: {\n    class: 'favi-tab-item',\n  },\n  providers: [\n    SubscriptionManager,\n  ],\n})\nexport class FaviTabItemDirective extends FaviTabItemLike {\n\n  constructor(\n    @Optional() public override routerLinkActive: RouterLinkActive,\n    public override elementRef: ElementRef<HTMLElement>,\n    protected override _subscriptionManager: SubscriptionManager,\n  ) {\n    super(routerLinkActive, elementRef, _subscriptionManager);\n  }\n\n}\n","import {Component, ContentChildren, HostBinding, Inject, Input, PLATFORM_ID, QueryList} from '@angular/core';\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\nimport {FaviTabLike} from '../abstracts/favi-tab-like/favi-tab-like';\nimport {FaviTabItemDirective} from './favi-tab-item.directive';\nimport {isPlatformBrowser} from '@angular/common';\nimport {BooleanAttribute} from '../../../utils/type.util';\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\n\n/**\n * Component that allows change views with named tabs.\n */\n@Component({\n  selector: 'favi-tabs',\n  templateUrl: './favi-tabs.component.html',\n  host: {\n    class: 'favi-tabs',\n  },\n  providers: [\n    SubscriptionManager,\n  ],\n})\nexport class FaviTabsComponent extends FaviTabLike<FaviTabItemDirective> {\n  /** Reference to QueryList of FaviTabItemDirective. */\n  @ContentChildren(FaviTabItemDirective) override itemsQueryList!: QueryList<FaviTabItemDirective>;\n\n  /** Status of whether fit the width of each item or not. */\n  private _fitItems = false;\n\n  /**\n   * Get fit status and bind to class.\n   */\n  @Input()\n  @HostBinding('class.favi-tabs-fit')\n  get fitItems(): boolean {\n    return this._fitItems;\n  }\n\n  /**\n   * Set fit status of each item.\n   *\n   * @param status - Fit status.\n   */\n  set fitItems(status: BooleanAttribute) {\n    this._fitItems = convertBooleanAttribute(status);\n  }\n\n  constructor(\n    @Inject(PLATFORM_ID) protected override _platformId: Object,\n    protected override _subscriptionManager: SubscriptionManager,\n  ) {\n    super(_platformId, _subscriptionManager);\n  }\n\n  /**\n   * Update UI of highlight.\n   */\n  protected _setHighlight(): void {\n    if (!isPlatformBrowser(this._platformId)) {\n      return;\n    }\n\n    const {\n      highlightRef,\n      isActivatedItem,\n    } = this;\n\n    if (highlightRef && isActivatedItem) {\n      const {\n        offsetLeft,\n      } = isActivatedItem.elementRef.nativeElement;\n\n      const {\n        width,\n      } = isActivatedItem.elementRef.nativeElement.getBoundingClientRect();\n\n      highlightRef.nativeElement.style.left = offsetLeft + 'px';\n      highlightRef.nativeElement.style.width = width + 'px';\n    }\n  }\n}\n","<ng-content select=\"[faviTabItem]\"></ng-content>\n\n<div\n  #highlight\n  class=\"favi-tab-highlight\"></div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviTabsComponent} from './favi-tabs.component';\nimport {FaviTabItemDirective} from './favi-tab-item.directive';\n\n\n@NgModule({\n  declarations: [\n    FaviTabsComponent,\n    FaviTabItemDirective\n  ],\n  exports: [\n    FaviTabsComponent,\n    FaviTabItemDirective\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviTabsModule { }\n","import {Directive, ElementRef, Optional,} from '@angular/core';\r\nimport {RouterLinkActive} from '@angular/router';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {FaviTabItemLike} from '../abstracts/favi-tab-item-like/favi-tab-item-like';\r\n\r\n/**\r\n * Tab item for tab.\r\n */\r\n@Directive({\r\n  selector: '[faviToggleButtonItem]',\r\n  host: {\r\n    class: 'favi-toggle-button-item',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviToggleButtonItemDirective extends FaviTabItemLike {\r\n  constructor(\r\n    @Optional() public override routerLinkActive: RouterLinkActive,\r\n    public override elementRef: ElementRef<HTMLElement>,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(routerLinkActive, elementRef, _subscriptionManager);\r\n  }\r\n}\r\n","import {Component, ContentChildren, HostBinding, Inject, Input, PLATFORM_ID, QueryList} from '@angular/core';\r\nimport {FaviToggleButtonItemDirective} from './favi-toggle-button-item.directive';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {FaviToggleButtonDirection} from './favi-toggle-button-direction';\r\nimport {isPlatformBrowser} from '@angular/common';\r\nimport {FaviTabLike} from '../abstracts/favi-tab-like/favi-tab-like';\r\n\r\n/**\r\n * Tab group to display tabs inside.\r\n */\r\n@Component({\r\n  selector: 'favi-toggle-button',\r\n  templateUrl: './favi-toggle-button.component.html',\r\n  host: {\r\n    class: 'favi-toggle-button',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviToggleButtonComponent extends FaviTabLike<FaviToggleButtonItemDirective> {\r\n  /** QueryLIst of items. */\r\n  @ContentChildren(FaviToggleButtonItemDirective, { descendants: true }) override itemsQueryList!: QueryList<FaviToggleButtonItemDirective>;\r\n\r\n  /**\r\n   * Define the tab direction.\r\n   * Default is 'horizontal'.\r\n   */\r\n  private _direction: FaviToggleButtonDirection = 'horizontal';\r\n\r\n  constructor(\r\n    @Inject(PLATFORM_ID) protected override _platformId: Object,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(_platformId, _subscriptionManager);\r\n  }\r\n\r\n  /**\r\n   * Get tab direction value.\r\n   */\r\n  get direction(): FaviToggleButtonDirection {\r\n    return this._direction;\r\n  }\r\n\r\n  /**\r\n   * Set this value to define tab items direction.\r\n   * When the 'horizontal', tab items will be displayed from left to right.\r\n   * When the 'vertical', tab items will be displayed from top to bottom.\r\n   *\r\n   * Default is 'horizontal'.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set direction(value: FaviToggleButtonDirection) {\r\n    this._direction = value;\r\n  }\r\n\r\n  /**\r\n   * Bind horizontal class.\r\n   */\r\n  @HostBinding('class.favi-toggle-button-horizontal')\r\n  get isHorizontal(): boolean {\r\n    return this._direction === 'horizontal';\r\n  }\r\n\r\n  /**\r\n   * Bind vertical class.\r\n   */\r\n  @HostBinding('class.favi-toggle-button-vertical')\r\n  get isVertical(): boolean {\r\n    return this._direction === 'vertical';\r\n  }\r\n\r\n  /**\r\n   * Set tab highlight to active tab item.\r\n   * It only works for browser platform.\r\n   */\r\n  protected override _setHighlight(): void {\r\n    if (!isPlatformBrowser(this._platformId)) {\r\n      return;\r\n    }\r\n\r\n    const {\r\n      highlightRef,\r\n      isActivatedItem,\r\n    } = this;\r\n\r\n    if (highlightRef && isActivatedItem) {\r\n      const {\r\n        offsetLeft,\r\n        offsetTop,\r\n      } = isActivatedItem.elementRef.nativeElement;\r\n\r\n      const {\r\n        width,\r\n        height,\r\n      } = isActivatedItem.elementRef.nativeElement.getBoundingClientRect();\r\n\r\n      highlightRef.nativeElement.style.top = offsetTop + 'px';\r\n      highlightRef.nativeElement.style.left = offsetLeft + 'px';\r\n      highlightRef.nativeElement.style.width = width + 'px';\r\n      highlightRef.nativeElement.style.height = height + 'px';\r\n    }\r\n  }\r\n}\r\n","<ng-content select=\"[faviToggleButtonItem]\"></ng-content>\r\n\r\n<div\r\n  #highlight\r\n  class=\"favi-toggle-button-highlight\"></div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviToggleButtonComponent} from './favi-toggle-button.component';\r\nimport {FaviToggleButtonItemDirective} from './favi-toggle-button-item.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviToggleButtonComponent,\r\n    FaviToggleButtonItemDirective\r\n  ],\r\n  exports: [\r\n    FaviToggleButtonComponent,\r\n    FaviToggleButtonItemDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviToggleButtonModule { }\r\n","import {Component, HostBinding, Inject} from '@angular/core';\r\nimport {FaviBaseOverlay} from '../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\r\nimport {FaviOverlayRef} from '../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviTooltipData} from './favi-tooltip-data';\r\nimport {FaviOverlayData} from '../../overlay/favi-overlay/services/favi-overlay-data';\r\nimport {FaviTooltipPosition} from './favi-tooltip-position';\r\nimport {fadeInOut} from '../../../animations/fade-in-out';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * Actual tooltip component to display tooltip.\r\n */\r\n@Component({\r\n  selector: 'favi-tooltip',\r\n  templateUrl: './favi-tooltip.component.html',\r\n  host: {\r\n    class: 'favi-tooltip',\r\n  },\r\n  animations: [\r\n    fadeInOut(),\r\n  ],\r\n})\r\nexport class FaviTooltipComponent extends FaviBaseOverlay {\r\n  // Vertical margin between bound component.\r\n  static verticalMargin = 8;\r\n\r\n  // Horizontal margin between bound component.\r\n  static horizontalMargin = 8;\r\n\r\n  // Bind 'fadeInOut' animation.\r\n  @HostBinding('@fadeInOut') fadeInOutState = 'show';\r\n\r\n  constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<FaviTooltipData>,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n    @Inject(FaviOverlayData) private _data: FaviTooltipData,\r\n  ) {\r\n    super(_faviOverlayRef, _subscriptionManager);\r\n  }\r\n\r\n  /**\r\n   * Bind top position class.\r\n   */\r\n  @HostBinding('class.favi-top-position')\r\n  get isTop(): boolean {\r\n    return this.position === 'top';\r\n  }\r\n\r\n  /**\r\n   * Bind left position class.\r\n   */\r\n  @HostBinding('class.favi-left-position')\r\n  get isLeft(): boolean {\r\n    return this.position === 'left';\r\n  }\r\n\r\n  /**\r\n   * Bind bottom position class.\r\n   */\r\n  @HostBinding('class.favi-bottom-position')\r\n  get isBottom(): boolean {\r\n    return this.position === 'bottom';\r\n  }\r\n\r\n  /**\r\n   * Bind right position class.\r\n   */\r\n  @HostBinding('class.favi-right-position')\r\n  get isRight(): boolean {\r\n    return this.position === 'right';\r\n  }\r\n\r\n  /**\r\n   * Get tooltip content.\r\n   */\r\n  get content(): string {\r\n    return this._data.content;\r\n  }\r\n\r\n  /**\r\n   * Get tooltip position.\r\n   */\r\n  get position(): FaviTooltipPosition {\r\n    return this._data.position;\r\n  }\r\n}\r\n","{{content}}\r\n","import {CanUndefined, Nullable} from './type.util';\r\nimport {Coordinate} from '../common/coordinate/coordinate';\r\n\r\n/**\r\n * Find parent element with tag name.\r\n *\r\n * @param element - Starting element.\r\n * @param targetName - Tag name of target element.\r\n */\r\nexport function findParentElement(element: HTMLElement, targetName: string): CanUndefined<HTMLElement> {\r\n  let parent: Nullable<HTMLElement> = element;\r\n\r\n  while (parent) {\r\n    if (parent.nodeName.toLowerCase() === targetName) {\r\n      return parent;\r\n    }\r\n\r\n    parent = parent.parentElement;\r\n  }\r\n\r\n  return\r\n}\r\n\r\n/**\r\n * Create rect with 2 coordinates.\r\n *\r\n * @param coordinate1\r\n * @param coordinate2\r\n */\r\nexport function createRectWithCoordinates(coordinate1: Coordinate, coordinate2: Coordinate): DOMRect {\r\n  const top = Math.min(coordinate1.y, coordinate2.y);\r\n  const left = Math.min(coordinate1.x, coordinate2.x);\r\n  const width = Math.abs(coordinate1.x - coordinate2.x);\r\n  const height = Math.abs(coordinate1.y - coordinate2.y);\r\n\r\n  return new DOMRect(left, top, width, height);\r\n}\r\n\r\n/**\r\n * Check whether 2 rectangles are intersecting.\r\n * It comes from https://stackoverflow.com/a/2752387/21807549\r\n *\r\n * @param rect1\r\n * @param rect2\r\n */\r\nexport function intersect(rect1: DOMRect, rect2: DOMRect): boolean {\r\n  return !(\r\n    rect2.left > rect1.right ||\r\n    rect2.right < rect1.left ||\r\n    rect2.top > rect1.bottom ||\r\n    rect2.bottom < rect1.top\r\n  );\r\n}\r\n\r\n/**\r\n * Remove focuses from the all elements.\r\n * It removes selection ranges as well.\r\n */\r\nexport function removeAllFocuses(): void {\r\n  getSelection()?.removeAllRanges();\r\n\r\n  document.querySelectorAll('*').forEach(element => {\r\n    if (element instanceof HTMLElement) {\r\n      element.blur();\r\n    }\r\n  });\r\n}\r\n\r\n/**\r\n * Get name of the 'Node' as lower-cased.\r\n *\r\n * @param node\r\n */\r\nexport function getNodeName(node: Node): string {\r\n  return node.nodeName.toLowerCase();\r\n}\r\n\r\n/**\r\n * Get 'textContent' of provided 'Node'.\r\n * If there is no 'textContent', return empty string.\r\n *\r\n * @param node\r\n */\r\nexport function getTextContent(node: Node): string {\r\n  return node.textContent || '';\r\n}\r\n\r\n/**\r\n * Transform 'NodeListOf' to an array.\r\n *\r\n * @param nodeList\r\n */\r\nexport function nodeListToArray<T extends Node>(nodeList: NodeListOf<T>): T[] {\r\n  const nodes: T[] = [];\r\n\r\n  nodeList.forEach(node => nodes.push(node));\r\n\r\n  return nodes;\r\n}\r\n\r\n/**\r\n * Get value of provided data attribute with 'name' from the 'element'.\r\n *\r\n * @param element\r\n * @param name - Name of data attribute.\r\n */\r\nexport function getDataValue(element: HTMLElement, name: string): CanUndefined<string> {\r\n  return element.dataset[name]?.toLowerCase();\r\n}\r\n\r\n/**\r\n * Replace the 'childNodes' to 'replacingNodes'.\r\n *\r\n * @param childNodes\r\n * @param replacingNodes\r\n */\r\nexport function replaceChildNodesWith(childNodes: ChildNode[], replacingNodes: Node[]): void {\r\n  while (childNodes.length > 1) {\r\n    childNodes.pop()?.remove();\r\n  }\r\n\r\n  childNodes[0].replaceWith(...replacingNodes);\r\n}\r\n\r\nconst CHARACTER_NODES = [Node.TEXT_NODE, Node.COMMENT_NODE, Node.CDATA_SECTION_NODE];\r\n\r\n/**\r\n * Check whether provided node is character type or not.\r\n * Character type node handles the offsets of range as character's offset.\r\n *\r\n * @param node - Node to check.\r\n */\r\nexport function isCharacterNode(node?: Node): boolean {\r\n  if (!node) {\r\n    return false;\r\n  }\r\n\r\n  return CHARACTER_NODES.includes(node.nodeType);\r\n}\r\n\r\n/**\r\n * Get the end offset of node.\r\n * If node type is character node, the length of character is returned.\r\n * If not, 1 is returned.\r\n *\r\n * @param node\r\n */\r\nexport function getEndOffsetOfNode(node: Node): number {\r\n  if (isCharacterNode(node)) {\r\n    return (node.textContent || '').length;\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n/**\r\n * Check whether provided 'nodes' are empty or not.\r\n * If all 'nodes' have no textContent, return 'true'.\r\n *\r\n * @param nodes\r\n */\r\nexport function isAllNodesEmpty(nodes: Node[]): boolean {\r\n  return !nodes.some(node => !!node.textContent);\r\n}\r\n\r\n/**\r\n * Get the very last firstChild from the node.\r\n *\r\n * @param node\r\n */\r\nexport function getLeafFirstChild(node: Node): Nullable<Node> {\r\n  let firstChild = node.firstChild;\r\n\r\n  if (!firstChild) {\r\n    return node;\r\n  }\r\n\r\n  while (firstChild?.firstChild) {\r\n    firstChild = firstChild.firstChild;\r\n  }\r\n\r\n  return firstChild;\r\n}\r\n\r\n/**\r\n * Get the very last lastChild from the node.\r\n *\r\n * @param node\r\n */\r\nexport function getLeafLastChild(node: Node): Nullable<Node> {\r\n  let lastChild = node.lastChild;\r\n\r\n  if (!lastChild) {\r\n    return node;\r\n  }\r\n\r\n  while (lastChild?.lastChild) {\r\n    lastChild = lastChild.lastChild;\r\n  }\r\n\r\n  return lastChild;\r\n}\r\n\r\n/**\r\n * Get scrollable container of provided element.\r\n *\r\n * @param element\r\n */\r\nexport function getScrollableContainer(element: HTMLElement): CanUndefined<HTMLElement> {\r\n  const {\r\n    parentElement,\r\n  } = element;\r\n\r\n  if (parentElement) {\r\n    const overflowY = window.getComputedStyle(parentElement).overflowY;\r\n    const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';\r\n\r\n    if (isScrollable) {\r\n      return parentElement;\r\n    }\r\n\r\n    return getScrollableContainer(parentElement);\r\n  }\r\n\r\n  return;\r\n}\r\n\r\n/**\r\n * Get 'true' when viewport is targeting for pc.\r\n */\r\nexport function isViewPortPC(): boolean {\r\n  return window.innerWidth > 768;\r\n}\r\n\r\n/**\r\n * Get 'true' when viewport is targeting for tablet or mobile.\r\n */\r\nexport function isViewPortTabletOrMobile(): boolean {\r\n  return window.innerWidth < 769;\r\n}\r\n","import {Directive, ElementRef, HostListener, Input, OnDestroy} from '@angular/core';\r\nimport {FaviOverlayService} from '../../overlay/favi-overlay/services/favi-overlay.service';\r\nimport {FaviTooltipComponent} from './favi-tooltip.component';\r\nimport {FaviTooltipPosition} from './favi-tooltip-position';\r\nimport {EventManager} from '../../../common/event-manager/event-manager';\r\nimport {createRandomId} from '../../../utils/random.util';\r\nimport {FaviOverlayRef} from '../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviTooltipData} from './favi-tooltip-data';\r\nimport {FaviOverlayOpenOptions} from '../../overlay/favi-overlay/services/favi-overlay-open-options';\r\nimport {disableEvent} from '../../../utils/event.util';\r\nimport {getScrollableContainer} from '../../../utils/element.util';\r\n\r\n/**\r\n * A directive to bind and render FaviTooltipComponent.\r\n */\r\n@Directive({\r\n  selector: '[faviTooltip]'\r\n})\r\nexport class FaviTooltipDirective implements OnDestroy {\r\n  // Tooltip message to display.\r\n  @Input() faviTooltip = '';\r\n\r\n  // Position to display tooltip.\r\n  // Default is 'bottom'.\r\n  @Input() tooltipPosition: FaviTooltipPosition = 'bottom';\r\n\r\n  // Random unique id for tooltip.\r\n  readonly id = createRandomId(16);\r\n\r\n  // Opened tooltip.\r\n  private _openedTooltip?: FaviOverlayRef<FaviTooltipData>;\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n    private _faviOverlayService: FaviOverlayService,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get event name for scroll.\r\n   */\r\n  get scrollEventName(): string {\r\n    return `tooltip-scroll-${this.id}`;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.close();\r\n  }\r\n\r\n  /**\r\n   * Listen mouseenter event to show tooltip.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('mouseenter', ['$event'])\r\n  onMouseEnter(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.show();\r\n  }\r\n\r\n  /**\r\n   * Listen mouseleave event to close tooltip.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('mouseleave', ['$event'])\r\n  onMouseLeave(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.close();\r\n  }\r\n\r\n  /**\r\n   * Show tooltip.\r\n   */\r\n  show(): void {\r\n    const {\r\n      _elementRef: elementRef,\r\n      scrollEventName,\r\n    } = this;\r\n\r\n    const scrollableContainer = getScrollableContainer(elementRef.nativeElement);\r\n\r\n    if (scrollableContainer) {\r\n      EventManager.register<HTMLElementEventMap>(scrollEventName, scrollableContainer, 'scroll', this._closeByEvent, {\r\n        passive: false,\r\n      });\r\n    }\r\n\r\n    const {\r\n      top,\r\n      left,\r\n      bottom,\r\n      right,\r\n    } = elementRef.nativeElement.getBoundingClientRect();\r\n\r\n    const options: FaviOverlayOpenOptions<FaviTooltipData> = {\r\n      data: {\r\n        content: this.faviTooltip,\r\n        position: this.tooltipPosition,\r\n      },\r\n      pushState: false,\r\n      backdrop: null,\r\n      onClose: () => {\r\n        this._openedTooltip = undefined;\r\n\r\n        EventManager.unregister(scrollEventName);\r\n      },\r\n    };\r\n\r\n    switch (this.tooltipPosition) {\r\n      case 'top': {\r\n        options.top = top - FaviTooltipComponent.verticalMargin;\r\n        options.left = left + (right - left) / 2;\r\n        break;\r\n      }\r\n\r\n      case 'left': {\r\n        options.left = left - FaviTooltipComponent.horizontalMargin;\r\n        options.top = top + (bottom - top) / 2;\r\n        break;\r\n      }\r\n\r\n      case 'bottom': {\r\n        options.top = bottom + FaviTooltipComponent.verticalMargin;\r\n        options.left = left + (right - left) / 2;\r\n        break;\r\n      }\r\n\r\n      case 'right': {\r\n        options.left = right + FaviTooltipComponent.horizontalMargin;\r\n        options.top = top + (bottom - top) / 2;\r\n        break;\r\n      }\r\n    }\r\n\r\n    this._openedTooltip = this._faviOverlayService.open(FaviTooltipComponent, options);\r\n  }\r\n\r\n  /**\r\n   * Close tooltip.\r\n   */\r\n  close(): void {\r\n    this._openedTooltip?.close();\r\n  }\r\n\r\n  private _closeByEvent = (event: Event): void => {\r\n    disableEvent(event);\r\n\r\n    this.close();\r\n  }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviTooltipComponent} from './favi-tooltip.component';\r\nimport {FaviTooltipDirective} from './favi-tooltip.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviTooltipComponent,\r\n    FaviTooltipDirective,\r\n  ],\r\n  exports: [\r\n    FaviTooltipDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviTooltipModule { }\r\n","import {Component} from '@angular/core';\r\n\r\n/**\r\n * A label and value set which looks similar to FaviFormFieldComponent.\r\n */\r\n@Component({\r\n  selector: 'favi-value-field',\r\n  templateUrl: './favi-value-field.component.html',\r\n  host: {\r\n    class: 'favi-value-field',\r\n  },\r\n})\r\nexport class FaviValueFieldComponent {\r\n}\r\n","<div class=\"favi-value-field-label\">\r\n  <ng-content select=\"label\"></ng-content>\r\n</div>\r\n\r\n<div class=\"favi-value-field-content\">\r\n  <!-- Anything inside. -->\r\n  <ng-content></ng-content>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviValueFieldComponent} from './favi-value-field.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviValueFieldComponent\r\n  ],\r\n  exports: [\r\n    FaviValueFieldComponent\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviValueFieldModule { }\r\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  Inject,\n  QueryList,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\nimport {FaviBaseOverlay} from '../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\nimport {FaviOverlayRef} from '../../overlay/favi-overlay/services/favi-overlay-ref';\nimport {FaviOptionComponent} from '../favi-option/favi-option.component';\nimport {FaviOverlayData} from '../../overlay/favi-overlay/services/favi-overlay-data';\nimport {FaviAutocompleteOptionsPositions} from './favi-autocomplete-options-positions';\nimport {CanUndefined} from '../../../utils/type.util';\nimport {isDefined} from '../../../utils/validate.util';\nimport {AvailableKey, disableEvent, isKey} from '../../../utils/event.util';\n\n/**\n * Overlay data for Autocomplete options.\n */\nexport interface FaviAutocompleteOptionsData {\n  /** QueryList for Option components. */\n  optionsQueryList: QueryList<FaviOptionComponent>;\n\n  /** ElementRef for Autocomplete to detect clicking position. */\n  autocompleteElementRef: ElementRef<HTMLElement>;\n\n  /** TemplateRef that contains 'ng-content' of options. */\n  optionsTemplateRef: TemplateRef<any>;\n\n  /** Position of overlay options between 'top' or' bottom'. */\n  position: FaviAutocompleteOptionsPositions;\n}\n\n/**\n * An overlay to render\n */\n@Component({\n  selector: 'favi-autocomplete-options-overlay',\n  templateUrl: './favi-autocomplete-options-overlay.component.html',\n  providers: [\n    SubscriptionManager,\n  ],\n  host: {\n    class: 'favi-autocomplete-options-overlay',\n  }\n})\nexport class FaviAutocompleteOptionsOverlayComponent extends FaviBaseOverlay<FaviAutocompleteOptionsData> implements AfterViewInit {\n  static maxHeight = 240;\n\n  /** View container to render options template for autocomplete. */\n  @ViewChild('container', {read: ViewContainerRef}) viewContainerRef!: ViewContainerRef;\n\n  private _focusedIndex = -1;\n  private _position: FaviAutocompleteOptionsPositions = 'bottom';\n  private _optionsChangesObserver = this._subscriptionManager.createObserver();\n  private _optionsOnFocusObserver = this._subscriptionManager.createObserver();\n\n  // Timeout timer to wait for a while to update properties of options\n  // to prevent NG0100 error.\n  // It is used because of the options can be rendered dynamically.\n  private _changeApplyingTimer: any;\n\n  constructor(\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<FaviAutocompleteOptionsData>,\n    protected override _subscriptionManager: SubscriptionManager,\n    @Inject(FaviOverlayData) private _data: FaviAutocompleteOptionsData,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n  ) {\n    super(_faviOverlayRef, _subscriptionManager);\n  }\n\n  /**\n   * Get QueryList for option components.\n   */\n  get optionsQueryList(): QueryList<FaviOptionComponent> {\n    return this._data.optionsQueryList;\n  }\n\n  /**\n   * Get ElementRef of Autocomplete.\n   */\n  get autocompleteElementRef(): ElementRef<HTMLElement> {\n    return this._data.autocompleteElementRef;\n  }\n\n  /**\n   * Get TemplateRef that contains 'ng-content' of options.\n   */\n  get optionsTemplateRef(): TemplateRef<any> {\n    return this._data.optionsTemplateRef;\n  }\n\n  /**\n   * Get position value.\n   */\n  get position(): FaviAutocompleteOptionsPositions {\n    return this._position;\n  }\n\n  /**\n   * Set position value. It is for allowing update position by outside of component.\n   *\n   * @param position - Updated position value.\n   */\n  set position(position: FaviAutocompleteOptionsPositions) {\n    this._position = position;\n  }\n\n  @HostBinding('class.favi-bottom-position')\n  get isBottomPosition(): boolean {\n    return this.position === 'bottom';\n  }\n\n  @HostBinding('class.favi-top-position')\n  get isTopPosition(): boolean {\n    return this.position === 'top';\n  }\n\n  /**\n   * Get last index of options.\n   */\n  get lastIndex(): number {\n    return this.optionsQueryList.length - 1;\n  }\n\n  get focusedOption(): CanUndefined<FaviOptionComponent> {\n    return this.optionsQueryList.find(optionRef => optionRef.focused);\n  }\n\n  override ngAfterViewInit(): void {\n    super.ngAfterViewInit();\n\n    this.viewContainerRef.createEmbeddedView(this.optionsTemplateRef);\n    this._setInitialFocusedIndex(true);\n    this._subscribeOptionsQueryListOnFocus();\n    this._subscribeOptionsQueryListChanges();\n  }\n\n  /**\n   * Detect changes to update view.\n   */\n  detectChanges(): void {\n    this._changeDetectorRef.detectChanges();\n  }\n\n  /**\n   * Different with keyboard event of select options overlay,\n   * every key is allowed for autocomplete options.\n   *\n   * @param event\n   */\n  @HostListener('window:keydown', ['$event'])\n  onWindowKeyDown(event: KeyboardEvent): void {\n    if (isKey(event, AvailableKey.ArrowDown)) {\n      disableEvent(event);\n\n      if (this.lastIndex < this._focusedIndex + 1) {\n        this.setFocusedIndex(0, true);\n      } else {\n        this.setFocusedIndex(this._focusedIndex + 1, true);\n      }\n    } else if (isKey(event, AvailableKey.ArrowUp)) {\n      disableEvent(event);\n\n      if (this._focusedIndex - 1 < 0) {\n        this.setFocusedIndex(this.lastIndex, true);\n      } else {\n        this.setFocusedIndex(this._focusedIndex - 1, true);\n      }\n    } else if (isKey(event, AvailableKey.Enter)) {\n      disableEvent(event);\n\n      const {focusedOption} = this;\n\n      if (focusedOption) {\n        // Emit onClick emitter rather than calling close() method\n        // to handle differently from each component.\n        focusedOption.onClick.emit(focusedOption.value);\n      }\n    } else if (isKey(event, AvailableKey.Escape)) {\n      disableEvent(event);\n\n      this.close();\n    }\n  }\n\n  /**\n   * When click event triggered from the outside of autocomplete, close the options.\n   *\n   * @param event\n   */\n  @HostListener('window:click', ['$event'])\n  onWindowClick(event: MouseEvent): void {\n    this._emitOnCloseWhenLooseTarget(event.target as Node);\n  }\n\n  /**\n   * When focus has removed from autocomplete, close the options.\n   *\n   * @param event\n   */\n  @HostListener('window:focusin', ['$event'])\n  onWindowFocusIn(event: Event): void {\n    this._emitOnCloseWhenLooseTarget(event.target as Node);\n  }\n\n  /**\n   * Set _focusedIndex and scroll the container to focused option if needed.\n   *\n   * @param index\n   * @param scroll - Set true to scroll to focused option.\n   */\n  setFocusedIndex(index: number, scroll = false): void {\n    this._focusedIndex = index\n    this._updateFocusedOptionRef(scroll);\n  }\n\n  /**\n   * Search selected option and set focus to it.\n   * Container will be scrolled to selected option.\n   *\n   * @param scroll - Set true to scroll to focused option.\n   */\n  private _setInitialFocusedIndex(scroll = false): void {\n    let focusedIndex = -1;\n\n    this.optionsQueryList.forEach((optionRef, index) => {\n      if (optionRef.selected) {\n        focusedIndex = index;\n      }\n    });\n\n    this.setFocusedIndex(focusedIndex, scroll);\n  }\n\n  /**\n   * Subscribe changes of options query to ensure listening\n   * changed options' event as well.\n   */\n  private _subscribeOptionsQueryListChanges(): void {\n    const sub = this.optionsQueryList\n      .changes\n      .subscribe(() => {\n        clearTimeout(this._changeApplyingTimer);\n\n        this._changeApplyingTimer = setTimeout(() => {\n          this._subscribeOptionsQueryListOnFocus();\n          this._setInitialFocusedIndex(true);\n        });\n      });\n\n    this._optionsChangesObserver.observe(sub);\n  }\n\n  /**\n   * Subscribe onFocus emitter for each option\n   * to close options overlay and update value.\n   */\n  private _subscribeOptionsQueryListOnFocus(): void {\n    const subs = this.optionsQueryList.map((optionRef, index) => {\n      return optionRef\n        .onFocus\n        .subscribe(() => {\n          // onFocus will be emitted when user's pointer is entered.\n          // In this case, no need to scroll.\n          this.setFocusedIndex(index);\n        });\n    });\n\n    this._optionsOnFocusObserver.observe(...subs);\n  }\n\n  /**\n   * Update focused state of FaviOptionComponent.\n   *\n   * @param scroll - Set true to scroll to focused option.\n   */\n  private _updateFocusedOptionRef(scroll: boolean): void {\n    let focusedOptionRef: CanUndefined<FaviOptionComponent>;\n\n    this.optionsQueryList.forEach((optionRef, index) => {\n      optionRef.focused = index === this._focusedIndex;\n\n      if (optionRef.focused) {\n        focusedOptionRef = optionRef;\n      }\n    });\n\n    if (scroll) {\n      if (isDefined<FaviOptionComponent>(focusedOptionRef)) { // When having focusedOptionRef, scroll to focusedOptionRef.\n        focusedOptionRef.elementRef.nativeElement.scrollIntoView({\n          block: 'center',\n        });\n      } else { // If not, scroll to top to show most relative option.\n        this._elementRef.nativeElement.scrollTo(0, 0);\n      }\n    }\n  }\n\n  /**\n   * When event target isn't contained in host element or bound autocomplete element,\n   * close the options.\n   *\n   * @param target - Event target.\n   */\n  private _emitOnCloseWhenLooseTarget(target: Node): void {\n    if (\n      !this._elementRef.nativeElement.contains(target) // When target isn't contained in current component.\n      && !this.autocompleteElementRef.nativeElement.contains(target) // When target isn't contained in autocomplete component.\n    ) {\n      // Before emit close, set _focusedIndex to -1.\n      // If it doesn't exist, NG0100 error will be thrown because\n      // the focused options is changed after view current component destroyed.\n      this.setFocusedIndex(-1);\n      this.close();\n    }\n  }\n}\n","<ng-container #container></ng-container>\n","import {Injectable, Type} from '@angular/core';\r\nimport {FaviOverlayService} from '../../../overlay/favi-overlay/services/favi-overlay.service';\r\nimport {FaviBaseOverlay} from '../../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\r\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviModalOpenOptions} from './favi-modal-open-options';\r\nimport {FaviModalBackdropComponent} from '../favi-modal-backdrop/favi-modal-backdrop.component';\r\n\r\n/**\r\n * Service to manage modals.\r\n * It uses FaviOverlay service.\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FaviModalService {\r\n\r\n  constructor(\r\n    protected _faviOverlayService: FaviOverlayService,\r\n  ) { }\r\n\r\n  /**\r\n   * Open a new modal.\r\n   * It uses open() method of FaviOverlay and returns FaviOverlayRef after modal opened.\r\n   *\r\n   * @param component - Modal component to open.\r\n   * @param options - Options to open modal.\r\n   */\r\n  open<D, R = void>(component: Type<FaviBaseOverlay<D, R>>, options: FaviModalOpenOptions<D, R> = {}): FaviOverlayRef<D, R> {\r\n    return this._faviOverlayService.open<D, R>(component, {\r\n      backdrop: FaviModalBackdropComponent,\r\n      keepOnResize: true, // Modal should be kept even window is resized.\r\n      ...options,\r\n    });\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ContentChildren,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  QueryList,\r\n  TemplateRef,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {FaviOptionComponent} from '../../favi-option/favi-option.component';\r\nimport {NgControl} from '@angular/forms';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {PositionObserver} from '../../../../common/position-observer/position-observer';\r\nimport {CustomControl} from '../../../abstracts/custom-control/custom-control';\r\nimport {SubscriptionObserver} from '../../../../services/subscription-manager/subscription-observer';\r\nimport {FaviModalService} from '../../../modal/favi-modal/services/favi-modal.service';\r\nimport {\r\n  FaviAutocompleteOptionsData,\r\n  FaviAutocompleteOptionsOverlayComponent\r\n} from '../../favi-autocomplete-options-overlay/favi-autocomplete-options-overlay.component';\r\nimport {FaviOverlayOpenOptions} from '../../../overlay/favi-overlay/services/favi-overlay-open-options';\r\nimport {Nullable} from '../../../../utils/type.util';\r\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\r\n\r\n/**\r\n * Base class to create autocomplete component.\r\n * Input element which named searchInput must be inside of view.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-autocomplete favi-input',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport abstract class FaviBaseAutocomplete extends CustomControl implements AfterViewInit, OnDestroy {\r\n  // Placeholder.\r\n  @Input() placeholder = '';\r\n\r\n  // Emit changed search string to filter options.\r\n  @Output() onSearchChange = new EventEmitter<string>();\r\n\r\n  // Ref to search input.\r\n  @ViewChild('searchInput', {read: ElementRef}) searchInputRef!: ElementRef<HTMLInputElement>;\r\n\r\n  /** TemplateRef that contains 'ng-content' for options. */\r\n  @ViewChild('optionsTemplate') optionsTemplateRef!: TemplateRef<any>;\r\n\r\n  // Ret to options in content.\r\n  @ContentChildren(FaviOptionComponent, {descendants: true}) optionsQueryList!: QueryList<FaviOptionComponent>;\r\n\r\n  // Current value.\r\n  protected _value: any;\r\n\r\n  // Previous value which is kept when autocomplete has focused.\r\n  // It should be restored when options closed without selecting any item.\r\n  protected _previousValue: any;\r\n\r\n  // PositionObserver to calculate component position in real-time.\r\n  // Since target is only current component, no need to fetch entries.\r\n  protected _positionObserver = new PositionObserver(() => {\r\n    this._updateOverlayPosition();\r\n  });\r\n\r\n  protected _optionsOnClickObserver: SubscriptionObserver = this._subscriptionManager.createObserver();\r\n  protected _optionsChangesObserver: SubscriptionObserver = this._subscriptionManager.createObserver();\r\n\r\n  // Timeout timer to wait options changing to restore previous value.\r\n  protected _restoreTimer: any;\r\n\r\n  // Timeout timer to wait for a while to update properties of options\r\n  // to prevent NG0100 error.\r\n  // It is used because of the options can be rendered dynamically.\r\n  protected _changeApplyingTimer: any;\r\n\r\n  // Timeout timer to wait options changes before opening options.\r\n  protected _optionsOpeningTimer: any;\r\n\r\n  // Focused state.\r\n  // Bind it to class.\r\n  protected _focused = false;\r\n\r\n  /** OverlayRef for Autocomplete options. */\r\n  protected _optionsOverlayRef: Nullable<FaviOverlayRef<FaviAutocompleteOptionsData>> = null;\r\n\r\n  protected constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected _elementRef: ElementRef<HTMLElement>,\r\n    protected _changeDetectorRef: ChangeDetectorRef,\r\n    protected _subscriptionManager: SubscriptionManager,\r\n    protected _faviModalService: FaviModalService,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  /**\r\n   * Get focused state and bind to class.\r\n   */\r\n  @HostBinding('class.favi-focused')\r\n  get focused(): boolean {\r\n    return this._focused || this.optionsOpened;\r\n  }\r\n\r\n  /**\r\n   * Set focused state.\r\n   *\r\n   * @param value\r\n   */\r\n  set focused(value: boolean) {\r\n    this._focused = value;\r\n  }\r\n\r\n  /**\r\n   * Get status of whether options opened or not.\r\n   */\r\n  get optionsOpened(): boolean {\r\n    return !!this._optionsOverlayRef;\r\n  }\r\n\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._setOptionsQueryListSelected();\r\n    this._subscribeOptionsQueryListOnClick();\r\n    this._setSelectedLabel();\r\n\r\n    this._subscribeOptionsChanges();\r\n\r\n    this._positionObserver.observe(this.elementRef.nativeElement);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._positionObserver.disconnect();\r\n\r\n    clearTimeout(this._restoreTimer);\r\n    clearTimeout(this._changeApplyingTimer);\r\n    clearTimeout(this._optionsOpeningTimer);\r\n  }\r\n\r\n  /**\r\n   * Set focus to search input.\r\n   */\r\n  override focus(): void {\r\n    this.searchInputRef?.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * Remove focus from search input.\r\n   */\r\n  override blur(): void {\r\n    this.searchInputRef?.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * When host element is clicked, set focus to search input.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('click', ['$event'])\r\n  focusToHost(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.focus();\r\n  }\r\n\r\n  /**\r\n   * The 'focus' event listener for search input.\r\n   */\r\n  onFocus(): void {\r\n    this.focused = true;\r\n    this.openOptions();\r\n  }\r\n\r\n  /**\r\n   * The 'blur' event listener for search input.\r\n   */\r\n  onBlur(): void {\r\n    this.focused = false;\r\n  }\r\n\r\n  /**\r\n   * It emits current input value.\r\n   *\r\n   * @param search - Search value to emit.\r\n   */\r\n  emitSearchChange(search = this.searchInputRef.nativeElement.value): void {\r\n    this.onSearchChange.emit(search);\r\n    this.markAsDirty();\r\n  }\r\n\r\n  /**\r\n   * Open options.\r\n   */\r\n  openOptions(): void {\r\n    if (this._previousValue === undefined) {\r\n      this._previousValue = this._value; // Keep previous value to restore.\r\n    }\r\n\r\n    this.emitSearchChange(); // Emit current search value to filter options on opened.\r\n\r\n    const options: FaviOverlayOpenOptions<FaviAutocompleteOptionsData> = {\r\n      data: {\r\n        optionsTemplateRef: this.optionsTemplateRef,\r\n        optionsQueryList: this.optionsQueryList,\r\n        autocompleteElementRef: this.elementRef,\r\n        position: 'bottom',\r\n      },\r\n      backdrop: null,\r\n      onClose: () => {\r\n        this.markAsTouched();\r\n        this.resetPreviousValue();\r\n        this._optionsOverlayRef = null; // Remove overlayRef first to prevent Maximum call stack exceeded error.\r\n      },\r\n    };\r\n\r\n    const {\r\n      maxHeight\r\n    } = FaviAutocompleteOptionsOverlayComponent;\r\n\r\n    const domRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n    const hasBottomSpace = domRect.bottom + maxHeight < window.innerHeight;\r\n\r\n    options.left = domRect.left;\r\n    options.width = domRect.width;\r\n\r\n    if (hasBottomSpace) {\r\n      options.top = domRect.bottom;\r\n    } else {\r\n      options.data!.position = 'top';\r\n      options.bottom = window.innerHeight - domRect.top;\r\n    }\r\n\r\n    this._optionsOverlayRef = this._faviModalService.open(FaviAutocompleteOptionsOverlayComponent, options);\r\n  }\r\n\r\n  /**\r\n   * When Enter key is downed from input element,\r\n   * open options by prevent propagating the event.\r\n   */\r\n  onInputEnterKeyDown(): void {\r\n    if (!this.optionsOpened) {\r\n      this.openOptions();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Reset previous value.\r\n   */\r\n  resetPreviousValue(): void {\r\n    if (this._previousValue === undefined) {\r\n      return;\r\n    }\r\n\r\n    clearTimeout(this._restoreTimer);\r\n\r\n    this.emitSearchChange(''); // Emit empty search value to load all options.\r\n    this._restoreTimer = setTimeout(() => {\r\n      this.writeValue(this._previousValue);\r\n      this._previousValue = undefined;\r\n    }); // Use Timeout timer to wait until changes for options are applied.\r\n  }\r\n\r\n  /**\r\n   * Subscribe change of options.\r\n   */\r\n  protected _subscribeOptionsChanges(): void {\r\n    if (!this.optionsQueryList) {\r\n      return;\r\n    }\r\n\r\n    const sub = this.optionsQueryList\r\n      .changes\r\n      .subscribe(() => {\r\n        clearTimeout(this._changeApplyingTimer);\r\n\r\n        // Use Timeout timer to set delay to prevent NG0100 error.\r\n        this._changeApplyingTimer = setTimeout(() => {\r\n          this._setOptionsQueryListSelected();\r\n          this._subscribeOptionsQueryListOnClick();\r\n        });\r\n      });\r\n\r\n    this._optionsChangesObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Update the position of options overlay.\r\n   */\r\n  protected _updateOverlayPosition(): void {\r\n    if (!this._optionsOverlayRef) {\r\n      return;\r\n    }\r\n\r\n    const {\r\n      maxHeight,\r\n    } = FaviAutocompleteOptionsOverlayComponent;\r\n    const domRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n    const hasBottomSpace = domRect.bottom + maxHeight < window.innerHeight;\r\n    const instance = this._optionsOverlayRef.componentRef.instance as FaviAutocompleteOptionsOverlayComponent;\r\n\r\n    instance.left = domRect.left;\r\n    instance.width = domRect.width;\r\n    instance.top = 'auto';\r\n    instance.bottom = 'auto';\r\n\r\n    if (hasBottomSpace) {\r\n      instance.top = domRect.bottom;\r\n    } else {\r\n      instance.position = 'top';\r\n      instance.bottom = window.innerHeight - domRect.top;\r\n    }\r\n\r\n    instance.detectChanges();\r\n  }\r\n\r\n  /**\r\n   * Implement this method to listen onClick event from option.\r\n   */\r\n  protected abstract _subscribeOptionsQueryListOnClick(): void;\r\n\r\n  /**\r\n   * Implement this method to update selected property of options.\r\n   */\r\n  protected abstract _setOptionsQueryListSelected(): void;\r\n\r\n  /**\r\n   * Implement this method to set displaying label with selected value.\r\n   */\r\n  protected abstract _setSelectedLabel(): void;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {DateLike, Nullable, ThemeColors} from '../../../../utils/type.util';\r\nimport {isDefined} from '../../../../utils/validate.util';\r\nimport {CustomControl} from '../../../abstracts/custom-control/custom-control';\r\n\r\n/**\r\n * Common class for datepicker.\r\n * It can be used for both datepicker and ranged datepicker.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-datepicker favi-input',\r\n  },\r\n})\r\nexport abstract class FaviBaseCommonDatepicker extends CustomControl {\r\n  // Date format to display.\r\n  // Follow DatePipe formatting.\r\n  @Input() format = 'yyyy-MM-dd';\r\n\r\n  // Label for a confirm button.\r\n  @Input() confirmLabel = 'Confirm';\r\n\r\n  // Theme color for a confirm button.\r\n  @Input() confirmTheme: Nullable<ThemeColors> = 'primary';\r\n\r\n  // Min date to input.\r\n  protected _minDate: Nullable<DateLike> = null;\r\n\r\n  // Max date to input.\r\n  protected _maxDate: Nullable<DateLike> = null;\r\n\r\n  /**\r\n   * Set minimum selectable date.\r\n   * If it isn't set, there is no limitation for minimum date.\r\n   *\r\n   * @param date\r\n   */\r\n  @Input()\r\n  set minDate(date: Nullable<DateLike>) {\r\n    this._minDate = isDefined<DateLike>(date) ? new Date(date) : null;\r\n  }\r\n\r\n  /**\r\n   * Get min date.\r\n   */\r\n  get minDate(): Nullable<DateLike> {\r\n    return this._minDate;\r\n  }\r\n\r\n  /**\r\n   * Set maximum selectable date.\r\n   * If it isn't set, there is no limitation for maximum date.\r\n   *\r\n   * @param date\r\n   */\r\n  @Input()\r\n  set maxDate(date: Nullable<DateLike>) {\r\n    this._maxDate = isDefined<DateLike>(date) ? new Date(date) : null;\r\n  }\r\n\r\n  /**\r\n   * Get max date.\r\n   */\r\n  get maxDate(): Nullable<DateLike> {\r\n    return this._maxDate;\r\n  }\r\n}\r\n","import {Component, HostBinding, Inject} from '@angular/core';\r\nimport {FaviBaseOverlay} from '../../../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\r\nimport {FaviOverlayRef} from '../../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\nimport {SubscriptionManager} from '../../../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * Base class to create modal.\r\n * A component which want to open as a modal need to extend this class.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-modal', // Bind favi-modal class to apply global style.\r\n  },\r\n  animations: [\r\n    trigger('poppingFadeInOut', [\r\n      state('void', style({\r\n        opacity: 0,\r\n        transform: 'translate(-50%, -50%) scale(.5)',\r\n      })),\r\n      state('show', style({\r\n        opacity: 1,\r\n        transform: 'translate(-50%, -50%) scale(1)',\r\n      })),\r\n      transition('void <=> show', animate('.1s')),\r\n    ]),\r\n  ],\r\n})\r\nexport abstract class FaviBaseModal<D = any, R = void> extends FaviBaseOverlay<D, R> {\r\n  // Bind 'poppingFadeInOut' with 'show' state.\r\n  @HostBinding('@poppingFadeInOut') poppingFadeInOutState = 'show';\r\n\r\n  protected constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<D, R>,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(_faviOverlayRef, _subscriptionManager);\r\n  }\r\n}\r\n","import {FaviBaseModal} from '../../../modal/favi-modal/abstracts/favi-base-modal/favi-base-modal';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviOverlayData} from '../../../overlay/favi-overlay/services/favi-overlay-data';\r\nimport {FaviBaseDatepickerCalendarData} from './favi-base-datepicker-calendar-data';\r\nimport {DateLike, Nullable} from '../../../../utils/type.util';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * Base class to create calendar for datepicker.\r\n * It can be used calendar of both datepicker and ranged datepicker.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-datepicker-calendar',\r\n  },\r\n})\r\nexport abstract class FaviBaseDatepickerCalendar<D extends FaviBaseDatepickerCalendarData, R = DateLike> extends FaviBaseModal<any, R> {\r\n  protected constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<D, R>,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n    @Inject(FaviOverlayData) protected _data: FaviBaseDatepickerCalendarData,\r\n  ) {\r\n    super(_faviOverlayRef, _subscriptionManager);\r\n  }\r\n\r\n  get minDate(): Nullable<DateLike> {\r\n    return this._data.minDate;\r\n  }\r\n\r\n  get maxDate(): Nullable<DateLike> {\r\n    return this._data.maxDate;\r\n  }\r\n}\r\n","import {Component, ElementRef, HostBinding, HostListener, Input, OnDestroy, Optional, ViewChild} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {disableEvent} from '../../../../utils/event.util';\r\nimport {CustomControl} from '../../../abstracts/custom-control/custom-control';\r\n\r\n/**\r\n * Base class to create slider.\r\n * Value validation and UI update should be done by writeValue() method.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-slider',\r\n  },\r\n})\r\nexport abstract class FaviBaseSlider extends CustomControl implements OnDestroy {\r\n  // Ref to slider track.\r\n  @ViewChild('sliderTrack', {read: ElementRef}) sliderTrackRef!: ElementRef<HTMLElement>;\r\n\r\n  // Min value.\r\n  protected _min = 0;\r\n\r\n  // Max value.\r\n  protected _max = 1;\r\n\r\n  // Step for each value.\r\n  protected _step = 1;\r\n\r\n  // Drag started state.\r\n  protected _draggingStarted = false;\r\n\r\n  // Touch event added state.\r\n  protected _touchEventAdded = false;\r\n\r\n  protected constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  /**\r\n   * Set minimum value of slider.\r\n   *\r\n   * @param min\r\n   */\r\n  @Input()\r\n  set min(min: number) {\r\n    this._min = min;\r\n  }\r\n\r\n  get min(): number {\r\n    return this._min;\r\n  }\r\n\r\n  /**\r\n   * Set maximum value for slider.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set max(value: number) {\r\n    this._max = value;\r\n  }\r\n\r\n  get max(): number {\r\n    return this._max;\r\n  }\r\n\r\n  /**\r\n   * Set step for slider.\r\n   *\r\n   * @param value\r\n   */\r\n  @Input()\r\n  set step(value: number) {\r\n    this._step = value;\r\n  }\r\n\r\n  get step(): number {\r\n    return this._step;\r\n  }\r\n\r\n  /**\r\n   * Get tabindex by disabled state.\r\n   */\r\n  @HostBinding('attr.tabindex')\r\n  get tabIndex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  /**\r\n   * Get ref to host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  /**\r\n   * Get total value of slider.\r\n   * It's differ of max and min.\r\n   */\r\n  get total(): number {\r\n    return this.max - this.min;\r\n  }\r\n\r\n  /**\r\n   * Get each step in percentage.\r\n   */\r\n  get stepPercentage(): number {\r\n    return this.step / this.total;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._removeTouchRelatedEvent();\r\n  }\r\n\r\n  /**\r\n   * Focus to host element.\r\n   */\r\n  override focus(): void {\r\n    this.elementRef.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * Remove focus from host element.\r\n   */\r\n  override blur(): void {\r\n    this.elementRef.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * Mousedown listener to start dragging the button.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('mousedown', ['$event'])\r\n  onMouseDown(event: MouseEvent): void {\r\n    if (!this._draggingStarted) {\r\n      this._draggingStarted = true;\r\n      this._updateValueByPointedPosition(event.x);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Touch start listener to start dragging the button.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('touchstart', ['$event'])\r\n  onTouchStart(event: TouchEvent): void {\r\n    if (!this._draggingStarted) {\r\n      this._draggingStarted = true;\r\n      this._updateValueByPointedPosition(event.touches[0].pageX);\r\n      this._addTouchRelatedEvent();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * To drag button, mousemove listener should be bound to window.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('window:mousemove', ['$event'])\r\n  onMouseMove(event: PointerEvent): void {\r\n    if (this._draggingStarted) {\r\n      this._updateValueByPointedPosition(event.x);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * To stop dragging, mouseup listener should be bound to window.\r\n   */\r\n  @HostListener('window:mouseup', ['$event'])\r\n  onMouseUp(event: PointerEvent): void {\r\n    if (this._draggingStarted) {\r\n      this._draggingStarted = false;\r\n      this._updateValueByPointedPosition(event.x);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * To stop dragging, touchend listener should be bound to window.\r\n   */\r\n  @HostListener('window:touchend')\r\n  onTouchEnd(): void {\r\n    if (this._draggingStarted) {\r\n      this._draggingStarted = false;\r\n      this._removeTouchRelatedEvent();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * To stop dragging, touchcancel listener should be bound to window.\r\n   */\r\n  @HostListener('window:touchcancel')\r\n  onTouchCancel(): void {\r\n    this.onTouchEnd();\r\n  }\r\n\r\n  /**\r\n   * ArrowLeft keydown listener to value down.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown.arrowLeft', ['$event'])\r\n  onHostArrowLeftKeyDown(event: KeyboardEvent): void {\r\n    disableEvent(event);\r\n    this._valueDown();\r\n  }\r\n\r\n  /**\r\n   * ArrowRight keydown listener to value up.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown.arrowRight', ['$event'])\r\n  onHostArrowRightKeyDown(event: KeyboardEvent): void {\r\n    disableEvent(event);\r\n    this._valueUp();\r\n  }\r\n\r\n  /**\r\n   * Add touchmove event to window to detect the touch position.\r\n   */\r\n  protected _addTouchRelatedEvent(): void {\r\n    if (this._draggingStarted && !this._touchEventAdded) {\r\n      window.addEventListener('touchmove', this._onTouchMove, {\r\n        passive: false,\r\n      });\r\n\r\n      this._touchEventAdded = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Remove touchmove event after touch finished.\r\n   */\r\n  protected _removeTouchRelatedEvent(): void {\r\n    window.removeEventListener('touchmove', this._onTouchMove);\r\n\r\n    this._touchEventAdded = false;\r\n  }\r\n\r\n  /**\r\n   * Touch move handler.\r\n   *\r\n   * @param event\r\n   */\r\n  protected _onTouchMove = (event: TouchEvent): void => {\r\n    disableEvent(event);\r\n\r\n    console.debug('touchmove');\r\n\r\n    this._updateValueByPointedPosition(event.touches[0].pageX);\r\n  }\r\n\r\n  /**\r\n   * Calculate the value with pointed x position\r\n   * and write/set value to component.\r\n   *\r\n   * @param x - Pointed x position in slider track.\r\n   */\r\n  protected _updateValueByPointedPosition(x: number): void {\r\n    const domRect = this.sliderTrackRef.nativeElement.getBoundingClientRect();\r\n    const pointedWidth = x - domRect.left;\r\n\r\n    const pointedWidthPercentage = pointedWidth / domRect.width;\r\n    const stepCount = Math.round(pointedWidthPercentage / this.stepPercentage);\r\n    const value = (this.step * stepCount) + this.min;\r\n\r\n    this.writeValue(value);\r\n    this.setValue(value);\r\n  }\r\n\r\n  /**\r\n   * Method to add 1 step to value.\r\n   */\r\n  protected abstract _valueUp(): void;\r\n\r\n  /**\r\n   * Method to remove 1 step from value.\r\n   */\r\n  protected abstract _valueDown(): void;\r\n}\r\n","import {Component, ElementRef, HostBinding, HostListener, Optional} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {CustomControl} from '../../../abstracts/custom-control/custom-control';\r\nimport {Nullable, ThemeColors} from '../../../../utils/type.util';\r\n\r\n/**\r\n * Base class to create toggleable component.\r\n * It allows boolean value with ngModel or FormControl.\r\n */\r\n@Component({\r\n  template: '',\r\n})\r\nexport abstract class FaviBaseToggleable extends CustomControl {\r\n  @HostBinding('class.favi-selected') value = false;\r\n\r\n  protected constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  /**\r\n   * Get different tabindex value by disabled state.\r\n   */\r\n  @HostBinding('attr.tabindex')\r\n  get tabIndex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  /**\r\n   * Get ref to host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  /**\r\n   * Get theme color by value status.\r\n   */\r\n  get theme(): Nullable<ThemeColors> {\r\n    return this.value ? 'primary' : null;\r\n  }\r\n\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.toggleValue();\r\n  }\r\n\r\n  @HostListener('keydown.space')\r\n  onHostSpaceKeyDown(): void {\r\n    this.toggleValue();\r\n  }\r\n\r\n  override writeValue(obj: any): void {\r\n    this.value = obj || false;\r\n  }\r\n\r\n  override focus(): void {\r\n    this.elementRef.nativeElement.focus();\r\n  }\r\n\r\n  override blur(): void {\r\n    this.elementRef.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * Toggle checked value.\r\n   */\r\n  toggleValue(): void {\r\n    const reversedValue = !this.value;\r\n\r\n    this.setValue(reversedValue);\r\n    this.writeValue(reversedValue);\r\n  }\r\n}\r\n","import {DateLike, Nullable} from '../../../utils/type.util';\r\nimport {formatDate} from '@angular/common';\r\nimport {isValidDate} from '../../../utils/validate.util';\r\nimport {toInteger} from '../../../utils/convert.util';\r\n\r\n/**\r\n * Correct incorrect date string to yyyy-MM-dd format.\r\n *\r\n * @param dateString - Date string to correct.\r\n * @param format - Date format. It uses DatePipe formatting.\r\n * @param minDate\r\n * @param maxDate\r\n */\r\nexport function correctDateString(dateString: string, format: string, minDate: Nullable<DateLike> = null, maxDate: Nullable<DateLike> = null): string {\r\n  let dateValue: DateLike;\r\n\r\n  // When the 'dateString' is 8 length digits, try to divide it in yyyyMMdd.\r\n  if (/^\\d{8}$/.exec(dateString)) {\r\n    const year = toInteger(dateString.substring(0, 4));\r\n    const month = toInteger(dateString.substring(4, 6));\r\n    const date = toInteger(dateString.substring(6, 8));\r\n\r\n    dateValue = new Date(year, month - 1, date);\r\n  } else {\r\n    dateValue = new Date(dateString);\r\n  }\r\n\r\n  // When date is invalid, return original date string.\r\n  if (!isValidDate(dateValue)) {\r\n    return dateString;\r\n  }\r\n\r\n  // When correctedDateString is less than minDate.\r\n  if (minDate && new Date(dateValue).valueOf() < new Date(minDate).valueOf()) {\r\n    dateValue = minDate;\r\n  }\r\n\r\n  // When correctedDateString is more than maxDate.\r\n  if (maxDate && new Date(dateValue).valueOf() > new Date(maxDate).valueOf()) {\r\n    dateValue = maxDate;\r\n  }\r\n\r\n  return formatDate(dateValue, format, 'en-US');\r\n}\r\n","import {FaviInputMaskFunction} from '../favi-input-mask/favi-input-mask-function';\r\nimport {FaviInputMaskResult} from '../favi-input-mask/favi-input-mask-result';\r\n\r\n/**\r\n * Mask function for date input with yyyy-MM-dd format.\r\n * For date value, there can be only 'd' at the result.\r\n * That should be fixed on blur from the element.\r\n *\r\n * @param event - InputEvent to calculate selection position.\r\n * @param value - Value to transform.\r\n */\r\nexport const DateInputMask: FaviInputMaskFunction = (event: InputEvent, value: string): FaviInputMaskResult=> {\r\n  const {\r\n    selectionStart: previousSelection,\r\n  } = event.target as HTMLInputElement;\r\n\r\n  value = value.replaceAll(/\\D/g, '');\r\n\r\n  const year = value.substring(0, 4);\r\n  let month = value.substring(4, 6);\r\n  let date: string;\r\n\r\n  if (parseInt(month) > 12) {\r\n    month = value.substring(4, 5);\r\n    date = value.substring(5, 7);\r\n  } else {\r\n    date = value.substring(6, 8);\r\n  }\r\n\r\n  const yearNumber = parseInt(year);\r\n  const monthNumber = parseInt(month);\r\n  const dateNumber = parseInt(date);\r\n  const previousDateLength = date.length;\r\n\r\n  if (date) {\r\n    const lastDateOfMonth = new Date(yearNumber, monthNumber, 0);\r\n\r\n    date = Math.min(dateNumber, lastDateOfMonth.getDate()).toString(); // Restrict date value not to over the last date.\r\n\r\n    if (date.length < previousDateLength) {\r\n      date = date.padStart(2, '0');\r\n    }\r\n  }\r\n\r\n  let newSelection = previousSelection;\r\n\r\n  // When not deleting content, re-calculate the selection position\r\n  // because masked value can have additional dashes which disrupt previous selection position.\r\n  if (!event.inputType.startsWith('deleteContent')) {\r\n    switch (newSelection) {\r\n      case 5: {\r\n        // Position 5 is month starting position.\r\n        // In this case, a dash '-' will be inserted before.\r\n        // So, add 1 position.\r\n        newSelection += 1;\r\n        break;\r\n      }\r\n\r\n      case 7: {\r\n        // When month is smaller than 10, the position 7 is date starting position.\r\n        // In this case, a dash '-' and starting zero will be inserted before.\r\n        // So, add 2 position.\r\n        if (monthNumber < 10) {\r\n          month = month.padStart(2, '0');\r\n          newSelection += 2;\r\n        }\r\n\r\n        break;\r\n      }\r\n\r\n      case 8: {\r\n        // The month will always have prefixed 0.\r\n        // That means, a dash '-' will always be inserted before on selection 8.\r\n        // So, add 1 position.\r\n        newSelection += 1;\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (month && date) {\r\n    value = `${year}-${month}-${date}`;\r\n  } else if (month) {\r\n    value = `${year}-${month}`;\r\n  } else if (year) {\r\n    value = `${year}`;\r\n  } else {\r\n    value = '';\r\n  }\r\n\r\n  return {\r\n    selection: newSelection,\r\n    value,\r\n  };\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Renderer2,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {correctDateString} from '../../../common/correct-date-string';\r\nimport {Nullable} from '../../../../../utils/type.util';\r\nimport {NgControl} from '@angular/forms';\r\nimport {FaviBaseCommonDatepicker} from '../../../abstracts/favi-base-common-datepicker/favi-base-common-datepicker';\r\nimport {isValidDate} from '../../../../../utils/validate.util';\r\n\r\n/**\r\n * Base class to create ranged datepicker.\r\n *\r\n * There must be 2 inputs and spans inside the component.\r\n * One input should have name startDateInput, the other should have name endDateInput.\r\n * These inputs allow user to input start/end dates.\r\n *\r\n * For span, one span should have name startDateValue, the other should have name endDateValue.\r\n * The startDateValue reflects the value of startDateInput to calculate the width of startDateInput.\r\n * The endDateValue reflects the value of endDateInput to calculate the width of endDateInput.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-base-ranged-datepicker',\r\n  },\r\n})\r\nexport abstract class FaviBaseRangedDatepicker extends FaviBaseCommonDatepicker implements AfterViewInit, OnDestroy {\r\n  // Placeholder for start date.\r\n  @Input() startPlaceholder = 'YYYY-MM-DD';\r\n\r\n  // Placeholder for end date.\r\n  @Input() endPlaceholder = 'YYYY-MM-DD';\r\n\r\n  // Ref to start date input.\r\n  @ViewChild('startDateInput', {read: ElementRef}) startDateInputRef!: ElementRef<HTMLInputElement>;\r\n\r\n  // Ref to end date input.\r\n  @ViewChild('endDateInput', {read: ElementRef}) endDateInputRef!: ElementRef<HTMLInputElement>;\r\n\r\n  // Ref to pseudo start date element.\r\n  // It calculates input element width by content.\r\n  @ViewChild('startDateValue', {read: ElementRef}) startDateValueRef!: ElementRef<HTMLInputElement>;\r\n\r\n  // Ref to pseudo end date element.\r\n  // It calculates input element width by content.\r\n  @ViewChild('endDateValue', {read: ElementRef}) endDateValueRef!: ElementRef<HTMLInputElement>;\r\n\r\n  // Focused state of component.\r\n  // It will be true if startDateInput or endDateInput has focused.\r\n  @HostBinding('class.favi-focused') focused = false;\r\n\r\n  // Start input value.\r\n  startDateString = '';\r\n\r\n  // End input value.\r\n  endDateString = '';\r\n\r\n  // No need to refer records parameter.\r\n  // It will update all input widths even one input value has changed.\r\n  protected _mutationObserver = new MutationObserver(() => {\r\n    this._resizeStartDateInput();\r\n    this._resizeEndDateInput();\r\n  });\r\n\r\n  protected constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected _renderer: Renderer2,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._mutationObserver.observe(this.startDateValueRef.nativeElement, {\r\n      subtree: true,\r\n      childList: true,\r\n      characterData: true,\r\n    });\r\n\r\n    this._mutationObserver.observe(this.endDateValueRef.nativeElement, {\r\n      subtree: true,\r\n      childList: true,\r\n      characterData: true,\r\n    });\r\n\r\n    // Update initial size to set placeholder size.\r\n    this._resizeStartDateInput();\r\n    this._resizeEndDateInput();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._mutationObserver.disconnect();\r\n  }\r\n\r\n  /**\r\n   * When host element is clicked, call focus() method to\r\n   * focus to input element.\r\n   */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.focus();\r\n  }\r\n\r\n  override focus(): void {\r\n    this.startDateInputRef.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * When blur() called, blur focusing from both start/end date input.\r\n   */\r\n  override blur(): void {\r\n    this.startDateInputRef.nativeElement.blur();\r\n    this.endDateInputRef.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * Focus event listener for input element.\r\n   * It makes component as focused.\r\n   */\r\n  onInputFocus(): void {\r\n    this.focused = true;\r\n  }\r\n\r\n  /**\r\n   * Update 'startDateString' and mark component as dirty.\r\n   *\r\n   * @param value\r\n   */\r\n  onStartDateStringChange(value: string): void {\r\n    this.startDateString = value;\r\n    this.markAsDirty();\r\n  }\r\n\r\n  /**\r\n   * Update 'endDateString' and mark component as dirty.\r\n   *\r\n   * @param value\r\n   */\r\n  onEndDateStringChange(value: string): void {\r\n    this.endDateString = value;\r\n    this.markAsDirty();\r\n  }\r\n\r\n  /**\r\n   * Listener for blur event on start date input.\r\n   */\r\n  onStartDateBlur(): void {\r\n    this.focused = false;\r\n\r\n    this.markAsTouched();\r\n\r\n    this.updateStartDateValue(correctDateString(\r\n      this.startDateString,\r\n      this.format,\r\n      this.minDate,\r\n      this.maxDate,\r\n    ));\r\n  }\r\n\r\n  /**\r\n   * Listener for blur event on end date input.\r\n   */\r\n  onEndDateBlur(): void {\r\n    this.focused = false;\r\n\r\n    this.markAsTouched();\r\n\r\n    this.updateEndDateValue(correctDateString(\r\n      this.endDateString,\r\n      this.format,\r\n      this.minDate,\r\n      this.maxDate,\r\n    ));\r\n  }\r\n\r\n  /**\r\n   * Update start date string and apply changes to control.\r\n   *\r\n   * @param dateString\r\n   */\r\n  updateStartDateValue(dateString: string): void {\r\n    if (!dateString) {\r\n      this.startDateString = '';\r\n    } else {\r\n      this.startDateString = dateString;\r\n    }\r\n\r\n    this._onDateRangeChange();\r\n  }\r\n\r\n  /**\r\n   * Update end date string and apply changes to control.\r\n   *\r\n   * @param dateString\r\n   */\r\n  updateEndDateValue(dateString: string): void {\r\n    if (!dateString) {\r\n      this.endDateString = '';\r\n    } else {\r\n      this.endDateString = dateString;\r\n    }\r\n\r\n    this._onDateRangeChange();\r\n  }\r\n\r\n  /**\r\n   * Update value of control.\r\n   */\r\n  protected _onDateRangeChange(): void {\r\n    let startDate: Nullable<Date> = new Date(this.startDateString);\r\n    let endDate: Nullable<Date> = new Date(this.endDateString);\r\n\r\n    if (!isValidDate(startDate)) {\r\n      startDate = null;\r\n    }\r\n\r\n    if (!isValidDate(endDate)) {\r\n      endDate = null;\r\n    }\r\n\r\n    const value = [startDate, endDate];\r\n\r\n    this.setValue(value);\r\n    this.writeValue(value);\r\n  }\r\n\r\n  /**\r\n   * Resize start date input with value length.\r\n   */\r\n   protected _resizeStartDateInput(): void {\r\n    const {width} = this.startDateValueRef.nativeElement.getBoundingClientRect();\r\n\r\n    this._renderer.setStyle(this.startDateInputRef.nativeElement, 'width', `${width}px`);\r\n  }\r\n\r\n  /**\r\n   * Resize end date input with value length.\r\n   */\r\n   protected _resizeEndDateInput(): void {\r\n    const {width} = this.endDateValueRef.nativeElement.getBoundingClientRect();\r\n\r\n    this._renderer.setStyle(this.endDateInputRef.nativeElement, 'width', `${width}px`);\r\n  }\r\n}\r\n","import {Component, ElementRef, HostBinding, HostListener, Input, Optional, ViewChild} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {correctDateString} from '../../../common/correct-date-string';\r\nimport {FaviBaseCommonDatepicker} from '../../../abstracts/favi-base-common-datepicker/favi-base-common-datepicker';\r\nimport {isValidDate} from '../../../../../utils/validate.util';\r\n\r\n/**\r\n * Base class to create datepicker.\r\n * It requires HTMLInputElement in view with name of dateInput to use dateInputRef.\r\n * Also, onHostBlur() method should be bound to dateInputRef with blur event.\r\n *\r\n * There is a dateString property which is ngModel of dateInputRef.\r\n * So, dateString needs to be bound with ngModel directive.\r\n * When ngModelChange triggered from dateInputRef, onDateStringChange() method should be called\r\n * with changed value.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-single-datepicker',\r\n  },\r\n})\r\nexport abstract class FaviBaseSingleDatepicker extends FaviBaseCommonDatepicker {\r\n  // Placeholder for inner input element.\r\n  // Default value is 'yyyy-MM-dd'.\r\n  @Input() placeholder = 'YYYY-MM-DD';\r\n\r\n  // Reference to inner input element name with dateInput.\r\n  @ViewChild('dateInput', {read: ElementRef}) dateInputRef!: ElementRef<HTMLInputElement>;\r\n\r\n  // Focused state of component.\r\n  // Actually, it's focused state of inner input element.\r\n  @HostBinding('class.favi-focused') focused = false;\r\n\r\n  // Date string to set for dateInputRef.\r\n  dateString = '';\r\n\r\n  protected constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected _elementRef: ElementRef,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  /**\r\n   * Get ref of host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  /**\r\n   * Get tabindex attribute value for calendar button by disabled state.\r\n   */\r\n  get buttonTabIndex(): string {\r\n    return this.disabled ? '-1' : '';\r\n  }\r\n\r\n  /**\r\n   * When host element is clicked, call focus() method to\r\n   * focus to input element.\r\n   */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.focus();\r\n  }\r\n\r\n  /**\r\n   * Focus to input element.\r\n   */\r\n  override focus(): void {\r\n    this.dateInputRef.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * Blur from input element.\r\n   */\r\n  override blur(): void {\r\n    this.dateInputRef.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * NgModelChange listener.\r\n   *\r\n   * @param value\r\n   */\r\n  onDateStringChange(value: string): void {\r\n    console.debug('Datepicker input is dirty');\r\n\r\n    this.dateString = value;\r\n    this.markAsDirty();\r\n  }\r\n\r\n  /**\r\n   * Method to emit onFocus, and set focused true.\r\n   */\r\n  onInputFocus(): void {\r\n    this.focused = true;\r\n  }\r\n\r\n  /**\r\n   * Method to emit onBlur, and set focused false.\r\n   * This should be bound to input element.\r\n   *\r\n   * When blur from input element, dateString should be corrected.\r\n   */\r\n  onInputBlur(): void {\r\n    console.debug('Datepicker input is touched');\r\n\r\n    this.focused = false;\r\n\r\n    this.markAsTouched();\r\n\r\n    this.updateValue(correctDateString(\r\n      this.dateString,\r\n      this.format,\r\n      this.minDate,\r\n      this.maxDate,\r\n    ));\r\n  }\r\n\r\n  /**\r\n   * Handle dateString changes to update component value.\r\n   * It dateString isn't yyyy-MM-dd format, or dateString is same with dateString property,\r\n   * this method will do nothing.\r\n   *\r\n   * @param dateString\r\n   */\r\n  updateValue(dateString: string): void {\r\n    this.dateString = dateString;\r\n\r\n    const newValue = new Date(dateString);\r\n\r\n    if (isValidDate(newValue)) {\r\n      this.setValue(newValue);\r\n      this.writeValue(newValue);\r\n    } else {\r\n      this.setValue(null);\r\n      this.writeValue(null);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Implement it to open calendar modal.\r\n   */\r\n  abstract openCalendar(): void;\r\n}\r\n","import {Component, HostBinding, Input} from '@angular/core';\nimport {FaviModalActionsAligns} from './favi-modal-actions-aligns';\n\n/**\n * Container for actions of modal.\n * When viewport is Mobile, it will display top border to distinct with content area.\n *\n * It should be rendered at the bottom of modal.\n */\n@Component({\n  selector: 'favi-modal-actions',\n  templateUrl: './favi-modal-actions.component.html',\n  host: {\n    // Bind class to set some global styles.\n    // It can be found in _favi-modal.scss.\n    class: 'favi-modal-actions',\n  },\n})\nexport class FaviModalActionsComponent {\n  private _align: FaviModalActionsAligns = 'end';\n\n  /**\n   * Set alignment.\n   * It will set position of action buttons.\n   * Default value is 'end'.\n   *\n   * @param align\n   */\n  @Input()\n  set align(align: FaviModalActionsAligns) {\n    this._align = align;\n  }\n\n  get align(): FaviModalActionsAligns {\n    return this._align;\n  }\n\n  @HostBinding('class.favi-end-align')\n  get isEndAlign(): boolean {\n    return this.align === 'end';\n  }\n\n  @HostBinding('class.favi-center-align')\n  get isCenterAlign(): boolean {\n    return this.align === 'center';\n  }\n\n  @HostBinding('class.favi-start-align')\n  get isStartAlign(): boolean {\n    return this.align === 'start';\n  }\n\n  @HostBinding('class.favi-stretch-align')\n  get isStretchAlign(): boolean {\n    return this.align === 'stretch';\n  }\n}\n","<ng-content></ng-content>\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport {FaviOverlayRef} from '../../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviOverlayData} from '../../../../overlay/favi-overlay/services/favi-overlay-data';\r\nimport {FaviSingleDatepickerCalendarData} from './favi-single-datepicker-calendar-data';\r\nimport {Nullable, ThemeColors} from '../../../../../utils/type.util';\r\nimport {\r\n  FaviBaseDatepickerCalendar\r\n} from '../../../abstracts/favi-base-datepicker-calendar/favi-base-datepicker-calendar';\r\nimport {SubscriptionManager} from '../../../../../services/subscription-manager/subscription-manager';\r\n\r\n/**\r\n * It is modal to display calendar for FaviSingleDatepickerComponent.\r\n * Only single date can be selectable.\r\n */\r\n@Component({\r\n  selector: 'favi-single-datepicker-calendar',\r\n  templateUrl: './favi-single-datepicker-calendar.component.html',\r\n  host: {\r\n    class: 'favi-single-datepicker-calendar',\r\n  },\r\n})\r\nexport class FaviSingleDatepickerCalendarComponent extends FaviBaseDatepickerCalendar<FaviSingleDatepickerCalendarData, Nullable<Date>> implements OnInit {\r\n  // Current selected date.\r\n  selectedDate: Nullable<Date> = null;\r\n\r\n  constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<FaviSingleDatepickerCalendarData, Nullable<Date>>,\r\n    @Inject(FaviOverlayData) protected override _data: FaviSingleDatepickerCalendarData,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(_faviOverlayRef, _subscriptionManager, _data);\r\n  }\r\n\r\n  /**\r\n   * Get a label for a confirm button.\r\n   */\r\n  get confirmLabel(): string {\r\n    return this._data.confirmLabel;\r\n  }\r\n\r\n  /**\r\n   * Get a theme color for a confirm button.\r\n   */\r\n  get confirmTheme(): Nullable<ThemeColors> {\r\n    return this._data.confirmTheme;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.selectedDate = this._data.selectedDate;\r\n  }\r\n}\r\n","<favi-single-calendar\r\n  [(selectedDate)]=\"selectedDate\"\r\n  [minDate]=\"minDate\"\r\n  [maxDate]=\"maxDate\"></favi-single-calendar>\r\n\r\n<favi-modal-actions>\r\n  <button\r\n    (click)=\"close(selectedDate)\"\r\n    [disabled]=\"!selectedDate\"\r\n    [theme]=\"confirmTheme\"\r\n    type=\"button\"\r\n    faviFlatButton>\r\n    {{confirmLabel}}\r\n  </button>\r\n</favi-modal-actions>\r\n","import {Component, ElementRef, Optional} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {Nullable} from '../../../../utils/type.util';\r\nimport {FaviModalService} from '../../../modal/favi-modal/services/favi-modal.service';\r\nimport {\r\n  FaviSingleDatepickerCalendarComponent\r\n} from './favi-single-datepicker-calendar/favi-single-datepicker-calendar.component';\r\nimport {FaviSingleDatepickerCalendarData} from './favi-single-datepicker-calendar/favi-single-datepicker-calendar-data';\r\nimport {FaviBaseSingleDatepicker} from '../abstracts/favi-base-single-datepicker/favi-base-single-datepicker';\r\nimport {formatDate} from '@angular/common';\r\nimport {isValidDate} from '../../../../utils/validate.util';\r\n\r\n/**\r\n * Datepicker to allow user to select specific date.\r\n * Styles should be managed by _favi-datepicker.scss.\r\n */\r\n@Component({\r\n  selector: 'favi-single-datepicker',\r\n  templateUrl: './favi-single-datepicker.component.html',\r\n})\r\nexport class FaviSingleDatepickerComponent extends FaviBaseSingleDatepicker {\r\n  // Current value.\r\n  value: Nullable<Date> = null;\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n    private _faviModalService: FaviModalService,\r\n  ) {\r\n    super(ngControl, _elementRef);\r\n  }\r\n\r\n  override writeValue(obj: any): void {\r\n    this.value = obj;\r\n\r\n    if (isValidDate(this.value)) {\r\n      this.dateString = formatDate(this.value, this.format, 'en-US') || '';\r\n    }\r\n  }\r\n\r\n  override openCalendar(): void {\r\n    this._faviModalService.open<FaviSingleDatepickerCalendarData, Nullable<Date>>(FaviSingleDatepickerCalendarComponent, {\r\n      data: {\r\n        selectedDate: this.value,\r\n        minDate: this.minDate,\r\n        maxDate: this.maxDate,\r\n        confirmLabel: this.confirmLabel,\r\n        confirmTheme: this.confirmTheme,\r\n      },\r\n      onClose: selectedDate => {\r\n        if (selectedDate) {\r\n          this.writeValue(selectedDate);\r\n          this.setValue(selectedDate);\r\n        }\r\n      },\r\n    });\r\n  }\r\n}\r\n","<div class=\"favi-input-inner\">\r\n  <input\r\n    #dateInput\r\n    (blur)=\"onInputBlur()\"\r\n    (focus)=\"onInputFocus()\"\r\n    (ngModelChange)=\"onDateStringChange($event)\"\r\n    [ngModel]=\"dateString\"\r\n    [placeholder]=\"placeholder\"\r\n    [disabled]=\"$any(disabled)\"/>\r\n\r\n  <button\r\n    (click)=\"$event.stopPropagation(); openCalendar()\"\r\n    [tabindex]=\"buttonTabIndex\"\r\n    type=\"button\"\r\n    class=\"favi-button-no-styles\"\r\n    faviEffector>\r\n    <favi-icon>\r\n      calendar_month\r\n    </favi-icon>\r\n  </button>\r\n</div>\r\n\r\n<div class=\"favi-input-bottom-line\"></div>\r\n<div class=\"favi-input-bottom-line favi-activated\"></div>\r\n\r\n","import {Component, HostBinding, Input} from '@angular/core';\r\nimport {FaviModalHeaderAligns} from './favi-modal-header-aligns';\r\n\r\n/**\r\n * Header of modal.\r\n * Every content in this component will be rendered as a title.\r\n * If viewport is for mobile, it will display close button.\r\n *\r\n * Since it's a header, should be rendered at the top of modal.\r\n */\r\n@Component({\r\n  selector: 'favi-modal-header',\r\n  templateUrl: './favi-modal-header.component.html',\r\n  host: {\r\n    class: 'favi-modal-header',\r\n  },\r\n})\r\nexport class FaviModalHeaderComponent {\r\n  // Header content alignment.\r\n  private _align: FaviModalHeaderAligns = 'center';\r\n\r\n  /**\r\n   * Set header content alignment.\r\n   * It will set position of title in header.\r\n   * It's available only for PC and Tablet viewport.\r\n   * Default value is 'center'.\r\n   *\r\n   * @param align\r\n   */\r\n  @Input()\r\n  set align(align: FaviModalHeaderAligns) {\r\n    this._align = align;\r\n  }\r\n\r\n  get align(): FaviModalHeaderAligns {\r\n    return this._align;\r\n  }\r\n\r\n  @HostBinding('class.favi-center-align')\r\n  get isCenterAlign(): boolean {\r\n    return this.align === 'center';\r\n  }\r\n\r\n  @HostBinding('class.favi-start-align')\r\n  get isStartAlign(): boolean {\r\n    return this.align === 'start';\r\n  }\r\n}\r\n","<h3>\r\n  <ng-content></ng-content>\r\n</h3>\r\n","import {Component} from '@angular/core';\n\n/**\n * Content container of modal.\n * For PC and Tablet, it doesn't have top/bottom paddings inside.\n * But for Mobile, It will have top/bottom paddings because the header and actions container\n * will have border from Mobile viewport.\n * The top/bottom paddings will show proper space between content and borders.\n */\n@Component({\n  selector: 'favi-modal-content',\n  templateUrl: './favi-modal-content.component.html',\n  host: {\n    class: 'favi-modal-content',\n  },\n})\nexport class FaviModalContentComponent {\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviModalHeaderComponent} from './favi-modal-header/favi-modal-header.component';\r\nimport {FaviModalContentComponent} from './favi-modal-content/favi-modal-content.component';\r\nimport {FaviModalActionsComponent} from './favi-modal-actions/favi-modal-actions.component';\r\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\nimport {FaviModalBackdropComponent} from './favi-modal-backdrop/favi-modal-backdrop.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviModalHeaderComponent,\r\n    FaviModalContentComponent,\r\n    FaviModalActionsComponent,\r\n    FaviModalBackdropComponent\r\n  ],\r\n  exports: [\r\n    FaviModalHeaderComponent,\r\n    FaviModalContentComponent,\r\n    FaviModalActionsComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule\r\n  ]\r\n})\r\nexport class FaviModalModule { }\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviSingleDatepickerComponent} from './favi-single-datepicker.component';\r\nimport {FaviIconModule} from '../../../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../../../common/favi-effector/favi-effector.module';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {\r\n  FaviSingleDatepickerCalendarComponent\r\n} from './favi-single-datepicker-calendar/favi-single-datepicker-calendar.component';\r\nimport {FaviSingleCalendarModule} from '../../../calendar/favi-single-calendar/favi-single-calendar.module';\r\nimport {FaviModalModule} from '../../../modal/favi-modal/favi-modal.module';\r\nimport {FaviFlatButtonModule} from '../../../buttons/favi-flat-button/favi-flat-button.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviSingleDatepickerComponent,\r\n    FaviSingleDatepickerCalendarComponent\r\n  ],\r\n  exports: [\r\n    FaviSingleDatepickerComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule,\r\n    FormsModule,\r\n    FaviSingleCalendarModule,\r\n    FaviModalModule,\r\n    FaviFlatButtonModule\r\n  ]\r\n})\r\nexport class FaviSingleDatepickerModule { }\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport {\r\n  FaviBaseDatepickerCalendar\r\n} from '../../../abstracts/favi-base-datepicker-calendar/favi-base-datepicker-calendar';\r\nimport {FaviOverlayRef} from '../../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviOverlayData} from '../../../../overlay/favi-overlay/services/favi-overlay-data';\r\nimport {FaviRangedDatepickerCalendarData} from './favi-ranged-datepicker-calendar-data';\r\nimport {Nullable, RangedValue, ThemeColors} from '../../../../../utils/type.util';\r\nimport {isDefined} from '../../../../../utils/validate.util';\r\nimport {isDateBiggerOrEqual} from '../../../../../utils/date.util';\r\nimport {SubscriptionManager} from '../../../../../services/subscription-manager/subscription-manager';\r\n\r\n@Component({\r\n  selector: 'favi-ranged-datepicker-calendar',\r\n  templateUrl: './favi-ranged-datepicker-calendar.component.html',\r\n  host: {\r\n    class: 'favi-single-datepicker-calendar favi-ranged-datepicker-calendar',\r\n  },\r\n})\r\nexport class FaviRangedDatepickerCalendarComponent extends FaviBaseDatepickerCalendar<FaviRangedDatepickerCalendarData, RangedValue<Nullable<Date>>> implements OnInit {\r\n  // Current selected dates.\r\n  selectedDates: RangedValue<Nullable<Date>> = [null, null];\r\n\r\n  constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<FaviRangedDatepickerCalendarData, RangedValue<Nullable<Date>>>,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n    @Inject(FaviOverlayData) protected override _data: FaviRangedDatepickerCalendarData,\r\n  ) {\r\n    super(_faviOverlayRef, _subscriptionManager, _data);\r\n  }\r\n\r\n  /**\r\n   * Get a label for a confirm button.\r\n   */\r\n  get confirmLabel(): string {\r\n    return this._data.confirmLabel;\r\n  }\r\n\r\n  /**\r\n   * Get a theme color for a confirm button.\r\n   */\r\n  get confirmTheme(): Nullable<ThemeColors> {\r\n    return this._data.confirmTheme;\r\n  }\r\n\r\n  /**\r\n   * Get state of whether valid date selected or not.\r\n   */\r\n  get isValidDateSelected(): boolean {\r\n    return this.selectedDates\r\n      && this.selectedDates.length === 2\r\n      && isDefined<Date>(this.selectedDates[0])\r\n      && isDefined<Date>(this.selectedDates[1])\r\n      && isDateBiggerOrEqual(this.selectedDates[1], this.selectedDates[0]);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.selectedDates = this._data.selectedDates;\r\n  }\r\n}\r\n","<favi-ranged-calendar\r\n  [(selectedDates)]=\"selectedDates\"\r\n  [minDate]=\"minDate\"\r\n  [maxDate]=\"maxDate\"></favi-ranged-calendar>\r\n\r\n<favi-modal-actions>\r\n  <button\r\n    (click)=\"close(selectedDates)\"\r\n    [disabled]=\"!isValidDateSelected\"\r\n    [theme]=\"confirmTheme\"\r\n    type=\"button\"\r\n    faviFlatButton>\r\n    {{confirmLabel}}\r\n  </button>\r\n</favi-modal-actions>\r\n","import {Component, ElementRef, Optional, Renderer2} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {FaviBaseRangedDatepicker} from '../abstracts/favi-base-ranged-datepicker/favi-base-ranged-datepicker';\r\nimport {Nullable, RangedValue} from '../../../../utils/type.util';\r\nimport {formatDate} from '@angular/common';\r\nimport {isValidDate} from '../../../../utils/validate.util';\r\nimport {FaviModalService} from '../../../modal/favi-modal/services/favi-modal.service';\r\nimport {\r\n  FaviRangedDatepickerCalendarComponent\r\n} from './favi-ranged-datepicker-calendar/favi-ranged-datepicker-calendar.component';\r\nimport {FaviRangedDatepickerCalendarData} from './favi-ranged-datepicker-calendar/favi-ranged-datepicker-calendar-data';\r\n\r\n/**\r\n * Ranged datepicker which allows user to select ranged date.\r\n * Styles should be managed by _favi-ranged-datepicker.scss.\r\n */\r\n@Component({\r\n  selector: 'favi-ranged-datepicker',\r\n  templateUrl: './favi-ranged-datepicker.component.html',\r\n  host: {\r\n    class: 'favi-input favi-ranged-datepicker',\r\n  },\r\n})\r\nexport class FaviRangedDatepickerComponent extends FaviBaseRangedDatepicker {\r\n  // Selected values with min/max range.\r\n  // First index is min date, second index is max date.\r\n  values: RangedValue<Nullable<Date>> = [null, null];\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _renderer: Renderer2,\r\n    private _faviModalService: FaviModalService,\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(ngControl, _renderer);\r\n  }\r\n\r\n  /**\r\n   * Get ref of host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  /**\r\n   * Get tabindex attribute value for calendar button by disabled state.\r\n   */\r\n  get buttonTabIndex(): string {\r\n    return this.disabled ? '-1' : '';\r\n  }\r\n\r\n  override writeValue(obj: any): void {\r\n    this.values = obj || [null, null];\r\n\r\n    const [startDate, endDate] = this.values;\r\n\r\n    if (isValidDate(startDate)) {\r\n      this.startDateString = formatDate(startDate, this.format, 'en-US') || '';\r\n    }\r\n\r\n    if (isValidDate(endDate)) {\r\n      this.endDateString = formatDate(endDate, this.format, 'en-US') || '';\r\n    }\r\n  }\r\n\r\n  openCalendar(): void {\r\n    this._faviModalService.open<FaviRangedDatepickerCalendarData, RangedValue<Nullable<Date>>>(FaviRangedDatepickerCalendarComponent, {\r\n      data: {\r\n        selectedDates: this.values,\r\n        minDate: this.minDate,\r\n        maxDate: this.maxDate,\r\n        confirmLabel: this.confirmLabel,\r\n        confirmTheme: this.confirmTheme,\r\n      },\r\n      onClose: (selectedDates) => {\r\n        if (selectedDates) {\r\n          this.writeValue(selectedDates);\r\n          this.setValue(selectedDates);\r\n        }\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * The FaviFormFieldComponent has click event to call focus() method of control.\r\n   * There is 2 inputs in ranged datepicker, however, click event of form field should be disabled.\r\n   *\r\n   * @param event\r\n   */\r\n  stopInputClickPropagation(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n  }\r\n}\r\n","<div class=\"favi-input-inner\">\r\n  <div class=\"favi-ranged-input-container\">\r\n    <input\r\n      #startDateInput\r\n      (blur)=\"onStartDateBlur()\"\r\n      (focus)=\"onInputFocus()\"\r\n      (click)=\"stopInputClickPropagation($event)\"\r\n      (ngModelChange)=\"onStartDateStringChange($event)\"\r\n      [ngModel]=\"startDateString\"\r\n      [placeholder]=\"startPlaceholder\"\r\n      [disabled]=\"$any(disabled)\"/>\r\n\r\n    <div class=\"favi-ranged-datepicker-dash\">-</div>\r\n\r\n    <input\r\n      #endDateInput\r\n      (blur)=\"onEndDateBlur()\"\r\n      (focus)=\"onInputFocus()\"\r\n      (click)=\"stopInputClickPropagation($event)\"\r\n      (ngModelChange)=\"onEndDateStringChange($event)\"\r\n      [ngModel]=\"endDateString\"\r\n      [placeholder]=\"endPlaceholder\"\r\n      [disabled]=\"$any(disabled)\"/>\r\n  </div>\r\n\r\n  <button\r\n    (click)=\"$event.stopPropagation(); openCalendar()\"\r\n    [tabIndex]=\"buttonTabIndex\"\r\n    type=\"button\"\r\n    class=\"favi-button-no-styles\"\r\n    faviEffector>\r\n    <favi-icon>\r\n      calendar_month\r\n    </favi-icon>\r\n  </button>\r\n</div>\r\n\r\n<div class=\"favi-input-bottom-line\"></div>\r\n<div class=\"favi-input-bottom-line favi-activated\"></div>\r\n\r\n<!-- Pseudo elements to calculate input width by content. -->\r\n<span\r\n  #startDateValue\r\n  class=\"favi-ranged-datepicker-pseudo-value\">{{startDateString || startPlaceholder}}</span>\r\n<span\r\n  #endDateValue\r\n  class=\"favi-ranged-datepicker-pseudo-value\">{{endDateString || endPlaceholder}}</span>\r\n","import {AfterViewInit, Directive, ElementRef, HostListener, Input, OnInit, Optional} from '@angular/core';\r\nimport {FaviInputMaskFunction} from './favi-input-mask-function';\r\nimport {NgControl} from '@angular/forms';\r\nimport {CustomControl} from '../../abstracts/custom-control/custom-control';\r\nimport {isDefined} from '../../../utils/validate.util';\r\nimport {InputRequiredError} from '../../../errors/input-required-error';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\n\r\n/**\r\n * Directive to masking the value of input element.\r\n * It changes value on input with provided maskFunction.\r\n *\r\n * When using 'maskTarget', it can search nested input target element by using css selector.\r\n */\r\n@Directive({\r\n  selector: '[faviInputMask]'\r\n})\r\nexport class FaviInputMaskDirective extends CustomControl implements OnInit, AfterViewInit {\r\n  /** Mask function to transform input value. */\r\n  @Input({ required: true }) maskFunction!: FaviInputMaskFunction;\r\n\r\n  /**\r\n   * CSS selector for target element. When it's not provided or target not found, it uses value of host element for masking.\r\n   * It may be useful when used FaviInputComponent.\r\n   */\r\n  @Input() maskTarget = '';\r\n\r\n  /** Target input element to mask value. */\r\n  private _target!: HTMLInputElement;\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  override get disabled(): boolean {\r\n    return super.disabled;\r\n  }\r\n\r\n  /**\r\n   * Override boolean setter.\r\n   *\r\n   * @param value\r\n   */\r\n  override set disabled(value: BooleanAttribute) {\r\n    super.disabled = value;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!isDefined(this.maskFunction)) {\r\n      throw new InputRequiredError('maskFunction');\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this._elementRef.nativeElement instanceof HTMLInputElement) {\r\n      this._target = this._elementRef.nativeElement;\r\n    }\r\n\r\n    if (this.maskTarget) {\r\n      try {\r\n        const target = this._elementRef.nativeElement.querySelector(this.maskTarget);\r\n\r\n        if (target instanceof HTMLInputElement) {\r\n          this._target = target;\r\n        }\r\n      } catch (e) {\r\n        console.error(`Mask target not found: ${this.maskTarget}`);\r\n      }\r\n    }\r\n\r\n    if (!this._target) {\r\n      throw new Error('Mask target not found\\nThere should be an input target for FaviInputMaskDirective.');\r\n    }\r\n\r\n    this._target.disabled = this.disabled;\r\n  }\r\n\r\n  @HostListener('input', ['$event'])\r\n  onHostInput(event: InputEvent): void {\r\n    this._maskValue(event);\r\n    this.setValue(this._target?.value);\r\n  }\r\n\r\n  override writeValue(obj: any): void {\r\n    if (this._target) {\r\n      this._target.value = obj;\r\n    }\r\n  }\r\n\r\n  override focus(): void {\r\n    this._target?.focus();\r\n  }\r\n\r\n  override blur(): void {\r\n    this._target?.blur();\r\n  }\r\n\r\n  /**\r\n   * Mask value with maskFunction.\r\n   *\r\n   * @param event - InputEvent to detect inputType to keep selection positions.\r\n   */\r\n  private _maskValue(event: InputEvent): void {\r\n    const {selection, value} = this.maskFunction(event, this._target.value);\r\n\r\n    this._target.value = value;\r\n    this._target.selectionStart = selection;\r\n    this._target.selectionEnd = selection;\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviInputMaskDirective } from './favi-input-mask.directive';\n\n\n\n@NgModule({\n  declarations: [\n    FaviInputMaskDirective\n  ],\n  exports: [\n    FaviInputMaskDirective\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviInputMaskModule { }\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviRangedDatepickerComponent} from './favi-ranged-datepicker.component';\r\nimport {FaviInputMaskModule} from '../../favi-input-mask/favi-input-mask.module';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {FaviIconModule} from '../../../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../../../common/favi-effector/favi-effector.module';\r\nimport {\r\n  FaviRangedDatepickerCalendarComponent\r\n} from './favi-ranged-datepicker-calendar/favi-ranged-datepicker-calendar.component';\r\nimport {FaviRangedCalendarModule} from '../../../calendar/favi-ranged-calendar/favi-ranged-calendar.module';\r\nimport {FaviModalModule} from '../../../modal/favi-modal/favi-modal.module';\r\nimport {FaviFlatButtonModule} from '../../../buttons/favi-flat-button/favi-flat-button.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviRangedDatepickerComponent,\r\n    FaviRangedDatepickerCalendarComponent\r\n  ],\r\n  exports: [\r\n    FaviRangedDatepickerComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviInputMaskModule,\r\n    FormsModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule,\r\n    FaviRangedCalendarModule,\r\n    FaviModalModule,\r\n    FaviFlatButtonModule,\r\n  ]\r\n})\r\nexport class FaviRangedDatepickerModule { }\r\n","import {ChangeDetectorRef, Component, ElementRef, Optional} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {FaviBaseAutocomplete} from '../abstracts/favi-base-autocomplete/favi-base-autocomplete';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {FaviModalService} from '../../modal/favi-modal/services/favi-modal.service';\r\n\r\n/**\r\n * Component which can search options by inputting search keywords.\r\n * Styles should be managed by _favi-autocomplete.scss.\r\n *\r\n * When binding initial value, there needs to be accessible options in content.\r\n */\r\n@Component({\r\n  selector: 'favi-autocomplete',\r\n  templateUrl: './favi-autocomplete.component.html',\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviAutocompleteComponent extends FaviBaseAutocomplete {\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n    protected override _changeDetectorRef: ChangeDetectorRef,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n    protected override _faviModalService: FaviModalService,\r\n  ) {\r\n    super(ngControl, _elementRef, _changeDetectorRef, _subscriptionManager, _faviModalService);\r\n  }\r\n\r\n  override writeValue(obj: any): void {\r\n    this._value = obj || '';\r\n    this._setOptionsQueryListSelected();\r\n    this._setSelectedLabel();\r\n  }\r\n\r\n  protected override _setOptionsQueryListSelected(): void {\r\n    if (!this.optionsQueryList) {\r\n      return;\r\n    }\r\n\r\n    this.optionsQueryList.forEach(optionRef => {\r\n      optionRef.selected = optionRef.value === this._value;\r\n    });\r\n  }\r\n\r\n  protected override _subscribeOptionsQueryListOnClick(): void {\r\n    if (!this.optionsQueryList) {\r\n      return;\r\n    }\r\n\r\n    const subs = this.optionsQueryList.map(optionRef => {\r\n      return optionRef\r\n        .onClick\r\n        .subscribe(value => {\r\n          this.setValue(value);\r\n          this.writeValue(value);\r\n          this._previousValue = undefined;\r\n          this._optionsOverlayRef?.close();\r\n        });\r\n    });\r\n\r\n    this._optionsOnClickObserver.observe(...subs);\r\n  }\r\n\r\n  protected override _setSelectedLabel(): void {\r\n    if (!this.optionsQueryList || !this.searchInputRef) {\r\n      return;\r\n    }\r\n\r\n    const selectedOptionRef = this.optionsQueryList.find(optionRef => optionRef.selected);\r\n\r\n    if (selectedOptionRef) {\r\n      this.searchInputRef.nativeElement.value = selectedOptionRef.label!;\r\n    }\r\n  }\r\n}\r\n","<div class=\"favi-input-inner\">\r\n  <!-- Just use styles of favi-input, inherit all classes instead of using FaviInputDirective.\r\n    It also has favi-select class to display options opened appearance. -->\r\n  <input\r\n    #searchInput\r\n    (blur)=\"onBlur()\"\r\n    (focus)=\"onFocus()\"\r\n    (click)=\"$event.stopPropagation(); openOptions()\"\r\n    (input)=\"openOptions()\"\r\n    (keydown.enter)=\"onInputEnterKeyDown()\"\r\n    [placeholder]=\"placeholder\"\r\n    [disabled]=\"disabled\"/>\r\n</div>\r\n\r\n<div class=\"favi-input-bottom-line\"></div>\r\n<div class=\"favi-input-bottom-line favi-activated\"></div>\r\n\r\n<ng-template #optionsTemplate>\r\n  <ng-content></ng-content>\r\n</ng-template>\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  QueryList\r\n} from '@angular/core';\r\nimport {\r\n  FaviAutocompleteOptionsPositions\r\n} from '../favi-autocomplete-options-overlay/favi-autocomplete-options-positions';\r\nimport {AvailableKey, disableEvent, isKey} from '../../../utils/event.util';\r\nimport {CanUndefined} from '../../../utils/type.util';\r\nimport {FaviOptionComponent} from '../favi-option/favi-option.component';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {isDefined} from '../../../utils/validate.util';\r\nimport {findParentElement} from '../../../utils/element.util';\r\nimport {InputRequiredError} from '../../../errors/input-required-error';\r\n\r\n/**\r\n * Component to display options for autocomplete.\r\n * Use FaviOptionComponent to render option item.\r\n *\r\n * @deprecated\r\n * Use 'FaviAutocompleteOptionsOverlayComponent' instead.\r\n */\r\n@Component({\r\n  selector: 'favi-autocomplete-options',\r\n  templateUrl: './favi-autocomplete-options.component.html',\r\n  styleUrls: ['./favi-autocomplete-options.component.scss'],\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n  host: {\r\n    // Use favi-options-overlay class to display selected option with theme color.\r\n    // It's managed by _favi-options-overlay.scss.\r\n    class: 'favi-options-overlay',\r\n  }\r\n})\r\nexport class FaviAutocompleteOptionsComponent implements OnInit, AfterViewInit, OnDestroy {\r\n  static maxHeight = 240;\r\n\r\n  // QueryList for options.\r\n  // It should be provided from the autocomplete.\r\n  @Input() optionsQueryList!: QueryList<FaviOptionComponent>;\r\n\r\n  // Bound autocomplete component to detect click position to close the options.\r\n  @Input() autocompleteElementRef!: ElementRef<HTMLElement>;\r\n\r\n  // It will be emitted when user pressed Escape or clicked outside of component.\r\n  @Output() onClose = new EventEmitter<void>();\r\n\r\n  private _focusedIndex = -1;\r\n  private _position: FaviAutocompleteOptionsPositions = 'bottom';\r\n  private _optionsChangesObserver = this._subscriptionManager.createObserver();\r\n  private _optionsOnFocusObserver = this._subscriptionManager.createObserver();\r\n\r\n  // Timeout timer to call initializing method from ngAfterViewInit().\r\n  // It is used to prevent NG0100 error.\r\n  private _initialTimer: any;\r\n\r\n  // Timeout timer to wait for a while to update properties of options\r\n  // to prevent NG0100 error.\r\n  // It is used because of the options can be rendered dynamically.\r\n  private _changeApplyingTimer: any;\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n    private _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n  }\r\n\r\n  @Input()\r\n  set position(position: FaviAutocompleteOptionsPositions) {\r\n    this._position = position;\r\n  }\r\n\r\n  get position(): FaviAutocompleteOptionsPositions {\r\n    return this._position;\r\n  }\r\n\r\n  @HostBinding('class.favi-bottom-position')\r\n  get isBottomPosition(): boolean {\r\n    return this.position === 'bottom';\r\n  }\r\n\r\n  @HostBinding('class.favi-top-position')\r\n  get isTopPosition(): boolean {\r\n    return this.position === 'top';\r\n  }\r\n\r\n  /**\r\n   * Get form field which is containing current component.\r\n   */\r\n  get containingFormField(): CanUndefined<HTMLElement> {\r\n    return findParentElement(this._elementRef.nativeElement, 'favi-form-field');\r\n  }\r\n\r\n  /**\r\n   * Get last index of options.\r\n   */\r\n  get lastIndex(): number {\r\n    return this.optionsQueryList.length - 1;\r\n  }\r\n\r\n  get focusedOption(): CanUndefined<FaviOptionComponent> {\r\n    return this.optionsQueryList.find(optionRef => optionRef.focused);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!isDefined(this.optionsQueryList)) {\r\n      throw new InputRequiredError('optionsQueryList');\r\n    }\r\n\r\n    if (!isDefined(this.autocompleteElementRef)) {\r\n      throw new InputRequiredError('autocompleteElementRef');\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._initialTimer = setTimeout(() => {\r\n      this._setInitialFocusedIndex(true);\r\n\r\n      this._subscribeOptionsQueryListOnFocus();\r\n      this._subscribeOptionsQueryListChanges();\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearTimeout(this._initialTimer);\r\n    clearTimeout(this._changeApplyingTimer);\r\n  }\r\n\r\n  /**\r\n   * Different with keyboard event of select options overlay,\r\n   * every key is allowed for autocomplete options.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('window:keydown', ['$event'])\r\n  onWindowKeyDown(event: KeyboardEvent): void {\r\n    if (isKey(event, AvailableKey.ArrowDown)) {\r\n      disableEvent(event);\r\n\r\n      if (this.lastIndex < this._focusedIndex + 1) {\r\n        this.setFocusedIndex(0, true);\r\n      } else {\r\n        this.setFocusedIndex(this._focusedIndex + 1, true);\r\n      }\r\n    } else if (isKey(event, AvailableKey.ArrowUp)) {\r\n      disableEvent(event);\r\n\r\n      if (this._focusedIndex - 1 < 0) {\r\n        this.setFocusedIndex(this.lastIndex, true);\r\n      } else {\r\n        this.setFocusedIndex(this._focusedIndex - 1, true);\r\n      }\r\n    } else if (isKey(event, AvailableKey.Enter)) {\r\n      disableEvent(event);\r\n\r\n      const {focusedOption} = this;\r\n\r\n      if (focusedOption) {\r\n        // Emit onClick emitter rather than calling close() method\r\n        // to handle differently from each component.\r\n        focusedOption.onClick.emit(focusedOption.value);\r\n      }\r\n    } else if (isKey(event, AvailableKey.Escape)) {\r\n      disableEvent(event);\r\n\r\n      this.emitOnClose();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * When click event triggered from the outside of autocomplete, close the options.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('window:click', ['$event'])\r\n  onWindowClick(event: MouseEvent): void {\r\n    this._emitOnCloseWhenLooseTarget(event.target as Node);\r\n  }\r\n\r\n  /**\r\n   * When focus has removed from autocomplete, close the options.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('window:focusin', ['$event'])\r\n  onWindowFocusIn(event: Event): void {\r\n    this._emitOnCloseWhenLooseTarget(event.target as Node);\r\n  }\r\n\r\n  emitOnClose(): void {\r\n    this.onClose.emit();\r\n  }\r\n\r\n  /**\r\n   * Set _focusedIndex and scroll the container to focused option if needed.\r\n   *\r\n   * @param index\r\n   * @param scroll - Set true to scroll to focused option.\r\n   */\r\n  setFocusedIndex(index: number, scroll = false): void {\r\n    this._focusedIndex = index\r\n    this._updateFocusedOptionRef(scroll);\r\n  }\r\n\r\n  /**\r\n   * Search selected option and set focus to it.\r\n   * Container will be scrolled to selected option.\r\n   *\r\n   * @param scroll - Set true to scroll to focused option.\r\n   */\r\n  private _setInitialFocusedIndex(scroll = false): void {\r\n    let focusedIndex = -1;\r\n\r\n    this.optionsQueryList.forEach((optionRef, index) => {\r\n      if (optionRef.selected) {\r\n        focusedIndex = index;\r\n      }\r\n    });\r\n\r\n    this.setFocusedIndex(focusedIndex, scroll);\r\n  }\r\n\r\n  /**\r\n   * Subscribe changes of options query to ensure listening\r\n   * changed options' event as well.\r\n   */\r\n  private _subscribeOptionsQueryListChanges(): void {\r\n    const sub = this.optionsQueryList\r\n      .changes\r\n      .subscribe(() => {\r\n        clearTimeout(this._changeApplyingTimer);\r\n\r\n        this._changeApplyingTimer = setTimeout(() => {\r\n          this._subscribeOptionsQueryListOnFocus();\r\n          this._setInitialFocusedIndex(true);\r\n        });\r\n      });\r\n\r\n    this._optionsChangesObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Subscribe onFocus emitter for each option\r\n   * to close options overlay and update value.\r\n   */\r\n  private _subscribeOptionsQueryListOnFocus(): void {\r\n    const subs = this.optionsQueryList.map((optionRef, index) => {\r\n      return optionRef\r\n        .onFocus\r\n        .subscribe(() => {\r\n          // onFocus will be emitted when user's pointer is entered.\r\n          // In this case, no need to scroll.\r\n          this.setFocusedIndex(index);\r\n        });\r\n    });\r\n\r\n    this._optionsOnFocusObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Update focused state of FaviOptionComponent.\r\n   *\r\n   * @param scroll - Set true to scroll to focused option.\r\n   */\r\n  private _updateFocusedOptionRef(scroll: boolean): void {\r\n    let focusedOptionRef: CanUndefined<FaviOptionComponent>;\r\n\r\n    this.optionsQueryList.forEach((optionRef, index) => {\r\n      optionRef.focused = index === this._focusedIndex;\r\n\r\n      if (optionRef.focused) {\r\n        focusedOptionRef = optionRef;\r\n      }\r\n    });\r\n\r\n    if (scroll) {\r\n      if (isDefined<FaviOptionComponent>(focusedOptionRef)) { // When having focusedOptionRef, scroll to focusedOptionRef.\r\n        focusedOptionRef.elementRef.nativeElement.scrollIntoView({\r\n          block: 'center',\r\n        });\r\n      } else { // If not, scroll to top to show most relative option.\r\n        this._elementRef.nativeElement.scrollTo(0, 0);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * When event target isn't contained in host element or bound autocomplete element,\r\n   * close the options.\r\n   *\r\n   * @param target - Event target.\r\n   */\r\n  private _emitOnCloseWhenLooseTarget(target: Node): void {\r\n    const {containingFormField} = this;\r\n\r\n    if (\r\n      (containingFormField ? !containingFormField.contains(target) : true) // When target isn't contained in form field.\r\n      && !this._elementRef.nativeElement.contains(target) // When target isn't contained in current component.\r\n      && !this.autocompleteElementRef.nativeElement.contains(target) // When target isn't contained in autocomplete component.\r\n    ) {\r\n      // Before emit close, set _focusedIndex to -1.\r\n      // If it doesn't exist, NG0100 error will be thrown because\r\n      // the focused options is changed after view current component destroyed.\r\n      this.setFocusedIndex(-1);\r\n      this.emitOnClose();\r\n    }\r\n  }\r\n}\r\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviAutocompleteOptionsComponent } from './favi-autocomplete-options.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviAutocompleteOptionsComponent\n  ],\n  exports: [\n    FaviAutocompleteOptionsComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviAutocompleteOptionsModule { }\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviAutocompleteComponent} from './favi-autocomplete.component';\nimport {FaviAutocompleteOptionsModule} from '../favi-autocomplete-options/favi-autocomplete-options.module';\n\n\n@NgModule({\n  declarations: [\n    FaviAutocompleteComponent\n  ],\n  exports: [\n    FaviAutocompleteComponent\n  ],\n  imports: [\n    CommonModule,\n    FaviAutocompleteOptionsModule\n  ]\n})\nexport class FaviAutocompleteModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviAutocompleteOptionsOverlayComponent } from './favi-autocomplete-options-overlay.component';\n\n\n\n@NgModule({\n  declarations: [\n    FaviAutocompleteOptionsOverlayComponent\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviAutocompleteOptionsOverlayModule { }\n","import {Component, ElementRef, Optional} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {FaviBaseToggleable} from '../abstracts/favi-base-toggleable/favi-base-toggleable';\r\n\r\n/**\r\n * Checkbox component.\r\n * Styles should be managed by _favi-checkbox.scss.\r\n */\r\n@Component({\r\n  selector: 'favi-checkbox',\r\n  templateUrl: './favi-checkbox.component.html',\r\n  host: {\r\n    class: 'favi-checkbox favi-effector-container',\r\n  },\r\n})\r\nexport class FaviCheckboxComponent extends FaviBaseToggleable {\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(ngControl, _elementRef);\r\n  }\r\n}\r\n","<!-- Disable button focusing. -->\r\n<button\r\n  [theme]=\"theme\"\r\n  class=\"favi-button-no-styles favi-checkbox-button\"\r\n  type=\"button\"\r\n  tabindex=\"-1\"\r\n  faviEffector>\r\n  <favi-icon>\r\n    done\r\n  </favi-icon>\r\n</button>\r\n\r\n<label class=\"favi-label\">\r\n  <ng-content></ng-content>\r\n</label>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviCheckboxComponent} from './favi-checkbox.component';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviCheckboxComponent\r\n  ],\r\n  exports: [\r\n    FaviCheckboxComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviEffectorModule,\r\n    FaviIconModule\r\n  ]\r\n})\r\nexport class FaviCheckboxModule { }\r\n","import {Component} from '@angular/core';\r\n\r\n/**\r\n * An error for form field.\r\n */\r\n@Component({\r\n  selector: 'favi-error',\r\n  templateUrl: './favi-error.component.html',\r\n  host: {\r\n    class: 'favi-form-field-error',\r\n  },\r\n})\r\nexport class FaviErrorComponent {\r\n\r\n}\r\n","<ng-content></ng-content>\n","import {Component, ElementRef, HostBinding, HostListener, Input, Optional, ViewChild} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {CustomControl} from '../../abstracts/custom-control/custom-control';\r\nimport {TextareaResize} from './textarea-resize';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\n\r\n/**\r\n * A textarea component to input long text.\r\n * It uses textarea internally and inherit some attributes.\r\n *\r\n * If 'width' style is set, resize only works for vertical direction.\r\n */\r\n@Component({\r\n  selector: 'favi-textarea',\r\n  templateUrl: './favi-textarea.component.html',\r\n  host: {\r\n    class: 'favi-input favi-textarea',\r\n  },\r\n})\r\nexport class FaviTextareaComponent extends CustomControl {\r\n  /** Input placeholder. */\r\n  @Input() placeholder = '';\r\n\r\n  /** Spellcheck state. */\r\n  @Input() spellcheck = false;\r\n\r\n  /**\r\n   * Resize attribute.\r\n   * It can be set with native resize values.\r\n   * Default is 'both'.\r\n   */\r\n  @Input() resize: TextareaResize = 'both';\r\n\r\n  /** Ref to textarea element. */\r\n  @ViewChild('textarea', {read: ElementRef}) textareaRef?: ElementRef<HTMLTextAreaElement>;\r\n\r\n  /**\r\n   * Focused state.\r\n   * Bind it to class.\r\n   */\r\n  @HostBinding('class.favi-focused') focused = false;\r\n\r\n  /** Input value. */\r\n  value = '';\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  /** Status of auto-resizing by content. */\r\n  private _autoResize = false;\r\n\r\n  /**\r\n   * Get status of using auto-resizing.\r\n   */\r\n  @Input()\r\n  get autoResize(): boolean {\r\n    return this._autoResize;\r\n  }\r\n\r\n  /**\r\n   * Set status of using auto-resizing.\r\n   * Default is 'false'.\r\n   *\r\n   * @param value - Using status.\r\n   */\r\n  set autoResize(value: BooleanAttribute) {\r\n    this._autoResize = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * When host element clicked, focus to host element.\r\n   */\r\n  @HostListener('click')\r\n  focusToHost(): void {\r\n    this.focus();\r\n  }\r\n\r\n  /**\r\n   * Blur from input element.\r\n   */\r\n  override blur(): void {\r\n    this.textareaRef?.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * Focus to input element.\r\n   */\r\n  override focus(): void {\r\n    this.textareaRef?.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * The 'focus' event listener for input element.\r\n   */\r\n  onFocus(): void {\r\n    this.focused = true;\r\n  }\r\n\r\n  /**\r\n   * The 'blur' event listener for input element.\r\n   */\r\n  onBlur(): void {\r\n    this.focused = false;\r\n    this.markAsTouched();\r\n  }\r\n\r\n  /**\r\n   * Write value to input element.\r\n   *\r\n   * @param obj\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = obj || '';\r\n\r\n    if (this.textareaRef) {\r\n      this.textareaRef.nativeElement.value = this.value;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Override 'setValue()' to call when value has changed.\r\n   *\r\n   * @param value\r\n   */\r\n  override setValue(value: any) {\r\n    if (value !== this.value) {\r\n      this.value = value;\r\n      super.setValue(value);\r\n    }\r\n  }\r\n}\r\n","<div class=\"favi-input-inner\">\r\n  <textarea\r\n    #textarea\r\n    (focus)=\"onFocus()\"\r\n    (blur)=\"onBlur()\"\r\n    (keydown)=\"setValue(textarea.value)\"\r\n    (keyup)=\"setValue(textarea.value)\"\r\n    (input)=\"setValue(textarea.value)\"\r\n    [placeholder]=\"placeholder\"\r\n    [spellcheck]=\"spellcheck\"\r\n    [disabled]=\"disabled\"\r\n    [style.resize]=\"resize\"\r\n    [disableAutoResize]=\"!autoResize\"\r\n    faviAutoResizeTextarea></textarea>\r\n</div>\r\n\r\n<div class=\"favi-input-bottom-line\"></div>\r\n<div class=\"favi-input-bottom-line favi-activated\"></div>\r\n","import {Directive} from '@angular/core';\r\n\r\n/**\r\n * A directive to set input prefix.\r\n * It doesn't have any feature, but used to select ContentChild from the input component.\r\n */\r\n@Directive({\r\n  selector: '[faviInputPrefix]'\r\n})\r\nexport class FaviInputPrefixDirective {\r\n}\r\n","import {Directive} from '@angular/core';\r\n\r\n/**\r\n * A directive to set input suffix.\r\n * It doesn't have any feature, but used to select ContentChild from the input component.\r\n */\r\n@Directive({\r\n  selector: '[faviInputSuffix]'\r\n})\r\nexport class FaviInputSuffixDirective {\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChild,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  Optional,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport {CustomControl} from '../../abstracts/custom-control/custom-control';\r\nimport {NgControl} from '@angular/forms';\r\nimport {FaviInputPrefixDirective} from './favi-input-prefix.directive';\r\nimport {FaviInputSuffixDirective} from './favi-input-suffix.directive';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\n\r\n/**\r\n * Input control.\r\n */\r\n@Component({\r\n  selector: 'favi-input',\r\n  templateUrl: './favi-input.component.html',\r\n  host: {\r\n    class: 'favi-input',\r\n  },\r\n})\r\nexport class FaviInputComponent extends CustomControl implements AfterViewInit {\r\n  // Input type.\r\n  @Input() type = 'text';\r\n\r\n  // Input placeholder.\r\n  @Input() placeholder = '';\r\n\r\n  // Spellcheck state.\r\n  @Input() spellcheck = false;\r\n\r\n  // Ref to input element.\r\n  @ViewChild('input', {read: ElementRef}) inputRef?: ElementRef<HTMLInputElement>;\r\n\r\n  // Ref to prefix content directive.\r\n  @ContentChild(FaviInputPrefixDirective) prefixRef?: FaviInputPrefixDirective;\r\n\r\n  // Ref to suffix content directive.\r\n  @ContentChild(FaviInputSuffixDirective) suffixRef?: FaviInputSuffixDirective;\r\n\r\n  // Focused state.\r\n  // Bind it to class.\r\n  @HostBinding('class.favi-focused') focused = false;\r\n\r\n  // Input value.\r\n  value = '';\r\n\r\n  // Autofocus enabled state.\r\n  private _autofocus = false;\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  /**\r\n   * Make component to be auto-focusable on view init.\r\n   *\r\n   * @deprecated\r\n   * Use 'FaviAutofocus' instead.\r\n   */\r\n  @Input()\r\n  get autofocus(): BooleanAttribute {\r\n    return this._autofocus;\r\n  }\r\n\r\n  /**\r\n   * Make component to be autofocused on render.\r\n   *\r\n   * @param value\r\n   */\r\n  set autofocus(value: BooleanAttribute) {\r\n    this._autofocus = convertBooleanAttribute(value);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.autofocus) {\r\n      // Use Timeout timer to prevent NG0100 error.\r\n      setTimeout(() => this.inputRef?.nativeElement.focus());\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Write value to input element.\r\n   *\r\n   * @param obj\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = obj || '';\r\n\r\n    if (this.inputRef) {\r\n      this.inputRef.nativeElement.value = this.value;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Blur from input element.\r\n   */\r\n  override blur(): void {\r\n    this.inputRef?.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * Focus to input element.\r\n   */\r\n  override focus(): void {\r\n    this.inputRef?.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * When host element clicked, focus to host element.\r\n   */\r\n  @HostListener('click')\r\n  focusToHost(): void {\r\n    this.focus();\r\n  }\r\n\r\n  /**\r\n   * The 'focus' event listener for input element.\r\n   */\r\n  onFocus(): void {\r\n    this.focused = true;\r\n  }\r\n\r\n  /**\r\n   * The 'blur' event listener for input element.\r\n   */\r\n  onBlur(): void {\r\n    this.focused = false;\r\n    this.markAsTouched();\r\n  }\r\n\r\n  /**\r\n   * Override 'setValue()' to call when value has changed.\r\n   *\r\n   * @param value\r\n   */\r\n  override setValue(value: any) {\r\n    if (value !== this.value) {\r\n      this.value = value;\r\n      super.setValue(value);\r\n    }\r\n  }\r\n}\r\n","<div class=\"favi-input-inner\">\r\n  <div\r\n    [hidden]=\"!prefixRef\"\r\n    class=\"favi-input-prefix\">\r\n    <ng-content select=\"[faviInputPrefix]\"></ng-content>\r\n  </div>\r\n\r\n  <input\r\n    #input\r\n    (focus)=\"onFocus()\"\r\n    (blur)=\"onBlur()\"\r\n    (keydown)=\"setValue(input.value)\"\r\n    (keyup)=\"setValue(input.value)\"\r\n    (input)=\"setValue(input.value)\"\r\n    [ngModel]=\"value\"\r\n    [type]=\"type\"\r\n    [placeholder]=\"placeholder\"\r\n    [spellcheck]=\"spellcheck\"\r\n    [disabled]=\"disabled\"\r\n    [class.favi-input-with-prefix]=\"prefixRef || suffixRef\"/>\r\n\r\n  <div\r\n    [hidden]=\"!suffixRef\"\r\n    class=\"favi-input-suffix\">\r\n    <ng-content select=\"[faviInputSuffix]\"></ng-content>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"favi-input-bottom-line\"></div>\r\n<div class=\"favi-input-bottom-line favi-activated\"></div>\r\n","import {Component, ElementRef, Optional} from '@angular/core';\r\nimport {FaviBaseSelect} from '../abstracts/favi-base-select/favi-base-select';\r\nimport {NgControl} from '@angular/forms';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {FaviOptionComponent} from '../favi-option/favi-option.component';\r\nimport {FaviOverlayService} from '../../overlay/favi-overlay/services/favi-overlay.service';\r\n\r\n/**\r\n * Select component which allows multiple selection for options.\r\n * Styles managed by _favi-select.scss.\r\n */\r\n@Component({\r\n  selector: 'favi-multi-select',\r\n  templateUrl: './favi-multi-select.component.html',\r\n  host: {\r\n    class: 'favi-input favi-select',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviMultiSelectComponent extends FaviBaseSelect {\r\n  // Selected options.\r\n  // Different with FaviSelectComponent, selected options must be set\r\n  // as static array.\r\n  // If it's determined with getter, view can be rendered infinitely since\r\n  // can't ensure every returning arrays are referencing same array.\r\n  selectedOptions: FaviOptionComponent[] = [];\r\n\r\n  // Selected values.\r\n  private _values: any[] = [];\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n    protected override _faviOverlayService: FaviOverlayService,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(ngControl, _elementRef, _faviOverlayService, _subscriptionManager);\r\n  }\r\n\r\n  get hasSelectedOptions(): boolean {\r\n    return this.selectedOptions.length > 0;\r\n  }\r\n\r\n  get lastSelectedOptionIndex(): number {\r\n    return this.selectedOptions.length - 1;\r\n  }\r\n\r\n  override writeValue(obj: any[]): void {\r\n    this._values = obj || [];\r\n    this._setOptionsQueryListSelected();\r\n  }\r\n\r\n  /**\r\n   * Subscribe onClick emitter for each option\r\n   * to close options overlay and update values.\r\n   */\r\n  protected override _subscribeOptionsQueryListOnClick(): void {\r\n    if (!this.optionsQueryList) {\r\n      return;\r\n    }\r\n\r\n    const subs = this.optionsQueryList.map(optionRef => {\r\n      return optionRef\r\n        .onClick\r\n        .subscribe(value => {\r\n          this._toggleValueSelection(value);\r\n        });\r\n    });\r\n\r\n    this._optionsOnClickObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Set selected status of each option.\r\n   * The selected property will be true when value of option is equal to _value.\r\n   */\r\n  protected override _setOptionsQueryListSelected(): void {\r\n    if (!this.optionsQueryList) {\r\n      return;\r\n    }\r\n\r\n    this.optionsQueryList.forEach(optionRef => {\r\n      optionRef.selected = this._values.includes(optionRef.value);\r\n    });\r\n\r\n    // Update selected options.\r\n    this.selectedOptions = this.optionsQueryList.filter(optionRef => optionRef.selected);\r\n  }\r\n\r\n  /**\r\n   * Do nothing for multi select options when options overlay closed.\r\n   * Value should be changed if onClick emitter is emitted from option item.\r\n   *\r\n   * @param value\r\n   */\r\n  protected override _onOptionsClosed(value?: any) {\r\n  }\r\n\r\n  /**\r\n   * Toggle value selection.\r\n   * If provided value exists,\r\n   *\r\n   * @param value\r\n   */\r\n  private _toggleValueSelection(value: any): void {\r\n    const newValues: any[] = [];\r\n\r\n    if (this._values.includes(value)) {\r\n      newValues.push(...this._values.filter(_value => _value !== value));\r\n    } else {\r\n      newValues.push(...this._values, value);\r\n    }\r\n\r\n    this.setValue(newValues);\r\n    this.writeValue(newValues);\r\n  }\r\n}\r\n","<div class=\"favi-input-inner\">\r\n  <div class=\"favi-pseudo-input\">\r\n    <ng-container *ngIf=\"hasSelectedOptions; else placeholderTemplate\">\r\n      <ng-content select=\"[faviSelectValue]\"></ng-content>\r\n\r\n      <ng-container *ngIf=\"!faviSelectValueRef\">\r\n        <ng-container *ngFor=\"let selectedOption of selectedOptions; let index = index\">\r\n          <ng-container *ngIf=\"index === lastSelectedOptionIndex; else labelWithComma\">\r\n            {{selectedOption.label}}\r\n          </ng-container>\r\n\r\n          <ng-template #labelWithComma>\r\n            {{selectedOption.label}},\r\n          </ng-template>\r\n        </ng-container>\r\n      </ng-container>\r\n    </ng-container>\r\n\r\n    <ng-template #placeholderTemplate>\r\n      <div class=\"favi-placeholder\">\r\n        {{placeholder}}\r\n      </div>\r\n    </ng-template>\r\n  </div>\r\n\r\n  <favi-icon>\r\n    arrow_drop_down\r\n  </favi-icon>\r\n</div>\r\n\r\n<div class=\"favi-input-bottom-line\"></div>\r\n<div class=\"favi-input-bottom-line favi-activated\"></div>\r\n\r\n<ng-template #optionsTemplate>\r\n  <ng-content></ng-content>\r\n</ng-template>\r\n","import {Component, ContentChild, HostBinding, Input} from '@angular/core';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {BooleanAttribute} from '../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../utils/convert.util';\r\nimport {FaviSelectComponent} from '../favi-select/favi-select.component';\r\nimport {FaviTextareaComponent} from '../favi-textarea/favi-textarea.component';\r\nimport {FaviSingleDatepickerComponent} from '../datepickers/favi-datepicker/favi-single-datepicker.component';\r\nimport {FaviInputComponent} from '../favi-input/favi-input.component';\r\nimport {FaviRangedDatepickerComponent} from '../datepickers/favi-ranged-datepicker/favi-ranged-datepicker.component';\r\nimport {FaviMultiSelectComponent} from '../favi-multi-select/favi-multi-select.component';\r\nimport {FaviAutocompleteComponent} from '../favi-autocomplete/favi-autocomplete.component';\r\n\r\n/**\r\n * Create form field with label and control.\r\n */\r\n@Component({\r\n  selector: 'favi-form-field',\r\n  templateUrl: './favi-form-field.component.html',\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n  host: {\r\n    class: 'favi-form-field',\r\n  },\r\n})\r\nexport class FaviFormFieldComponent {\r\n  // Ref to input component.\r\n  @ContentChild(FaviInputComponent) faviInputRef?: FaviInputComponent;\r\n\r\n  // Ref to select component.\r\n  @ContentChild(FaviSelectComponent) faviSelectRef?: FaviSelectComponent;\r\n\r\n  // Ref to multi select component.\r\n  @ContentChild(FaviMultiSelectComponent) faviMultiSelectRef?: FaviMultiSelectComponent;\r\n\r\n  // Ref to textarea component.\r\n  @ContentChild(FaviTextareaComponent) faviTextareaRef?: FaviTextareaComponent;\r\n\r\n  // Ref to datepicker component.\r\n  @ContentChild(FaviSingleDatepickerComponent) faviDatepickerRef?: FaviSingleDatepickerComponent;\r\n\r\n  // Ref to ranged datepicker component.\r\n  @ContentChild(FaviRangedDatepickerComponent) faviRangedDatepickerRef?: FaviRangedDatepickerComponent;\r\n\r\n  // Ref to autocomplete component.\r\n  @ContentChild(FaviAutocompleteComponent) faviAutocompleteRef?: FaviAutocompleteComponent;\r\n\r\n  // Form field required state to display asterisk.\r\n  // The validation for required error won't be automatically added to control.\r\n  private _required = false;\r\n\r\n  @Input()\r\n  get required(): boolean {\r\n    return this._required;\r\n  }\r\n\r\n  set required(value: BooleanAttribute) {\r\n    this._required = convertBooleanAttribute(value);\r\n  }\r\n\r\n  @HostBinding('class.favi-disabled')\r\n  get disabled(): boolean {\r\n    return !!(\r\n      this.faviInputRef?.disabled\r\n      || this.faviSelectRef?.disabled\r\n      || this.faviMultiSelectRef?.disabled\r\n      || this.faviTextareaRef?.disabled\r\n      || this.faviDatepickerRef?.disabled\r\n      || this.faviRangedDatepickerRef?.disabled\r\n      || this.faviAutocompleteRef?.disabled\r\n    );\r\n  }\r\n}\r\n","<div class=\"favi-form-field-label\">\r\n  <ng-content select=\"label\"></ng-content>\r\n  <span\r\n    *ngIf=\"required\"\r\n    class=\"favi-form-field-required\">*</span>\r\n</div>\r\n\r\n<div class=\"favi-form-field-content\">\r\n  <!-- Anything inside. -->\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<ng-content select=\"favi-error, favi-hint\"></ng-content>\r\n","import {Component} from '@angular/core';\r\n\r\n/**\r\n * Show hint for form field.\r\n */\r\n@Component({\r\n  selector: 'favi-hint',\r\n  templateUrl: './favi-hint.component.html',\r\n  host: {\r\n    class: 'favi-form-field-hint',\r\n  },\r\n})\r\nexport class FaviHintComponent {\r\n\r\n}\r\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviFormFieldComponent} from './favi-form-field.component';\r\nimport {FaviErrorComponent} from './favi-error/favi-error.component';\r\nimport {FaviHintComponent} from './favi-hint/favi-hint.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviFormFieldComponent,\r\n    FaviErrorComponent,\r\n    FaviHintComponent\r\n  ],\r\n  exports: [\r\n    FaviFormFieldComponent,\r\n    FaviErrorComponent,\r\n    FaviHintComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n  ]\r\n})\r\nexport class FaviFormFieldModule { }\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviInputComponent} from './favi-input.component';\r\nimport {FaviInputPrefixDirective} from './favi-input-prefix.directive';\r\nimport {FaviInputSuffixDirective} from './favi-input-suffix.directive';\r\nimport {FormsModule} from '@angular/forms';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviInputComponent,\r\n    FaviInputPrefixDirective,\r\n    FaviInputSuffixDirective\r\n  ],\r\n  exports: [\r\n    FaviInputComponent,\r\n    FaviInputPrefixDirective,\r\n    FaviInputSuffixDirective\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n  ]\r\n})\r\nexport class FaviInputModule { }\r\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviMultiSelectComponent} from './favi-multi-select.component';\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\n\n\n@NgModule({\n  declarations: [\n    FaviMultiSelectComponent\n  ],\n  exports: [\n    FaviMultiSelectComponent\n  ],\n  imports: [\n    CommonModule,\n    FaviIconModule\n  ]\n})\nexport class FaviMultiSelectModule { }\n","import {Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild} from '@angular/core';\r\nimport {BooleanAttribute, Nullable, ThemeColors} from '../../../../utils/type.util';\r\nimport {convertBooleanAttribute} from '../../../../utils/convert.util';\r\nimport {FaviRadioGroupComponent} from '../favi-radio-group.component';\r\n\r\n/**\r\n * Radio button which can be selectable.\r\n * Styles should be managed by _favi-radio.scss.\r\n *\r\n * It has theme input, but theme should be determined by radio group.\r\n */\r\n@Component({\r\n  selector: 'favi-radio',\r\n  templateUrl: './favi-radio.component.html',\r\n  host: {\r\n    class: 'favi-radio favi-effector-container',\r\n  },\r\n})\r\nexport class FaviRadioComponent {\r\n  // Value of radio button.\r\n  // It's required.\r\n  @Input() value: any;\r\n\r\n  // Click event emitter.\r\n  @Output() onClick = new EventEmitter<void>();\r\n\r\n  // Bind selected state to class.\r\n  @HostBinding('class.favi-selected') selected = false;\r\n\r\n  // Ref to radio button.\r\n  @ViewChild('radioButton', {read: ElementRef}) radioButtonRef!: ElementRef<HTMLButtonElement>;\r\n\r\n  // Focused state.\r\n  private _focused = false;\r\n\r\n  // Disabled state.\r\n  private _disabled = false;\r\n\r\n  // Registered radio group.\r\n  private _registeredRadioGroup: Nullable<FaviRadioGroupComponent> = null;\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get focused state.\r\n   */\r\n  get focused(): boolean {\r\n    return this._focused;\r\n  }\r\n\r\n  /**\r\n   * Set focused state.\r\n   * It updates selected property as well.\r\n   *\r\n   * @param state\r\n   */\r\n  @Input()\r\n  set focused(state: boolean) {\r\n    this._focused = state;\r\n  }\r\n\r\n  /**\r\n   * Get disabled state and bind disabled class.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.favi-disabled')\r\n  get disabled(): BooleanAttribute {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Set disabled state.\r\n   *\r\n   * @param state\r\n   */\r\n  set disabled(state: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(state);\r\n  }\r\n\r\n  /**\r\n   * Get tabindex by disabled state.\r\n   */\r\n  @HostBinding('attr.tabindex')\r\n  get tabindex(): string {\r\n    return this._registeredRadioGroup?.disabled || this.disabled || !this.selected ? '-1' : '0';\r\n  }\r\n\r\n  /**\r\n   * Get theme color by selected state.\r\n   */\r\n  get theme(): Nullable<ThemeColors> {\r\n    return this.selected ? 'primary' : null;\r\n  }\r\n\r\n  /**\r\n   * Listen click event to update selection.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('click', ['$event'])\r\n  onHostClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    this.emitOnClick();\r\n  }\r\n\r\n  /**\r\n   * Focus to button element.\r\n   * Set withSelected parameter to true to update selected to true as well.\r\n   *\r\n   * @param withSelected\r\n   */\r\n  focus(withSelected = false): void {\r\n    this._elementRef?.nativeElement.focus();\r\n    this.focused = true;\r\n\r\n    if (withSelected) {\r\n      this.selected = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Blur from the button element.\r\n   */\r\n  blur(): void {\r\n    this._elementRef?.nativeElement.blur();\r\n    this.focused = false;\r\n  }\r\n\r\n  /**\r\n   * Listener of button focus event.\r\n   *\r\n   * @param event\r\n   */\r\n  onFocus(event: FocusEvent): void {\r\n    event.stopPropagation();\r\n\r\n    // When button is focused, make it selected.\r\n    this.focused = true;\r\n    this.onClick.emit();\r\n  }\r\n\r\n  /**\r\n   * Emit click.\r\n   */\r\n  emitOnClick(): void {\r\n    this.onClick.emit();\r\n  }\r\n\r\n  /**\r\n   * Register radio group to radio.\r\n   *\r\n   * @param radioGroup\r\n   */\r\n  registerRadioGroup(radioGroup: FaviRadioGroupComponent): void {\r\n    this._registeredRadioGroup = radioGroup;\r\n  }\r\n}\r\n","<button\r\n  #radioButton\r\n  (focus)=\"onFocus($event)\"\r\n  [theme]=\"theme\"\r\n  [disabled]=\"disabled\"\r\n  tabindex=\"-1\"\r\n  class=\"favi-button-no-styles favi-radio-button\"\r\n  type=\"button\"\r\n  faviEffector>\r\n  <div class=\"favi-radio-indicator\"></div>\r\n</button>\r\n\r\n<label class=\"favi-label\">\r\n  <ng-content></ng-content>\r\n</label>\r\n","import {QueryList} from '@angular/core';\r\n\r\n/**\r\n * Find index of item from queryList.\r\n *\r\n * @param queryList - QueryList to lookup.\r\n * @param item - Item to find index.\r\n */\r\nexport function findQueryListIndex<T>(queryList: QueryList<T>, item: T): number {\r\n  let searchedIndex = -1;\r\n\r\n  queryList.forEach((_item, index) => {\r\n    if (_item === item) {\r\n      searchedIndex = index;\r\n    }\r\n  });\r\n\r\n  return searchedIndex;\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChildren,\r\n  ElementRef,\r\n  HostListener,\r\n  OnDestroy,\r\n  Optional,\r\n  QueryList\r\n} from '@angular/core';\r\nimport {FaviRadioComponent} from './favi-radio/favi-radio.component';\r\nimport {NgControl} from '@angular/forms';\r\nimport {CanUndefined, Nullable} from '../../../utils/type.util';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {AvailableKey, disableEvent, isKey} from '../../../utils/event.util';\r\nimport {findQueryListIndex} from '../../../utils/query-list.util';\r\nimport {CustomControl} from '../../abstracts/custom-control/custom-control';\r\n\r\n/**\r\n * Radio group to contain each radio buttons.\r\n * Styles should be managed by _favi-radio.scss.\r\n */\r\n@Component({\r\n  selector: 'favi-radio-group',\r\n  templateUrl: './favi-radio-group.component.html',\r\n  host: {\r\n    class: 'favi-radio-group',\r\n  },\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviRadioGroupComponent extends CustomControl implements AfterContentInit, AfterViewInit, OnDestroy {\r\n  // Ref to radio list content.\r\n  @ContentChildren(FaviRadioComponent, {descendants: true}) radiosQueryList?: QueryList<FaviRadioComponent>;\r\n\r\n  // Current value.\r\n  value: Nullable<any> = null;\r\n\r\n  // Timeout timer for writeValue() method in ngViewAfterInit() method.\r\n  // It is used to prevent NG0100 error.\r\n  private _writeValueTimer: any;\r\n\r\n  // Subscription observer for radio list change.\r\n  private _radiosQueryListChangesObserver = this._subscriptionManager.createObserver();\r\n\r\n  // Subscription observer for radio list click event.\r\n  private _radiosQueryListOnClickObserver = this._subscriptionManager.createObserver();\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n    private _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(ngControl);\r\n  }\r\n\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  get firstRadio(): CanUndefined<FaviRadioComponent> {\r\n    return this.radiosQueryList?.get(0);\r\n  }\r\n\r\n  get enabledRadios(): FaviRadioComponent[] {\r\n    return (this.radiosQueryList || []).filter(radioRef => !radioRef.disabled);\r\n  }\r\n\r\n  /**\r\n   * Get index of previous selectable radio.\r\n   */\r\n  get previousRadioIndex(): number {\r\n    const {\r\n      enabledRadios,\r\n      radiosQueryList,\r\n    } = this;\r\n\r\n    if (!radiosQueryList) {\r\n      return -1;\r\n    }\r\n\r\n    const lastEnabledRadioIndex = enabledRadios.length - 1;\r\n\r\n    const selectedIndex = enabledRadios.findIndex(radioRef => radioRef.selected);\r\n\r\n    const temporaryPreviousIndex = selectedIndex - 1;\r\n    const previousEnabledRadioRef = temporaryPreviousIndex < 0 ? enabledRadios[lastEnabledRadioIndex] : enabledRadios[temporaryPreviousIndex];\r\n\r\n    return findQueryListIndex(radiosQueryList, previousEnabledRadioRef);\r\n  }\r\n\r\n  /**\r\n   * Get index of next selectable radio.\r\n   */\r\n  get nextRadioIndex(): number {\r\n    const {\r\n      enabledRadios,\r\n      radiosQueryList,\r\n    } = this;\r\n\r\n    if (!radiosQueryList) {\r\n      return -1;\r\n    }\r\n\r\n    const lastEnabledRadioIndex = enabledRadios.length - 1;\r\n\r\n    const selectedIndex = enabledRadios.findIndex(radioRef => radioRef.selected);\r\n\r\n    const temporaryNextIndex = selectedIndex + 1;\r\n    const nextEnabledRadioRef = temporaryNextIndex > lastEnabledRadioIndex ? enabledRadios[0] : enabledRadios[temporaryNextIndex];\r\n\r\n    return findQueryListIndex(radiosQueryList, nextEnabledRadioRef);\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._subscribeRadiosQueryListChanges();\r\n    this._subscribeRadiosQueryListOnClick();\r\n    this._registerRadioGroupToRadios();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    // Call writeValue() method with current value to set default selected state.\r\n    // Use Timeout to prevent NG0100 error.\r\n    this._writeValueTimer = setTimeout(() => this.writeValue(this.value));\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearTimeout(this._writeValueTimer);\r\n  }\r\n\r\n  /**\r\n   * Listen keyboard event.\r\n   *\r\n   * @param event\r\n   */\r\n  @HostListener('keydown', ['$event'])\r\n  onHostKeyDown(event: KeyboardEvent): void {\r\n    const {\r\n      previousRadioIndex,\r\n      nextRadioIndex,\r\n      radiosQueryList,\r\n    } = this;\r\n\r\n    if (!radiosQueryList) {\r\n      return;\r\n    }\r\n\r\n    if (isKey(event, AvailableKey.ArrowLeft) || isKey(event, AvailableKey.ArrowUp)) { // Move to previous.\r\n      const radioRef = radiosQueryList.get(previousRadioIndex);\r\n\r\n      if (radioRef) {\r\n        radioRef.focus();\r\n        radioRef.emitOnClick(); // Emit onClick emitter to select this radio.\r\n      }\r\n\r\n      disableEvent(event);\r\n    } else if (isKey(event, AvailableKey.ArrowRight) || isKey(event, AvailableKey.ArrowDown)) { // Move to next.\r\n      const radioRef = radiosQueryList.get(nextRadioIndex);\r\n\r\n      if (radioRef) {\r\n        radioRef.focus();\r\n        radioRef.emitOnClick(); // Emit onClick emitter to select this radio.\r\n      }\r\n\r\n      disableEvent(event);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Write value to component.\r\n   * When there is no radio component with provided value,\r\n   * the value of first radio component will be set by default.\r\n   *\r\n   * @param obj\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = obj;\r\n\r\n    const {firstRadio} = this;\r\n\r\n    if (this.value) {\r\n      this._updateSelectedRadiosQueryList();\r\n    } else if (firstRadio) { // Since radio should have at least one value, ensure value selection.\r\n      this.setValue(firstRadio.value);\r\n      this.writeValue(firstRadio.value);\r\n    }\r\n  }\r\n\r\n  override focus(): void {\r\n    this.elementRef.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * Blur from all radios.\r\n   */\r\n  override blur(): void {\r\n    this.elementRef.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * Subscribe radiosQueryList changes\r\n   * to re-subscribe required subscriptions and\r\n   * sync theme of radiosQueryList with current component.\r\n   */\r\n  private _subscribeRadiosQueryListChanges(): void {\r\n    if (!this.radiosQueryList) {\r\n      return;\r\n    }\r\n\r\n    const sub = this.radiosQueryList\r\n      .changes\r\n      .subscribe(() => {\r\n        this._subscribeRadiosQueryListOnClick();\r\n        this._registerRadioGroupToRadios();\r\n      });\r\n\r\n    this._radiosQueryListChangesObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Register radio group to child radios.\r\n   */\r\n  private _registerRadioGroupToRadios(): void {\r\n    this.radiosQueryList?.forEach(radioRef => radioRef.registerRadioGroup(this));\r\n  }\r\n\r\n  /**\r\n   * Subscribe onClick emitter to update selected value.\r\n   */\r\n  private _subscribeRadiosQueryListOnClick(): void {\r\n    if (!this.radiosQueryList) {\r\n      return;\r\n    }\r\n\r\n    const subs = this.radiosQueryList\r\n      .map(radioRef => {\r\n        return radioRef\r\n          .onClick\r\n          .subscribe(() => {\r\n            this._updateFocusedRadiosQueryList(radioRef);\r\n\r\n            this.setValue(radioRef.value);\r\n            this.writeValue(radioRef.value);\r\n          });\r\n      });\r\n\r\n    this._radiosQueryListOnClickObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Update the selected state of radiosQueryList.\r\n   */\r\n  private _updateSelectedRadiosQueryList(): void {\r\n    this.radiosQueryList?.forEach(radioRef => {\r\n      radioRef.selected = radioRef.value === this.value;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Update focused state of target radio component.\r\n   * Only target component will be focused, and others will be blurred.\r\n   *\r\n   * @param target\r\n   */\r\n  private _updateFocusedRadiosQueryList(target: FaviRadioComponent): void {\r\n    this.radiosQueryList?.forEach(radioRef => {\r\n      radioRef.focused = radioRef === target;\r\n    });\r\n  }\r\n}\r\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviRadioGroupComponent} from './favi-radio-group.component';\r\nimport {FaviRadioComponent} from './favi-radio/favi-radio.component';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviRadioGroupComponent,\r\n    FaviRadioComponent\r\n  ],\r\n  exports: [\r\n    FaviRadioGroupComponent,\r\n    FaviRadioComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviEffectorModule\r\n  ]\r\n})\r\nexport class FaviRadioGroupModule { }\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaviSelectValueDirective } from './favi-select-value.directive';\n\n\n\n@NgModule({\n  declarations: [\n    FaviSelectValueDirective\n  ],\n  exports: [\n    FaviSelectValueDirective\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviSelectValueModule { }\n","import {Component, ElementRef, OnChanges, Optional, SimpleChanges} from '@angular/core';\r\nimport {FaviBaseSlider} from '../abstracts/favi-base-slider/favi-base-slider';\r\nimport {NgControl} from '@angular/forms';\r\n\r\n/**\r\n * A single slider control.\r\n * Value validation and UI update are done by writeValue() method.\r\n */\r\n@Component({\r\n  selector: 'favi-slider',\r\n  templateUrl: './favi-slider.component.html',\r\n  host: {\r\n    class: 'favi-effector-container',\r\n  },\r\n})\r\nexport class FaviSliderComponent extends FaviBaseSlider implements OnChanges {\r\n  // Current value.\r\n  value = 0;\r\n\r\n  // Value in percentage for responsive view.\r\n  private _valuePercentage = 0;\r\n\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(ngControl, _elementRef);\r\n  }\r\n\r\n  /**\r\n   * Get _valuePercentage as style value.\r\n   */\r\n  get valuePercentageStyle(): string {\r\n    return `${this._valuePercentage}%`;\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const {min, max, step} = changes;\r\n\r\n    if (!min || !max || !step) {\r\n      return;\r\n    }\r\n\r\n    if (\r\n      min.previousValue !== min.currentValue\r\n      || max.previousValue !== max.currentValue\r\n      || step.previousValue !== step.currentValue\r\n    ) {\r\n      this._correctValue();\r\n      this._setButtonPosition();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Write value to component.\r\n   * Min/max validation and UI update are done by this method.\r\n   *\r\n   * @param obj - Value of slider.\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = obj || 0;\r\n    this._correctValue();\r\n    this._setButtonPosition();\r\n  }\r\n\r\n  protected override _valueUp(): void {\r\n    const nextValue = this.value + this.step;\r\n\r\n    this.writeValue(nextValue);\r\n    this.setValue(nextValue);\r\n  }\r\n\r\n  protected override _valueDown(): void {\r\n    const previousValue = this.value - this.step;\r\n\r\n    this.writeValue(previousValue);\r\n    this.setValue(previousValue);\r\n  }\r\n\r\n  /**\r\n   * Correct value to be included in min-max range.\r\n   */\r\n  private _correctValue(): void {\r\n    this.value = Math.min(this.max, this.value);\r\n    this.value = Math.max(this.min, this.value);\r\n  }\r\n\r\n  /**\r\n   * Set button position by value.\r\n   */\r\n  private _setButtonPosition(): void {\r\n    const valueFromMin = this.value - this.min;\r\n\r\n    this._valuePercentage = valueFromMin / this.total * 100;\r\n  }\r\n}\r\n","<div class=\"favi-slider-control\">\r\n  <div\r\n    #sliderTrack\r\n    class=\"favi-slider-track\">\r\n    <div\r\n      [style.width]=\"valuePercentageStyle\"\r\n      class=\"favi-slider-thumb\"></div>\r\n  </div>\r\n\r\n  <button\r\n    [style.left]=\"valuePercentageStyle\"\r\n    class=\"favi-button-no-styles favi-slider-button\"\r\n    theme=\"primary\"\r\n    type=\"button\"\r\n    tabindex=\"-1\"\r\n    faviEffector></button>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviSliderComponent} from './favi-slider.component';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviSliderComponent\r\n  ],\r\n  exports: [\r\n    FaviSliderComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviEffectorModule\r\n  ]\r\n})\r\nexport class FaviSliderModule { }\r\n","import {Component, ElementRef, Optional} from '@angular/core';\r\nimport {NgControl} from '@angular/forms';\r\nimport {FaviBaseToggleable} from '../abstracts/favi-base-toggleable/favi-base-toggleable';\r\n\r\n/**\r\n * Toggleable switch control.\r\n * Styles should be managed by _favi-switch.scss.\r\n */\r\n@Component({\r\n  selector: 'favi-switch',\r\n  templateUrl: './favi-switch.component.html',\r\n  host: {\r\n    class: 'favi-switch favi-effector-container',\r\n  },\r\n})\r\nexport class FaviSwitchComponent extends FaviBaseToggleable {\r\n  constructor(\r\n    @Optional() public override ngControl: NgControl,\r\n    protected override _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super(ngControl, _elementRef);\r\n  }\r\n}\r\n","<button\r\n  [theme]=\"theme\"\r\n  tabindex=\"-1\"\r\n  class=\"favi-button-no-styles favi-switch-button\"\r\n  type=\"button\"\r\n  faviEffector>\r\n  <div class=\"favi-switch-ball\"></div>\r\n</button>\r\n\r\n<label class=\"favi-label\">\r\n  <ng-content></ng-content>\r\n</label>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviSwitchComponent} from './favi-switch.component';\r\nimport {FaviEffectorModule} from '../../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviSwitchComponent\r\n  ],\r\n  exports: [\r\n    FaviSwitchComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviEffectorModule\r\n  ]\r\n})\r\nexport class FaviSwitchModule { }\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviTextareaComponent} from './favi-textarea.component';\r\nimport {FaviAutoResizeTextareaModule} from '../../common/favi-auto-resize-textarea/favi-auto-resize-textarea.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviTextareaComponent\r\n  ],\r\n  exports: [\r\n    FaviTextareaComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviAutoResizeTextareaModule\r\n  ]\r\n})\r\nexport class FaviTextareaModule { }\r\n","import {Component, ElementRef, HostBinding, Input, Optional, ViewChild} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {FaviTimeInputMeridiem} from './favi-time-input-meridiem';\nimport {CustomControl} from '../../abstracts/custom-control/custom-control';\nimport {FaviInputMaskResult} from '../favi-input-mask/favi-input-mask-result';\nimport {FaviInputMaskFunction} from '../favi-input-mask/favi-input-mask-function';\nimport {toInteger} from '../../../utils/convert.util';\nimport {NumberLike} from '../../../utils/type.util';\n\n/**\n * Timepicker.\n * Value should be 'HH:mm' format.\n */\n@Component({\n  selector: 'favi-time-input',\n  templateUrl: './favi-time-input.component.html',\n  host: {\n    class: 'favi-time-input favi-input',\n  },\n})\nexport class FaviTimeInputComponent extends CustomControl {\n  // Hours placeholder\n  @Input() hoursPlaceholder = 'HH';\n\n  // Minutes placeholder.\n  @Input() minutesPlaceholder = 'MM';\n\n  // Ref to hours input.\n  @ViewChild('hoursInput', {read: ElementRef}) hoursInputRef!: ElementRef<HTMLInputElement>;\n\n  // Ref to minutes input.\n  @ViewChild('minutesInput', {read: ElementRef}) minutesInputRef!: ElementRef<HTMLInputElement>;\n\n  // Focused state.\n  @HostBinding('class.favi-focused') focused = false;\n\n  // Selected meridiem.\n  meridiem: FaviTimeInputMeridiem = 'am';\n\n  // Current hours value.\n  hours = '00';\n\n  // Current minutes value.\n  minutes = '00';\n\n  /**\n   * Mask function for hours input.\n   *\n   * @param event\n   * @param value\n   */\n  hoursInputMaskFn: FaviInputMaskFunction = (event, value): FaviInputMaskResult => {\n    event.stopPropagation();\n\n    const {\n      selectionStart: previousSelection,\n    } = event.target as HTMLInputElement;\n\n    // Remove all characters that aren't numeric.\n    value = value.replace(/\\D/gmi, '');\n\n    const integer = toInteger(value);\n\n    // If hours value is more than 12, convert to 'pm'.\n    if (integer >= 12) {\n      if (integer > 12) {\n        value = toTimeString(integer % 12);\n      }\n\n      // Change meridiem to 'pm' when value is over '12'.\n      this.meridiem = 'pm';\n    }\n\n    if (value === '00') {\n      this.meridiem = 'am';\n    }\n\n    return {\n      value,\n      selection: previousSelection,\n    };\n  }\n\n  /**\n   * Mask function for minutes input.\n   *\n   * @param event\n   * @param value\n   */\n  minutesInputMaskFn: FaviInputMaskFunction = (event, value): FaviInputMaskResult => {\n    event.stopPropagation();\n\n    const {\n      selectionStart: previousSelection,\n    } = event.target as HTMLInputElement;\n\n    // Remove all characters that aren't numeric.\n    value = value.replace(/\\D/gmi, '');\n\n    const integer = toInteger(value);\n\n    if (integer > 59) {\n      value = toTimeString(integer % 60);\n    }\n\n    return {\n      value,\n      selection: previousSelection,\n    };\n  }\n\n  constructor(\n    @Optional() public override ngControl: NgControl,\n  ) {\n    super(ngControl);\n  }\n\n  /**\n   * Blur from both hours, minutes inputs.\n   */\n  override blur(): void {\n    this.hoursInputRef.nativeElement.blur();\n    this.minutesInputRef.nativeElement.blur();\n  }\n\n  /**\n   * Focus to hours input.\n   */\n  override focus(): void {\n    this.hoursInputRef.nativeElement.focus();\n  }\n\n  /**\n   * Write value to component.\n   *\n   * @param obj\n   */\n  override writeValue(obj: string): void {\n    if (obj) {\n      this._parseTimeValue(obj);\n    }\n  }\n\n  /**\n   * Set focused state.\n   * It selects all contents of focusing target.\n   *\n   * @param event\n   */\n  onFocus(event: Event): void {\n    (event.target as HTMLInputElement).select();\n\n    this.focused = true;\n  }\n\n  /**\n   * Remove focused state and mark as touched.\n   */\n  onBlur(): void {\n    this.focused = false;\n    this.markAsTouched();\n  }\n\n  /**\n   * Fix hours format.\n   *\n   * @param hours - Updated hours. When not provided, use existing 'hours'.\n   */\n  onHoursChange(hours = this.hours): void {\n    this.hours = toTimeString(hours);\n\n    if (this.hours === '00') {\n      this.meridiem = 'am';\n    }\n\n    this._emitChanges();\n  }\n\n  /**\n   * Fix minutes format.\n   *\n   * @param minutes - Updated minutes. When not provided, use existing 'minutes'.\n   */\n  onMinutesChange(minutes = this.minutes): void {\n    this.minutes = toTimeString(minutes);\n    this._emitChanges();\n  }\n\n  /**\n   * Toggle meridiem.\n   * It will emit value change.\n   */\n  toggleMeridiem(): void {\n    switch (this.meridiem) {\n      case 'am': {\n        this.meridiem = 'pm';\n        break;\n      }\n\n      case 'pm': {\n        this.meridiem = 'am';\n        break;\n      }\n    }\n\n    this._emitChanges();\n  }\n\n  /**\n   * Create time value in HH:mm format.\n   * Hours will be changed to 0-24 format follow the current meridiem.\n   */\n  private _createTimeValue(): string {\n    let hours = toInteger(this.hours);\n    let minutes = toInteger(this.minutes);\n\n    if (this.meridiem === 'pm') {\n      hours += 12;\n    }\n\n    return `${toTimeString(hours)}:${toTimeString(minutes)}`;\n  }\n\n  /**\n   * Parse HH:mm format time value to hours, minutes, and meridiem.\n   *\n   * @param value\n   */\n  private _parseTimeValue(value: string): void {\n    const [\n      hours,\n      minutes,\n    ] = value.split(':');\n\n    let hoursValue = toInteger(hours);\n    let minutesValue = toInteger(minutes);\n\n    if (hoursValue >= 12) {\n      if (hoursValue > 12) {\n        hoursValue -= 12;\n      }\n\n      this.meridiem = 'pm';\n    } else {\n      this.meridiem = 'am';\n    }\n\n    this.hours = toTimeString(hoursValue);\n    this.minutes = toTimeString(minutesValue);\n  }\n\n  /**\n   * Emit changes to allow model value binding.\n   */\n  private _emitChanges(): void {\n    const value = this._createTimeValue();\n\n    this.markAsTouched();\n    this.markAsDirty();\n    this.setValue(value);\n    this.writeValue(value);\n  }\n}\n\n/**\n * Convert provided hours or minutes to padded string with '0'.\n * The empty string and NaN will be converted to '00'.\n *\n * @param hoursOrMinutes\n */\nfunction toTimeString(hoursOrMinutes: NumberLike): string {\n  if (hoursOrMinutes === '' || (typeof hoursOrMinutes === 'number' && isNaN(hoursOrMinutes))) {\n    return '00';\n  } else {\n    return toInteger(hoursOrMinutes).toString().padStart(2, '0');\n  }\n}\n","<div class=\"favi-input-inner\">\n  <button\n    (click)=\"$event.stopPropagation(); toggleMeridiem()\"\n    [disabled]=\"disabled\"\n    class=\"favi-button-no-styles favi-time-input-meridiem favi-effector\"\n    theme=\"primary\"\n    type=\"button\"\n    faviFlatButton>\n    {{meridiem | uppercase}}\n  </button>\n\n  <input\n    #hoursInput\n    (focus)=\"onFocus($event)\"\n    (blur)=\"onBlur(); onHoursChange()\"\n    (ngModelChange)=\"onHoursChange($event)\"\n    [ngModel]=\"hours\"\n    [placeholder]=\"hoursPlaceholder\"\n    [disabled]=\"disabled\"\n    [maskFunction]=\"hoursInputMaskFn\"\n    class=\"favi-time-input-input favi-time-input-hours\"\n    faviInputMask/>\n\n  <div class=\"favi-time-input-colon\">:</div>\n\n  <input\n    #minutesInput\n    (focus)=\"onFocus($event)\"\n    (blur)=\"onBlur(); onMinutesChange()\"\n    (ngModelChange)=\"onMinutesChange($event)\"\n    [ngModel]=\"minutes\"\n    [placeholder]=\"minutesPlaceholder\"\n    [disabled]=\"disabled\"\n    [maskFunction]=\"minutesInputMaskFn\"\n    class=\"favi-time-input-input favi-time-input-minutes\"\n    faviInputMask/>\n</div>\n\n<div class=\"favi-input-bottom-line\"></div>\n<div class=\"favi-input-bottom-line favi-activated\"></div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviTimeInputComponent} from './favi-time-input.component';\nimport {FormsModule} from '@angular/forms';\nimport {FaviInputMaskModule} from '../favi-input-mask/favi-input-mask.module';\nimport {FaviFlatButtonModule} from '../../buttons/favi-flat-button/favi-flat-button.module';\n\n\n@NgModule({\n  declarations: [\n    FaviTimeInputComponent\n  ],\n  exports: [\n    FaviTimeInputComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    FaviInputMaskModule,\n    FaviFlatButtonModule,\n  ]\n})\nexport class FaviTimeInputModule { }\n","import {Directive, ElementRef} from '@angular/core';\r\n\r\n/**\r\n * A drag handle that triggers drag start.\r\n * It works only when rendered inside 'FaviDraggable'.\r\n */\r\n@Directive({\r\n  selector: '[faviDragHandle]'\r\n})\r\nexport class FaviDragHandleDirective {\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get ElementRef of host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n}\r\n","import {ContentChild, Directive, ElementRef, EventEmitter, HostBinding, HostListener} from '@angular/core';\r\nimport {Coordinate} from '../../../common/coordinate/coordinate';\r\nimport {FaviDragHandleDirective} from './favi-drag-handle.directive';\r\n\r\n/**\r\n * A draggable item that lives in 'FaviDragContainer'.\r\n */\r\n@Directive({\r\n  selector: '[faviDraggable]'\r\n})\r\nexport class FaviDraggableDirective {\r\n  /** Set dragging status and bind to class. */\r\n  @HostBinding('class.favi-draggable-dragging') dragging = false;\r\n\r\n  /**\r\n   * Drag Handle that triggers dragStart.\r\n   * When if not exists, dragStart can be triggered by host element of 'FaviDraggableDirective'.\r\n   */\r\n  @ContentChild(FaviDragHandleDirective, {descendants: true}) dragHandle?: FaviDragHandleDirective;\r\n\r\n  /** Internal dragStart emitter that emits coordinates of drag started position. */\r\n  dragStart = new EventEmitter<Coordinate>();\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get ElementRef of host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n\r\n  /**\r\n   * Listen 'touchstart' event.\r\n   *\r\n   * @param event - TouchEvent.\r\n   */\r\n  @HostListener('touchstart', ['$event'])\r\n  onTouchStart(event: TouchEvent): void {\r\n    if (this._isEventTargetOutOfDragHandle(event)) {\r\n      return;\r\n    }\r\n\r\n    const touch = event.touches?.[0];\r\n\r\n    if (touch) {\r\n      this.dragStart.emit({\r\n        x: touch.pageX,\r\n        y: touch.pageY,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Listen 'mousedown' event.\r\n   *\r\n   * @param event - MouseEvent.\r\n   */\r\n  @HostListener('mousedown', ['$event'])\r\n  onMouseDown(event: MouseEvent): void {\r\n    if (this._isEventTargetOutOfDragHandle(event)) {\r\n      return;\r\n    }\r\n\r\n    this.dragStart.emit({\r\n      x: event.x,\r\n      y: event.y,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Check that event target is out of dragHandle.\r\n   * When dragHandle doesn't exist, it assumes that target is inside dragHandle.\r\n   *\r\n   * @param event - Event to check target.\r\n   */\r\n  private _isEventTargetOutOfDragHandle(event: Event): boolean {\r\n    return !!this.dragHandle && !this.dragHandle.elementRef.nativeElement.contains(event.target as HTMLElement);\r\n  }\r\n}\r\n","import {Directive, ElementRef, HostBinding} from '@angular/core';\r\n\r\n/**\r\n * A dropzone that allows dropping dragging element.\r\n * It adds 'favi-dropzone-droppable' class when droppable.\r\n */\r\n@Directive({\r\n  selector: '[faviDropzone]'\r\n})\r\nexport class FaviDropzoneDirective {\r\n  /** Set droppable status and bind to class. */\r\n  @HostBinding('class.favi-dropzone-droppable') droppable = false;\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Get ElementRef of host element.\r\n   */\r\n  get elementRef(): ElementRef<HTMLElement> {\r\n    return this._elementRef;\r\n  }\r\n}\r\n","import {Directive, TemplateRef} from '@angular/core';\r\n\r\n/**\r\n * A template definition for dragging element.\r\n * The content of templateRef will be rendered in dragging element.\r\n *\r\n * It should be defined in 'FaviDragContainer'.\r\n */\r\n@Directive({\r\n  selector: 'ng-template[faviDraggingElementTemplate]'\r\n})\r\nexport class FaviDraggingElementTemplateDirective {\r\n\r\n  constructor(\r\n    public templateRef: TemplateRef<any>,\r\n  ) { }\r\n\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ContentChild,\r\n  ContentChildren,\r\n  Directive,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  QueryList,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\nimport {FaviDraggableDirective} from './favi-draggable.directive';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {FaviDropzoneDirective} from './favi-dropzone.directive';\r\nimport {createRandomId} from '../../../utils/random.util';\r\nimport {DOCUMENT} from '@angular/common';\r\nimport {Nullable} from '../../../utils/type.util';\r\nimport {EventManager} from '../../../common/event-manager/event-manager';\r\nimport {intersect} from '../../../utils/element.util';\r\nimport {disableEvent} from '../../../utils/event.util';\r\nimport {FaviDraggingElementTemplateDirective} from './favi-dragging-element-template.directive';\r\n\r\n/**\r\n * A container that detects drag starting and ending.\r\n * It can have multiple draggable items and dropzones to allow drop dragging items.\r\n */\r\n@Directive({\r\n  selector: '[faviDragContainer]',\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviDragContainerDirective implements AfterViewInit, OnDestroy {\r\n  /** Unique id of 'FaviDragContainer' distinguish with other container. */\r\n  readonly id = createRandomId(16);\r\n\r\n  /** Set custom class to dragging item to customize styles. */\r\n  @Input() draggingClass = '';\r\n\r\n  /** Emits when dragging started. It includes the index of dragging element. */\r\n  @Output() dragging = new EventEmitter<number>();\r\n\r\n  /** Emits when successfully dropped to dropzone. It includes the index of dropzone in container. */\r\n  @Output() dropped = new EventEmitter<number>();\r\n\r\n  /** Ref to template of dragging element. */\r\n  @ContentChild(FaviDraggingElementTemplateDirective, {descendants: true}) draggingElementTemplate?: FaviDraggingElementTemplateDirective;\r\n\r\n  /** Draggable children. */\r\n  @ContentChildren(FaviDraggableDirective, {descendants: true}) draggableList!: QueryList<FaviDraggableDirective>;\r\n\r\n  /** Dropzone children. */\r\n  @ContentChildren(FaviDropzoneDirective, {descendants: true}) dropzoneList!: QueryList<FaviDropzoneDirective>;\r\n\r\n  /** Dragging element that float over the page. */\r\n  private _draggingElement: Nullable<HTMLElement> = null;\r\n\r\n  /** Subscription observer for changes of draggableList. */\r\n  private _draggableChangesObserver = this._subscriptionManager.createObserver();\r\n\r\n  /** Subscription observer for dragStart of draggable items. */\r\n  private _draggableDragStartObserver = this._subscriptionManager.createObserver();\r\n\r\n  constructor(\r\n    @Inject(DOCUMENT) private _document: Document,\r\n    private _subscriptionManager: SubscriptionManager,\r\n    private _viewContainerRef: ViewContainerRef,\r\n  ) {\r\n  }\r\n\r\n  /**\r\n   * Event name for 'mousemove' to update dragging position.\r\n   */\r\n  get draggingMouseMove(): string {\r\n    return `DRAGGING_MOUSE_MOVE_${this.id}`;\r\n  }\r\n\r\n  /**\r\n   * Event name for 'mouseup' to stop dragging.\r\n   */\r\n  get draggingMouseUp(): string {\r\n    return `DRAGGING_MOUSE_UP_${this.id}`;\r\n  }\r\n\r\n  /**\r\n   * Event name for 'touchmove' to update dragging position.\r\n   */\r\n  get draggingTouchMove(): string {\r\n    return `DRAGGING_TOUCH_MOVE_${this.id}`;\r\n  }\r\n\r\n  /**\r\n   * Event name for 'touchend' to stop dragging.\r\n   */\r\n  get draggingTouchEnd(): string {\r\n    return `DRAGGING_TOUCH_END_${this.id}`;\r\n  }\r\n\r\n  /**\r\n   * Event name for 'touchcancel' to stop dragging.\r\n   */\r\n  get draggingTouchCancel(): string {\r\n    return `DRAGGING_TOUCH_CANCEL_${this.id}`;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._subscribeDraggableDragStarts();\r\n    this._subscribeDraggableChanges();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._removeAllEvents();\r\n  }\r\n\r\n  /**\r\n   * Subscribe changes of draggableList.\r\n   */\r\n  private _subscribeDraggableChanges(): void {\r\n    const sub = this.draggableList\r\n      .changes\r\n      .subscribe(() => {\r\n        this._subscribeDraggableDragStarts();\r\n      });\r\n\r\n    this._draggableChangesObserver.observe(sub);\r\n  }\r\n\r\n  /**\r\n   * Subscribe dragStart events from draggable.\r\n   */\r\n  private _subscribeDraggableDragStarts(): void {\r\n    const subs = this.draggableList.map((draggable, index) => {\r\n      return draggable.dragStart\r\n        .subscribe(event => {\r\n          draggable.dragging = true;\r\n\r\n          this._createDraggingElement(draggable, event.x, event.y);\r\n          this._addDraggingEvents();\r\n\r\n          this.dragging.emit(index);\r\n        });\r\n    });\r\n\r\n    this._draggableDragStartObserver.observe(...subs);\r\n  }\r\n\r\n  /**\r\n   * Create dragging element.\r\n   *\r\n   * @param draggable - Draggable directive that emitted dragStart.\r\n   * @param x - Initial x position of dragging element.\r\n   * @param y - Initial y position of dragging element.\r\n   */\r\n  private _createDraggingElement(draggable: FaviDraggableDirective, x: number, y: number): void {\r\n    this._draggingElement?.remove(); // Remove previous dragging element if exists.\r\n    this._draggingElement = this._document.createElement('div');\r\n\r\n    this._draggingElement.setAttribute('faviDragging', '');\r\n    this._draggingElement.setAttribute('favi-drag-container-id', this.id);\r\n    this._renderDraggingElementContent(this._draggingElement, draggable);\r\n    this._updateDraggingPosition(x, y);\r\n\r\n    if (this.draggingClass) {\r\n      this._draggingElement.classList.add(this.draggingClass);\r\n    }\r\n\r\n    this._document.body.append(this._draggingElement);\r\n  }\r\n\r\n  /**\r\n   * Render the content of dragging element.\r\n   *\r\n   * @param draggingElement - Dragging element to render content.\r\n   * @param draggable - Draggable directive.\r\n   */\r\n  private _renderDraggingElementContent(draggingElement: HTMLElement, draggable: FaviDraggableDirective): void {\r\n    if (this.draggingElementTemplate) {\r\n      const embeddedViewRef = this._viewContainerRef.createEmbeddedView(this.draggingElementTemplate.templateRef);\r\n\r\n      embeddedViewRef.rootNodes.forEach(node => {\r\n        draggingElement.append(node);\r\n      });\r\n    } else {\r\n      draggingElement.innerHTML = draggable.elementRef.nativeElement.outerHTML;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Add dragging events.\r\n   */\r\n  private _addDraggingEvents(): void {\r\n    EventManager.register<WindowEventMap>(this.draggingMouseMove, window, 'mousemove', this._onWindowMouseMove);\r\n    EventManager.register<WindowEventMap>(this.draggingTouchMove, window, 'touchmove', this._onWindowTouchMove, { passive: false });\r\n    EventManager.register<WindowEventMap>(this.draggingMouseUp, window, 'mouseup', this._dropToDropzone);\r\n    EventManager.register<WindowEventMap>(this.draggingTouchEnd, window, 'touchend', this._dropToDropzone, { passive: false });\r\n    EventManager.register<WindowEventMap>(this.draggingTouchCancel, window, 'touchcancel', this._dropToDropzone, { passive: false });\r\n  }\r\n\r\n  /**\r\n   * Handle 'mousemove' event.\r\n   *\r\n   * @param event - MouseEvent.\r\n   */\r\n  private _onWindowMouseMove = (event: MouseEvent): void => {\r\n    disableEvent(event);\r\n\r\n    this._updateDraggingPosition(event.x, event.y);\r\n    this._checkDropzone();\r\n  }\r\n\r\n  /**\r\n   * Handle 'touchmove' event.\r\n   *\r\n   * @param event - TouchEvent.\r\n   */\r\n  private _onWindowTouchMove = (event: TouchEvent): void => {\r\n    const touch = event.touches?.[0];\r\n\r\n    disableEvent(event);\r\n\r\n    if (touch) {\r\n      this._updateDraggingPosition(touch.pageX, touch.pageY);\r\n      this._checkDropzone();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update the position of 'dragging' element.\r\n   *\r\n   * @param x - X position.\r\n   * @param y - Y position.\r\n   */\r\n  private _updateDraggingPosition(x: number, y: number): void {\r\n    if (this._draggingElement) {\r\n      this._draggingElement.style.left = `${x}px`;\r\n      this._draggingElement.style.top = `${y}px`;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check dropzone active status.\r\n   */\r\n  private _checkDropzone(): void {\r\n    const {\r\n      _draggingElement: dragging,\r\n    } = this;\r\n\r\n    if (dragging) {\r\n      this.dropzoneList.forEach(dropzone => {\r\n        const dropzoneHost = dropzone.elementRef.nativeElement;\r\n        const dropzoneHostRect = dropzoneHost.getBoundingClientRect();\r\n        const draggingRect = dragging.getBoundingClientRect();\r\n\r\n        dropzone.droppable = intersect(dropzoneHostRect, draggingRect);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Drop dragging element to dropzone.\r\n   * It emits 'dropped' and remove dragging element.\r\n   *\r\n   * @param event - Event.\r\n   */\r\n  private _dropToDropzone = (event: Event): void => {\r\n    disableEvent(event);\r\n\r\n    this.dropzoneList.forEach((dropzone, index) => {\r\n      if (dropzone.droppable) {\r\n        this.dropped.emit(index);\r\n      }\r\n\r\n      dropzone.droppable = false;\r\n\r\n      this._draggingElement?.remove();\r\n      this._draggingElement = null;\r\n    });\r\n\r\n    // Turn off all dragging statuses.\r\n    this.draggableList.forEach(draggable => draggable.dragging = false);\r\n\r\n    this._removeAllEvents();\r\n  }\r\n\r\n  /**\r\n   * Remove all bound events.\r\n   */\r\n  private _removeAllEvents(): void {\r\n    EventManager.unregister(this.draggingMouseMove);\r\n    EventManager.unregister(this.draggingTouchMove);\r\n    EventManager.unregister(this.draggingMouseUp);\r\n    EventManager.unregister(this.draggingTouchEnd);\r\n    EventManager.unregister(this.draggingTouchCancel);\r\n  }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviDragContainerDirective} from './favi-drag-container.directive';\r\nimport {FaviDraggableDirective} from './favi-draggable.directive';\r\nimport {FaviDropzoneDirective} from './favi-dropzone.directive';\r\nimport {FaviDragHandleDirective} from './favi-drag-handle.directive';\r\nimport {FaviDraggingElementTemplateDirective} from './favi-dragging-element-template.directive';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviDragContainerDirective,\r\n    FaviDraggableDirective,\r\n    FaviDropzoneDirective,\r\n    FaviDragHandleDirective,\r\n    FaviDraggingElementTemplateDirective\r\n  ],\r\n  exports: [\r\n    FaviDragContainerDirective,\r\n    FaviDropzoneDirective,\r\n    FaviDraggableDirective,\r\n    FaviDragHandleDirective,\r\n    FaviDraggingElementTemplateDirective\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class FaviDragAndDropModule { }\r\n","import {Component, HostBinding, Inject} from '@angular/core';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\r\nimport {FaviBaseOverlay} from '../../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\r\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviOverlayData} from '../../../overlay/favi-overlay/services/favi-overlay-data';\r\n\r\nconst DRAWER_ANIMATION_TIMING = '.2s ease-out';\r\n\r\n/**\r\n * Available type for drawer side.\r\n */\r\nexport type FaviDrawerSide = 'left' | 'right' | 'top' | 'bottom';\r\n\r\n/**\r\n * Base options for a drawer component.\r\n */\r\nexport interface FaviBaseDrawerOptions {\r\n  /**\r\n   * Drawer sliding side.\r\n   * Drawer component will slide in from 'side' to view.\r\n   * It determines border radius by side as well.\r\n   */\r\n  side: FaviDrawerSide;\r\n\r\n  /**\r\n   * Determine whether drawer to be fit or not.\r\n   * When it's 'true', drawer will be fit its size to the width or height by remaining minimum space.\r\n   * If 'false', the size will be determined by content, but cannot be bigger than fit size.\r\n   */\r\n  fit?: boolean;\r\n}\r\n\r\n/**\r\n * Base abstract class to create a drawer.\r\n * It extends 'FaviBaseModal'.\r\n * Drawer component is a modal that slides to view from top, right, left, or bottom side when opened.\r\n */\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-drawer',\r\n  },\r\n  animations: [\r\n    trigger('slideDrawer', [\r\n      state('left', style({\r\n        transform: 'translateX(0)',\r\n      })),\r\n      transition('void => left', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translateX(0)',\r\n        })),\r\n      ]),\r\n      transition('left => void', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translateX(-100%)',\r\n        })),\r\n      ]),\r\n      state('top', style({\r\n        transform: 'translate(-50%, 0)',\r\n      })),\r\n      transition('void => top', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translate(-50%, 0)',\r\n        })),\r\n      ]),\r\n      transition('top => void', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translate(-50%, -100%)',\r\n        })),\r\n      ]),\r\n      state('bottom', style({\r\n        transform: 'translate(-50%, 0)',\r\n      })),\r\n      transition('void => bottom', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translate(-50%, 0)',\r\n        })),\r\n      ]),\r\n      transition('bottom => void', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translate(-50%, 100%)',\r\n        })),\r\n      ]),\r\n      state('right', style({\r\n        transform: 'translateX(0)',\r\n      })),\r\n      transition('void => right', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translateX(0)',\r\n        })),\r\n      ]),\r\n      transition('right => void', [\r\n        animate(DRAWER_ANIMATION_TIMING, style({\r\n          transform: 'translateX(100%)',\r\n        })),\r\n      ]),\r\n    ]),\r\n  ],\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport abstract class FaviBaseDrawer<Data extends FaviBaseDrawerOptions, Result = void> extends FaviBaseOverlay<Data, Result> {\r\n  protected constructor(\r\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<Data, Result>,\r\n    @Inject(FaviOverlayData) protected _data: Data,\r\n    protected override _subscriptionManager: SubscriptionManager,\r\n  ) {\r\n    super(_faviOverlayRef, _subscriptionManager);\r\n  }\r\n\r\n  /**\r\n   * Bind class when drawer 'side' option is 'top'.\r\n   */\r\n  @HostBinding('class.favi-drawer-top-side')\r\n  get isTopSide(): boolean {\r\n    return this.side === 'top';\r\n  }\r\n\r\n  /**\r\n   * Bind class when drawer 'side' option is 'right'.\r\n   */\r\n  @HostBinding('class.favi-drawer-right-side')\r\n  get isRightSide(): boolean {\r\n    return this.side === 'right';\r\n  }\r\n\r\n  /**\r\n   * Bind class when drawer 'side' option is 'left'.\r\n   */\r\n  @HostBinding('class.favi-drawer-left-side')\r\n  get isLeftSide(): boolean {\r\n    return this.side === 'left';\r\n  }\r\n\r\n  /**\r\n   * Bind class when drawer 'side' option is 'bottom'.\r\n   */\r\n  @HostBinding('class.favi-drawer-bottom-side')\r\n  get isBottomSide(): boolean {\r\n    return this.side === 'bottom';\r\n  }\r\n\r\n  /**\r\n   * Bind class when drawer 'fit' is 'true'.\r\n   */\r\n  @HostBinding('class.favi-drawer-size-fit')\r\n  get isSizeFit(): boolean {\r\n    return !!this._data.fit;\r\n  }\r\n\r\n  /**\r\n   * Get drawer side option and bind to 'slideDrawer' animation.\r\n   */\r\n  @HostBinding('@slideDrawer')\r\n  get side(): FaviDrawerSide {\r\n    return this._data.side;\r\n  }\r\n}\r\n","import {Component} from '@angular/core';\n\n/**\n * Actions area of drawer component.\n * Content will be stacked as column direction by stretching.\n */\n@Component({\n  selector: 'favi-drawer-actions',\n  templateUrl: './favi-drawer-actions.component.html',\n  host: {\n    class: 'favi-drawer-actions',\n  }\n})\nexport class FaviDrawerActionsComponent {\n\n}\n","<ng-content></ng-content>\n","import {Component} from '@angular/core';\n\n/**\n * Content area of drawer.\n * It will stretch its height to fit to remaining area of drawer,\n * And, when content is overflowed, scrollbar is enabled.\n */\n@Component({\n  selector: 'favi-drawer-content',\n  templateUrl: './favi-drawer-content.component.html',\n  host: {\n    class: 'favi-drawer-content',\n  },\n})\nexport class FaviDrawerContentComponent {\n\n}\n","<ng-content></ng-content>\n","import {Component, Inject} from '@angular/core';\nimport {FaviOverlayRef} from '../../overlay/favi-overlay/services/favi-overlay-ref';\n\n/**\n * Header component of drawer.\n * It contains icon, title, and close button.\n */\n@Component({\n  selector: 'favi-drawer-header',\n  templateUrl: './favi-drawer-header.component.html',\n  host: {\n    class: 'favi-drawer-header',\n  },\n})\nexport class FaviDrawerHeaderComponent {\n  constructor(\n    @Inject(FaviOverlayRef) private _faviOverlayRef: FaviOverlayRef<any>,\n  ) {\n  }\n\n  /**\n   * Close drawer.\n   */\n  close(): void {\n    this._faviOverlayRef.close();\n  }\n}\n","<div class=\"favi-drawer-header-title-container\">\n  <h3>\n    <ng-content></ng-content>\n  </h3>\n</div>\n\n<button\n  (click)=\"close()\"\n  class=\"favi-button-no-styles favi-icon-ball-button favi-drawer-header-close-button\"\n  faviEffector>\n  <favi-icon>\n    close\n  </favi-icon>\n</button>\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviDrawerHeaderComponent} from './favi-drawer-header/favi-drawer-header.component';\r\nimport {FaviDrawerContentComponent} from './favi-drawer-content/favi-drawer-content.component';\r\nimport {FaviDrawerActionsComponent} from './favi-drawer-actions/favi-drawer-actions.component';\r\nimport {FaviIconModule} from '../common/favi-icon/favi-icon.module';\r\nimport {FaviEffectorModule} from '../common/favi-effector/favi-effector.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviDrawerHeaderComponent,\r\n    FaviDrawerContentComponent,\r\n    FaviDrawerActionsComponent\r\n  ],\r\n  exports: [\r\n    FaviDrawerHeaderComponent,\r\n    FaviDrawerContentComponent,\r\n    FaviDrawerActionsComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviIconModule,\r\n    FaviEffectorModule\r\n  ]\r\n})\r\nexport class FaviDrawerModule { }\r\n","import {Injectable, Type} from '@angular/core';\r\nimport {FaviBaseDrawer, FaviBaseDrawerOptions} from './abstracts/favi-base-drawer/favi-base-drawer';\r\nimport {FaviOverlayService} from '../overlay/favi-overlay/services/favi-overlay.service';\r\nimport {FaviOverlayOpenOptions} from '../overlay/favi-overlay/services/favi-overlay-open-options';\r\nimport {FaviOverlayRef} from '../overlay/favi-overlay/services/favi-overlay-ref';\r\nimport {FaviModalBackdropComponent} from '../modal/favi-modal/favi-modal-backdrop/favi-modal-backdrop.component';\r\n\r\n/**\r\n * A service to open drawer component.\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FaviDrawerService {\r\n  constructor(\r\n    private _overlayService: FaviOverlayService,\r\n  ) { }\r\n\r\n  /**\r\n   * Open a drawer component.\r\n   *\r\n   * @param component - Component to open as a Drawer. It should extend FaviBaseDrawer.\r\n   * @param options - Opening options.\r\n   */\r\n  open<Data extends FaviBaseDrawerOptions, Result = void>(component: Type<FaviBaseDrawer<Data,  Result>>, options: FaviOverlayOpenOptions<Data, Result>): FaviOverlayRef<Data, Result> {\r\n    return this._overlayService.open(component, {\r\n      backdrop: FaviModalBackdropComponent, // Use modal backdrop for dark backdrop.\r\n      ...options,\r\n    });\r\n  }\r\n}\r\n","import {EventEmitter, Inject, Injectable, Optional} from '@angular/core';\nimport {CanUndefined} from '../../../utils/type.util';\nimport {BehaviorSubject} from 'rxjs';\nimport {createRandomId} from '../../../utils/random.util';\n\n/**\n * List types.\n */\ntype FaviMarkdownEditorList = 'ul' | 'ol';\n\n/**\n * Line selection for textarea.\n */\ninterface FaviMarkdownLineSelection {\n  /** Content of selected lines. */\n  selectedLines: string[];\n\n  /** Start line index. */\n  start: number;\n\n  /** End line index. */\n  end: number;\n}\n\n/**\n * Definition of action.\n */\nexport type FaviMarkdownEditorAction = (textarea: HTMLTextAreaElement, ...param: any[]) => void;\n\n/**\n * Provider for additional actions to register to 'FaviMarkdownEditorService'.\n * A 'key' is name of action, value is callback function for action.\n */\nexport class FaviMarkdownEditorActionProvider {\n  [key: string]: FaviMarkdownEditorAction;\n\n  constructor(options: Record<string, FaviMarkdownEditorAction>) {\n    Object.keys(options).forEach(key => this[key] = options[key]);\n  }\n}\n\n/**\n * Event of executing action.\n */\nexport interface FaviMarkdownExecuteActionEvent {\n  /** Name of action. */\n  name: string;\n\n  /** Any parameters. */\n  params: any[];\n}\n\n/**\n * A service to communicate between toolbar and editor.\n * In most case, the built-in actions are using 'document.execCommand('insertText')' method to keep\n * undo/redo function in textarea.\n *\n * It's not provided in root level. Provide it to component level to restrict access only for scoped textarea.\n *\n * To use custom action, use 'FaviMarkdownEditorActionProvider' or 'registerAction()' method.\n */\n@Injectable()\nexport class FaviMarkdownEditorService {\n  /**\n   * Event emitter for 'execAction()'. It emits with action 'name'.\n   * The 'FaviMarkdownEditorComponent' is subscribing 'actionExecuted' emitter to get and run 'FaviMarkdownEditorAction'.\n   */\n  actionExecuted = new EventEmitter<FaviMarkdownExecuteActionEvent>();\n\n  /** Editor focused status. */\n  private _focused$ = new BehaviorSubject(false);\n\n  /** Registered actions. It can be called with 'execAction()' method. */\n  private _registeredActions: Map<string, FaviMarkdownEditorAction> = new Map();\n\n  constructor(\n    @Inject(FaviMarkdownEditorActionProvider) @Optional() private _faviMarkdownEditorActionProvider: FaviMarkdownEditorActionProvider,\n  ) {\n    // Register built-in actions.\n    this._registeredActions.set('h1', (textarea) => setHeadingStyle(textarea, 1));\n    this._registeredActions.set('h2', (textarea) => setHeadingStyle(textarea, 2));\n    this._registeredActions.set('h3', (textarea) => setHeadingStyle(textarea, 3));\n    this._registeredActions.set('h4', (textarea) => setHeadingStyle(textarea, 4));\n    this._registeredActions.set('h5', (textarea) => setHeadingStyle(textarea, 5));\n    this._registeredActions.set('h6', (textarea) => setHeadingStyle(textarea, 6));\n    this._registeredActions.set('bold', (textarea) => toggleInlineStyle(textarea, '**', 'bold'));\n    this._registeredActions.set('italic', (textarea) => toggleInlineStyle(textarea, '*', 'italic'));\n    this._registeredActions.set('strike', (textarea) => toggleInlineStyle(textarea, '~~', 'strike'));\n    this._registeredActions.set('code', (textarea) => toggleInlineStyle(textarea, '`', 'code'));\n    this._registeredActions.set('link', (textarea, link: string) => insertLink(textarea, link));\n    this._registeredActions.set('ul', (textarea) => setListStyle(textarea, 'ul'));\n    this._registeredActions.set('ol', (textarea) => setListStyle(textarea, 'ol'));\n    this._registeredActions.set('increaseIndent', (textarea) => increaseIndent(textarea));\n    this._registeredActions.set('decreaseIndent', (textarea) => decreaseIndent(textarea));\n    this._registeredActions.set('quote', (textarea) => setQuoteStyle(textarea));\n    this._registeredActions.set('codeBlock', (textarea) => setCodeBlockStyle(textarea));\n    this._registeredActions.set('deleteLine', (textarea) => cutOrDeleteLine(textarea));\n    this._registeredActions.set('cutLine', (textarea) => cutOrDeleteLine(textarea, true));\n    this._registeredActions.set('duplicateSelection', (textarea) => duplicateSelection(textarea));\n    this._registeredActions.set('insertTable', () => insertTable());\n    this._registeredActions.set('insertDouble', (textarea, character: string) => insertDouble(textarea, character));\n    this._registeredActions.set('hr', (textarea) => insertHr(textarea));\n\n    // Register additional actions with provider.\n    if (this._faviMarkdownEditorActionProvider) {\n      Object.keys(this._faviMarkdownEditorActionProvider).forEach(key => {\n        this._registeredActions.set(key, this._faviMarkdownEditorActionProvider[key]);\n      });\n    }\n  }\n\n  /**\n   * Get focused status of editor.\n   */\n  get focused(): boolean {\n    return this._focused$.value;\n  }\n\n  /**\n   * Set focused status of editor.\n   *\n   * @param status - Updated status.\n   */\n  set focused(status: boolean) {\n    this._focused$.next(status);\n  }\n\n  /**\n   * Get focused status as subject.\n   */\n  get focused$(): BehaviorSubject<boolean> {\n    return this._focused$;\n  }\n\n  /**\n   * Register action to service.\n   * When name is duplicated, previous action will be removed.\n   *\n   * @param name - Name of action.\n   * @param action - Action to register.\n   */\n  registerAction(name: string, action: FaviMarkdownEditorAction): void {\n    this._registeredActions.set(name, action);\n  }\n\n  /**\n   * Emit 'actionExecuted' to execute action.\n   *\n   * @param name - Name of registered action.\n   * @param params - Any parameters to pass.\n   */\n  execAction(name: string, ...params: any[]): void {\n    this.actionExecuted.emit({\n      name,\n      params,\n    });\n  }\n\n  /**\n   * Get action by name.\n   *\n   * @param name - Name of action to get.\n   */\n  getAction(name: string): CanUndefined<FaviMarkdownEditorAction> {\n    return this._registeredActions.get(name);\n  }\n}\n\n/**\n * Get the line number by character 'index' from the 'value.\n *\n * @param value - Textarea value which has multiple lines with '\\n'.\n * @param index - Index of character.\n */\nfunction getLineNumberByIndex(value: string, index: number): number {\n  return value.substring(0, index).split('\\n').length - 1;\n}\n\n/**\n * Get the start index of provided 'line' number in 'value'.\n *\n * @param value - Textarea value which has multiple lines with '\\n'.\n * @param line - Line index to get start index.\n */\nfunction getLineStartIndex(value: string, line: number): number {\n  const lines = value.split('\\n').slice(0, line);\n\n  let index = 0;\n\n  lines.forEach(line => {\n    index += line.length + 1; // Correct with the number of '\\n' characters\n  });\n\n  return index;\n}\n\n/**\n * Get the end index of provided 'line' number in 'value'.\n *\n * @param value - Textarea value which has multiple lines with '\\n'.\n * @param line - Line index to get end index.\n */\nfunction getLineEndIndex(value: string, line: number): number {\n  const lines = value.split('\\n').slice(0, line + 1);\n\n  let index = 0;\n\n  lines.forEach(line => {\n    index += line.length;\n  });\n\n  index += lines.length - 1; // Correct with the number of '\\n' characters.\n\n  return index;\n}\n\n/**\n * Get selection line content.\n *\n * @param textarea - Textarea to get selection line content.\n */\nfunction getLineSelection(textarea: HTMLTextAreaElement): FaviMarkdownLineSelection {\n  const {\n    selectionStart,\n    selectionEnd,\n    value,\n  } = textarea;\n\n  const start = getLineNumberByIndex(value, selectionStart);\n  const end = getLineNumberByIndex(value, selectionEnd);\n  const lines = value.split('\\n');\n  const selectedLines = lines.splice(start, (end + 1) - start);\n\n  return {\n    selectedLines,\n    start,\n    end,\n  };\n}\n\n/**\n * Replace textarea content by line.\n *\n * @param textarea - Textarea to convert content.\n * @param content - Content for replacing lines.\n * @param start - Start line index to replace.\n * @param end - End line index to replace.\n */\nfunction replaceLines(textarea: HTMLTextAreaElement, content: string, start: number, end: number): void {\n  // Select all lines to replace.\n  textarea.selectionStart = getLineStartIndex(textarea.value, start);\n  textarea.selectionEnd = getLineEndIndex(textarea.value, end);\n\n  document.execCommand('insertText', false, content);\n\n  // Re-select replaced lines.\n  textarea.selectionStart = getLineStartIndex(textarea.value, start);\n  textarea.selectionEnd = getLineEndIndex(textarea.value, end);\n}\n\n/**\n * Set heading style to selected lines.\n *\n * @param textarea - Textarea to convert content.\n * @param level - Heading level from 1 to 6.\n */\nfunction setHeadingStyle(textarea: HTMLTextAreaElement, level: number): void {\n  const {\n    selectionStart,\n    selectionEnd,\n  } = textarea;\n\n  const {\n    selectedLines,\n    start,\n    end,\n  } = getLineSelection(textarea)\n\n  const headingPrefix = `${'#'.repeat(level)} `;\n\n  const transformedLines = selectedLines.map(selectedLine => {\n    if (selectedLine.startsWith('#')) {\n      selectedLine = selectedLine.replace(/^#+ /, '');\n    }\n\n    return `${headingPrefix}${selectedLine}`;\n  });\n\n  replaceLines(textarea, transformedLines.join('\\n'), start, end);\n\n  if (start === end) { // When transforming in same line, keep selection position.\n    textarea.selectionStart = selectionStart + headingPrefix.length;\n    textarea.selectionEnd = selectionEnd + headingPrefix.length\n  }\n}\n\n/**\n * Toggle inline style.\n * 'specialCharacters' will be appended before and after selection.\n *\n * @param textarea - Textarea to convert content.\n * @param specialCharacters - Special characters for inline markdown style like '*', '**', '~~', or etc.\n * @param placeholder - Placeholder for empty selection. When selection is empty, text will be inserted with prefixed, suffixed\n *  'specialCharacters' and 'placeholder'.\n */\nfunction toggleInlineStyle(textarea: HTMLTextAreaElement, specialCharacters: string, placeholder: string): void {\n  const charactersLength = specialCharacters.length;\n\n  const {\n    selectionStart,\n    selectionEnd,\n    value,\n  } = textarea;\n\n  const selection = value.substring(selectionStart, selectionEnd);\n\n  if (selection.startsWith(specialCharacters) && selection.endsWith(specialCharacters)) { // When selection starts and ends with specialCharacters.\n    const newValue = selection.substring(charactersLength, selection.length - charactersLength);\n\n    document.execCommand('insertText', false, newValue);\n\n    textarea.selectionStart = selectionStart;\n    textarea.selectionEnd = selectionStart + newValue.length;\n  } else {\n    const newValue = `${specialCharacters}${selection || placeholder}${specialCharacters}`;\n\n    document.execCommand('insertText', false, newValue);\n\n    textarea.selectionStart = selectionStart + charactersLength;\n    textarea.selectionEnd = selectionStart + newValue.length - charactersLength;\n  }\n}\n\n/**\n * Insert link markdown to textarea.\n *\n * @param textarea - Textarea to convert content.\n * @param link - Link url.\n */\nfunction insertLink(textarea: HTMLTextAreaElement, link: string): void {\n  const {\n    selectionStart,\n    selectionEnd,\n    value,\n  } = textarea;\n\n  textarea.focus();\n\n  const selection = value.substring(selectionStart, selectionEnd) || 'link';\n\n  const newValue = `[${selection}](${link})`;\n\n  document.execCommand('insertText', false, newValue);\n\n  textarea.selectionStart = selectionStart + 1;\n  textarea.selectionEnd = textarea.selectionStart + selection.length;\n}\n\n/**\n * Set list style to selected lines.\n *\n * @param textarea - Textarea to convert.\n * @param type - List type.\n */\nfunction setListStyle(textarea: HTMLTextAreaElement, type: FaviMarkdownEditorList): void {\n  const listPrefix = type === 'ol' ? '1. ' : '- ';\n\n  const {\n    selectionStart,\n    selectionEnd,\n  } = textarea;\n\n  const {\n    selectedLines,\n    start,\n    end,\n  } = getLineSelection(textarea);\n\n  const transformedLines = selectedLines.map(selectedLine => {\n    const listIndicatorRegExp = /^((\\s*)- )|^((\\s*)\\d. )/;\n    const listIndicatorResult = listIndicatorRegExp.exec(selectedLine);\n\n    const [\n      ,\n      bulletedFullMatch,\n      bulletedSpaceMatch,\n      numberedFullMatch,\n      numberedSpaceMatch,\n    ] = listIndicatorResult || [];\n\n    if (numberedFullMatch) {\n      selectedLine = selectedLine.replace(listIndicatorRegExp, `${numberedSpaceMatch}${listPrefix}`);\n    } else if (bulletedFullMatch) {\n      selectedLine = selectedLine.replace(listIndicatorRegExp, `${bulletedSpaceMatch}${listPrefix}`);\n    } else {\n      const startingSpaceRegExp = /^\\s*/;\n      const startingSpaceResult = startingSpaceRegExp.exec(selectedLine);\n\n      selectedLine = selectedLine.replace(startingSpaceRegExp, `${startingSpaceResult?.[0] || ''}${listPrefix}`);\n    }\n\n    return selectedLine;\n  });\n\n  replaceLines(textarea, transformedLines.join('\\n'), start, end);\n\n  if (start === end) { // When transforming in same line, keep selection position.\n    textarea.selectionStart = selectionStart + listPrefix.length;\n    textarea.selectionEnd = selectionEnd + listPrefix.length\n  }\n}\n\n/**\n * Increase indent of selection lines.\n *\n * @param textarea - Textarea to convert content.\n */\nfunction increaseIndent(textarea: HTMLTextAreaElement): void {\n  const tab = '    ';\n\n  const {\n    selectionStart,\n    selectionEnd,\n  } = textarea;\n\n  const {\n    selectedLines,\n    start,\n    end,\n  } = getLineSelection(textarea);\n\n  const transformedLines = selectedLines.map(selectedLine => {\n    return `${tab}${selectedLine}`;\n  });\n\n  replaceLines(textarea, transformedLines.join('\\n'), start, end);\n\n  if (selectionStart === selectionEnd) {\n    textarea.selectionStart = selectionStart + tab.length;\n    textarea.selectionEnd = selectionEnd + tab.length\n  }\n}\n\n/**\n * Decrease indent of selection lines.\n *\n * @param textarea - Textarea to convert content.\n */\nfunction decreaseIndent(textarea: HTMLTextAreaElement): void {\n  const {\n    selectionStart,\n    selectionEnd,\n  } = textarea;\n\n  const {\n    selectedLines,\n    start,\n    end,\n  } = getLineSelection(textarea);\n\n  const tabRegExp = /^\\s{1,4}/\n\n  if (selectionStart === selectionEnd && selectedLines.length === 1) {\n    const matches = tabRegExp.exec(selectedLines[0]);\n    const matchedSpaces = matches?.[0] || '';\n\n    const transformedLines = selectedLines.map(selectedLine => {\n      return selectedLine.replace(tabRegExp, '');\n    });\n\n    replaceLines(textarea, transformedLines.join('\\n'), start, end);\n\n    textarea.selectionStart = selectionStart - matchedSpaces.length;\n    textarea.selectionEnd = selectionEnd - matchedSpaces.length;\n  } else {\n    const transformedLines = selectedLines.map(selectedLine => {\n      return selectedLine.replace(tabRegExp, '');\n    });\n\n    replaceLines(textarea, transformedLines.join('\\n'), start, end);\n  }\n}\n\n/**\n * Set quote style to selected lines.\n *\n * @param textarea - Textarea to convert content.\n */\nfunction setQuoteStyle(textarea: HTMLTextAreaElement): void {\n  const {\n    selectionStart,\n    selectionEnd,\n  } = textarea;\n\n  const {\n    selectedLines,\n    start,\n    end,\n  } = getLineSelection(textarea);\n\n  const quotePrefix = `> `;\n\n  const transformedLines = selectedLines.map(selectedLine => {\n    return `${quotePrefix}${selectedLine}`;\n  });\n\n  replaceLines(textarea, transformedLines.join('\\n'), start, end);\n\n  if (start === end) { // When transforming in same line, keep selection position.\n    textarea.selectionStart = selectionStart + quotePrefix.length;\n    textarea.selectionEnd = selectionEnd + quotePrefix.length\n  }\n}\n\n/**\n * Set code block style to selected text.\n *\n * @param textarea - Textarea to convert content.\n */\nfunction setCodeBlockStyle(textarea: HTMLTextAreaElement): void {\n  const {\n    selectionStart,\n    selectionEnd,\n    value,\n  } = textarea;\n\n  const selection = value.substring(selectionStart, selectionEnd) || 'code';\n\n  document.execCommand('insertText', false, [\n    '',\n    '```',\n    selection,\n    '```',\n    '',\n  ].join('\\n'));\n\n  textarea.selectionStart = selectionStart + 5;\n  textarea.selectionEnd = textarea.selectionStart + selection.length;\n}\n\n/**\n * Cut or delete selected lines.\n * Cut content will be copied to clipboard.\n *\n * @param textarea - Textarea to convert content.\n * @param copyLines - Set this value 'true' to copy deleted lines to clipboard.\n */\nfunction cutOrDeleteLine(textarea: HTMLTextAreaElement, copyLines = false): void {\n  const {\n    start,\n    end,\n  } = getLineSelection(textarea);\n\n  const selectionLineStartIndex = getLineStartIndex(textarea.value, start);\n\n  // Select all lines to replace.\n  // To remove one line, add end selection by 1.\n  textarea.selectionStart = getLineStartIndex(textarea.value, start);\n  textarea.selectionEnd = Math.min(getLineEndIndex(textarea.value, end) + 1, textarea.value.length);\n\n  const selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);\n\n  if (copyLines) {\n    navigator.clipboard.writeText(selection);\n  }\n\n  // When deleting last line that ends with '\\n' can cause deleting all content.\n  // To prevent it, check whether deleting last line that ends with '\\n'.\n  if (selection.endsWith('\\n')) {\n    const lastLineBreakReplacer = createRandomId(32);\n    const value = textarea.value.replace(/\\n$/, lastLineBreakReplacer);\n    const lines = value.split('\\n');\n    const lastLineIndex = lines.length - 1;\n    const lastLine = lines[lastLineIndex];\n\n    if (end === lastLineIndex && lastLine.endsWith(lastLineBreakReplacer)) {\n      textarea.selectionEnd -= 1;\n    }\n  }\n\n  document.execCommand('insertText', false, '');\n\n  // When last character is '\\n', reduce length by 1 because '\\n' is not selectable by selection.\n  const updatedValue = textarea.value;\n  const textLength = updatedValue.endsWith('\\n') ? updatedValue.length - 1 : updatedValue.length;\n\n  textarea.selectionStart = Math.min(selectionLineStartIndex, textLength);\n  textarea.selectionEnd = textarea.selectionStart;\n}\n\n/**\n * Insert table to textarea element.\n */\nfunction insertTable(): void {\n  const headerRow = `| column | column |`;\n  const headerLineRow = `| ------ | ------ |`;\n  const bodyRow = `| value  | value  |`;\n\n  document.execCommand('insertText', false, [\n    headerRow,\n    headerLineRow,\n    bodyRow,\n  ].join('\\n'));\n}\n\n/**\n * Duplicate selected text or lines.\n *\n * @param textarea - Textarea to convert content.\n */\nfunction duplicateSelection(textarea: HTMLTextAreaElement): void {\n  const {\n    selectionStart,\n    selectionEnd,\n  } = textarea;\n\n  if (selectionStart === selectionEnd) {\n    const {\n      selectedLines,\n      end,\n    } = getLineSelection(textarea);\n\n    const lines = selectedLines.join('\\n');\n\n    // Move selection to the end of line before insert.\n    const endIndex = getLineEndIndex(textarea.value, end);\n    textarea.selectionStart = endIndex;\n    textarea.selectionEnd = endIndex;\n\n    document.execCommand('insertText', false, `\\n${lines}`);\n\n    // Add by 1 for '\\n' character.\n    textarea.selectionStart = lines.length + selectionStart + 1;\n    textarea.selectionEnd = lines.length + selectionEnd + 1;\n  } else {\n    const selection = textarea.value.substring(selectionStart, selectionEnd);\n\n    document.execCommand('insertText', false, selection + selection);\n\n    textarea.selectionStart = selection.length + selectionStart;\n    textarea.selectionEnd = selection.length + selectionEnd;\n  }\n}\n\n/**\n * Insert character at the start of and end of selection.\n *\n * @param textarea - Textarea to convert.\n * @param character - Character to insert double.\n */\nfunction insertDouble(textarea: HTMLTextAreaElement, character: string): void {\n  const {\n    selectionStart,\n    selectionEnd,\n    value,\n  } = textarea;\n\n  const selection = value.substring(selectionStart, selectionEnd);\n\n  document.execCommand('insertText', false, `${character}${selection}${character}`);\n\n  textarea.selectionStart = selectionStart + character.length;\n  textarea.selectionEnd = textarea.selectionStart + selection.length;\n}\n\n/**\n * Insert horizontal rule.\n *\n * @param textarea - Textarea to convert.\n */\nfunction insertHr(textarea: HTMLTextAreaElement): void {\n  const {\n    selectionStart,\n  } = textarea;\n\n  document.execCommand('insertText', false, `\\n---\\n`);\n\n  textarea.selectionStart = selectionStart;\n  textarea.selectionEnd = selectionStart;\n}\n","import {Component, ElementRef, EventEmitter, Inject, Input, OnInit, Optional, Output, ViewChild} from '@angular/core';\nimport {CustomControl} from '../../abstracts/custom-control/custom-control';\nimport {NgControl} from '@angular/forms';\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\nimport {FaviMarkdownEditorService} from '../services/favi-markdown-editor.service';\nimport {AvailableKey, CommandKey, disableEvent, isCommand, isKey} from '../../../utils/event.util';\n\n/**\n * A simple markdown editor which managed by 'FaviMarkdownService'.\n * It doesn't parse markdown content. To parse markdown content, install a parser like 'marked'.\n */\n@Component({\n  selector: 'favi-markdown-editor',\n  templateUrl: './favi-markdown-editor.component.html',\n  host: {\n    class: 'favi-markdown-editor',\n  },\n  providers: [\n    SubscriptionManager,\n  ],\n})\nexport class FaviMarkdownEditorComponent extends CustomControl implements OnInit {\n  /** Placeholder for textarea. */\n  @Input() placeholder = '';\n\n  /** Emit when 'paste' event triggered. */\n  @Output() pasted = new EventEmitter<ClipboardEvent>();\n\n  /** Reference to a textarea. */\n  @ViewChild('textarea', {read: ElementRef}) textareaRef!: ElementRef<HTMLTextAreaElement>;\n\n  /** Value for textarea. */\n  value = '';\n\n  /** Subscription observer that observes 'actionExecuted' emitter of 'FaviMarkdownEditorService'. */\n  private _actionExecutedObserver = this._subscriptionManager.createObserver();\n\n  constructor(\n    @Inject(NgControl) @Optional() public override ngControl: NgControl,\n    private _faviMarkdownEditorService: FaviMarkdownEditorService,\n    private _subscriptionManager: SubscriptionManager,\n  ) {\n    super(ngControl);\n  }\n\n  ngOnInit(): void {\n    this._subscribeActionExecuted();\n  }\n\n  /**\n   * Blur from the element.\n   */\n  override blur(): void {\n    this.textareaRef?.nativeElement.blur();\n  }\n\n  /**\n   * Focus to the element.\n   */\n  override focus(): void {\n    this.textareaRef?.nativeElement.focus();\n  }\n\n  /**\n   * Write value to component.\n   *\n   * @param obj - Value to write.\n   */\n  override writeValue(obj: any): void {\n    this.value = obj;\n  }\n\n  /**\n   * Set focused status.\n   */\n  onFocus(): void {\n    this._faviMarkdownEditorService.focused = true;\n  }\n\n  /**\n   * Remove focused status.\n   */\n  onBlur(): void {\n    this._faviMarkdownEditorService.focused = false;\n  }\n\n  /**\n   * When input event triggered from textarea, call 'onValueChange()' to update value immediately.\n   */\n  onInput(): void {\n    const value = this.textareaRef?.nativeElement.value;\n\n    if (value !== undefined) {\n      this.onValueChange(value);\n    }\n  }\n\n  /**\n   * Handle value change.\n   *\n   * @param value - Changed value.\n   */\n  onValueChange(value: string): void {\n    this.setValue(value);\n    this.writeValue(value); // Call 'writeValue()' as well to update content even model isn't bound.\n  }\n\n  /**\n   * Increase indent of selected lines.\n   */\n  increaseIndent(): void {\n    this._faviMarkdownEditorService.execAction('increaseIndent');\n  }\n\n  /**\n   * Decrease indent of selected lines.\n   */\n  decreaseIndent(): void {\n    this._faviMarkdownEditorService.execAction('decreaseIndent');\n  }\n\n  /**\n   * Handle 'paste' event of textarea.\n   *\n   * @param event - ClipboardEvent.\n   */\n  onPaste(event: ClipboardEvent): void {\n    this.pasted.emit(event);\n  }\n\n  /**\n   * Handle keydown event from textarea.\n   *\n   * @param event - KeyboardEvent.\n   */\n  onKeyDown(event: KeyboardEvent): void {\n    const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n    const ctrl = isSafari ? CommandKey.meta : CommandKey.ctrl;\n\n    // To prevent unexpected behavior for composition text.\n    if (event.isComposing) {\n      return;\n    }\n\n    const {\n      selectionStart,\n      selectionEnd,\n    } = this.textareaRef.nativeElement;\n\n    if (isCommand(event, [CommandKey.shift], AvailableKey.Backquote)) { // Tilde.\n      if (selectionStart !== selectionEnd) {\n        disableEvent(event);\n        this._faviMarkdownEditorService.execAction('insertDouble', '~');\n      }\n    } else if (isKey(event, AvailableKey.Backquote)) {\n      disableEvent(event);\n      this._faviMarkdownEditorService.execAction('insertDouble', '`');\n    } else if (isCommand(event, [CommandKey.shift], AvailableKey.Digit8)) { // Asterisk.\n      if (selectionStart !== selectionEnd) {\n        disableEvent(event);\n        this._faviMarkdownEditorService.execAction('insertDouble', '*');\n      }\n    } else if (isCommand(event, [ctrl], AvailableKey.KeyB)) {\n      disableEvent(event);\n      this._faviMarkdownEditorService.execAction('bold');\n    } else if (isCommand(event, [ctrl], AvailableKey.KeyI)) {\n      disableEvent(event);\n      this._faviMarkdownEditorService.execAction('italic');\n    } else if (isCommand(event, [ctrl, CommandKey.shift], AvailableKey.KeyX)) {\n      disableEvent(event);\n      this._faviMarkdownEditorService.execAction('strike');\n    } else if (isCommand(event, [ctrl], AvailableKey.KeyE)) {\n      disableEvent(event);\n      this._faviMarkdownEditorService.execAction('code');\n    } else if (isCommand(event, [ctrl], AvailableKey.KeyX)) {\n      if (selectionStart === selectionEnd) {\n        disableEvent(event);\n        this._faviMarkdownEditorService.execAction('cutLine');\n      }\n    } else if (isCommand(event, [ctrl], AvailableKey.KeyD)) {\n      disableEvent(event);\n      this._faviMarkdownEditorService.execAction('duplicateSelection');\n    }\n  }\n\n  /**\n   * Subscribe 'actionExecuted' emitter.\n   */\n  private _subscribeActionExecuted(): void {\n    const sub = this._faviMarkdownEditorService\n      .actionExecuted\n      .subscribe(({name, params}) => {\n        const action = this._faviMarkdownEditorService.getAction(name);\n\n        if (action && this.textareaRef) {\n          action(this.textareaRef.nativeElement, ...params);\n        }\n      });\n\n    this._actionExecutedObserver.observe(sub);\n  }\n}\n","<textarea\n  #textarea\n  (focus)=\"onFocus()\"\n  (blur)=\"onBlur()\"\n  (input)=\"onInput()\"\n  (paste)=\"onPaste($event)\"\n  (keydown)=\"onKeyDown($event)\"\n  (keydown.tab)=\"$event.preventDefault(); increaseIndent()\"\n  (keydown.shift.tab)=\"$event.preventDefault(); decreaseIndent()\"\n  [ngModel]=\"value\"\n  [placeholder]=\"placeholder\"\n  class=\"favi-markdown-editor-textarea\"\n  spellcheck=\"false\"></textarea>\n","import {Component, Inject} from '@angular/core';\nimport {FaviMarkdownEditorService} from '../../services/favi-markdown-editor.service';\nimport {FaviBaseOverlay} from '../../../overlay/favi-overlay/abstracts/favi-base-overlay/favi-base-overlay';\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\n\n/**\n * Definition of heading option.\n */\ninterface FaviMarkdownHeadingOption {\n  /** Icon to display. */\n  icon: string;\n\n  /** Action name to trigger with 'FaviMarkdownEditorService'. */\n  name: string;\n}\n\n/**\n * Options for heading from h1 to h6.\n */\n@Component({\n  selector: 'favi-markdown-heading-options',\n  templateUrl: './favi-markdown-heading-options.component.html',\n  host: {\n    class: 'favi-markdown-heading-options',\n  },\n})\nexport class FaviMarkdownHeadingOptionsComponent extends FaviBaseOverlay {\n  /** Height of host element. Actual height is 256, but use 260 for margin. */\n  static height = 260;\n\n  /** Options for heading. */\n  options: FaviMarkdownHeadingOption[] = [\n    {\n      icon: 'format_h1',\n      name: 'h1',\n    },\n    {\n      icon: 'format_h2',\n      name: 'h2',\n    },\n    {\n      icon: 'format_h3',\n      name: 'h3',\n    },\n    {\n      icon: 'format_h4',\n      name: 'h4',\n    },\n    {\n      icon: 'format_h5',\n      name: 'h5',\n    },\n    {\n      icon: 'format_h6',\n      name: 'h6',\n    },\n  ];\n\n  constructor(\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<any>,\n    protected override _subscriptionManager: SubscriptionManager,\n    private _faviMarkdownEditorService: FaviMarkdownEditorService,\n  ) {\n    super(_faviOverlayRef, _subscriptionManager);\n  }\n\n  /**\n   * Execute action to set heading.\n   *\n   * @param name - Action name.\n   */\n  execAction(name: string): void {\n    this._faviMarkdownEditorService.execAction(name);\n    this.close();\n  }\n}\n","<button\n  (click)=\"execAction(option.name)\"\n  (mousedown)=\"$event.preventDefault()\"\n  *ngFor=\"let option of options\"\n  type=\"button\"\n  class=\"favi-button-no-styles favi-markdown-toolbar-action\">\n  <favi-icon>{{option.icon}}</favi-icon>\n</button>\n","import {Provider} from '@angular/core';\r\n\r\n/**\r\n * Injection token for labels provider of MarkdownInsertLink.\r\n */\r\nexport const FaviMarkdownInsertLinkLabels = 'FaviMarkdownInsertLinkLabelsProvider';\r\n\r\n/**\r\n * Options for labels provider of MarkdownInsertLink.\r\n */\r\nexport interface FaviMarkdownInsertLinkLabelsOptions {\r\n  /** Label for url input in Url modal. */\r\n  urlInputLabel?: string;\r\n\r\n  /** Placeholder for url input in Url modal. */\r\n  urlInputPlaceholder?: string;\r\n\r\n  /** Placeholder for url input required error. */\r\n  urlInputRequired?: string;\r\n\r\n  /** Insert button label. */\r\n  urlInputInsert?: string;\r\n}\r\n\r\n/**\r\n * Create provider for 'FaviMarkdownEditorLabelsProvider'.\r\n *\r\n * @param options - Options for provider.\r\n */\r\nexport function createFaviMarkdownEditorLabelsProvider(options: FaviMarkdownInsertLinkLabelsOptions): Provider {\r\n  return {\r\n    provide: FaviMarkdownInsertLinkLabels,\r\n    useValue: options,\r\n  };\r\n}\r\n","import {Component, Inject, Optional} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {ExtendedValidators} from '../../../../common/extended-validators/extended-validators';\nimport {FaviBaseModal} from '../../../modal/favi-modal/abstracts/favi-base-modal/favi-base-modal';\nimport {FaviOverlayRef} from '../../../overlay/favi-overlay/services/favi-overlay-ref';\nimport {FaviMarkdownInsertLinkLabels, FaviMarkdownInsertLinkLabelsOptions} from '../favi-markdown-insert-link-labels';\nimport {CanUndefined} from '../../../../utils/type.util';\nimport {SubscriptionManager} from '../../../../services/subscription-manager/subscription-manager';\n\n/**\n * Modal to add link in markdown editor.\n */\n@Component({\n  selector: 'favi-markdown-insert-link',\n  templateUrl: './favi-markdown-insert-link.component.html',\n  host: {\n    class: 'favi-markdown-insert-link',\n  },\n})\nexport class FaviMarkdownInsertLinkComponent extends FaviBaseModal<void, string> {\n  /** Form group. */\n  formGroup = new FormGroup({\n    url: new FormControl('', ExtendedValidators.textRequired),\n  });\n\n  constructor(\n    @Inject(FaviOverlayRef) protected override _faviOverlayRef: FaviOverlayRef<void, string>,\n    protected override _subscriptionManager: SubscriptionManager,\n    @Inject(FaviMarkdownInsertLinkLabels) @Optional() private _faviMarkdownInsertLinkLabels: FaviMarkdownInsertLinkLabelsOptions,\n  ) {\n    super(_faviOverlayRef, _subscriptionManager);\n  }\n\n  /**\n   * Get button disabled status.\n   */\n  get buttonDisabled(): boolean {\n    return this.formGroup.invalid;\n  }\n\n  /**\n   * Get label options.\n   */\n  get labels(): CanUndefined<FaviMarkdownInsertLinkLabelsOptions> {\n    return this._faviMarkdownInsertLinkLabels;\n  }\n\n  /**\n   * Handle form submit. Close modal with 'url'.\n   */\n  onSubmit(): void {\n    const {\n      url,\n    } = this.formGroup.value;\n\n    if (!url) {\n      return;\n    }\n\n    this.close(url);\n  }\n}\n","<favi-modal-content>\n  <form\n    (ngSubmit)=\"onSubmit()\"\n    [formGroup]=\"formGroup\"\n    class=\"favi-markdown-insert-link-form\">\n    <favi-form-field\n      class=\"favi-markdown-insert-link-field\"\n      required>\n      <label>\n        {{labels?.urlInputLabel || 'Insert Link'}}\n      </label>\n\n      <favi-input\n        [placeholder]=\"labels?.urlInputPlaceholder || 'URL'\"\n        formControlName=\"url\"\n        focusTarget=\"input\"\n        faviAutofocus></favi-input>\n\n      <ng-container *ngIf=\"formGroup.controls.url.invalid && formGroup.controls.url.touched && formGroup.controls.url.dirty\">\n        <favi-error *ngIf=\"formGroup.controls.url.hasError('required')\">\n          {{labels?.urlInputRequired || 'URL is required'}}\n        </favi-error>\n      </ng-container>\n    </favi-form-field>\n\n    <button type=\"submit\" hidden=\"hidden\"></button>\n  </form>\n</favi-modal-content>\n\n<favi-modal-actions>\n  <button\n    (click)=\"onSubmit()\"\n    [disabled]=\"buttonDisabled\"\n    type=\"submit\"\n    theme=\"primary\"\n    faviFlatButton>\n    {{labels?.urlInputInsert || 'Insert'}}\n  </button>\n</favi-modal-actions>\n","import {Component} from '@angular/core';\nimport {FaviMarkdownEditorService} from '../../services/favi-markdown-editor.service';\nimport {FaviOverlayService} from '../../../overlay/favi-overlay/services/favi-overlay.service';\nimport {\n  FaviMarkdownHeadingOptionsComponent\n} from '../favi-markdown-heading-options/favi-markdown-heading-options.component';\nimport {FaviOverlayOpenOptions} from '../../../overlay/favi-overlay/services/favi-overlay-open-options';\nimport {FaviModalService} from '../../../modal/favi-modal/services/favi-modal.service';\nimport {FaviMarkdownInsertLinkComponent} from '../favi-markdown-insert-link/favi-markdown-insert-link.component';\n\n/**\n * Definition of built-in actions of toolbar.\n */\ninterface FaviMarkdownToolbarAction {\n  /** Icon name to display. */\n  icon: string;\n\n  /** Action on click. */\n  onClick: (event: MouseEvent) => void;\n}\n\n/**\n * Toolbar for 'FaviMarkdownEditorComponent'.\n * It contains some common markdown style buttons, and can add any custom content.\n */\n@Component({\n  selector: 'favi-markdown-toolbar',\n  templateUrl: './favi-markdown-toolbar.component.html',\n  host: {\n    class: 'favi-markdown-toolbar',\n  },\n})\nexport class FaviMarkdownToolbarComponent {\n  /** Built-in actions. */\n  actions: FaviMarkdownToolbarAction[] = [\n    {\n      icon: 'format_h1',\n      onClick: (event: MouseEvent) => this.openHeadingOptions(event.target as HTMLElement),\n    },\n    {\n      icon: 'format_bold',\n      onClick: () => this._faviMarkdownEditorService.execAction('bold'),\n    },\n    {\n      icon: 'format_italic',\n      onClick: () => this._faviMarkdownEditorService.execAction('italic'),\n    },\n    {\n      icon: 'format_strikethrough',\n      onClick: () => this._faviMarkdownEditorService.execAction('strike'),\n    },\n    {\n      icon: 'code',\n      onClick: () => this._faviMarkdownEditorService.execAction('code'),\n    },\n    {\n      icon: 'link',\n      onClick: () => this.openInsertLink(),\n    },\n    {\n      icon: 'format_list_numbered',\n      onClick: () => this._faviMarkdownEditorService.execAction('ol'),\n    },\n    {\n      icon: 'format_list_bulleted',\n      onClick: () => this._faviMarkdownEditorService.execAction('ul'),\n    },\n    {\n      icon: 'format_quote',\n      onClick: () => this._faviMarkdownEditorService.execAction('quote'),\n    },\n    {\n      icon: 'code_blocks',\n      onClick: () => this._faviMarkdownEditorService.execAction('codeBlock'),\n    },\n    {\n      icon: 'table',\n      onClick: () => this._faviMarkdownEditorService.execAction('insertTable'),\n    },\n    {\n      icon: 'horizontal_rule',\n      onClick: () => this._faviMarkdownEditorService.execAction('hr'),\n    },\n  ];\n\n  constructor(\n    private _faviMarkdownEditorService: FaviMarkdownEditorService,\n    private _faviOverlayService: FaviOverlayService,\n    private _faviModalService: FaviModalService,\n  ) {\n  }\n\n  /**\n   * Get editor focused status.\n   */\n  get focused(): boolean {\n    return this._faviMarkdownEditorService.focused;\n  }\n\n  /**\n   * Open heading options.\n   *\n   * @param host - Host element to set options position.\n   */\n  openHeadingOptions(host: HTMLElement): void {\n    const rect = host.getBoundingClientRect();\n    const options: FaviOverlayOpenOptions<any> = {\n      left: rect.left + (rect.width / 2), // Detailed position will be set by scss.\n      providers: [\n        {\n          provide: FaviMarkdownEditorService,\n          useValue: this._faviMarkdownEditorService,\n        },\n      ],\n    };\n\n    if (rect.bottom + FaviMarkdownHeadingOptionsComponent.height < window.innerHeight) {\n      options.top = rect.bottom;\n    } else if (rect.top - FaviMarkdownHeadingOptionsComponent.height > 0) {\n      options.bottom = window.innerHeight - rect.top;\n    } else {\n      options.top = rect.bottom;\n    }\n\n    this._faviOverlayService.open(FaviMarkdownHeadingOptionsComponent, options);\n  }\n\n  /**\n   * Open insert link modal.\n   */\n  openInsertLink(): void {\n    this._faviModalService.open(FaviMarkdownInsertLinkComponent, {\n      onClose: url => {\n        if (url) {\n          this._faviMarkdownEditorService.execAction('link', url);\n        }\n      }\n    });\n  }\n}\n","<!-- To keep focus on textarea, prevent default action of mousedown. -->\n<button\n  (click)=\"action.onClick($event)\"\n  (mousedown)=\"$event.preventDefault()\"\n  *ngFor=\"let action of actions\"\n  [disabled]=\"!focused\"\n  type=\"button\"\n  class=\"favi-markdown-toolbar-action\">\n  <favi-icon>{{action.icon}}</favi-icon>\n</button>\n\n<!-- Any content is allowable. -->\n<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviMarkdownEditorComponent} from './favi-markdown-editor.component';\nimport {FaviMarkdownToolbarComponent} from './favi-markdown-toolbar/favi-markdown-toolbar.component';\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {\n  FaviMarkdownHeadingOptionsComponent\n} from './favi-markdown-heading-options/favi-markdown-heading-options.component';\nimport {FaviMarkdownInsertLinkComponent} from './favi-markdown-insert-link/favi-markdown-insert-link.component';\nimport {FaviModalModule} from '../../modal/favi-modal/favi-modal.module';\nimport {FaviFormFieldModule} from '../../controls/favi-form-field/favi-form-field.module';\nimport {FaviInputModule} from '../../controls/favi-input/favi-input.module';\nimport {FaviFlatButtonModule} from '../../buttons/favi-flat-button/favi-flat-button.module';\nimport {FaviAutofocusModule} from '../../common/favi-autofocus/favi-autofocus.module';\n\n\n@NgModule({\n  declarations: [\n    FaviMarkdownEditorComponent,\n    FaviMarkdownToolbarComponent,\n    FaviMarkdownHeadingOptionsComponent,\n    FaviMarkdownInsertLinkComponent,\n  ],\n  exports: [\n    FaviMarkdownEditorComponent,\n    FaviMarkdownToolbarComponent,\n  ],\n  imports: [\n    CommonModule,\n    FaviIconModule,\n    FormsModule,\n    FaviModalModule,\n    FaviFormFieldModule,\n    FaviInputModule,\n    FaviFlatButtonModule,\n    ReactiveFormsModule,\n    FaviAutofocusModule,\n  ]\n})\nexport class FaviMarkdownEditorModule { }\n","import {FaviBaseOverlay} from '../favi-base-overlay/favi-base-overlay';\r\nimport {Component, HostBinding, Input} from '@angular/core';\r\nimport {Nullable, ThemeColors} from '../../../../../utils/type.util';\r\n\r\n/**\r\n * Base overlay class with theming.\r\n */\r\n@Component({\r\n  template: '',\r\n})\r\nexport abstract class FaviBaseOverlayWithThemeClass extends FaviBaseOverlay {\r\n  private _theme: Nullable<ThemeColors> = null;\r\n\r\n  @Input()\r\n  set theme(theme: Nullable<ThemeColors>) {\r\n    this._theme = theme;\r\n  }\r\n\r\n  get theme(): Nullable<ThemeColors> {\r\n    return this._theme;\r\n  }\r\n\r\n  @HostBinding('class.favi-primary-theme')\r\n  get isPrimary(): boolean {\r\n    return this.theme === 'primary';\r\n  }\r\n\r\n  @HostBinding('class.favi-secondary-theme')\r\n  get isSecondary(): boolean {\r\n    return this.theme === 'secondary';\r\n  }\r\n\r\n  @HostBinding('class.favi-tertiary-theme')\r\n  get isTertiary(): boolean {\r\n    return this.theme === 'tertiary';\r\n  }\r\n\r\n  @HostBinding('class.favi-quaternary-theme')\r\n  get isQuaternary(): boolean {\r\n    return this.theme === 'quaternary';\r\n  }\r\n\r\n  @HostBinding('class.favi-error-theme')\r\n  get isError(): boolean {\r\n    return this.theme === 'error';\r\n  }\r\n\r\n  @HostBinding('class.favi-warning-theme')\r\n  get isWarning(): boolean {\r\n    return this.theme === 'warning';\r\n  }\r\n\r\n  @HostBinding('class.favi-success-theme')\r\n  get isSuccess(): boolean {\r\n    return this.theme === 'success';\r\n  }\r\n}\r\n","import {ActivatedRouteSnapshot, CanDeactivateFn, Router, RouterStateSnapshot, UrlTree} from '@angular/router';\r\nimport {Observable} from 'rxjs';\r\nimport {inject} from '@angular/core';\r\nimport {FaviOverlayService} from '../services/favi-overlay.service';\r\n\r\n/**\r\n * Guard function to prevent route back when overlay is opened.\r\n * It closes the latest overlay rather than move to previous route.\r\n *\r\n * When overlay has preventClosing option, that won't be closed.\r\n *\r\n * @param component\r\n * @param currentRoute\r\n * @param currentState\r\n */\r\nexport const faviOverlayCanDeactivateFn: CanDeactivateFn<any> = (\r\n  component: any,\r\n  currentRoute: ActivatedRouteSnapshot,\r\n  currentState: RouterStateSnapshot,\r\n): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree => {\r\n  const router = inject(Router);\r\n  const faviOverlay = inject(FaviOverlayService);\r\n\r\n  if (faviOverlay.hasOpenedOverlayRefs) {\r\n    router.navigateByUrl(currentState.url);\r\n    faviOverlay.closeLatest();\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\n","import {Component} from '@angular/core';\r\n\r\n@Component({\r\n  template: '',\r\n  host: {\r\n    class: 'favi-table-cell',\r\n  },\r\n})\r\nexport abstract class FaviTableCell {\r\n\r\n}\r\n","import {Component} from '@angular/core';\n\n@Component({\n  selector: 'favi-table-body',\n  templateUrl: './favi-table-body.component.html',\n  host: {\n    class: 'favi-table-body',\n    role: 'rofaviroup',\n  },\n})\nexport class FaviTableBodyComponent {\n\n}\n","<ng-content></ng-content>\n","import {Component, ElementRef} from '@angular/core';\nimport {FaviTableCell} from '../abstract/favi-table-cell/favi-table-cell';\n\n@Component({\n  selector: 'favi-table-body-cell',\n  templateUrl: './favi-table-body-cell.component.html',\n  host: {\n    class: 'favi-table-body-cell',\n  }\n})\nexport class FaviTableBodyCellComponent extends FaviTableCell {\n  constructor(\n    public elementRef: ElementRef<HTMLElement>,\n  ) {\n    super();\n  }\n}\n","<ng-content></ng-content>\n","import {Component} from '@angular/core';\n\n@Component({\n  selector: 'favi-table-footer',\n  templateUrl: './favi-table-footer.component.html',\n  host: {\n    class: 'favi-table-footer',\n    role: 'rofaviroup',\n  },\n})\nexport class FaviTableFooterComponent {\n\n}\n","<ng-content></ng-content>\n","import {Component} from '@angular/core';\n\n@Component({\n  selector: 'favi-table-header',\n  templateUrl: './favi-table-header.component.html',\n  host: {\n    class: 'favi-table-header',\n    role: 'rofaviroup',\n  },\n})\nexport class FaviTableHeaderComponent {\n\n}\n","<ng-content></ng-content>\n","import {Component, EventEmitter, HostBinding, HostListener, Input} from '@angular/core';\nimport {FaviTableCell} from '../abstract/favi-table-cell/favi-table-cell';\nimport {Nullable} from '../../../../utils/type.util';\nimport {OrderDirection} from '../../../../utils/sort.util';\nimport {SortChangeEvent} from '../common/sort-change-event';\n\n@Component({\n  selector: 'favi-table-header-cell',\n  templateUrl: './favi-table-header-cell.component.html',\n  host: {\n    class: 'favi-table-header-cell',\n  },\n})\nexport class FaviTableHeaderCellComponent extends FaviTableCell {\n  // Sort column name.\n  // Set this attribute to make column to be sortable.\n  // When sortable header is clicked, 'sortChange' emitter will be emitted from the FaviTableComponent.\n  @Input() @HostBinding('class.favi-table-sortable-header-cell') sortColumn: Nullable<string> = null;\n\n  // Order direction.\n  // A 'null' means it's not sorted.\n  orderDirection: Nullable<OrderDirection> = null;\n\n  // Emitter to emit SortChangeEvent.\n  // It doesn't use @Output() decorator to make only observable by programatically.\n  sortChange = new EventEmitter<SortChangeEvent>();\n\n  constructor() {\n    super();\n  }\n\n  /**\n   * Get status of whether column is sortable or not.\n   */\n  get canSortColumn(): boolean {\n    return this.sortColumn !== null;\n  }\n\n  /**\n   * Get status of whether sort icon can be displayed or not.\n   */\n  get canShowSortIcon(): boolean {\n    return this.orderDirection !== null;\n  }\n\n  /**\n   * Get state of whether order direction is descending or not.\n   */\n  get isDescending(): boolean {\n    return this.orderDirection === 'desc';\n  }\n\n  /**\n   * Listen host click event to emit 'sortChange' emitter.\n   */\n  @HostListener('click', ['$event'])\n  onHostClick(): void {\n    if (this.sortColumn !== null) {\n      if (this.orderDirection === 'asc') {\n        this.sortChange.emit({\n          orderBy: this.sortColumn,\n          orderDirection: 'desc',\n        });\n      } else {\n        this.sortChange.emit({\n          orderBy: this.sortColumn,\n          orderDirection: 'asc',\n        });\n      }\n    }\n  }\n}\n","<!-- To display sort icon properly, inner flex container is required. -->\n<div class=\"favi-table-header-cell-inner\">\n  <ng-content></ng-content>\n\n  <favi-icon\n    *ngIf=\"canSortColumn\"\n    [class.favi-show]=\"canShowSortIcon\"\n    [class.favi-reversed]=\"isDescending\"\n    class=\"favi-table-sort-icon\">\n    arrow_drop_up\n  </favi-icon>\n</div>\n","import {Component} from '@angular/core';\n\n@Component({\n  selector: 'favi-table-row',\n  templateUrl: './favi-table-row.component.html',\n  host: {\n    class: 'favi-table-row',\n    role: 'row',\n  },\n})\nexport class FaviTableRowComponent {\n\n}\n","<ng-content></ng-content>\n","import {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  QueryList,\n  SimpleChanges\n} from '@angular/core';\nimport {FaviTableHeaderCellComponent} from './favi-table-header-cell/favi-table-header-cell.component';\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\nimport {OrderDirection} from '../../../utils/sort.util';\nimport {CanUndefined, Nullable} from '../../../utils/type.util';\nimport {SortChangeEvent} from './common/sort-change-event';\n\n/**\n * Table component which replace the 'table' element.\n */\n@Component({\n  selector: 'favi-table',\n  templateUrl: './favi-table.component.html',\n  host: {\n    class: 'favi-table',\n    role: 'table',\n  },\n  providers: [\n    SubscriptionManager,\n  ],\n})\nexport class FaviTableComponent implements AfterContentInit, OnChanges {\n  // Order by column.\n  // When it's null, no columns will be activated for sorting.\n  @Input() orderBy: Nullable<string> = null;\n\n  // Order direction.\n  @Input() orderDirection: Nullable<OrderDirection> = null;\n\n  // Emitter to emit SortChangeEvent.\n  // It passes the result of 'sortChange' emitter in FaviTableHeaderCellComponent to outside.\n  @Output() sortChange = new EventEmitter<SortChangeEvent>();\n\n  // Refs to header cell.\n  @ContentChildren(FaviTableHeaderCellComponent, { descendants: true }) faviTableHeaderCellRefs!: QueryList<FaviTableHeaderCellComponent>;\n\n  // Subscription observer for header cells changes.\n  private _headerCellsChangesObserver = this._subscriptionManager.createObserver();\n\n  // Subscription observer for header cells 'sortChange' emitter.\n  private _headerCellsSortChangeObserver = this._subscriptionManager.createObserver();\n\n  constructor(\n    private _subscriptionManager: SubscriptionManager,\n  ) {\n  }\n\n  ngAfterContentInit(): void {\n    this._subscribeHeaderCellsChanges();\n    this._subscribeSortChangeFromHeaderCells();\n    this._updateSortedHeaderCell();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const {\n      orderBy,\n      orderDirection,\n    } = changes;\n\n    if (\n      (orderBy && orderBy.previousValue !== orderBy.currentValue)\n      || (orderDirection && orderDirection.previousValue !== orderDirection.currentValue)\n    ) {\n      this._updateSortedHeaderCell();\n    }\n  }\n\n  /**\n   * Subscribe changes of header cells content.\n   */\n  private _subscribeHeaderCellsChanges(): void {\n    if (!this.faviTableHeaderCellRefs) {\n      return;\n    }\n\n    const sub = this.faviTableHeaderCellRefs\n      .changes\n      .subscribe(() => {\n        this._subscribeHeaderCellsChanges();\n        this._subscribeSortChangeFromHeaderCells();\n        this._updateSortedHeaderCell();\n      });\n\n    this._headerCellsChangesObserver.observe(sub);\n  }\n\n  /**\n   * Subscribe 'sortChange' emitter of header cells.\n   */\n  private _subscribeSortChangeFromHeaderCells(): void {\n    if (!this.faviTableHeaderCellRefs) {\n      return;\n    }\n\n    const subs = this.faviTableHeaderCellRefs\n      .map(headerCellRef => {\n        return headerCellRef\n          .sortChange\n          .subscribe(event => {\n            this.sortChange.emit(event);\n          });\n      });\n\n    this._headerCellsSortChangeObserver.observe(...subs);\n  }\n\n  /**\n   * Update sorted header cell.\n   */\n  private _updateSortedHeaderCell(): void {\n    const {\n      orderBy,\n      orderDirection,\n      faviTableHeaderCellRefs,\n    } = this;\n\n    if (orderBy === null || !faviTableHeaderCellRefs) {\n      return;\n    }\n\n    const sortedHeaderCell = this._findSortedHeaderCell(orderBy);\n\n    if (!sortedHeaderCell) {\n      return;\n    }\n\n    faviTableHeaderCellRefs.forEach(headerCellRef => {\n      if (headerCellRef.sortColumn !== null && headerCellRef.sortColumn === orderBy) {\n        headerCellRef.orderDirection = orderDirection;\n      } else {\n        headerCellRef.orderDirection = null;\n      }\n    });\n  }\n\n  /**\n   * Find sorted header column with 'orderBy' value.\n   *\n   * @param orderBy\n   */\n  private _findSortedHeaderCell(orderBy: string): CanUndefined<FaviTableHeaderCellComponent> {\n    return this.faviTableHeaderCellRefs.find(headerCellRef => {\n      return headerCellRef.sortColumn === orderBy;\n    });\n  }\n}\n","<div class=\"favi-table-container\">\n  <ng-content></ng-content>\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviTableComponent} from './favi-table.component';\nimport {FaviTableHeaderComponent} from './favi-table-header/favi-table-header.component';\nimport {FaviTableBodyComponent} from './favi-table-body/favi-table-body.component';\nimport {FaviTableFooterComponent} from './favi-table-footer/favi-table-footer.component';\nimport {FaviTableRowComponent} from './favi-table-row/favi-table-row.component';\nimport {FaviTableHeaderCellComponent} from './favi-table-header-cell/favi-table-header-cell.component';\nimport {FaviTableBodyCellComponent} from './favi-table-body-cell/favi-table-body-cell.component';\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\n\n\n@NgModule({\n  declarations: [\n    FaviTableComponent,\n    FaviTableHeaderComponent,\n    FaviTableBodyComponent,\n    FaviTableFooterComponent,\n    FaviTableRowComponent,\n    FaviTableHeaderCellComponent,\n    FaviTableBodyCellComponent\n  ],\n  exports: [\n    FaviTableComponent,\n    FaviTableHeaderComponent,\n    FaviTableBodyComponent,\n    FaviTableRowComponent,\n    FaviTableFooterComponent,\n    FaviTableHeaderCellComponent,\n    FaviTableBodyCellComponent\n  ],\n  imports: [\n    CommonModule,\n    FaviIconModule\n  ]\n})\nexport class FaviTableModule { }\n","import {Inject, Optional, Pipe, PipeTransform, Provider} from '@angular/core';\nimport {DateLike, Nullable} from '../../utils/type.util';\nimport {DAY_IN_MILLS, HOUR_IN_MILLS, MINUTE_IN_MILLS, WEEK_IN_MILLS, YEAR_IN_MILLS} from '../../utils/date.util';\n\nexport const ELAPSED_TIME_LABELS = 'ELAPSED_TIME_LABELS';\n\n/**\n * Options for elapsed time labels.\n * Each value should contain '{time}' in the content to replace with elapsed time.\n */\nexport interface ElapsedTimeLabels {\n  /** Elapsed time label for year unit. Default is 'Before {time} year(s) ago'. */\n  yearBefore: string;\n\n  /** Elapsed time label for week unit. Default is 'Before {time} week(s) ago'. */\n  weekBefore: string;\n\n  /** Elapsed time label for day unit. Default is 'Before {time} day(s) ago'. */\n  dayBefore: string;\n\n  /** Elapsed time label for hour unit. Default is 'Before {time} hour(s) ago'. */\n  hourBefore: string;\n\n  /** Elapsed time label for minute unit. Default is 'Before {time} minute(s) ago'. */\n  minuteBefore: string;\n\n  /** Elapsed time label for just now. Default is 'Just now'. */\n  justNow: string;\n}\n\n/**\n * Create provider for ElapsedTime pipe.\n *\n * @param options - Options to override default time string.\n */\nexport function createElapsedTimeProvider(options: ElapsedTimeLabels): Provider {\n  return {\n    provide: ELAPSED_TIME_LABELS,\n    useValue: options,\n  };\n}\n\n/**\n * Transform date to elapsed time string.\n */\n@Pipe({\n  name: 'faviElapsedTime'\n})\nexport class FaviElapsedTimePipe implements PipeTransform {\n\n  constructor(\n    @Inject(ELAPSED_TIME_LABELS) @Optional() private _labels: ElapsedTimeLabels,\n  ) {\n  }\n\n  /**\n   * Transform value to elapsed time string.\n   * When value isn't date-like, return empty string.\n   *\n   * @param value - Value to transform.\n   */\n  transform(value?: Nullable<DateLike>): string {\n    const {\n      yearBefore = 'Before {time} year(s) ago',\n      weekBefore = 'Before {time} week(s) ago',\n      dayBefore = 'Before {time} day(s) ago',\n      hourBefore = 'Before {time} hour(s) ago',\n      minuteBefore = 'Before {time} minute(s) ago',\n      justNow = 'Just Now',\n    } = this._labels || {};\n\n    if (value) {\n      const date = new Date(value);\n      const difference = Date.now() - date.valueOf();\n\n      if (difference > YEAR_IN_MILLS) {\n        return yearBefore.replace('{time}', Math.floor(difference / YEAR_IN_MILLS).toString());\n      } else if (difference > WEEK_IN_MILLS) {\n        return weekBefore.replace('{time}', Math.floor(difference / WEEK_IN_MILLS).toString());\n      } else if (difference > DAY_IN_MILLS) {\n        return dayBefore.replace('{time}', Math.floor(difference / DAY_IN_MILLS).toString());\n      } else if (difference > HOUR_IN_MILLS) {\n        return hourBefore.replace('{time}', Math.floor(difference / HOUR_IN_MILLS).toString());\n      } else if (difference > MINUTE_IN_MILLS) {\n        return minuteBefore.replace('{time}', Math.floor(difference / MINUTE_IN_MILLS).toString());\n      } else {\n        return justNow;\n      }\n    } else {\n      return '';\n    }\n  }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FaviElapsedTimePipe} from './favi-elapsed-time.pipe';\n\n\n@NgModule({\n  declarations: [\n    FaviElapsedTimePipe\n  ],\n  exports: [\n    FaviElapsedTimePipe\n  ],\n  imports: [\n    CommonModule\n  ]\n})\nexport class FaviPipeModule { }\n","import {HttpParams} from '@angular/common/http';\r\nimport {isDefined} from './validate.util';\r\n\r\n/**\r\n * Convert any object to HttpParams.\r\n * 'undefined', 'null', or empty string will be ignored.\r\n *\r\n * @param query - Any query object to convert to HttpParams.\r\n */\r\nexport function createHttpParams(query: Record<string, any> = {}): HttpParams {\r\n  let params = new HttpParams();\r\n\r\n  Object.keys(query).forEach(key => {\r\n    const value = query[key];\r\n\r\n    if (isDefined(value) && value !== '') {\r\n      if (value instanceof Array) {\r\n        value.forEach(item => {\r\n          params = params.append(key, item + '');\r\n        });\r\n      } else {\r\n        params = params.set(key, value + '');\r\n      }\r\n    }\r\n  });\r\n\r\n  return params;\r\n}\r\n","/**\r\n * Swap a number of items position by indexes from array.\r\n *\r\n * @param list - List of items.\r\n * @param removingIndex - Index of removing item. Items can be removed serially with 'swapCount'.\r\n * @param appendingIndex - Index of appending position of removed items.\r\n * @param swapCount - The number items to remove from the 'removingIndex'. Default is '1'.\r\n */\r\nexport function swapByIndex<Item>(list: Item[], removingIndex: number, appendingIndex: number, swapCount = 1): void {\r\n  const spliced = list.splice(removingIndex, swapCount);\r\n\r\n  if (appendingIndex > removingIndex) {\r\n    list.splice(appendingIndex - 1, 0, ...spliced);\r\n  } else {\r\n    list.splice(appendingIndex, 0, ...spliced);\r\n  }\r\n}\r\n","/**\r\n * Parse provided color value to hex.\r\n *\r\n * @param color - Color value to parse.\r\n *  It can be one of hex, rgb, rgba, hsl.\r\n */\r\nexport function parseColorToHex(color: string): string {\r\n  if (isRgbString(color)) {\r\n    const [r, g, b] = parseRgbString(color);\r\n\r\n    return rgbToHex(r, g, b);\r\n  }\r\n\r\n  if (isRgbaString(color)) {\r\n    const [r, g, b, a] = parseRgbaString(color);\r\n\r\n    return rgbaToHex(r, g, b, a);\r\n  }\r\n\r\n  if (isHslString(color)) {\r\n    const [h, s, l] = parseHslString(color);\r\n\r\n    return hslToHex(h, s, l);\r\n  }\r\n\r\n  if (\r\n    isHexString(color)\r\n    || isHexAlphaString(color)\r\n    || isReducedHexString(color)\r\n    || isReducedHexAlphaString(color)\r\n  ) {\r\n    return color;\r\n  }\r\n\r\n  throw new Error(`Invalid color code: '${color}'`);\r\n}\r\n\r\n/**\r\n * Check whether provided color is rgb string or not.\r\n *\r\n * @param color\r\n */\r\nexport function isRgbString(color: string): boolean {\r\n  return !!/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/i.exec(color);\r\n}\r\n\r\n/**\r\n * Check whether provided color is rgba string or not.\r\n *\r\n * @param color\r\n */\r\nexport function isRgbaString(color: string): boolean {\r\n  return !!/^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*([\\d.]+)\\)$/i.exec(color);\r\n}\r\n\r\n/**\r\n * Check whether provided color is hsl string or not.\r\n *\r\n * @param color\r\n */\r\nexport function isHslString(color: string): boolean {\r\n  return !!/^hsl\\((\\d{1,3}),\\s*(\\d{1,3})%,\\s*(\\d{1,3})%\\)$/i.exec(color);\r\n}\r\n\r\n/**\r\n * Check whether provided color is hex code string or not.\r\n *\r\n * @param color\r\n */\r\nexport function isHexString(color: string): boolean {\r\n  return !!/^#[A-Fa-f0-9]{6}$/.exec(color);\r\n}\r\n\r\n/**\r\n * Check whether provided color is reduced hex code which has only 3 codes or not.\r\n *\r\n * @param color\r\n */\r\nexport function isReducedHexString(color: string): boolean {\r\n  return !!/^#[A-Fa-f0-9]{3}$/.exec(color);\r\n}\r\n\r\n/**\r\n * Check whether provided color is hex code string with alpha value or not.\r\n *\r\n * @param color\r\n */\r\nexport function isHexAlphaString(color: string): boolean {\r\n  return !!/^#[A-Fa-f0-9]{8}$/.exec(color);\r\n}\r\n\r\n/**\r\n * Check whether provided color is reduced hex code which has only 4 codes with alpha value or not.\r\n *\r\n * @param color\r\n */\r\nexport function isReducedHexAlphaString(color: string): boolean {\r\n  return !!/^#[A-Fa-f0-9]{4}$/.exec(color);\r\n}\r\n\r\n/**\r\n * Parse rgb string to an array that contains r, g, b.\r\n *\r\n * @param color\r\n */\r\nexport function parseRgbString(color: string): [number, number, number] {\r\n  const matches = color.match(/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/i);\r\n\r\n  if (matches) {\r\n    return [parseInt(matches[1]), parseInt(matches[2]), parseInt(matches[3])];\r\n  } else {\r\n    throw new Error(`Invalid rgb string: '${color}'`);\r\n  }\r\n}\r\n\r\n/**\r\n * Parse rgba string to an array that contains r, g, b, a.\r\n *\r\n * @param color\r\n */\r\nexport function parseRgbaString(color: string): [number, number, number, number] {\r\n  const matches = color.match(/^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*([\\d.]+)\\)$/i);\r\n\r\n  if (matches) {\r\n    return [parseInt(matches[1]), parseInt(matches[2]), parseInt(matches[3]), parseInt(matches[4])];\r\n  } else {\r\n    throw new Error(`Invalid rgba string: '${color}'`);\r\n  }\r\n}\r\n\r\n/**\r\n * Parse hsl string to an array that contains h, s, l.\r\n *\r\n * @param color\r\n */\r\nexport function parseHslString(color: string): [number, number, number] {\r\n  const matches = color.match(/^hsl\\((\\d{1,3}),\\s*(\\d{1,3})%,\\s*(\\d{1,3})%\\)$/i);\r\n\r\n  if (matches) {\r\n    return [parseInt(matches[1]), parseInt(matches[2]), parseInt(matches[3])];\r\n  } else {\r\n    throw new Error(`Invalid hsl string: '${color}'`);\r\n  }\r\n}\r\n\r\n/**\r\n * Convert provided r, g, b values to hex code.\r\n *\r\n * @param r\r\n * @param g\r\n * @param b\r\n */\r\nexport function rgbToHex(r: number, g: number, b: number): string {\r\n  return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;\r\n}\r\n\r\n/**\r\n * Convert provided r, g, b, a values to hex code.\r\n *\r\n * @param r\r\n * @param g\r\n * @param b\r\n * @param a\r\n */\r\nexport function rgbaToHex(r: number, g: number, b: number, a: number): string {\r\n  a = Math.round(a * 255);\r\n\r\n  return `${rgbToHex(r, g, b)}${(a < 16 ? '0' + a.toString(16) : a.toString(16))}`;\r\n}\r\n\r\n/**\r\n * Convert provided h, s, l values to hex code.\r\n *\r\n * @param h\r\n * @param s\r\n * @param l\r\n */\r\nexport function hslToHex(h: number, s: number, l: number): string {\r\n  h /= 360;\r\n  s /= 100;\r\n  l /= 100;\r\n\r\n  let r, g, b;\r\n  if (s === 0) {\r\n    r = g = b = l;\r\n  } else {\r\n    const hueToRgb = (p: number, q: number, t: number) => {\r\n      if (t < 0) t += 1;\r\n      if (t > 1) t -= 1;\r\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n      if (t < 1 / 2) return q;\r\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n      return p;\r\n    };\r\n\r\n    const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n    const p = 2 * l - q;\r\n\r\n    r = hueToRgb(p, q, h + 1 / 3);\r\n    g = hueToRgb(p, q, h);\r\n    b = hueToRgb(p, q, h - 1 / 3);\r\n  }\r\n\r\n  const toHex = (x: number) => {\r\n    const hex = Math.round(x * 255).toString(16);\r\n    return hex.length === 1 ? '0' + hex : hex;\r\n  };\r\n\r\n  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n","/**\r\n * Get object value with property string.\r\n * @param data - The object to get value.\r\n * @param property  - The property string. Can be separated with `.` word like: `prop1.prop2`.\r\n */\r\nexport function getObjectValue<T>(data: any, property: string): T {\r\n  const keys = property.split('.');\r\n  const lastIndex = keys.length - 1;\r\n  let target = data;\r\n\r\n  keys.forEach((key, index) => {\r\n    target = target[key];\r\n\r\n    if (index !== lastIndex && !target) {\r\n      target = {} as any;\r\n    }\r\n  });\r\n\r\n  return target;\r\n}\r\n\r\n/**\r\n * FileList to file array.\r\n *\r\n * @param fileList\r\n */\r\nexport function fileListToFileArray(fileList: FileList): File[] {\r\n  const files: File[] = [];\r\n\r\n  for (let i = 0; i < fileList.length; i++) {\r\n    files.push(fileList.item(i) as File);\r\n  }\r\n\r\n  return files;\r\n}\r\n\r\n/**\r\n * Summarize number array items.\r\n *\r\n * @param numbers\r\n */\r\nexport function sumNumberArray(numbers: number[]): number {\r\n  return numbers.reduce((previousValue, currentValue) => {\r\n    return (previousValue || 0) + currentValue;\r\n  });\r\n}\r\n","import {CanUndefined} from './type.util';\r\n\r\n/**\r\n * Get the first range from selection.\r\n */\r\nexport function getRange(): CanUndefined<Range> {\r\n  try {\r\n    const selection = getSelection();\r\n\r\n    if (selection && selection.rangeCount > 0) {\r\n      return selection.getRangeAt(0);\r\n    }\r\n  } catch (e) {\r\n    console.debug('Failed to get first range', e);\r\n  }\r\n\r\n  return;\r\n}\r\n","import {getObjectValue} from './object.util';\r\n\r\n/**\r\n * The value type to order.\r\n */\r\nexport type OrderType = 'string' | 'date' | 'number';\r\n\r\n/**\r\n * The order direction.\r\n */\r\nexport type OrderDirection = 'asc' | 'desc';\r\n\r\n/**\r\n * Sort column info.\r\n */\r\nexport interface SortColumn<T> {\r\n  /**\r\n   * The property name to sort. Separate field name with dot to access to deeper field.\r\n   */\r\n  property: keyof T | string;\r\n\r\n  /**\r\n   * The order direction.\r\n   */\r\n  direction: OrderDirection;\r\n\r\n  /**\r\n   * The value type to order.\r\n   */\r\n  type: OrderType;\r\n}\r\n\r\n/**\r\n * Sort data as ascending.\r\n * @param a - Data 1.\r\n * @param b - Data 2.\r\n */\r\nexport function sortAscending<T>(a: T, b: T): number {\r\n  return a === b ? 0 : a > b ? 1 : -1;\r\n}\r\n\r\n/**\r\n * Get sort method when sorting data with just order.\r\n * @param order - Sort order.\r\n */\r\nexport function sortWithOrder<T>(order: 'asc' | 'desc'): any {\r\n  if (order === undefined || order === 'asc') {\r\n    return sortAscending;\r\n  } else {\r\n    return (a: T, b: T) => {\r\n      return -sortAscending(a, b);\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Get sort method when sorting data with a single column.\r\n * @param property - Property string.\r\n * @param order - Sort order.\r\n * @param type - Value type.\r\n */\r\nexport function sortWithOrderByColumn<T>({property, direction, type = 'string'}: SortColumn<T>): any {\r\n  const sortMethod = sortWithOrder(direction);\r\n\r\n  return (a: T, b: T) => {\r\n    let v1: any = getObjectValue<T>(a, property as any);\r\n    let v2: any = getObjectValue<T>(b, property as any);\r\n\r\n    switch (type) {\r\n      case 'string': {\r\n        v1 = v1 || '';\r\n        v2 = v2 || '';\r\n\r\n        return sortMethod(v1, v2);\r\n      }\r\n\r\n      case 'number': {\r\n        v1 = parseFloat(v1 as string);\r\n        v2 = parseFloat(v2 as string);\r\n\r\n        return sortMethod(v1, v2);\r\n      }\r\n\r\n      case 'date': {\r\n        v1 = new Date(v1).getTime();\r\n        v2 = new Date(v2).getTime();\r\n\r\n        return sortMethod(v1, v2);\r\n      }\r\n\r\n      default: {\r\n        throw new Error(`Invalid value type: '${type}'`);\r\n      }\r\n    }\r\n  };\r\n}\r\n\r\n/**\r\n * Get sort method when sorting data with multiple columns.\r\n * @param sortedColumns - Sorted column list.\r\n */\r\nexport function sortWithOrderByMultiColumns<T>(sortedColumns: SortColumn<T>[]): any {\r\n  const sortMethodsForColumn = (sortedColumns || []).map((item) =>\r\n    sortWithOrderByColumn(item),\r\n  );\r\n\r\n  return (a: T, b: T) => {\r\n    let sorted = 0;\r\n    let index = 0;\r\n\r\n    while (sorted === 0 && index < sortMethodsForColumn.length) {\r\n      sorted = sortMethodsForColumn[index++](a, b);\r\n    }\r\n\r\n    return sorted;\r\n  };\r\n}\r\n","/**\r\n * @file Types that aren't belong to some components or directives.\r\n */\r\n\r\n/**\r\n * Type for a value which can be nullable.\r\n */\r\nexport type Nullable<T> = null | T;\r\n\r\n/**\r\n * Type for a value which can be undefined.\r\n */\r\nexport type CanUndefined<T> = undefined | T;\r\n\r\n/**\r\n * Type for number-like value.\r\n * There can be number and string.\r\n */\r\nexport type NumberLike = number | string;\r\n\r\n/**\r\n * Type for boolean attribute.\r\n * Empty string also determined as true.\r\n */\r\nexport type BooleanAttribute = string | boolean;\r\n\r\n/**\r\n * Type for date-like value.\r\n * There can be Date, string, and number.\r\n */\r\nexport type DateLike = Date | string | number;\r\n\r\n/**\r\n * Type for ranged value with start and end.\r\n */\r\nexport type RangedValue<T> = [T, T];\r\n\r\n/**\r\n * Available theme colors for components.\r\n * 'default' color is black or white color which is changing according to system theme.\r\n */\r\nexport type ThemeColors =\r\n  'primary'\r\n  | 'secondary'\r\n  | 'tertiary'\r\n  | 'quaternary'\r\n  | 'error'\r\n  | 'warning'\r\n  | 'success';\r\n\r\n/**\r\n * Define optional type.\r\n * A value can be 'null', 'undefined', or 'T'.\r\n */\r\nexport type CanOptional<T> = null | undefined | T;\r\n","import {Component, HostListener, OnInit} from '@angular/core';\r\nimport {SubscriptionManager} from '../../../services/subscription-manager/subscription-manager';\r\nimport {NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router} from '@angular/router';\r\nimport {sortWithOrderByColumn} from '../../../utils/sort.util';\r\nimport {FaviAppService} from '../../../services/favi-app/favi-app.service';\r\n\r\n/**\r\n * Showcase component to display component usages.\r\n */\r\n@Component({\r\n  selector: 'favi-showcase',\r\n  templateUrl: './favi-showcase.component.html',\r\n  styleUrls: ['./favi-showcase.component.scss'],\r\n  providers: [\r\n    SubscriptionManager,\r\n  ],\r\n})\r\nexport class FaviShowcaseComponent implements OnInit {\r\n  menuOpened = false;\r\n\r\n  staticRoutes: ShowcaseRouteItem[] = [\r\n    {\r\n      label: 'Palette',\r\n      routerLink: ['/palette'],\r\n    },\r\n    {\r\n      label: 'Typography',\r\n      routerLink: ['/typography'],\r\n    },\r\n    {\r\n      label: 'Elevation',\r\n      routerLink: ['/elevation'],\r\n    },\r\n  ];\r\n\r\n  dynamicRoutes: ShowcaseRouteItem[] = [\r\n    {\r\n      label: 'Markdown Editor',\r\n      routerLink: ['/markdown-editor'],\r\n    },\r\n    {\r\n      label: 'Horizontal Scroller',\r\n      routerLink: ['/horizontal-scroller'],\r\n    },\r\n    {\r\n      label: 'Input',\r\n      routerLink: ['/input'],\r\n    },\r\n    {\r\n      label: 'Select',\r\n      routerLink: ['/select'],\r\n    },\r\n    {\r\n      label: 'Multi Select',\r\n      routerLink: ['/multi-select'],\r\n    },\r\n    {\r\n      label: 'Textarea',\r\n      routerLink: ['/textarea'],\r\n    },\r\n    {\r\n      label: 'Datepicker',\r\n      routerLink: ['/datepicker'],\r\n    },\r\n    {\r\n      label: 'Ranged Datepicker',\r\n      routerLink: ['/ranged-datepicker'],\r\n    },\r\n    {\r\n      label: 'Autocomplete',\r\n      routerLink: ['/autocomplete'],\r\n    },\r\n    {\r\n      label: 'Switch',\r\n      routerLink: ['/switch'],\r\n    },\r\n    {\r\n      label: 'Checkbox',\r\n      routerLink: ['/checkbox'],\r\n    },\r\n    {\r\n      label: 'Radio',\r\n      routerLink: ['/radio'],\r\n    },\r\n    {\r\n      label: 'Slider',\r\n      routerLink: ['/slider'],\r\n    },\r\n    {\r\n      label: 'Button',\r\n      routerLink: ['/button'],\r\n    },\r\n    {\r\n      label: 'Spinner',\r\n      routerLink: ['/spinner'],\r\n    },\r\n    {\r\n      label: 'Progress Bar',\r\n      routerLink: ['/progress-bar'],\r\n    },\r\n    {\r\n      label: 'Accordion',\r\n      routerLink: ['/accordion'],\r\n    },\r\n    {\r\n      label: 'Toggle Button',\r\n      routerLink: ['/toggle-button'],\r\n    },\r\n    {\r\n      label: 'Stepper',\r\n      routerLink: ['/stepper'],\r\n    },\r\n    {\r\n      label: 'Chip',\r\n      routerLink: ['/chip'],\r\n    },\r\n    {\r\n      label: 'Tooltip',\r\n      routerLink: ['/tooltip'],\r\n    },\r\n    {\r\n      label: 'Toast',\r\n      routerLink: ['/toast'],\r\n    },\r\n    {\r\n      label: 'Modal',\r\n      routerLink: ['/modal'],\r\n    },\r\n    {\r\n      label: 'Avatar',\r\n      routerLink: ['/avatar'],\r\n    },\r\n    {\r\n      label: 'Paginator',\r\n      routerLink: ['/paginator'],\r\n    },\r\n    {\r\n      label: 'Context Menu',\r\n      routerLink: ['/context-menu'],\r\n    },\r\n    {\r\n      label: 'Table',\r\n      routerLink: ['/table'],\r\n    },\r\n    {\r\n      label: 'Calendar',\r\n      routerLink: ['/calendar'],\r\n    },\r\n    {\r\n      label: 'Time Input',\r\n      routerLink: ['/time-input'],\r\n    },\r\n    {\r\n      label: 'Touch Slide Detector',\r\n      routerLink: ['/touch-slide'],\r\n    },\r\n    {\r\n      label: 'Tabs',\r\n      routerLink: ['/tabs'],\r\n    },\r\n    {\r\n      label: 'Drawer',\r\n      routerLink: ['/drawer'],\r\n    },\r\n    {\r\n      label: 'Elapsed Time',\r\n      routerLink: ['/elapsed-time'],\r\n    },\r\n    {\r\n      label: 'Drag and Drop',\r\n      routerLink: ['/drag-and-drop'],\r\n    },\r\n  ];\r\n\r\n  routes: ShowcaseRouteItem[] = [];\r\n\r\n  isDarkMode = false;\r\n\r\n  pageLoading = false;\r\n\r\n  private _previousWidth = window.innerWidth;\r\n\r\n  constructor(\r\n    private _router: Router,\r\n    private _faviAppService: FaviAppService,\r\n  ) {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.routes = [\r\n      ...this.staticRoutes,\r\n      ...this.dynamicRoutes.sort(sortWithOrderByColumn({\r\n        property: 'label',\r\n        type: 'string',\r\n        direction: 'asc',\r\n      })),\r\n    ];\r\n\r\n    this._router.events\r\n      .subscribe(event => {\r\n        if (event instanceof NavigationStart && event.url.split('/').length < 3) {\r\n          this.pageLoading = true;\r\n        } else if (\r\n          (\r\n            event instanceof NavigationEnd\r\n            || event instanceof NavigationCancel\r\n            || event instanceof NavigationError\r\n          ) && event.url.split('/').length < 3\r\n        ) {\r\n          this.pageLoading = false;\r\n        }\r\n      });\r\n\r\n    this._faviAppService.scrollPosition$.subscribe(position => console.log(position));\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  onWindowResize(): void {\r\n    if (this._previousWidth !== window.innerWidth) {\r\n      if (this.menuOpened) {\r\n        this.menuOpened = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  onDarkModeChange(value: boolean): void {\r\n    this.isDarkMode = value;\r\n\r\n    if (this.isDarkMode) {\r\n      this._faviAppService.enableDarkMode();\r\n    } else {\r\n      this._faviAppService.enableLightMode();\r\n    }\r\n\r\n    console.log(this._faviAppService.isDarkMode);\r\n  }\r\n}\r\n\r\ninterface ShowcaseRouteItem {\r\n  label: string;\r\n  routerLink: string[];\r\n}\r\n","<favi-app>\r\n  <favi-app-bar>\r\n    <div class=\"title\">\r\n      <button\r\n        (click)=\"menuOpened = !menuOpened\"\r\n        class=\"menu favi-button-no-styles\"\r\n        type=\"button\">\r\n        <favi-icon>\r\n          {{menuOpened ? 'close' : 'menu'}}\r\n        </favi-icon>\r\n      </button>\r\n\r\n      <h2>\r\n        Favian UI Showcase\r\n      </h2>\r\n    </div>\r\n  </favi-app-bar>\r\n\r\n  <div\r\n    [class.menu-opened]=\"menuOpened\"\r\n    class=\"container\">\r\n    <favi-sidebar>\r\n      <ul>\r\n        <li *ngFor=\"let route of routes\">\r\n          <a\r\n            (click)=\"menuOpened = false\"\r\n            [routerLink]=\"route.routerLink\"\r\n            routerLinkActive=\"active\">\r\n            {{route.label}}\r\n          </a>\r\n        </li>\r\n      </ul>\r\n\r\n      <div class=\"theme-toggle\">\r\n        <favi-switch\r\n          (ngModelChange)=\"onDarkModeChange($event)\"\r\n          [ngModel]=\"isDarkMode\">\r\n          Dark Mode\r\n        </favi-switch>\r\n      </div>\r\n    </favi-sidebar>\r\n\r\n    <div\r\n      [class.menu-opened]=\"menuOpened\"\r\n      class=\"router-container\">\r\n      <div\r\n        *ngIf=\"pageLoading; else page\"\r\n        class=\"loading-cover\">\r\n        <favi-spinner></favi-spinner>\r\n      </div>\r\n\r\n      <ng-template #page>\r\n        <router-outlet></router-outlet>\r\n      </ng-template>\r\n    </div>\r\n  </div>\r\n</favi-app>\r\n","import {NgModule} from '@angular/core';\r\nimport {RouterModule, Routes} from '@angular/router';\r\n\r\nconst routes: Routes = [\r\n  { path: 'input', loadChildren: () => import('./favi-input-showcase/favi-input-showcase.module').then(m => m.FaviInputShowcaseModule) },\r\n  { path: 'select', loadChildren: () => import('./favi-select-showcase/favi-select-showcase.module').then(m => m.FaviSelectShowcaseModule) },\r\n  { path: 'textarea', loadChildren: () => import('./favi-textarea-showcase/favi-textarea-showcase.module').then(m => m.FaviTextareaShowcaseModule) },\r\n  { path: 'datepicker', loadChildren: () => import('./favi-datepicker-showcase/favi-datepicker-showcase.module').then(m => m.FaviDatepickerShowcaseModule) },\r\n  { path: 'palette', loadChildren: () => import('./favi-palette-showcase/favi-palette-showcase.module').then(m => m.FaviPaletteShowcaseModule) },\r\n  { path: 'ranged-datepicker', loadChildren: () => import('./favi-ranged-datepicker-showcase/favi-ranged-datepicker-showcase.module').then(m => m.FaviRangedDatepickerShowcaseModule) },\r\n  { path: 'multi-select', loadChildren: () => import('./favi-multi-select-showcase/favi-multi-select-showcase.module').then(m => m.FaviMultiSelectShowcaseModule) },\r\n  { path: 'switch', loadChildren: () => import('./favi-switch-showcase/favi-switch-showcase.module').then(m => m.FaviSwitchShowcaseModule) },\r\n  { path: 'autocomplete', loadChildren: () => import('./favi-autocomplete-showcase/favi-autocomplete-showcase.module').then(m => m.FaviAutocompleteShowcaseModule) },\r\n  { path: 'checkbox', loadChildren: () => import('./favi-checkbox-showcase/favi-checkbox-showcase.module').then(m => m.FaviCheckboxShowcaseModule) },\r\n  { path: 'radio', loadChildren: () => import('./favi-radio-showcase/favi-radio-showcase.module').then(m => m.FaviRadioShowcaseModule) },\r\n  { path: 'slider', loadChildren: () => import('./favi-slider-showcase/favi-slider-showcase.module').then(m => m.FaviSliderShowcaseModule) },\r\n  { path: 'button', loadChildren: () => import('./favi-button-showcase/favi-button-showcase.module').then(m => m.FaviButtonShowcaseModule) },\r\n  { path: 'spinner', loadChildren: () => import('./favi-spinner-showcase/favi-spinner-showcase.module').then(m => m.FaviSpinnerShowcaseModule) },\r\n  { path: 'typography', loadChildren: () => import('./favi-typography-showcase/favi-typography-showcase.module').then(m => m.FaviTypographyShowcaseModule) },\r\n  { path: 'progress-bar', loadChildren: () => import('./favi-progress-bar-showcase/favi-progress-bar-showcase.module').then(m => m.FaviProgressBarShowcaseModule) },\r\n  { path: 'elevation', loadChildren: () => import('./favi-elevation-showcase/favi-elevation-showcase.module').then(m => m.FaviElevationShowcaseModule) },\r\n  { path: 'accordion', loadChildren: () => import('./favi-accordion-showcase/favi-accordion-showcase.module').then(m => m.FaviAccordionShowcaseModule) },\r\n  { path: 'toggle-button', loadChildren: () => import('./favi-toggle-button-showcase/favi-toggle-button-showcase.module').then(m => m.FaviToggleButtonShowcaseModule) },\r\n  { path: 'chip', loadChildren: () => import('./favi-chip-showcase/favi-chip-showcase.module').then(m => m.FaviChipShowcaseModule) },\r\n  { path: 'stepper', loadChildren: () => import('./favi-stepper-showcase/favi-stepper-showcase.module').then(m => m.FaviStepperShowcaseModule) },\r\n  { path: 'tooltip', loadChildren: () => import('./favi-tooltip-showcase/favi-tooltip-showcase.module').then(m => m.FaviTooltipShowcaseModule) },\r\n  { path: 'toast', loadChildren: () => import('./favi-toast-showcase/favi-toast-showcase.module').then(m => m.FaviToastShowcaseModule) },\r\n  { path: 'modal', loadChildren: () => import('./favi-modal-showcase/favi-modal-showcase.module').then(m => m.FaviModalShowcaseModule) },\r\n  { path: 'avatar', loadChildren: () => import('./favi-avatar-showcase/favi-avatar-showcase.module').then(m => m.FaviAvatarShowcaseModule) },\r\n  { path: 'paginator', loadChildren: () => import('./favi-paginator-showcase/favi-paginator-showcase.module').then(m => m.FaviPaginatorShowcaseModule) },\r\n  { path: 'context-menu', loadChildren: () => import('./favi-context-menu-showcase/favi-context-menu-showcase.module').then(m => m.FaviContextMenuShowcaseModule) },\r\n  { path: 'table', loadChildren: () => import('./favi-table-showcase/favi-table-showcase.module').then(m => m.FaviTableShowcaseModule) },\r\n  { path: 'calendar', loadChildren: () => import('./favi-calendar-showcase/favi-calendar-showcase.module').then(m => m.FaviCalendarShowcaseModule) },\r\n  { path: 'time-input', loadChildren: () => import('./favi-time-input-showcase/favi-time-input-showcase.module').then(m => m.FaviTimeInputShowcaseModule) },\r\n  { path: 'touch-slide', loadChildren: () => import('./touch-slide-showcase/touch-slide-showcase.module').then(m => m.TouchSlideShowcaseModule) },\r\n  { path: 'horizontal-scroller', loadChildren: () => import('./favi-horizontal-scroller-showcase/favi-horizontal-scroller-showcase.module').then(m => m.FaviHorizontalScrollerShowcaseModule) },\r\n  { path: 'markdown-editor', loadChildren: () => import('./favi-markdown-editor-showcase/favi-markdown-editor-showcase.module').then(m => m.FaviMarkdownEditorShowcaseModule) },\r\n  { path: 'tabs', loadChildren: () => import('./favi-tabs-showcase/favi-tabs-showcase.module').then(m => m.FaviTabsShowcaseModule) },\r\n  { path: 'drawer', loadChildren: () => import('./favi-drawer-showcase/favi-drawer-showcase.module').then(m => m.FaviDrawerShowcaseModule) },\r\n  { path: 'elapsed-time', loadChildren: () => import('./favi-elapsed-time-showcase/favi-elapsed-time-showcase.module').then(m => m.FaviElapsedTimeShowcaseModule) },\r\n  { path: 'drag-and-drop', loadChildren: () => import('./favi-drag-and-drop-showcase/favi-drag-and-drop-showcase.module').then(m => m.FaviDragAndDropShowcaseModule) },\r\n  {\r\n    path: '**',\r\n    redirectTo: 'input',\r\n  },\r\n];\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forRoot(routes)],\r\n  exports: [RouterModule]\r\n})\r\nexport class FaviShowcaseRoutingModule {\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FaviShowcaseComponent} from './favi-showcase.component';\r\nimport {FaviButtonModule} from '../../buttons/favi-button/favi-button.module';\r\nimport {FaviStrokeButtonModule} from '../../buttons/favi-stroke-button/favi-stroke-button.module';\r\nimport {FaviFlatButtonModule} from '../../buttons/favi-flat-button/favi-flat-button.module';\r\nimport {FaviContainerModule} from '../../common/favi-container/favi-container.module';\r\nimport {FaviAppBarModule} from '../../app/favi-app-bar/favi-app-bar.module';\r\nimport {FaviAppModule} from '../../app/favi-app/favi-app.module';\r\nimport {FaviSidebarModule} from '../../app/favi-sidebar/favi-sidebar.module';\r\nimport {FaviInputModule} from '../../controls/favi-input/favi-input.module';\r\nimport {FaviFormFieldModule} from '../../controls/favi-form-field/favi-form-field.module';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {FaviShowcaseRoutingModule} from './favi-showcase-routing.module';\r\nimport {FaviSelectModule} from '../../controls/favi-select/favi-select.module';\r\nimport {FaviOptionModule} from '../../controls/favi-option/favi-option.module';\r\nimport {FaviMultiSelectModule} from '../../controls/favi-multi-select/favi-multi-select.module';\r\nimport {FaviSelectValueModule} from '../../controls/favi-select-value/favi-select-value.module';\r\nimport {FaviAutocompleteModule} from '../../controls/favi-autocomplete/favi-autocomplete.module';\r\nimport {FaviSingleDatepickerModule} from '../../controls/datepickers/favi-datepicker/favi-single-datepicker.module';\r\nimport {FaviInputMaskModule} from '../../controls/favi-input-mask/favi-input-mask.module';\r\nimport {FaviModalModule} from '../../modal/favi-modal/favi-modal.module';\r\nimport {FaviSingleCalendarModule} from '../../calendar/favi-single-calendar/favi-single-calendar.module';\r\nimport {\r\n  FaviRangedDatepickerModule\r\n} from '../../controls/datepickers/favi-ranged-datepicker/favi-ranged-datepicker.module';\r\nimport {\r\n  FaviCalendarDateReplacerDirective\r\n} from '../../calendar/favi-calendar-date-replacer/favi-calendar-date-replacer.directive';\r\nimport {FaviMultiCalendarModule} from '../../calendar/favi-multi-calendar/favi-multi-calendar.module';\r\nimport {FaviRadioGroupModule} from '../../controls/favi-radio-group/favi-radio-group.module';\r\nimport {FaviCheckboxModule} from '../../controls/favi-checkbox/favi-checkbox.module';\r\nimport {FaviSwitchModule} from '../../controls/favi-switch/favi-switch.module';\r\nimport {FaviSliderModule} from '../../controls/favi-slider/favi-slider.module';\r\nimport {FaviSpinnerModule} from '../../common/favi-spinner/favi-spinner.module';\r\nimport {FaviIconModule} from '../../common/favi-icon/favi-icon.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FaviShowcaseComponent,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FaviButtonModule,\r\n    FaviStrokeButtonModule,\r\n    FaviFlatButtonModule,\r\n    FaviContainerModule,\r\n    FaviAppBarModule,\r\n    FaviAppModule,\r\n    FaviSidebarModule,\r\n    FaviInputModule,\r\n    FaviFormFieldModule,\r\n    ReactiveFormsModule,\r\n    FaviShowcaseRoutingModule,\r\n    FaviSelectModule,\r\n    FaviOptionModule,\r\n    FaviMultiSelectModule,\r\n    FaviSelectValueModule,\r\n    FaviAutocompleteModule,\r\n    FaviSingleDatepickerModule,\r\n    FaviInputMaskModule,\r\n    FaviModalModule,\r\n    FaviSingleCalendarModule,\r\n    FaviRangedDatepickerModule,\r\n    FaviCalendarDateReplacerDirective,\r\n    FaviMultiCalendarModule,\r\n    FaviRadioGroupModule,\r\n    FaviCheckboxModule,\r\n    FormsModule,\r\n    FaviSwitchModule,\r\n    FaviSliderModule,\r\n    FaviSpinnerModule,\r\n    FaviIconModule,\r\n  ],\r\n  exports: [\r\n    FaviShowcaseComponent,\r\n  ],\r\n})\r\nexport class FaviShowcaseModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.SubscriptionManager","i1.SubscriptionManager","i2.HistoryStateService","i2.FaviOverlayService","i3.SubscriptionManager","i4.HistoryStateService","i2.FaviIconComponent","i3.FaviEffectorDirective","i1.FaviToastService","i1.FaviAppService","i3.FaviOverlayOutletComponent","i4.FaviToastOutletComponent","i1.FaviIconComponent","i2","i3.FaviThemeDirective","i1.FaviOverlayService","i4","i5.FaviIconComponent","i2.FaviSelectComponent","i4.FaviIconComponent","i5.FaviOptionComponent","i6","i3","i3.FaviModalService","i2.FaviSingleCalendarComponent","i3.FaviModalActionsComponent","i4.FaviFlatButtonDirective","i2.FaviModalService","i3.FaviIconComponent","i4.FaviEffectorDirective","i2.FaviRangedCalendarComponent","i2.FaviEffectorDirective","i2.FaviAutoResizeTextareaDirective","i1.FaviEffectorDirective","i2.FaviInputMaskDirective","i3.FaviFlatButtonDirective","i1.FaviMarkdownEditorService","i2.FaviMarkdownEditorService","i4.FaviModalContentComponent","i5.FaviModalActionsComponent","i6.FaviFormFieldComponent","i7.FaviErrorComponent","i8.FaviInputComponent","i9.FaviFlatButtonDirective","i10.FaviAutofocusDirective","i2.FaviAppService","i4.FaviAppBarComponent","i5.FaviAppComponent","i6.FaviSidebarComponent","i7","i8.FaviSwitchComponent","i9.FaviSpinnerComponent","i10.FaviIconComponent"],"mappings":"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"}