{"version":3,"file":"koobiq-components-datepicker.mjs","sources":["../../../packages/components/datepicker/calendar-body.component.ts","../../../packages/components/datepicker/calendar-body.html","../../../packages/components/datepicker/calendar-header.component.ts","../../../packages/components/datepicker/calendar-header.html","../../../packages/components/datepicker/datepicker-errors.ts","../../../packages/components/datepicker/datepicker-intl.ts","../../../packages/components/datepicker/month-view.component.ts","../../../packages/components/datepicker/month-view.html","../../../packages/components/datepicker/calendar.component.ts","../../../packages/components/datepicker/calendar.html","../../../packages/components/datepicker/datepicker-animations.ts","../../../packages/components/datepicker/datepicker.component.ts","../../../packages/components/datepicker/datepicker-content.html","../../../packages/components/datepicker/datepicker-input.directive.ts","../../../packages/components/datepicker/datepicker-toggle.component.ts","../../../packages/components/datepicker/datepicker-toggle.html","../../../packages/components/datepicker/datepicker-module.ts","../../../packages/components/datepicker/koobiq-components-datepicker.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n    ViewEncapsulation\n} from '@angular/core';\n\n/**\n * Extra CSS classes that can be associated with a calendar cell.\n */\nexport type KbqCalendarCellCssClasses = string | string[] | Set<string> | { [key: string]: any };\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class KbqCalendarCell {\n    constructor(\n        public value: number,\n        public displayValue: string,\n        public enabled: boolean,\n        public cssClasses?: KbqCalendarCellCssClasses\n    ) {}\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n    selector: '[kbq-calendar-body]',\n    imports: [\n        NgClass\n    ],\n    templateUrl: 'calendar-body.html',\n    styleUrls: ['calendar-body.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqCalendarBody',\n    host: {\n        class: 'kbq-calendar__body'\n    }\n})\nexport class KbqCalendarBody implements OnChanges {\n    /** The cells to display in the table. */\n    @Input() rows: KbqCalendarCell[][];\n\n    /** The value in the table that corresponds to today. */\n    @Input() todayValue: number;\n\n    /** The value in the table that is currently selected. */\n    @Input() selectedValue: number;\n\n    /** The minimum number of free cells needed to fit the label in the first row. */\n    @Input() labelMinRequiredCells: number;\n\n    /** The number of columns in the table. */\n    @Input() numCols = 7;\n\n    /** The cell number of the active cell in the table. */\n    @Input() activeCell = 0;\n\n    /**\n     * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n     * maintained even as the table resizes.\n     */\n    @Input() cellAspectRatio = 1;\n\n    /** Emits when a new value is selected. */\n    @Output() readonly selectedValueChange: EventEmitter<number> = new EventEmitter<number>();\n\n    /** The number of blank cells to put at the beginning for the first row. */\n    firstRowOffset: number;\n\n    /** Padding for the individual date cells. */\n    cellPadding: string;\n\n    /** Width of an individual cell. */\n    cellWidth: string;\n\n    cellClicked(cell: KbqCalendarCell): void {\n        if (cell.enabled) {\n            this.selectedValueChange.emit(cell.value);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const columnChanges = changes.numCols;\n        const { rows, numCols } = this;\n\n        if (changes.rows || columnChanges) {\n            this.firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n        }\n\n        if (changes.cellAspectRatio || columnChanges || !this.cellPadding) {\n            // todo\n            // this.cellPadding = `${this.cellAspectRatio * 50 / numCols}%`;\n            this.cellPadding = '0';\n        }\n\n        if (columnChanges || !this.cellWidth) {\n            this.cellWidth = `${100 / numCols}%`;\n        }\n    }\n\n    isActiveCell(rowIndex: number, colIndex: number): boolean {\n        let cellNumber = rowIndex * this.numCols + colIndex;\n\n        // Account for the fact that the first row may not have as many cells.\n        if (rowIndex) {\n            cellNumber -= this.firstRowOffset;\n        }\n\n        return cellNumber === this.activeCell;\n    }\n}\n","<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track $index; let rowIndex = $index) {\n    <tr>\n        <!--  We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\n        The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\n        percentage of the width (a variant of the trick described here:\n        https://www.w3schools.com/howto/howto_css_aspect_ratio.asp). -->\n        @if (rowIndex === 0 && firstRowOffset) {\n            <td class=\"kbq-calendar__body-label\" [attr.colspan]=\"firstRowOffset\"></td>\n        }\n        @for (item of row; track item.displayValue; let colIndex = $index) {\n            <td\n                class=\"kbq-calendar__body-cell\"\n                [class.kbq-calendar__body_active]=\"isActiveCell(rowIndex, colIndex)\"\n                [ngClass]=\"item.cssClasses!\"\n                [style.paddingBottom]=\"cellPadding\"\n                [style.paddingTop]=\"cellPadding\"\n                [style.width]=\"cellWidth\"\n                [tabindex]=\"-1\"\n                (click)=\"cellClicked(item)\"\n            >\n                <div\n                    class=\"kbq-calendar__body-cell-content\"\n                    [class.kbq-calendar__body-today]=\"todayValue === item.value\"\n                    [class.kbq-disabled]=\"!item.enabled\"\n                    [class.kbq-selected]=\"selectedValue === item.value\"\n                >\n                    {{ item.displayValue }}\n                </div>\n            </td>\n        }\n    </tr>\n}\n","import { TitleCasePipe } from '@angular/common';\nimport {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n    ViewEncapsulation\n} from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { DateAdapter, KbqOptionModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqSelectModule } from '@koobiq/components/select';\n\nconst defaultMinYear = 1900;\nconst defaultMaxYear = 2099;\n\nexport type MonthName = {\n    name: string;\n    nameShort: string;\n    value: number;\n    disabled: boolean;\n};\n\n/** Default header for KbqCalendar */\n@Component({\n    selector: 'kbq-calendar-header',\n    imports: [\n        TitleCasePipe,\n        KbqButtonModule,\n        KbqIconModule,\n        KbqSelectModule,\n        KbqOptionModule\n    ],\n    templateUrl: 'calendar-header.html',\n    styleUrls: ['calendar-header.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqCalendarHeader',\n    host: {\n        class: 'kbq-calendar-header'\n    }\n})\nexport class KbqCalendarHeader<D> implements AfterContentInit {\n    monthNames: MonthName[];\n    selectedMonth: number;\n\n    years: number[] = [];\n    selectedYear: number;\n\n    @Input()\n    get activeDate(): D {\n        return this._activeDate;\n    }\n\n    set activeDate(value: D) {\n        this._activeDate = value;\n\n        this.updateSelectedValues();\n        this.updateSelectionOptions();\n    }\n\n    private _activeDate: D;\n\n    @Input()\n    get maxDate(): D | null {\n        return this._maxDate;\n    }\n\n    set maxDate(value: D | null) {\n        if (!value) {\n            return;\n        }\n\n        this._maxDate = value;\n\n        this.updateSelectionOptions();\n    }\n\n    private _maxDate = this.adapter.createDate(defaultMaxYear, 11);\n\n    @Input()\n    get minDate(): D | null {\n        return this._minDate;\n    }\n\n    set minDate(value: D | null) {\n        if (!value) {\n            return;\n        }\n\n        this._minDate = value;\n\n        this.updateSelectionOptions();\n    }\n\n    private _minDate = this.adapter.createDate(defaultMinYear, 1);\n\n    get previousDisabled(): boolean {\n        return this.compareDate(this.activeDate, this.minDate!) <= 0;\n    }\n\n    get currentDisabled(): boolean {\n        const today = this.adapter.today();\n\n        return this.compareDate(today, this.minDate!) < 0 || this.compareDate(today, this.maxDate!) > 0;\n    }\n\n    get nextDisabled(): boolean {\n        return this.compareDate(this.activeDate, this.maxDate!) >= 0;\n    }\n\n    /** Emits when any date is activated. */\n    @Output() readonly activeDateChange = new EventEmitter<D>();\n    @Output() readonly monthSelected = new EventEmitter<D>();\n    @Output() readonly yearSelected = new EventEmitter<D>();\n\n    constructor(private readonly adapter: DateAdapter<D>) {\n        this.monthNames = this.adapter.getMonthNames('long').map((name, i) => {\n            return { name, nameShort: this.adapter.getMonthNames('short')[i], value: i, disabled: false };\n        });\n    }\n\n    ngAfterContentInit(): void {\n        this.updateYearsOptions();\n        this.updateMonthOptions();\n        this.updateSelectedValues();\n    }\n\n    /** Handles when a new month is selected. */\n    onMonthSelected(month: number) {\n        const year = this.adapter.getYear(this.activeDate);\n        const normalizedDate = this.adapter.createDate(year, month);\n        const daysInMonth = this.adapter.getNumDaysInMonth(normalizedDate);\n\n        this.activeDate = this.adapter.createDate(\n            year,\n            month,\n            Math.min(this.adapter.getDate(this.activeDate), daysInMonth)\n        );\n\n        this.monthSelected.emit(this.activeDate);\n        this.activeDateChange.emit(this.activeDate);\n    }\n\n    /** Handles when a new year is selected. */\n    onYearSelected(year: number) {\n        const month = this.adapter.getMonth(this.activeDate);\n        const daysInMonth = this.adapter.getNumDaysInMonth(this.adapter.createDate(year, month));\n\n        this.activeDate = this.adapter.createDate(\n            year,\n            month,\n            Math.min(this.adapter.getDate(this.activeDate), daysInMonth)\n        );\n\n        this.yearSelected.emit(this.activeDate);\n        this.activeDateChange.emit(this.activeDate);\n\n        this.updateMonthOptions();\n    }\n\n    selectCurrentDate(): void {\n        this.activeDate = this.adapter.today();\n\n        this.activeDateChange.emit(this.activeDate);\n    }\n\n    /** Handles user clicks on the previous button. */\n    selectPreviousMonth(): void {\n        this.activeDate = this.adapter.addCalendarMonths(this.activeDate, -1);\n\n        this.activeDateChange.emit(this.activeDate);\n    }\n\n    /** Handles user clicks on the next button. */\n    selectNextMonth(): void {\n        this.activeDate = this.adapter.addCalendarMonths(this.activeDate, 1);\n\n        this.activeDateChange.emit(this.activeDate);\n    }\n\n    private compareDate(first: D, second: D): number {\n        const normalizedFirst = this.adapter.createDate(this.adapter.getYear(first), this.adapter.getMonth(first));\n\n        const normalizedSecond = this.adapter.createDate(this.adapter.getYear(second), this.adapter.getMonth(second));\n\n        return this.adapter.compareDate(normalizedFirst, normalizedSecond);\n    }\n\n    private updateSelectedValues() {\n        this.selectedMonth = this.monthNames[this.adapter.getMonth(this.activeDate)].value;\n\n        const year = this.adapter.getYear(this.activeDate);\n\n        this.selectedYear = this.years.find((item) => item === year) || this.years[0];\n    }\n\n    private updateSelectionOptions() {\n        this.updateYearsOptions();\n        this.updateMonthOptions();\n    }\n\n    private updateYearsOptions() {\n        const minYear = this.adapter.getYear(this.minDate!);\n        const maxYear = this.adapter.getYear(this.maxDate!);\n\n        this.years = [];\n\n        for (let key: number = minYear; key <= maxYear; key++) {\n            this.years.push(key);\n        }\n    }\n\n    private updateMonthOptions() {\n        if (!this._activeDate) {\n            return;\n        }\n\n        const minYear = this.adapter.getYear(this.minDate!);\n        const minMonth = this.adapter.getMonth(this.minDate!);\n\n        const maxYear = this.adapter.getYear(this.maxDate!);\n        const maxMonth = this.adapter.getMonth(this.maxDate!);\n\n        const currentYear = this.adapter.getYear(this._activeDate);\n\n        if (currentYear === minYear) {\n            this.monthNames.forEach((month) => (month.disabled = month.value < minMonth));\n        } else if (currentYear === maxYear) {\n            this.monthNames.forEach((month) => (month.disabled = month.value > maxMonth));\n        } else {\n            this.monthNames.forEach((month) => (month.disabled = false));\n        }\n    }\n}\n","<div class=\"kbq-calendar-header__select-group\">\n    <kbq-select\n        #monthSelect=\"kbqSelect\"\n        class=\"kbq-calendar-header__select\"\n        [panelClass]=\"'kbq-calendar-select-panel'\"\n        [tabIndex]=\"-1\"\n        [value]=\"selectedMonth\"\n        (selectionChange)=\"onMonthSelected($event.value)\"\n    >\n        <button\n            kbq-button\n            kbq-select-matcher\n            class=\"layout-padding-right-xs\"\n            [class.kbq-active]=\"monthSelect.panelOpen\"\n            [color]=\"'contrast'\"\n            [kbqStyle]=\"'transparent'\"\n        >\n            {{ monthNames[selectedMonth].nameShort | titlecase }}\n\n            <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\" [color]=\"'contrast'\"></i>\n        </button>\n\n        @for (month of monthNames; track month.nameShort) {\n            <kbq-option [disabled]=\"month.disabled\" [kbqTooltipDisabled]=\"true\" [value]=\"month.value\">\n                {{ month.name }}\n            </kbq-option>\n        }\n    </kbq-select>\n\n    <kbq-select\n        #yearSelect=\"kbqSelect\"\n        [panelClass]=\"'kbq-calendar-select-panel'\"\n        [tabIndex]=\"-1\"\n        [value]=\"selectedYear\"\n        (selectionChange)=\"onYearSelected($event.value)\"\n    >\n        <button\n            kbq-button\n            kbq-select-matcher\n            class=\"layout-padding-right-xs\"\n            [class.kbq-active]=\"yearSelect.panelOpen\"\n            [color]=\"'contrast'\"\n            [kbqStyle]=\"'transparent'\"\n        >\n            {{ selectedYear }}\n\n            <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\"></i>\n        </button>\n\n        @for (year of years; track year) {\n            <kbq-option [kbqTooltipDisabled]=\"true\" [value]=\"year\">\n                {{ year }}\n            </kbq-option>\n        }\n    </kbq-select>\n</div>\n\n<div class=\"kbq-calendar-header__button-group\">\n    <button\n        kbq-button\n        class=\"kbq-calendar-header__previous-button\"\n        [color]=\"'contrast'\"\n        [disabled]=\"previousDisabled\"\n        [kbqStyle]=\"'transparent'\"\n        [tabindex]=\"-1\"\n        (click)=\"selectPreviousMonth()\"\n    >\n        <i kbq-icon=\"kbq-chevron-left_16\"></i>\n    </button>\n\n    <button\n        kbq-button\n        [color]=\"'contrast'\"\n        [disabled]=\"currentDisabled\"\n        [kbqStyle]=\"'transparent'\"\n        [tabindex]=\"-1\"\n        (click)=\"selectCurrentDate()\"\n    >\n        <i kbq-icon=\"kbq-circle-xs_16\"></i>\n    </button>\n\n    <button\n        kbq-button\n        class=\"kbq-calendar-header__next-button\"\n        [color]=\"'contrast'\"\n        [disabled]=\"nextDisabled\"\n        [kbqStyle]=\"'transparent'\"\n        [tabindex]=\"-1\"\n        (click)=\"selectNextMonth()\"\n    >\n        <i kbq-icon=\"kbq-chevron-right_16\"></i>\n    </button>\n</div>\n","/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n    return Error(\n        `KbqDatepicker: No provider found for ${provider}. You must import one of the existing ` +\n            `modules at your application root or provide a custom implementation or use exists ones.`\n    );\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/** Datepicker data that requires internationalization. */\n@Injectable({ providedIn: 'root' })\nexport class KbqDatepickerIntl {\n    /**\n     * Stream that emits whenever the labels here are changed. Use this to notify\n     * components if the labels have changed after initialization.\n     */\n    readonly changes: Subject<void> = new Subject<void>();\n\n    /** A label for the calendar popup (used by screen readers). */\n    calendarLabel: string = 'Calendar';\n\n    /** A label for the button used to open the calendar popup (used by screen readers). */\n    openCalendarLabel: string = 'Open calendar';\n\n    /** A label for the previous month button (used by screen readers). */\n    prevMonthLabel: string = 'Previous month';\n\n    /** A label for the next month button (used by screen readers). */\n    nextMonthLabel: string = 'Next month';\n\n    /** A label for the previous year button (used by screen readers). */\n    prevYearLabel: string = 'Previous year';\n\n    /** A label for the next year button (used by screen readers). */\n    nextYearLabel: string = 'Next year';\n\n    /** A label for the previous multi-year button (used by screen readers). */\n    prevMultiYearLabel: string = 'Previous 20 years';\n\n    /** A label for the next multi-year button (used by screen readers). */\n    nextMultiYearLabel: string = 'Next 20 years';\n\n    /** A label for the 'switch to month view' button (used by screen readers). */\n    switchToMonthViewLabel: string = 'Choose date';\n\n    /** A label for the 'switch to year view' button (used by screen readers). */\n    switchToMultiYearViewLabel: string = 'Choose month and year';\n}\n","import {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    Optional,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { DateAdapter } from '@koobiq/components/core';\nimport { KbqCalendarBody, KbqCalendarCell, KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { createMissingDateImplError } from './datepicker-errors';\n\nconst DAYS_PER_WEEK = 7;\n\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\n@Component({\n    selector: 'kbq-month-view',\n    imports: [\n        KbqCalendarBody\n    ],\n    templateUrl: 'month-view.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqMonthView'\n})\nexport class KbqMonthView<D> implements AfterContentInit {\n    /**\n     * The date to display in this month view (everything other than the month and year is ignored).\n     */\n    @Input()\n    get activeDate(): D {\n        return this._activeDate;\n    }\n\n    set activeDate(value: D) {\n        const oldValue = this._activeDate;\n\n        this._activeDate = value;\n\n        if (!this.hasSameMonthAndYear(oldValue, value)) {\n            this.init();\n        }\n    }\n\n    private _activeDate: D;\n\n    /** The currently selected date. */\n    @Input()\n    get selected(): D | null {\n        return this._selected;\n    }\n\n    set selected(value: D | null) {\n        this._selected = value;\n        this.selectedDate = this.getDateInCurrentMonth(this._selected);\n    }\n\n    private _selected: D | null;\n\n    /** The minimum selectable date. */\n    @Input() minDate: D | null;\n\n    /** The maximum selectable date. */\n    @Input() maxDate: D | null;\n\n    /** Function used to filter which dates are selectable. */\n    @Input() dateFilter: (date: D) => boolean;\n\n    /** Function that can be used to add custom CSS classes to dates. */\n    @Input() dateClass: (date: D) => KbqCalendarCellCssClasses;\n\n    /** Emits when a new date is selected. */\n    @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n    /** Emits when any date is selected. */\n    @Output() readonly userSelection: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Emits when any date is activated. */\n    @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n    /** The body of calendar table */\n    @ViewChild(KbqCalendarBody, { static: false }) kbqCalendarBody: KbqCalendarBody;\n\n    /** Grid of calendar cells representing the dates of the month. */\n    weeks: KbqCalendarCell[][];\n\n    /** The number of blank cells in the first row before the 1st of the month. */\n    firstWeekOffset: number;\n\n    /**\n     * The date of the month that the currently selected Date falls on.\n     * Null if the currently selected Date is in another month.\n     */\n    selectedDate: number | null;\n\n    /** The date of the month that today falls on. Null if today is in another month. */\n    todayDate: number | null;\n\n    /** The names of the weekdays. */\n    weekdays: { long: string; narrow: string }[];\n\n    constructor(\n        private changeDetectorRef: ChangeDetectorRef,\n        @Optional() public adapter: DateAdapter<D>\n    ) {\n        if (!this.adapter) {\n            throw createMissingDateImplError('DateAdapter');\n        }\n\n        const firstDayOfWeek = this.adapter.getFirstDayOfWeek();\n        const narrowWeekdays = this.adapter.getDayOfWeekNames('short');\n        const longWeekdays = this.adapter.getDayOfWeekNames('long');\n\n        // Rotate the labels for days of the week based on the configured first day of the week.\n        const weekdays = longWeekdays.map((long, i) => {\n            return { long, narrow: narrowWeekdays[i] };\n        });\n\n        this.weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n\n        this._activeDate = this.adapter.today();\n    }\n\n    ngAfterContentInit() {\n        this.init();\n    }\n\n    /** Handles when a new date is selected. */\n    dateSelected(date: number) {\n        if (this.selectedDate !== date) {\n            const selectedYear = this.adapter.getYear(this.activeDate);\n            const selectedMonth = this.adapter.getMonth(this.activeDate);\n            const selectedDate = this.adapter.createDate(selectedYear, selectedMonth, date);\n\n            this.selectedChange.emit(selectedDate);\n        }\n\n        this.userSelection.emit();\n    }\n\n    /** Initializes this month view. */\n    init() {\n        this.selectedDate = this.getDateInCurrentMonth(this.selected);\n        this.todayDate = this.getDateInCurrentMonth(this.adapter.today());\n\n        const firstOfMonth = this.adapter.createDate(\n            this.adapter.getYear(this.activeDate),\n            this.adapter.getMonth(this.activeDate)\n        );\n\n        this.firstWeekOffset =\n            (DAYS_PER_WEEK + this.adapter.getDayOfWeek(firstOfMonth) - this.adapter.getFirstDayOfWeek()) %\n            DAYS_PER_WEEK;\n\n        this.createWeekCells();\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Creates KbqCalendarCells for the dates in this month. */\n    private createWeekCells() {\n        const daysInMonth = this.adapter.getNumDaysInMonth(this.activeDate);\n        const dateNames = this.adapter.getDateNames();\n\n        this.weeks = [[]];\n\n        for (let i = 0, cell = this.firstWeekOffset; i < daysInMonth; i++, cell++) {\n            if (cell === DAYS_PER_WEEK) {\n                this.weeks.push([]);\n                cell = 0;\n            }\n\n            const date = this.adapter.createDate(\n                this.adapter.getYear(this.activeDate),\n                this.adapter.getMonth(this.activeDate),\n                i + 1\n            );\n            const enabled = this.shouldEnableDate(date);\n            const cellClasses = this.dateClass ? this.dateClass(date) : undefined;\n\n            this.weeks[this.weeks.length - 1].push(new KbqCalendarCell(i + 1, dateNames[i], enabled, cellClasses));\n        }\n    }\n\n    /** Date filter for the month */\n    private shouldEnableDate(date: D): boolean {\n        return (\n            !!date &&\n            (!this.dateFilter || this.dateFilter(date)) &&\n            (!this.minDate || this.adapter.compareDate(date, this.minDate) >= 0) &&\n            (!this.maxDate || this.adapter.compareDate(date, this.maxDate) <= 0)\n        );\n    }\n\n    /**\n     * Gets the date in this month that the given Date falls on.\n     * Returns null if the given Date is in another month.\n     */\n    private getDateInCurrentMonth(date: D | null): number | null {\n        return date && this.hasSameMonthAndYear(date, this.activeDate) ? this.adapter.getDate(date) : null;\n    }\n\n    /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n    private hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n        return !!(\n            d1 &&\n            d2 &&\n            this.adapter.getMonth(d1) === this.adapter.getMonth(d2) &&\n            this.adapter.getYear(d1) === this.adapter.getYear(d2)\n        );\n    }\n}\n","<table class=\"kbq-calendar__table\">\n    <thead class=\"kbq-calendar__table-header\">\n        <tr>\n            @for (day of weekdays; track day) {\n                <th [attr.aria-label]=\"day.long\">\n                    {{ day.narrow }}\n                </th>\n            }\n        </tr>\n        <tr>\n            <th colspan=\"7\" class=\"kbq-calendar__table-header-divider\"></th>\n        </tr>\n    </thead>\n    <tbody\n        kbq-calendar-body\n        [activeCell]=\"adapter.getDate(activeDate) - 1\"\n        [labelMinRequiredCells]=\"3\"\n        [rows]=\"weeks\"\n        [selectedValue]=\"selectedDate!\"\n        [todayValue]=\"todayDate!\"\n        (selectedValueChange)=\"dateSelected($event)\"\n    ></tbody>\n</table>\n","import {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Optional,\n    Output,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { DateAdapter } from '@koobiq/components/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { KbqCalendarHeader } from './calendar-header.component';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { KbqDatepickerIntl } from './datepicker-intl';\nimport { KbqMonthView } from './month-view.component';\n\n/**\n * A calendar that is used as part of the datepicker.\n * @docs-private\n */\n@Component({\n    selector: 'kbq-calendar',\n    imports: [\n        KbqCalendarHeader,\n        KbqMonthView\n    ],\n    templateUrl: 'calendar.html',\n    styleUrls: ['calendar.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqCalendar',\n    host: {\n        class: 'kbq-calendar'\n    }\n})\nexport class KbqCalendar<D> implements AfterContentInit, OnDestroy, OnChanges {\n    /** A date representing the period (month or year) to start the calendar in. */\n    @Input()\n    get startAt(): D | null {\n        return this._startAt;\n    }\n\n    set startAt(value: D | null) {\n        const deserializedValue = this.getValidDateOrNull(this.adapter.deserialize(value));\n\n        this._startAt =\n            deserializedValue !== null ? this.adapter.clampDate(deserializedValue, this.minDate, this.maxDate) : null;\n    }\n\n    private _startAt: D | null;\n\n    /** The currently selected date. */\n    @Input()\n    get selected(): D | null {\n        return this._selected;\n    }\n\n    set selected(value: D | null) {\n        this._selected = this.adapter.deserialize(value);\n    }\n\n    private _selected: D | null;\n\n    /** The minimum selectable date. */\n    @Input()\n    get minDate(): D | null {\n        return this._minDate;\n    }\n\n    set minDate(value: D | null) {\n        this._minDate = this.adapter.deserialize(value);\n\n        this.startAt = this._startAt;\n    }\n\n    private _minDate: D | null;\n\n    /** The maximum selectable date. */\n    @Input()\n    get maxDate(): D | null {\n        return this._maxDate;\n    }\n\n    set maxDate(value: D | null) {\n        this._maxDate = this.adapter.deserialize(value);\n\n        this.startAt = this._startAt;\n    }\n\n    private _maxDate: D | null;\n\n    /**\n     * The current active date. This determines which time period is shown and which date is\n     * highlighted and used as the anchor on  when using keyboard navigation.\n     */\n    get activeDate(): D {\n        return this._activeDate;\n    }\n\n    set activeDate(value: D | null) {\n        this._activeDate = this.adapter.clampDate(value || this.getActiveDateDefault(), this.minDate, this.maxDate);\n\n        this.stateChanges.next();\n    }\n\n    private _activeDate: D;\n\n    /** Function used to filter which dates are selectable. */\n    @Input() dateFilter: (date: D) => boolean;\n\n    /** Function that can be used to add custom CSS classes to dates. */\n    @Input() dateClass: (date: D) => KbqCalendarCellCssClasses;\n\n    /** Emits when the currently selected date changes. */\n    @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n    /**\n     * Emits the year chosen in multiyear view.\n     * This doesn't imply a change on the selected date.\n     */\n    @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n    /**\n     * Emits the month chosen in year view.\n     * This doesn't imply a change on the selected date.\n     */\n    @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n    /** Emits when any date is selected. */\n    @Output() readonly userSelection: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Reference to the current month view component. */\n    @ViewChild(KbqMonthView, { static: false }) monthView: KbqMonthView<D>;\n\n    /**\n     * Emits whenever there is a state change that the header may need to respond to.\n     */\n    stateChanges = new Subject<void>();\n\n    /** The input element this datepicker is associated with. */\n    datepickerInput;\n\n    private readonly intlChanges: Subscription;\n\n    /** Subscription to value changes in the associated input element. */\n    private inputSubscription = Subscription.EMPTY;\n\n    constructor(\n        intl: KbqDatepickerIntl,\n        @Optional() private readonly adapter: DateAdapter<D>,\n        private changeDetectorRef: ChangeDetectorRef\n    ) {\n        if (!this.adapter) {\n            throw createMissingDateImplError('DateAdapter');\n        }\n\n        this.intlChanges = intl.changes.subscribe(() => {\n            changeDetectorRef.markForCheck();\n            this.stateChanges.next();\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const change = changes.minDate || changes.maxDate || changes.dateFilter;\n\n        if (change && !change.firstChange) {\n            if (this.monthView) {\n                // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n                // passed down to the view via data bindings which won't be up-to-date when we call `init`.\n                this.changeDetectorRef.detectChanges();\n                this.monthView.init();\n            }\n        }\n\n        this.stateChanges.next();\n    }\n\n    ngAfterContentInit() {\n        this.activeDate = this.getActiveDateDefault();\n    }\n\n    ngOnDestroy() {\n        this.intlChanges.unsubscribe();\n        this.inputSubscription.unsubscribe();\n        this.stateChanges.complete();\n    }\n\n    /**\n     * Register an input with this calendar.\n     * @param input The calendar input to register with this calendar.\n     */\n    registerInput(input): void {\n        if (this.datepickerInput) {\n            throw Error('A KbqDatepicker can only be associated with a single input.');\n        }\n\n        this.datepickerInput = input;\n        this.inputSubscription = this.datepickerInput.valueChange.subscribe((value: D | null) => {\n            this.selected = value;\n\n            this.monthView?.init();\n            this.activeDate = value as D;\n        });\n    }\n\n    /** Updates today's date after an update of the active date */\n    updateTodaysDate() {\n        // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n        this.monthView.ngAfterContentInit();\n    }\n\n    /** Handles date selection in the month view. */\n    dateSelected(date: D): void {\n        if (!this.adapter.sameDate(date, this.selected)) {\n            this.selectedChange.emit(date);\n        }\n    }\n\n    userSelected(): void {\n        this.userSelection.emit();\n    }\n\n    /**\n     * @param obj The object to check.\n     * @returns The given object if it is both a date instance and valid, otherwise null.\n     */\n    // todo выглядит как костыль от которого нужно избавиться\n    private getValidDateOrNull(obj: any): D | null {\n        return this.adapter.isDateInstance(obj) && this.adapter.isValid(obj) ? obj : null;\n    }\n\n    private getActiveDateDefault(): D {\n        return this.startAt || this.adapter.today();\n    }\n}\n","<kbq-calendar-header\n    [maxDate]=\"maxDate\"\n    [minDate]=\"minDate\"\n    [(activeDate)]=\"activeDate\"\n    (monthSelected)=\"monthSelected.emit(activeDate)\"\n    (yearSelected)=\"yearSelected.emit(activeDate)\"\n/>\n\n<div class=\"kbq-calendar__content\">\n    <kbq-month-view\n        [dateClass]=\"dateClass\"\n        [dateFilter]=\"dateFilter\"\n        [maxDate]=\"maxDate\"\n        [minDate]=\"minDate\"\n        [selected]=\"selected\"\n        [(activeDate)]=\"activeDate\"\n        (selectedChange)=\"dateSelected($event!)\"\n        (userSelection)=\"userSelected()\"\n    />\n</div>\n","import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\n/**\n * Animations used by the Koobiq datepicker.\n * @docs-private\n */\nexport const kbqDatepickerAnimations: {\n    readonly transformPanel: AnimationTriggerMetadata;\n    readonly fadeInCalendar: AnimationTriggerMetadata;\n} = {\n    /** Transforms the height of the datepicker's calendar. */\n    transformPanel: trigger('transformPanel', [\n        state(\n            'void',\n            style({\n                opacity: 0,\n                transform: 'scale(1, 0.8)'\n            })\n        ),\n        transition(\n            'void => enter',\n            animate(\n                '120ms cubic-bezier(0, 0, 0.2, 1)',\n                style({\n                    opacity: 1,\n                    transform: 'scale(1, 1)'\n                })\n            )\n        ),\n        transition('* => void', animate('100ms linear', style({ opacity: 0 })))\n    ]),\n\n    /** Fades in the content of the calendar. */\n    fadeInCalendar: trigger('fadeInCalendar', [\n        state('void', style({ opacity: 0 })),\n        state('enter', style({ opacity: 1 })),\n\n        // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n        transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\n    ])\n};\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT, NgClass } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ComponentRef,\n    EventEmitter,\n    inject,\n    Inject,\n    InjectionToken,\n    Input,\n    NgZone,\n    OnDestroy,\n    Optional,\n    Output,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport { DateAdapter, defaultOffsetY } from '@koobiq/components/core';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { KbqCalendar } from './calendar.component';\nimport { kbqDatepickerAnimations } from './datepicker-animations';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { KbqDatepickerInput } from './datepicker-input.directive';\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const KBQ_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n    'kbq-datepicker-scroll-strategy'\n);\n\n/** @docs-private */\nexport function KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n    return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n    provide: KBQ_DATEPICKER_SCROLL_STRATEGY,\n    deps: [Overlay],\n    useFactory: KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY\n};\n\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * KbqCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n    selector: 'kbq-datepicker__content',\n    imports: [\n        KbqCalendar,\n        NgClass\n    ],\n    templateUrl: 'datepicker-content.html',\n    styleUrls: ['datepicker-content.scss', 'datepicker-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqDatepickerContent',\n    host: {\n        class: 'kbq-datepicker__content',\n        '[@transformPanel]': 'animationState',\n        '(@transformPanel.done)': 'animationDone.next()'\n    },\n    animations: [\n        kbqDatepickerAnimations.transformPanel,\n        kbqDatepickerAnimations.fadeInCalendar\n    ]\n})\nexport class KbqDatepickerContent<D> implements OnDestroy, AfterViewInit {\n    /** Emits when an animation has finished. */\n    readonly animationDone = new Subject<void>();\n\n    /** Reference to the datepicker that created the overlay. */\n    datepicker: KbqDatepicker<D>;\n\n    /** Current state of the animation. */\n    animationState: 'enter' | 'void';\n\n    /** Reference to the internal calendar component. */\n    @ViewChild(KbqCalendar) calendar: KbqCalendar<D>;\n\n    private subscriptions = new Subscription();\n\n    constructor(private changeDetectorRef: ChangeDetectorRef) {}\n\n    ngAfterViewInit() {\n        this.subscriptions.add(\n            this.datepicker.stateChanges.subscribe(() => {\n                this.changeDetectorRef.markForCheck();\n            })\n        );\n    }\n\n    ngOnDestroy() {\n        this.subscriptions.unsubscribe();\n        this.animationDone.complete();\n    }\n\n    startExitAnimation() {\n        this.animationState = 'void';\n        this.changeDetectorRef.markForCheck();\n    }\n}\n\n// TODO: We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"kbqDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\n@Component({\n    selector: 'kbq-datepicker',\n    template: '',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqDatepicker',\n    providers: [{ provide: KbqFormFieldControl, useExisting: KbqDatepicker }]\n})\nexport class KbqDatepicker<D> implements OnDestroy {\n    protected readonly document = inject<Document>(DOCUMENT);\n\n    @Input()\n    get hasBackdrop(): boolean {\n        return this._hasBackdrop;\n    }\n\n    set hasBackdrop(value: boolean) {\n        this._hasBackdrop = coerceBooleanProperty(value);\n    }\n\n    private _hasBackdrop: boolean = false;\n\n    /** The date to open the calendar to initially. */\n    @Input()\n    get startAt(): D | null {\n        // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n        // selected value is.\n        return this._startAt || this.datepickerInput?.value;\n    }\n\n    set startAt(value: D | null) {\n        const deserializedValue = this.dateAdapter.deserialize(value);\n\n        this._startAt =\n            deserializedValue !== null\n                ? this.dateAdapter.clampDate(deserializedValue, this.minDate, this.maxDate)\n                : null;\n    }\n\n    private _startAt: D | null;\n\n    /** Whether the datepicker pop-up should be disabled. */\n    @Input()\n    get disabled(): boolean {\n        return this._disabled === undefined && this.datepickerInput ? this.datepickerInput.disabled : this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        const newValue = coerceBooleanProperty(value);\n\n        if (newValue !== this._disabled) {\n            this._disabled = newValue;\n            this.disabledChange.next(newValue);\n        }\n    }\n\n    private _disabled: boolean;\n\n    /** Whether the calendar is open. */\n    @Input()\n    get opened(): boolean {\n        return this._opened;\n    }\n\n    set opened(value: boolean) {\n        coerceBooleanProperty(value) ? this.open() : this.close();\n    }\n\n    private _opened = false;\n\n    /** The currently selected date. */\n    get selected(): D | null {\n        return this.validSelected;\n    }\n\n    set selected(value: D | null) {\n        this.validSelected = value;\n    }\n\n    get dateFilter(): (date: D | null) => boolean {\n        return this.datepickerInput && this.datepickerInput.dateFilter;\n    }\n\n    get value(): D | null {\n        return this.selected;\n    }\n\n    /** The minimum selectable date. */\n    @Input() minDate: D | null;\n\n    /** The maximum selectable date. */\n    @Input() maxDate: D | null;\n\n    /**\n     * Emits selected year in multiyear view.\n     * This doesn't imply a change on the selected date.\n     */\n    @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n    /**\n     * Emits selected month in year view.\n     * This doesn't imply a change on the selected date.\n     */\n    @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n    /** Classes to be passed to the date picker panel. Supports the same syntax as `ngClass`. */\n    @Input() panelClass: string | string[];\n\n    /** Function that can be used to add custom CSS classes to dates. */\n    @Input() dateClass: (date: D) => KbqCalendarCellCssClasses;\n\n    @Input() backdropClass: string = 'cdk-overlay-transparent-backdrop';\n\n    /** Emits when the datepicker has been opened. */\n    @Output('opened') readonly openedStream: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Emits when the datepicker has been closed. */\n    @Output('closed') readonly closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n    readonly stateChanges: Subject<void> = new Subject<void>();\n\n    /** Emits when the datepicker is disabled. */\n    readonly disabledChange = new Subject<boolean>();\n\n    /** Emits new selected date when selected date changes. */\n    readonly selectedChanged = new Subject<D>();\n\n    /** The id for the datepicker calendar. */\n    id: string = `kbq-datepicker-${datepickerUid++}`;\n\n    /** A reference to the overlay when the calendar is opened as a popup. */\n    popupRef: OverlayRef | null;\n\n    /** The input element this datepicker is associated with. */\n    datepickerInput: KbqDatepickerInput<D>;\n\n    private scrollStrategy: () => ScrollStrategy;\n\n    private validSelected: D | null = null;\n\n    /** A portal containing the calendar for this datepicker. */\n    private calendarPortal: ComponentPortal<KbqDatepickerContent<D>>;\n\n    /** Reference to the component instantiated in popup mode. */\n    private popupComponentRef: ComponentRef<KbqDatepickerContent<D>> | null;\n\n    /** The element that was focused before the datepicker was opened. */\n    private focusedElementBeforeOpen: HTMLElement | null = null;\n\n    /** Subscription to value changes in the associated input element. */\n    private inputSubscription = Subscription.EMPTY;\n\n    private closeSubscription = Subscription.EMPTY;\n\n    constructor(\n        private overlay: Overlay,\n        private ngZone: NgZone,\n        private viewContainerRef: ViewContainerRef,\n        @Inject(KBQ_DATEPICKER_SCROLL_STRATEGY) scrollStrategy: any,\n        @Optional() private readonly dateAdapter: DateAdapter<D>,\n        @Optional() private dir: Directionality\n    ) {\n        if (!this.dateAdapter) {\n            throw createMissingDateImplError('DateAdapter');\n        }\n\n        this.scrollStrategy = scrollStrategy;\n    }\n\n    ngOnDestroy() {\n        this.close();\n        this.inputSubscription.unsubscribe();\n        this.closeSubscription.unsubscribe();\n        this.disabledChange.complete();\n\n        this.destroyOverlay();\n    }\n\n    /** Selects the given date */\n    select(date: D): void {\n        const oldValue = this.selected;\n\n        this.selected = date;\n\n        if (!this.dateAdapter.sameDate(oldValue, this.selected)) {\n            this.selectedChanged.next(date);\n        }\n    }\n\n    /** Emits the selected year in multiyear view */\n    selectYear(normalizedYear: D): void {\n        this.yearSelected.emit(normalizedYear);\n    }\n\n    /** Emits selected month in year view */\n    selectMonth(normalizedMonth: D): void {\n        this.monthSelected.emit(normalizedMonth);\n    }\n\n    /**\n     * Register an input with this datepicker.\n     * @param input The datepicker input to register with this datepicker.\n     */\n    registerInput(input: KbqDatepickerInput<D>): void {\n        if (this.datepickerInput) {\n            throw Error('A KbqDatepicker can only be associated with a single input.');\n        }\n\n        this.datepickerInput = input;\n        this.inputSubscription = this.datepickerInput.valueChange.subscribe((value: D | null) => {\n            this.selected = value;\n\n            if (this.popupComponentRef) {\n                this.popupComponentRef.instance.calendar.monthView?.init();\n                this.popupComponentRef.instance.calendar.activeDate = value as D;\n            }\n        });\n    }\n\n    /** Open the calendar. */\n    open(): void {\n        if (this._opened || this.disabled) {\n            return;\n        }\n\n        if (!this.datepickerInput) {\n            throw Error('Attempted to open an KbqDatepicker with no associated input.');\n        }\n\n        if (this.document) {\n            this.focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n        }\n\n        this.openAsPopup();\n\n        this._opened = true;\n        this.openedStream.emit();\n    }\n\n    /** Close the calendar. */\n    close(restoreFocus: boolean = true): void {\n        if (!this._opened) {\n            return;\n        }\n\n        if (this.popupComponentRef) {\n            const instance = this.popupComponentRef.instance;\n\n            instance.startExitAnimation();\n\n            instance.animationDone.pipe(take(1)).subscribe(() => this.destroyOverlay());\n        }\n\n        if (restoreFocus) {\n            this.focusedElementBeforeOpen!.focus();\n        }\n\n        this._opened = false;\n        this.closedStream.emit();\n        this.focusedElementBeforeOpen = null;\n    }\n\n    toggle(): void {\n        if (this.datepickerInput.isReadOnly) {\n            return;\n        }\n\n        this._opened ? this.close() : this.open();\n    }\n\n    /** Destroys the current overlay. */\n    private destroyOverlay() {\n        if (this.popupRef) {\n            this.popupRef.dispose();\n            this.popupRef = this.popupComponentRef = null;\n        }\n    }\n\n    /** Open the calendar as a popup. */\n    private openAsPopup(): void {\n        if (!this.calendarPortal) {\n            this.calendarPortal = new ComponentPortal<KbqDatepickerContent<D>>(\n                KbqDatepickerContent,\n                this.viewContainerRef\n            );\n        }\n\n        if (!this.popupRef) {\n            this.createPopup();\n        }\n\n        if (!this.popupRef!.hasAttached()) {\n            this.popupComponentRef = this.popupRef!.attach(this.calendarPortal);\n            this.popupComponentRef.instance.datepicker = this;\n\n            // Update the position once the calendar has rendered.\n            this.ngZone.onStable\n                .asObservable()\n                .pipe(take(1))\n                .subscribe(() => this.popupRef?.updatePosition());\n        }\n    }\n\n    /** Create the popup. */\n    private createPopup(): void {\n        const overlayConfig = new OverlayConfig({\n            positionStrategy: this.createPopupPositionStrategy(),\n            hasBackdrop: this.hasBackdrop,\n            backdropClass: this.backdropClass,\n            direction: this.dir,\n            scrollStrategy: this.scrollStrategy(),\n            panelClass: 'kbq-datepicker__popup'\n        });\n\n        this.popupRef = this.overlay.create(overlayConfig);\n\n        this.closeSubscription = this.closingActions().subscribe(() => this.close(this.restoreFocus()));\n    }\n\n    private restoreFocus(): boolean {\n        return this.document.activeElement === this.document.body;\n    }\n\n    private closingActions() {\n        return merge(\n            this.popupRef!.backdropClick(),\n            this.popupRef!.outsidePointerEvents(),\n            this.popupRef!.detachments()\n        );\n    }\n\n    /** Create the popup PositionStrategy. */\n    private createPopupPositionStrategy(): PositionStrategy {\n        return this.overlay\n            .position()\n            .flexibleConnectedTo(this.datepickerInput.getOrigin())\n            .withTransformOriginOn('.kbq-datepicker__content')\n            .withFlexibleDimensions(false)\n            .withViewportMargin(8)\n            .withLockedPosition()\n            .withPositions([\n                {\n                    originX: 'start',\n                    originY: 'bottom',\n                    overlayX: 'start',\n                    overlayY: 'top',\n                    offsetY: defaultOffsetY\n                },\n                {\n                    originX: 'start',\n                    originY: 'top',\n                    overlayX: 'start',\n                    overlayY: 'bottom',\n                    offsetY: -defaultOffsetY\n                },\n                {\n                    originX: 'end',\n                    originY: 'bottom',\n                    overlayX: 'end',\n                    overlayY: 'top'\n                },\n                {\n                    originX: 'end',\n                    originY: 'top',\n                    overlayX: 'end',\n                    overlayY: 'bottom'\n                }\n            ]);\n    }\n}\n","<kbq-calendar\n    [dateClass]=\"datepicker.dateClass\"\n    [dateFilter]=\"datepicker.dateFilter\"\n    [id]=\"datepicker.id\"\n    [maxDate]=\"datepicker.maxDate\"\n    [minDate]=\"datepicker.minDate\"\n    [ngClass]=\"datepicker.panelClass\"\n    [selected]=\"datepicker.selected\"\n    [startAt]=\"datepicker.startAt\"\n    [@fadeInCalendar]=\"'enter'\"\n    (monthSelected)=\"datepicker.selectMonth($event)\"\n    (selectedChange)=\"datepicker.select($event)\"\n    (userSelection)=\"datepicker.close()\"\n    (yearSelected)=\"datepicker.selectYear($event)\"\n/>\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    AfterContentInit,\n    Directive,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    inject,\n    Inject,\n    InjectionToken,\n    Input,\n    OnDestroy,\n    Optional,\n    Output,\n    Renderer2\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    FormGroupDirective,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    NgControl,\n    NgForm,\n    ValidationErrors,\n    Validator,\n    ValidatorFn,\n    Validators\n} from '@angular/forms';\nimport {\n    BACKSPACE,\n    DELETE,\n    DOWN_ARROW,\n    END,\n    ESCAPE,\n    hasModifierKey,\n    HOME,\n    isHorizontalMovement,\n    isLetterKey,\n    isVerticalMovement,\n    LEFT_ARROW,\n    PAGE_DOWN,\n    PAGE_UP,\n    RIGHT_ARROW,\n    SPACE,\n    TAB,\n    UP_ARROW\n} from '@koobiq/cdk/keycodes';\nimport {\n    DateAdapter,\n    ErrorStateMatcher,\n    KBQ_DATE_FORMATS,\n    KBQ_LOCALE_SERVICE,\n    KBQ_VALIDATION,\n    KbqDateFormats,\n    KbqErrorStateTracker,\n    ruRULocaleData,\n    validationTooltipHideDelay,\n    validationTooltipShowDelay\n} from '@koobiq/components/core';\nimport { KbqFormField, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport type { KbqWarningTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subject, Subscription } from 'rxjs';\nimport { KbqCalendar } from './calendar.component';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { KbqDatepicker } from './datepicker.component';\n\nenum DateParts {\n    year = 'y',\n    month = 'm',\n    day = 'd'\n}\n\nexport const MAX_YEAR = 9999;\nconst YEAR_LENGTH = 4;\n\nclass DateDigit {\n    maxDays = 31;\n    maxMonth = 12;\n\n    parse: (value: string) => number;\n\n    constructor(\n        public value: DateParts,\n        public start: number,\n        public length: number\n    ) {\n        if (value === DateParts.day) {\n            this.parse = this.parseDay;\n        } else if (value === DateParts.month) {\n            this.parse = this.parseMonth;\n        } else if (value === DateParts.year) {\n            this.parse = this.parseYear;\n        }\n    }\n\n    get end(): number {\n        return this.start + this.length;\n    }\n\n    get isDay(): boolean {\n        return this.value === DateParts.day;\n    }\n\n    get isMonth(): boolean {\n        return this.value === DateParts.month;\n    }\n\n    get isYear(): boolean {\n        return this.value === DateParts.year;\n    }\n\n    get fullName(): string {\n        if (this.isDay) {\n            return 'date';\n        }\n\n        if (this.isMonth) {\n            return 'month';\n        }\n\n        if (this.isYear) {\n            return 'year';\n        }\n\n        return '';\n    }\n\n    private parseDay(value: string): number {\n        const parsedValue: number = parseInt(value);\n\n        if (parsedValue === 0) {\n            return 1;\n        }\n\n        if (parsedValue > this.maxDays) {\n            return this.maxDays;\n        }\n\n        return parsedValue;\n    }\n\n    private parseMonth(value: string): number {\n        const parsedValue: number = parseInt(value);\n\n        if (parsedValue === 0) {\n            return 1;\n        }\n\n        if (parsedValue > this.maxMonth) {\n            return this.maxMonth;\n        }\n\n        return parsedValue;\n    }\n\n    private parseYear(value: string): number {\n        const parsedValue: number = parseInt(value);\n\n        if (parsedValue === 0) {\n            return 1;\n        }\n\n        if (parsedValue > MAX_YEAR) {\n            return parseInt(value.substring(0, YEAR_LENGTH));\n        }\n\n        return parsedValue;\n    }\n}\n\n/** @docs-private */\nexport const KBQ_DATEPICKER_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => KbqDatepickerInput),\n    multi: true\n};\n\n/** @docs-private */\nexport const KBQ_DATEPICKER_VALIDATORS: any = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(() => KbqDatepickerInput),\n    multi: true\n};\n\n/** default configuration of datepicker */\n/** @docs-private */\nexport const KBQ_DATEPICKER_DEFAULT_CONFIGURATION = ruRULocaleData.datepicker;\n\n/** Injection Token for providing configuration of datepicker */\n/** @docs-private */\nexport const KBQ_DATEPICKER_CONFIGURATION = new InjectionToken('KbqDatepickerConfiguration');\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use KbqDatepickerInputEvent instead.\n */\nexport class KbqDatepickerInputEvent<D> {\n    /** The new value for the target datepicker input. */\n    value: D | null;\n\n    constructor(\n        /** Reference to the datepicker input component that emitted the event. */\n        public target: KbqDatepickerInput<D>,\n        /** Reference to the native input element associated with the datepicker input. */\n        public targetElement: HTMLElement\n    ) {\n        this.value = this.target.value;\n    }\n}\n\nlet uniqueComponentIdSuffix = 0;\n\ninterface DateTimeObject {\n    year: number;\n    month: number;\n    date: number;\n    hours: number;\n    minutes: number;\n    seconds: number;\n    milliseconds: number;\n}\n\n/** Directive used to connect an input to a KbqDatepicker. */\n@Directive({\n    selector: 'input[kbqDatepicker], input[kbqCalendar]',\n    exportAs: 'kbqDatepickerInput',\n    providers: [\n        KBQ_DATEPICKER_VALUE_ACCESSOR,\n        KBQ_DATEPICKER_VALIDATORS,\n        { provide: KbqFormFieldControl, useExisting: KbqDatepickerInput }\n    ],\n    host: {\n        class: 'kbq-input kbq-datepicker',\n        '[attr.placeholder]': 'placeholder',\n        '[attr.required]': 'required',\n        '[attr.disabled]': 'disabled || null',\n        '[attr.min]': 'min ? toISO8601(min) : null',\n        '[attr.max]': 'max ? toISO8601(max) : null',\n        '[attr.autocomplete]': '\"off\"',\n        '(paste)': 'onPaste($event)',\n        '(change)': 'onChange()',\n        '(focus)': 'focusChanged(true)',\n        '(blur)': 'onBlur()',\n        '(keydown)': 'onKeyDown($event)'\n    }\n})\nexport class KbqDatepickerInput<D>\n    implements KbqFormFieldControl<D>, ControlValueAccessor, Validator, OnDestroy, DoCheck, AfterContentInit\n{\n    /** @docs-private */\n    protected readonly formField = inject(KbqFormField, { optional: true, host: true });\n    /** @docs-private */\n    protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n\n    private readonly useLegacyValidation = inject(KBQ_VALIDATION, { optional: true })?.useValidation ?? false;\n\n    /** @docs-private */\n    protected readonly externalConfiguration = inject(KBQ_DATEPICKER_CONFIGURATION, { optional: true });\n\n    protected configuration;\n\n    readonly stateChanges: Subject<void> = new Subject<void>();\n\n    controlType: string = 'datepicker';\n\n    focused: boolean = false;\n\n    datepicker: KbqDatepicker<D>;\n    calendar: KbqCalendar<D>;\n\n    dateFilter: (date: D | null) => boolean;\n\n    /** Emits when the value changes (either due to user input or programmatic change). */\n    valueChange = new EventEmitter<D | null>();\n\n    /** Emits when the disabled state has changed */\n    disabledChange = new EventEmitter<boolean>();\n\n    /** Object used to control when error messages are shown. */\n    @Input()\n    get errorStateMatcher() {\n        return this.errorStateTracker.errorStateMatcher;\n    }\n\n    set errorStateMatcher(value: ErrorStateMatcher) {\n        this.errorStateTracker.errorStateMatcher = value;\n    }\n\n    @Input()\n    get placeholder(): string {\n        return this._placeholder || this.configuration.placeholder;\n    }\n\n    set placeholder(value: string) {\n        this._placeholder = value;\n    }\n\n    private _placeholder: string;\n\n    @Input()\n    get required(): boolean {\n        return this._required;\n    }\n\n    set required(value: boolean) {\n        this._required = coerceBooleanProperty(value);\n    }\n\n    private _required: boolean;\n\n    /** The datepicker that this input is associated with. */\n    @Input()\n    set kbqDatepicker(value: KbqDatepicker<D>) {\n        if (!value) {\n            return;\n        }\n\n        this.datepicker = value;\n        this.datepicker.registerInput(this);\n        this.datepickerSubscription.unsubscribe();\n\n        this.datepickerSubscription = this.datepicker.selectedChanged.subscribe((selected: D) => {\n            const newValue = this.saveTimePart(selected);\n\n            this.value = newValue;\n            this.cvaOnChange(newValue);\n            this.onTouched();\n            this.dateChange.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n        });\n    }\n\n    /** The calendar that this input is associated with. */\n    @Input()\n    set kbqCalendar(value: KbqCalendar<D>) {\n        if (!value) {\n            return;\n        }\n\n        this.calendar = value;\n        this.calendar.registerInput(this);\n    }\n\n    /** Function that can be used to filter out dates within the datepicker. */\n    @Input()\n    set kbqDatepickerFilter(value: (date: D | null) => boolean) {\n        this.dateFilter = value;\n        this.validatorOnChange();\n    }\n\n    /** The value of the input. */\n    @Input()\n    get value(): D | null {\n        return this._value;\n    }\n\n    set value(value: D | null) {\n        let newValue = this.adapter.deserialize(value);\n\n        this.lastValueValid = !newValue || this.adapter.isValid(newValue);\n\n        newValue = this.getValidDateOrNull(newValue);\n\n        const oldDate = this.value;\n\n        this._value = newValue;\n        this.formatValue(newValue);\n\n        if (!this.adapter.sameDate(oldDate, newValue)) {\n            this.valueChange.emit(newValue);\n        }\n    }\n\n    private _value: D | null;\n\n    /** The minimum valid date. */\n    @Input()\n    get min(): D | null {\n        return this._min;\n    }\n\n    set min(value: D | null) {\n        this._min = this.adapter.deserialize(value);\n        this.validatorOnChange();\n    }\n\n    private _min: D | null;\n\n    /** The maximum valid date. */\n    @Input()\n    get max(): D | null {\n        return this._max;\n    }\n\n    set max(value: D | null) {\n        this._max = this.adapter.deserialize(value);\n        this.validatorOnChange();\n    }\n\n    private _max: D | null;\n\n    /** Whether the datepicker-input is disabled. */\n    @Input()\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        const newValue = coerceBooleanProperty(value);\n        const element = this.elementRef.nativeElement;\n\n        if (this._disabled !== newValue) {\n            this._disabled = newValue;\n            this.disabledChange.emit(newValue);\n        }\n\n        // We need to null check the `blur` method, because it's undefined during SSR.\n        if (newValue && element.blur) {\n            // Normally, native input elements automatically blur if they turn disabled. This behavior\n            // is problematic, because it would mean that it triggers another change detection cycle,\n            // which then causes a changed after checked error if the input element was focused before.\n            element.blur();\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    @Input()\n    get id(): string {\n        return this._id;\n    }\n\n    set id(value: string) {\n        this._id = value || this.uid;\n    }\n\n    private _id: string;\n\n    @Input()\n    set kbqValidationTooltip(tooltip: KbqWarningTooltipTrigger) {\n        if (!tooltip) {\n            return;\n        }\n\n        tooltip.enterDelay = validationTooltipShowDelay;\n        tooltip.trigger = 'manual';\n\n        tooltip.initListeners();\n\n        this.incorrectInput.subscribe(() => {\n            if (tooltip.isOpen) {\n                return;\n            }\n\n            tooltip.show();\n\n            setTimeout(() => tooltip.hide(), validationTooltipHideDelay);\n        });\n    }\n\n    @Output() readonly incorrectInput = new EventEmitter<void>();\n\n    /** Emits when a `change` event is fired on this `<input>`. */\n    @Output() readonly dateChange = new EventEmitter<KbqDatepickerInputEvent<D>>();\n\n    /** Emits when an `input` event is fired on this `<input>`. */\n    @Output() readonly dateInput = new EventEmitter<KbqDatepickerInputEvent<D>>();\n\n    get empty(): boolean {\n        return !this.viewValue && !this.isBadInput();\n    }\n\n    get viewValue(): string {\n        return this.elementRef.nativeElement.value;\n    }\n\n    get ngControl(): any {\n        return this.control;\n    }\n\n    get isReadOnly(): boolean {\n        return this.elementRef.nativeElement.readOnly;\n    }\n\n    get dateInputFormat(): string {\n        return this.dateFormats?.dateInput || this.adapter.config.dateInput;\n    }\n\n    get errorState() {\n        return this.errorStateTracker.errorState;\n    }\n\n    set errorState(value: boolean) {\n        this.errorStateTracker.errorState = value;\n    }\n\n    private get readyForParse(): boolean {\n        return !!(this.firstDigit && this.secondDigit && this.thirdDigit);\n    }\n\n    private get selectionStart(): number | null {\n        return this.elementRef.nativeElement.selectionStart;\n    }\n\n    private set selectionStart(value: number | null) {\n        this.elementRef.nativeElement.selectionStart = value;\n    }\n\n    private get selectionEnd(): number | null {\n        return this.elementRef.nativeElement.selectionEnd;\n    }\n\n    private set selectionEnd(value: number | null) {\n        this.elementRef.nativeElement.selectionEnd = value;\n    }\n\n    private control: AbstractControl;\n    private readonly uid = `kbq-datepicker-${uniqueComponentIdSuffix++}`;\n\n    private datepickerSubscription = Subscription.EMPTY;\n\n    /** Whether the last value set on the input was valid. */\n    private lastValueValid = false;\n\n    /** The combined form control validator for this input. */\n    private readonly validator: ValidatorFn | null;\n\n    private separator: string;\n\n    private firstDigit: DateDigit | null = null;\n    private secondDigit: DateDigit | null = null;\n    private thirdDigit: DateDigit | null = null;\n\n    private separatorPositions: number[];\n\n    private errorStateTracker: KbqErrorStateTracker;\n\n    constructor(\n        public elementRef: ElementRef<HTMLInputElement>,\n        private readonly renderer: Renderer2,\n        @Optional() readonly adapter: DateAdapter<D>,\n        @Optional() @Inject(KBQ_DATE_FORMATS) private readonly dateFormats: KbqDateFormats\n    ) {\n        this.validator = Validators.compose([\n            this.parseValidator,\n            this.minValidator,\n            this.maxValidator,\n            this.filterValidator\n        ]);\n\n        if (!this.adapter) {\n            throw createMissingDateImplError('DateAdapter');\n        }\n\n        this.errorStateTracker = new KbqErrorStateTracker(\n            inject(ErrorStateMatcher),\n            // update ngControl later, so it will be initialized\n            null,\n            inject(FormGroupDirective, { optional: true }),\n            inject(NgForm, { optional: true }),\n            this.stateChanges\n        );\n\n        this.setFormat(this.dateInputFormat);\n\n        this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n        if (!this.localeService) {\n            this.initDefaultParams();\n        }\n    }\n\n    ngDoCheck() {\n        if (this.ngControl) {\n            // We need to re-evaluate this on every change detection cycle, because there are some\n            // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n            // that whatever logic is in here has to be super lean or we risk destroying the performance.\n            this.updateErrorState();\n        }\n    }\n\n    onContainerClick() {\n        this.focus();\n    }\n\n    focus(): void {\n        this.elementRef.nativeElement.focus();\n    }\n\n    focusChanged(isFocused: boolean): void {\n        if (isFocused !== this.focused) {\n            this.focused = isFocused;\n            this.onTouched();\n            this.stateChanges.next();\n        }\n    }\n\n    onTouched = () => {};\n\n    ngAfterContentInit() {\n        this.updateErrorState();\n    }\n\n    ngOnDestroy() {\n        this.datepickerSubscription.unsubscribe();\n        this.valueChange.complete();\n        this.disabledChange.complete();\n    }\n\n    /** @docs-private */\n    registerOnValidatorChange(fn: () => void): void {\n        this.validatorOnChange = fn;\n    }\n\n    /** @docs-private */\n    validate(control: AbstractControl): ValidationErrors | null {\n        this.setControl(control);\n\n        return this.validator ? this.validator(control) : null;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    writeValue(value: D): void {\n        this.value = value;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    registerOnChange(fn: (value: any) => void): void {\n        this.cvaOnChange = fn;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    onKeyDown(event: KeyboardEvent): void {\n        if (this.isReadOnly) {\n            return;\n        }\n\n        const keyCode = event.keyCode;\n\n        if (this.isLetterKey(event)) {\n            event.preventDefault();\n\n            this.incorrectInput.emit();\n        } else if (this.isKeyForOpen(event)) {\n            event.preventDefault();\n\n            this.datepicker?.open();\n        } else if (this.isKeyForClose(event)) {\n            event.preventDefault();\n\n            this.datepicker?.close();\n        } else if (keyCode === TAB) {\n            this.datepicker?.close(false);\n        } else if (this.isKeyForByPass(event)) {\n            return;\n        } else if (keyCode === SPACE) {\n            this.spaceKeyHandler(event);\n        } else if ([UP_ARROW, DOWN_ARROW].includes(keyCode)) {\n            event.preventDefault();\n\n            this.verticalArrowKeyHandler(keyCode);\n        } else if ([LEFT_ARROW, RIGHT_ARROW, HOME, PAGE_UP, END, PAGE_DOWN].includes(keyCode)) {\n            event.preventDefault();\n\n            this.changeCaretPosition(keyCode);\n        } else if (/^\\D$/.test(event.key)) {\n            event.preventDefault();\n\n            const newValue = this.getNewValue(event.key, this.selectionStart as number);\n            const formattedValue = this.replaceSymbols(newValue);\n\n            if (newValue !== formattedValue) {\n                this.setViewValue(formattedValue, true);\n\n                setTimeout(this.onInput);\n            } else {\n                this.incorrectInput.emit();\n            }\n        } else {\n            setTimeout(this.onInput);\n        }\n    }\n\n    onInput = () => {\n        this.correctCursorPosition();\n        const formattedValue = this.replaceSymbols(this.viewValue);\n\n        const newTimeObj = this.getDateFromString(formattedValue);\n\n        this.lastValueValid = !!newTimeObj;\n\n        if (!newTimeObj) {\n            if (!this.viewValue) {\n                this.lastValueValid = false;\n                this.updateValue(newTimeObj as D);\n            } else {\n                this.control.updateValueAndValidity();\n            }\n\n            return;\n        }\n\n        this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);\n\n        this.selectNextDigitByCursor(this.selectionStart as number);\n\n        this.updateValue(newTimeObj);\n    };\n\n    parseOnBlur = (): any => {\n        if (!this.viewValue || !this.readyForParse) {\n            return null;\n        }\n\n        const date: DateTimeObject = this.getDefaultValue();\n\n        const viewDigits: string[] = this.viewValue\n            .split(this.separator)\n            .map((value: string) => value)\n            .filter((value) => value);\n\n        const [firsViewDigit, secondViewDigit, thirdViewDigit] = viewDigits;\n\n        if (viewDigits.length !== 3) {\n            this.lastValueValid = false;\n            this._value = null;\n\n            return setTimeout(() => this.control.updateValueAndValidity());\n        }\n\n        date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n        date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n        date[this.thirdDigit!.fullName] = this.thirdDigit!.parse(thirdViewDigit);\n\n        const [digitWithYear, viewDigitWithYear] = [this.firstDigit, this.secondDigit, this.thirdDigit].reduce(\n            (acc: any, digit, index) => (digit!.value === DateParts.year ? [digit, viewDigits[index]] : acc),\n            []\n        );\n\n        if (viewDigitWithYear.length < 3) {\n            date.year += date.year < 30 ? 2000 : 1900;\n        } else if (viewDigitWithYear.length < digitWithYear.length) {\n            this.lastValueValid = false;\n            this._value = null;\n\n            return setTimeout(() => this.control.updateValueAndValidity());\n        }\n\n        const newTimeObj = this.createDateTime(date);\n\n        if (!newTimeObj) {\n            this.lastValueValid = false;\n            this._value = null;\n            this.cvaOnChange(null);\n\n            return setTimeout(() => this.control.updateValueAndValidity());\n        }\n\n        /* Check if the number of days entered does not match the entered month */\n        if (!this.getValidDateOrNull(newTimeObj)) {\n            return null;\n        }\n\n        this.lastValueValid = !!newTimeObj;\n\n        this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);\n\n        this.updateValue(newTimeObj);\n    };\n\n    onChange() {\n        setTimeout(() => {\n            this.dateChange.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n        });\n    }\n\n    /** Handles blur events on the input. */\n    onBlur() {\n        // Reformat the input only if we have a valid value.\n        this.parseOnBlur();\n\n        this.focusChanged(false);\n\n        this.onInput();\n\n        if (this.useLegacyValidation && this.control) {\n            this.control.updateValueAndValidity({ emitEvent: false });\n            (this.control.statusChanges as EventEmitter<string>).emit(this.control.status);\n        }\n    }\n\n    onPaste($event) {\n        $event.preventDefault();\n\n        let rawValue = $event.clipboardData.getData('text');\n\n        if (rawValue.match(/^\\d\\D/)) {\n            rawValue = `0${rawValue}`;\n        }\n\n        rawValue.replace(/[^A-Za-z0-9]+/g, this.separator);\n\n        if (/[a-z]/gi.test(rawValue)) {\n            this.incorrectInput.emit();\n        }\n\n        const match: RegExpMatchArray | null = rawValue.match(/^(?<first>\\d+)\\W(?<second>\\d+)\\W(?<third>\\d+)$/);\n\n        if (!match?.groups?.first || !match?.groups?.second || !match?.groups?.third) {\n            this.setViewValue(rawValue);\n\n            return rawValue;\n        }\n\n        const value = [match.groups.first, match.groups.second, match.groups.third].join(this.separator);\n\n        const newTimeObj = this.getDateFromString(value);\n\n        if (!newTimeObj) {\n            this.setViewValue(value);\n\n            return value;\n        }\n\n        this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat));\n\n        this.updateValue(newTimeObj);\n    }\n\n    toISO8601(value: D): string {\n        return this.adapter.toIso8601(value);\n    }\n\n    /** Refreshes the error state of the input. */\n    updateErrorState() {\n        this.errorStateTracker.updateErrorState();\n    }\n\n    /** Returns the ElementRef of the formField if it exists; otherwise, returns the ElementRef of the input. */\n    getOrigin(): ElementRef {\n        return this.formField ? this.formField.getConnectedOverlayOrigin() : this.elementRef;\n    }\n\n    private saveTimePart(selected: D) {\n        if (!this.value) {\n            return selected;\n        }\n\n        const years = this.adapter.getYear(selected);\n        const month = this.adapter.getMonth(selected);\n        const day = this.adapter.getDate(selected);\n\n        const hours = this.adapter.getHours(this.value);\n        const minutes = this.adapter.getMinutes(this.value);\n        const seconds = this.adapter.getSeconds(this.value);\n        const milliseconds = this.adapter.getMilliseconds(this.value);\n\n        return this.adapter.createDateTime(years, month, day, hours, minutes, seconds, milliseconds);\n    }\n\n    private updateLocaleParams = () => {\n        this.setFormat(this.dateInputFormat);\n\n        this.configuration = this.externalConfiguration || this.localeService?.getParams('datepicker');\n\n        this.value = this.value;\n    };\n\n    private initDefaultParams() {\n        this.configuration = this.externalConfiguration || KBQ_DATEPICKER_DEFAULT_CONFIGURATION;\n    }\n\n    private setFormat(format: string): void {\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        this.separator = format.match(/[aA-zZ]+(?<separator>\\W|\\D)[aA-zZ]+/).groups.separator;\n\n        this.separatorPositions = format\n            .split('')\n            .reduce((acc: any, item, index: number) => (this.separator === item ? [...acc, index + 1] : acc), []);\n\n        this.getDigitPositions(format);\n    }\n\n    private updateValue(newValue: D) {\n        if (!this.adapter.sameDate(newValue, this.value)) {\n            this._value = newValue;\n            this.cvaOnChange(newValue);\n            this.valueChange.emit(newValue);\n            this.dateInput.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n        }\n\n        this.control?.updateValueAndValidity({ emitEvent: false });\n    }\n\n    private isKeyForClose(event: KeyboardEvent): boolean {\n        return (event.altKey && event.keyCode === UP_ARROW) || event.keyCode === ESCAPE;\n    }\n\n    private isKeyForOpen(event: KeyboardEvent): boolean {\n        return event.altKey && event.keyCode === DOWN_ARROW;\n    }\n\n    private isLetterKey(event: KeyboardEvent): boolean {\n        return isLetterKey(event) && !event.ctrlKey && !event.metaKey;\n    }\n\n    private isKeyForByPass(event: KeyboardEvent): boolean {\n        return (\n            (hasModifierKey(event) && (isVerticalMovement(event) || isHorizontalMovement(event))) ||\n            event.ctrlKey ||\n            event.metaKey ||\n            [DELETE, BACKSPACE, TAB].includes(event.keyCode)\n        );\n    }\n\n    private spaceKeyHandler(event: KeyboardEvent) {\n        event.preventDefault();\n\n        if (this.selectionStart === this.selectionEnd) {\n            const value = this.getNewValue(event.key, this.selectionStart as number);\n\n            this.setViewValue(value);\n\n            setTimeout(this.onInput);\n        } else if (this.selectionStart !== this.selectionEnd) {\n            this.selectNextDigit(this.selectionStart as number, true);\n        }\n    }\n\n    private getNewValue(key: string, position: number) {\n        return [this.viewValue.slice(0, position), key, this.viewValue.slice(position)].join('');\n    }\n\n    private setViewValue(value: string, savePosition: boolean = false) {\n        if (savePosition) {\n            const selectionStart = this.selectionStart;\n            const selectionEnd = this.selectionEnd;\n\n            this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n\n            this.selectionStart = selectionStart;\n            this.selectionEnd = selectionEnd;\n        } else {\n            this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n        }\n    }\n\n    private replaceSymbols(value: string): string {\n        return value\n            .split(this.separator)\n            .map((part: string) => part.replace(/^([0-9]+)\\W$/, '0$1'))\n            .join(this.separator);\n    }\n\n    private getDateFromString(timeString: string): D | null {\n        if (!timeString || timeString.length < this.firstDigit!.length) {\n            return null;\n        }\n\n        const date = this.getDefaultValue();\n\n        const viewDigits: string[] = timeString.split(this.separator).map((value: string) => value);\n\n        const [firsViewDigit, secondViewDigit, thirdViewDigit] = viewDigits;\n\n        if (viewDigits.length === 1) {\n            if (/\\D/.test(firsViewDigit) || firsViewDigit.length < this.firstDigit!.length) {\n                return null;\n            }\n\n            date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n\n            if (this.firstDigit!.isDay) {\n                date.month = 1;\n            }\n        } else if (viewDigits.length === 2) {\n            if (firsViewDigit.length < this.firstDigit!.length || secondViewDigit.length < this.secondDigit!.length) {\n                return null;\n            }\n\n            date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n            date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n        } else if (viewDigits.length === 3) {\n            if (\n                firsViewDigit.length < this.firstDigit!.length ||\n                secondViewDigit.length < this.secondDigit!.length ||\n                thirdViewDigit.length < this.thirdDigit!.length\n            ) {\n                return null;\n            }\n\n            const digitViewValue: { date?: number; month?: number; year?: number } = {};\n            const dateDigits = [this.firstDigit, this.secondDigit, this.thirdDigit];\n\n            for (const [index, dateDigit] of dateDigits.entries()) {\n                digitViewValue[dateDigit!.fullName] = parseInt(viewDigits[index]);\n            }\n\n            if (this.value && digitViewValue.month && digitViewValue.month <= this.firstDigit!.maxMonth) {\n                dateDigits.forEach(\n                    (digit) =>\n                        (digit!.maxDays = this.getLastDayFor(\n                            digitViewValue.year as number,\n                            (digitViewValue.month as number) - 1\n                        ))\n                );\n            }\n\n            date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n            date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n            date[this.thirdDigit!.fullName] = this.thirdDigit!.parse(thirdViewDigit);\n        } else {\n            return null;\n        }\n\n        return this.getValidDateOrNull(this.createDateTime(date));\n    }\n\n    private getDefaultValue(): DateTimeObject {\n        const defaultValue = this.value || this.adapter.today();\n\n        return {\n            year: this.adapter.getYear(defaultValue),\n            month: this.adapter.getMonth(defaultValue),\n            date: this.adapter.getDate(defaultValue),\n            hours: this.adapter.getHours(defaultValue),\n            minutes: this.adapter.getMinutes(defaultValue),\n            seconds: this.adapter.getSeconds(defaultValue),\n            milliseconds: this.adapter.getMilliseconds(defaultValue)\n        };\n    }\n\n    private getTimeStringFromDate(value: D | null, timeFormat: string): string {\n        if (!value || !this.adapter.isValid(value)) {\n            return '';\n        }\n\n        return this.adapter.format(value, timeFormat);\n    }\n\n    private getDateEditMetrics(\n        cursorPosition: number\n    ): [modifiedTimePart: DateParts, cursorStartPosition: number, cursorEndPosition: number] {\n        for (const digit of [this.firstDigit, this.secondDigit, this.thirdDigit]) {\n            if (cursorPosition >= digit!.start && cursorPosition <= digit!.end) {\n                return [digit!.value, digit!.start, digit!.end];\n            }\n        }\n\n        return [this.thirdDigit!.value, this.thirdDigit!.start, this.thirdDigit!.end];\n    }\n\n    private isMaxMonth(date: D): boolean {\n        return this.adapter.getMonth(date) === this.getMaxMonth(date);\n    }\n\n    private isMinMonth(date: D): boolean {\n        return this.adapter.getMonth(date) === this.getMinMonth(date);\n    }\n\n    private isMaxYear(date: D): boolean {\n        return this.adapter.getYear(date) === this.getMaxYear();\n    }\n\n    private isMinYear(date: D): boolean {\n        return this.adapter.getYear(date) === this.getMinYear();\n    }\n\n    private getMaxDate(date: D): number {\n        if (this.datepicker?.maxDate && this.isMaxYear(date) && this.isMaxMonth(date)) {\n            return this.adapter.getDate(this.datepicker.maxDate);\n        }\n\n        return this.adapter.getNumDaysInMonth(date);\n    }\n\n    private getMinDate(date: D): number {\n        if (this.datepicker?.minDate && this.isMinYear(date) && this.isMinMonth(date)) {\n            return this.adapter.getDate(this.datepicker.minDate);\n        }\n\n        return 1;\n    }\n\n    private getMaxMonth(date: D): number {\n        if (this.datepicker?.maxDate && this.isMaxYear(date)) {\n            return this.adapter.getMonth(this.datepicker.maxDate);\n        }\n\n        return 11;\n    }\n\n    private getMinMonth(date: D): number {\n        if (this.datepicker?.minDate && this.isMinYear(date)) {\n            return this.adapter.getMonth(this.datepicker.minDate);\n        }\n\n        return 0;\n    }\n\n    private getMaxYear(): number {\n        if (this.datepicker?.maxDate) {\n            return this.adapter.getYear(this.datepicker.maxDate);\n        }\n\n        return MAX_YEAR;\n    }\n\n    private getMinYear(): number {\n        if (this.datepicker?.minDate) {\n            return this.adapter.getYear(this.datepicker.minDate);\n        }\n\n        return 1;\n    }\n\n    private incrementDate(date: D, whatToIncrement: DateParts): D {\n        let year = this.adapter.getYear(date);\n        let month = this.adapter.getMonth(date);\n        let day = this.adapter.getDate(date);\n\n        switch (whatToIncrement) {\n            case DateParts.day:\n                day++;\n\n                if (day > this.getMaxDate(date)) {\n                    if (this.isMaxYear(date) && this.isMaxMonth(date)) {\n                        day = this.getMaxDate(date);\n                    } else if (this.isMinYear(date) && this.isMinMonth(date)) {\n                        day = this.getMinDate(date);\n                    } else {\n                        day = 1;\n                    }\n                }\n\n                break;\n            case DateParts.month: {\n                month++;\n\n                if (month > this.getMaxMonth(date)) {\n                    if (this.isMaxYear(date)) {\n                        month = this.getMaxMonth(date);\n                    } else if (this.isMinYear(date)) {\n                        month = this.getMinMonth(date);\n                    } else {\n                        month = 0;\n                    }\n                }\n\n                const lastDay = this.getLastDayFor(year, month);\n\n                if (day > lastDay) {\n                    day = lastDay;\n                }\n\n                break;\n            }\n            case DateParts.year:\n                year++;\n\n                if (year > this.getMaxYear()) {\n                    year = this.getMaxYear();\n                }\n\n                break;\n            default:\n        }\n\n        return this.createDate(year, month, day);\n    }\n\n    private getLastDayFor(year: number, month: number): number {\n        return this.adapter.getNumDaysInMonth(this.createDate(year, month, 1));\n    }\n\n    private decrementDate(date: D, whatToDecrement: DateParts): D {\n        let year = this.adapter.getYear(date);\n        let month = this.adapter.getMonth(date);\n        let day = this.adapter.getDate(date);\n\n        switch (whatToDecrement) {\n            case DateParts.day:\n                day--;\n\n                if (day < this.getMinDate(date)) {\n                    if (this.isMinYear(date) && this.isMinMonth(date)) {\n                        day = this.getMinDate(date);\n                    } else if (this.isMaxYear(date) && this.isMaxMonth(date)) {\n                        day = this.getMaxDate(date);\n                    } else {\n                        day = this.adapter.getNumDaysInMonth(date);\n                    }\n                }\n\n                break;\n            case DateParts.month: {\n                month--;\n\n                if (month < this.getMinMonth(date)) {\n                    if (year === this.getMinYear()) {\n                        month = this.getMinMonth(date);\n                    } else if (this.isMaxYear(date)) {\n                        month = this.getMaxMonth(date);\n                    } else {\n                        month = 11;\n                    }\n                }\n\n                const lastDay = this.getLastDayFor(year, month);\n\n                if (day > lastDay) {\n                    day = lastDay;\n                }\n\n                break;\n            }\n            case DateParts.year:\n                year--;\n\n                if (year < this.getMinYear()) {\n                    year = this.getMinYear();\n                }\n\n                break;\n            default:\n        }\n\n        return this.createDate(year, month, day);\n    }\n\n    private verticalArrowKeyHandler(keyCode: number): void {\n        if (!this.value) {\n            return;\n        }\n\n        let changedTime;\n\n        const [modifiedTimePart, selectionStart, selectionEnd] = this.getDateEditMetrics(this.selectionStart as number);\n\n        if (keyCode === UP_ARROW) {\n            changedTime = this.incrementDate(this.value, modifiedTimePart);\n        }\n\n        if (keyCode === DOWN_ARROW) {\n            changedTime = this.decrementDate(this.value, modifiedTimePart);\n        }\n\n        this.value = changedTime;\n\n        this.selectionStart = selectionStart;\n        this.selectionEnd = selectionEnd;\n\n        this.cvaOnChange(changedTime);\n\n        this.onChange();\n        this.stateChanges.next();\n    }\n\n    private changeCaretPosition(keyCode: number): void {\n        if (!this.value) {\n            return;\n        }\n\n        let cursorPos = this.selectionStart as number;\n\n        if ([HOME, PAGE_UP].includes(keyCode)) {\n            cursorPos = 0;\n        } else if ([END, PAGE_DOWN].includes(keyCode)) {\n            cursorPos = this.viewValue.length;\n        } else if (keyCode === LEFT_ARROW) {\n            this.fixEmptyDigit();\n\n            cursorPos = cursorPos === 0 ? this.viewValue.length : cursorPos - 1;\n        } else if (keyCode === RIGHT_ARROW) {\n            this.fixEmptyDigit();\n\n            const nextSeparatorPos: number = this.viewValue.indexOf(this.separator, cursorPos);\n\n            cursorPos = nextSeparatorPos ? nextSeparatorPos + 1 : 0;\n        }\n\n        this.selectDigitByCursor(cursorPos);\n    }\n\n    private fixEmptyDigit() {\n        const hasEmptyDigit = this.viewValue\n            .split(this.separator)\n            .map((part) => part.length)\n            .some((item) => !item);\n\n        if (hasEmptyDigit && this.value) {\n            const year = this.adapter.getYear(this.value);\n            const month = this.adapter.getMonth(this.value);\n            const day = this.adapter.getDate(this.value);\n\n            this.value = this.createDate(year, month, day);\n        }\n    }\n\n    private selectDigitByCursor(cursorPos: number): void {\n        setTimeout(() => {\n            const [, selectionStart, selectionEnd] = this.getDateEditMetrics(cursorPos);\n\n            this.selectionStart = selectionStart;\n            this.selectionEnd = selectionEnd;\n        });\n    }\n\n    private selectNextDigitByCursor(cursorPos: number): void {\n        setTimeout(() => {\n            const [, , endPositionOfCurrentDigit] = this.getDateEditMetrics(cursorPos);\n            const [, selectionStart, selectionEnd] = this.getDateEditMetrics(endPositionOfCurrentDigit + 1);\n\n            this.selectionStart = selectionStart;\n            this.selectionEnd = selectionEnd;\n        });\n    }\n\n    private selectNextDigit(cursorPos: number, cycle: boolean = false): void {\n        setTimeout(() => {\n            const lastValue = cycle ? 0 : cursorPos;\n            const nextSeparatorPos: number = this.viewValue.indexOf(this.separator, cursorPos);\n\n            const newCursorPos = nextSeparatorPos > 0 ? nextSeparatorPos + 1 : lastValue;\n\n            const [, selectionStart, selectionEnd] = this.getDateEditMetrics(newCursorPos);\n\n            this.selectionStart = selectionStart;\n            this.selectionEnd = selectionEnd;\n        });\n    }\n\n    /** Checks whether the input is invalid based on the native validation. */\n    private isBadInput(): boolean {\n        const validity = (<HTMLInputElement>this.elementRef.nativeElement).validity;\n\n        return validity && validity.badInput;\n    }\n\n    private cvaOnChange: (value: any) => void = () => {};\n\n    private validatorOnChange = () => {};\n\n    /** The form control validator for whether the input parses. */\n    private parseValidator: ValidatorFn = (): ValidationErrors | null => {\n        return this.focused || this.empty || this.lastValueValid\n            ? null\n            : { kbqDatepickerParse: { text: this.elementRef.nativeElement.value } };\n    };\n\n    /** The form control validator for the min date. */\n    private minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n        const controlValue = this.adapter.deserialize(control.value);\n\n        return !this.min || !controlValue || this.adapter.compareDateTime(this.min, controlValue) <= 0\n            ? null\n            : { kbqDatepickerMin: { min: this.min, actual: controlValue } };\n    };\n\n    /** The form control validator for the max date. */\n    private maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n        const controlValue = this.adapter.deserialize(control.value);\n\n        return !this.max || !controlValue || this.adapter.compareDateTime(this.max, controlValue) >= 0\n            ? null\n            : { kbqDatepickerMax: { max: this.max, actual: controlValue } };\n    };\n\n    /** The form control validator for the date filter. */\n    private filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n        const controlValue = this.adapter.deserialize(control.value);\n\n        return !this.dateFilter || !controlValue || this.dateFilter(controlValue)\n            ? null\n            : { kbqDatepickerFilter: true };\n    };\n\n    /** Formats a value and sets it on the input element. */\n    private formatValue(value: D | null) {\n        const formattedValue = value ? this.adapter.format(value, this.dateInputFormat) : '';\n\n        this.setViewValue(formattedValue);\n    }\n\n    private setControl(control: AbstractControl) {\n        if (this.control) {\n            return;\n        }\n\n        this.control = control;\n\n        this.control.valueChanges.subscribe((value) => (this._value = value));\n\n        // @TODO resolve types\n        this.errorStateTracker.ngControl = { control } as unknown as NgControl;\n    }\n\n    /**\n     * @param obj The object to check.\n     * @returns The given object if it is both a date instance and valid, otherwise null.\n     */\n    private getValidDateOrNull(obj: any): D | null {\n        return this.adapter.isDateInstance(obj) && this.adapter.isValid(obj) ? obj : null;\n    }\n\n    private getDigitPositions(format: string) {\n        this.firstDigit = this.secondDigit = this.thirdDigit = null;\n\n        const formatInLowerCase = format.toLowerCase();\n\n        formatInLowerCase.split('').reduce(\n            ({ prev, length, start }: any, value: string, index: number, arr) => {\n                if (value === this.separator || arr.length - 1 === index) {\n                    if (!this.firstDigit) {\n                        this.firstDigit = new DateDigit(prev, start, length);\n                    } else if (!this.secondDigit) {\n                        this.secondDigit = new DateDigit(prev, start, length);\n                    } else if (!this.thirdDigit) {\n                        this.thirdDigit = new DateDigit(prev, start, arr.length - start);\n                    }\n\n                    length = 0;\n                    start = index + 1;\n                } else {\n                    length++;\n                }\n\n                return { prev: value, length, start };\n            },\n            { length: 0, start: 0 }\n        );\n\n        if (!this.firstDigit || !this.secondDigit || !this.thirdDigit) {\n            Error(`Can' t use this format: ${format}`);\n        }\n    }\n\n    private createDate(year: number, month: number, day: number): D {\n        return this.adapter.createDateTime(\n            year,\n            month,\n            day,\n            this.adapter.getHours(this.value as D),\n            this.adapter.getMinutes(this.value as D),\n            this.adapter.getSeconds(this.value as D),\n            this.adapter.getMilliseconds(this.value as D)\n        );\n    }\n\n    private createDateTime(value: DateTimeObject): D | null {\n        if (Object.values(value).some(isNaN)) {\n            return null;\n        }\n\n        return this.adapter.createDateTime(\n            value.year,\n            value.month - 1,\n            value.date,\n            value.hours,\n            value.minutes,\n            value.seconds,\n            value.milliseconds\n        );\n    }\n\n    private correctCursorPosition() {\n        if (this.selectionStart && this.separatorPositions.includes(this.selectionStart)) {\n            this.selectionStart = this.selectionStart - 1;\n        }\n    }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    DestroyRef,\n    Directive,\n    inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqButton } from '@koobiq/components/button';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { merge, of as observableOf, Subscription } from 'rxjs';\nimport { KbqDatepickerIntl } from './datepicker-intl';\nimport { KbqDatepicker } from './datepicker.component';\n\n/** Can be used to override the icon of a `kbqDatepickerToggle`. */\n@Directive({\n    selector: '[kbqDatepickerToggleIcon]'\n})\nexport class KbqDatepickerToggleIcon {}\n\n@Component({\n    selector: 'kbq-datepicker-toggle-icon',\n    imports: [KbqIconModule],\n    template: `\n        <ng-content select=\"[kbqDatepickerToggleIcon]\">\n            <i\n                color=\"contrast-fade\"\n                kbq-icon-button=\"kbq-calendar-o_16\"\n                [tabindex]=\"-1\"\n                [class.kbq-active]=\"datepicker && datepicker.opened\"\n                [disabled]=\"disabled\"\n                [autoColor]=\"true\"\n            ></i>\n        </ng-content>\n    `,\n    styleUrls: ['./datepicker-toggle.scss'],\n    host: {\n        class: 'kbq-datepicker-toggle-icon',\n        '[attr.aria-expanded]': 'datepicker.opened',\n        '[attr.aria-disabled]': 'disabled',\n        '(click)': 'open($event)'\n    },\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqDatepickerToggleIconComponent<D> implements AfterContentInit, OnChanges, OnDestroy {\n    /** Whether the toggle button is disabled. */\n    @Input()\n    get disabled(): boolean {\n        return this.datepicker.disabled || this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        this._disabled = coerceBooleanProperty(value);\n    }\n\n    private _disabled = false;\n\n    /** Datepicker instance that the button will toggle. */\n    @Input('for') datepicker: KbqDatepicker<D>;\n\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly cdr = inject(ChangeDetectorRef);\n    private stateChangesSubscription = Subscription.EMPTY;\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.datepicker && !changes.datepicker.firstChange) {\n            this.watchStateChanges();\n        }\n    }\n\n    ngAfterContentInit() {\n        this.watchStateChanges();\n    }\n\n    ngOnDestroy() {\n        this.stateChangesSubscription.unsubscribe();\n    }\n\n    /** Open datepicker */\n    open($event: MouseEvent) {\n        if (this.datepicker && !this.disabled) {\n            this.datepicker.open();\n            $event.stopPropagation();\n        }\n    }\n\n    private watchStateChanges() {\n        this.stateChangesSubscription.unsubscribe();\n\n        if (!this.datepicker) return;\n\n        this.stateChangesSubscription = merge(\n            this.datepicker.disabledChange,\n            this.datepicker.datepickerInput.disabledChange,\n            this.datepicker.openedStream,\n            this.datepicker.closedStream\n        )\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.cdr.markForCheck());\n    }\n}\n\n/**\n * @deprecated Use `KbqDatepickerToggleIconComponent` instead\n */\n@Component({\n    selector: 'kbq-datepicker-toggle',\n    templateUrl: 'datepicker-toggle.html',\n    styleUrls: ['datepicker-toggle.scss'],\n    host: {\n        class: 'kbq-datepicker-toggle',\n        '[class.kbq-active]': 'datepicker && datepicker.opened'\n    },\n    exportAs: 'kbqDatepickerToggle',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n    /** Whether the toggle button is disabled. */\n    @Input()\n    get disabled(): boolean {\n        return this._disabled === undefined ? this.datepicker.disabled : this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        this._disabled = coerceBooleanProperty(value);\n    }\n\n    /** Datepicker instance that the button will toggle. */\n    @Input('for') datepicker: KbqDatepicker<D>;\n\n    /** Tabindex for the toggle. */\n    @Input() tabIndex: number | null;\n\n    /** Custom icon set by the consumer. */\n    @ContentChild(KbqDatepickerToggleIcon, { static: false }) customIcon: KbqDatepickerToggleIcon;\n\n    /** Underlying button element. */\n    @ViewChild('button', { static: false }) button: KbqButton;\n    private stateChanges = Subscription.EMPTY;\n\n    private _disabled: boolean;\n\n    constructor(\n        public intl: KbqDatepickerIntl,\n        private changeDetectorRef: ChangeDetectorRef\n    ) {}\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.datepicker) {\n            this.watchStateChanges();\n        }\n    }\n\n    ngAfterContentInit() {\n        this.watchStateChanges();\n    }\n\n    ngOnDestroy() {\n        this.stateChanges.unsubscribe();\n    }\n\n    open(event: Event): void {\n        if (this.datepicker && !this.disabled) {\n            this.datepicker.open();\n            event.stopPropagation();\n        }\n    }\n\n    private watchStateChanges() {\n        const datepickerDisabled = this.datepicker ? this.datepicker.disabledChange : observableOf<boolean>();\n\n        const inputDisabled =\n            this.datepicker && this.datepicker.datepickerInput\n                ? this.datepicker.datepickerInput.disabledChange\n                : observableOf<boolean>();\n\n        const datepickerToggled = this.datepicker\n            ? merge(this.datepicker.openedStream, this.datepicker.closedStream)\n            : observableOf<boolean>();\n\n        this.stateChanges.unsubscribe();\n\n        this.stateChanges = merge(this.intl.changes, datepickerDisabled, inputDisabled, datepickerToggled).subscribe(\n            () => this.changeDetectorRef.markForCheck()\n        );\n    }\n}\n","<!--todo need simplify this-->\n<button\n    #button\n    aria-haspopup=\"true\"\n    kbq-button\n    type=\"button\"\n    class=\"kbq-datepicker-toggle__button\"\n    [attr.aria-label]=\"intl.openCalendarLabel\"\n    [disabled]=\"disabled\"\n    [tabIndex]=\"tabIndex\"\n    (click)=\"open($event)\"\n>\n    @if (!customIcon) {\n        <i\n            color=\"contrast-fade\"\n            kbq-icon-button=\"kbq-calendar-o_16\"\n            class=\"kbq-datepicker-toggle__default-icon\"\n            [tabindex]=\"-1\"\n        ></i>\n    }\n\n    <ng-content select=\"[kbqDatepickerToggleIcon]\" />\n</button>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { NgClass, TitleCasePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqSelectModule } from '@koobiq/components/select';\nimport { KbqCalendarBody } from './calendar-body.component';\nimport { KbqCalendarHeader } from './calendar-header.component';\nimport { KbqCalendar } from './calendar.component';\nimport { KbqDatepickerInput } from './datepicker-input.directive';\nimport { KbqDatepickerIntl } from './datepicker-intl';\nimport {\n    KbqDatepickerToggle,\n    KbqDatepickerToggleIcon,\n    KbqDatepickerToggleIconComponent\n} from './datepicker-toggle.component';\nimport {\n    KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n    KbqDatepicker,\n    KbqDatepickerContent\n} from './datepicker.component';\nimport { KbqMonthView } from './month-view.component';\n\n@NgModule({\n    imports: [\n        KbqButtonModule,\n        OverlayModule,\n        A11yModule,\n        PortalModule,\n        KbqSelectModule,\n        KbqIconModule,\n        KbqDatepickerToggleIconComponent,\n        NgClass,\n        TitleCasePipe,\n        KbqCalendar,\n        KbqCalendarBody,\n        KbqDatepicker,\n        KbqDatepickerContent,\n        KbqDatepickerInput,\n        KbqDatepickerToggle,\n        KbqDatepickerToggleIcon,\n        KbqMonthView,\n        KbqCalendarHeader\n    ],\n    exports: [\n        KbqCalendar,\n        KbqCalendarBody,\n        KbqDatepicker,\n        KbqDatepickerContent,\n        KbqDatepickerInput,\n        KbqDatepickerToggle,\n        KbqDatepickerToggleIcon,\n        KbqDatepickerToggleIconComponent,\n        KbqMonthView,\n        KbqCalendarHeader,\n        KbqFormFieldModule\n    ],\n    providers: [\n        KbqDatepickerIntl,\n        KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\n    ]\n})\nexport class KbqDatepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.KbqDatepickerIntl","i2","i3","i1","observableOf","i2.KbqDatepickerIntl"],"mappings":"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"}