{"version":3,"file":"taiga-ui-addon-mobile-components-mobile-calendar.mjs","sources":["../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.const.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.strategy.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.providers.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.component.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.template.html","../../../projects/addon-mobile/components/mobile-calendar/taiga-ui-addon-mobile-components-mobile-calendar.ts"],"sourcesContent":["import {MONTHS_IN_YEAR} from '@taiga-ui/cdk/date-time';\n\nfunction getCycle(options: {\n    label: number;\n    week: number;\n    yearCycle: number;\n    startingYear: number;\n}): ReadonlyArray<readonly number[]> {\n    return Array.from({length: options.yearCycle}, (_, i) =>\n        Array.from(\n            {length: MONTHS_IN_YEAR},\n            (_, month) =>\n                options.label +\n                weekCount({year: i, month, startingYear: options.startingYear}) *\n                    options.week,\n        ),\n    );\n}\n\nfunction weekCount(options: {year: number; month: number; startingYear: number}): number {\n    const firstOfMonth = new Date(options.year + options.startingYear, options.month, 1);\n    const lastOfMonth = new Date(\n        options.year + options.startingYear,\n        options.month + 1,\n        0,\n    );\n    const days = lastOfMonth.getDate() + (firstOfMonth.getDay() || 7) - 1;\n\n    return Math.ceil(days / 7);\n}\n\nexport const SCROLL_DEBOUNCE_TIME = 80;\nexport const YEARS_IN_ROW = 5;\nexport const STARTING_YEAR = 1900;\nexport const RANGE = 196;\nexport const BUFFER = 500;\nexport const ANDROID_LABEL = 64;\nexport const ANDROID_WEEK = 48;\nexport const IOS_LABEL = 50;\nexport const IOS_WEEK = 50;\nexport const YEARLY_CYCLE = 28;\n\nexport const ANDROID_CYCLE = getCycle({\n    label: ANDROID_LABEL,\n    week: ANDROID_WEEK,\n    yearCycle: YEARLY_CYCLE,\n    startingYear: STARTING_YEAR,\n});\n\nexport const IOS_CYCLE = getCycle({\n    label: IOS_LABEL,\n    week: IOS_WEEK,\n    yearCycle: YEARLY_CYCLE,\n    startingYear: STARTING_YEAR,\n});\n","import {\n    type CdkVirtualScrollViewport,\n    type VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport {MONTHS_IN_YEAR} from '@taiga-ui/cdk/date-time';\nimport {type TuiScrollService} from '@taiga-ui/cdk/services';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {distinctUntilChanged, type Observable, Subject, takeUntil} from 'rxjs';\n\nimport {\n    ANDROID_CYCLE,\n    BUFFER,\n    IOS_CYCLE,\n    RANGE,\n    YEARLY_CYCLE,\n} from './mobile-calendar.const';\n\nconst ANDROID_CYCLE_HEIGHT = reduceCycle(ANDROID_CYCLE);\nconst IOS_CYCLE_HEIGHT = reduceCycle(IOS_CYCLE);\n\nfunction reduceCycle(\n    cycle: ReadonlyArray<readonly number[]>,\n    lastYear = 28,\n    lastMonth = 12,\n): number {\n    return cycle.reduce(\n        (total, year, yearIndex) =>\n            yearIndex <= lastYear\n                ? total +\n                  year.reduce(\n                      (sum, month, monthIndex) =>\n                          yearIndex < lastYear ||\n                          (yearIndex === lastYear && monthIndex < lastMonth)\n                              ? sum + month\n                              : sum,\n                      0,\n                  )\n                : total,\n        0,\n    );\n}\n\n/**\n * This scroll strategy is hard wired with styles for iOS and Android.\n * It is dependent on month height on those platforms and is designed to\n * work for {@link TuiMobileCalendar} with years 1906 to 2102\n */\nexport class TuiMobileCalendarStrategy implements VirtualScrollStrategy {\n    private readonly index$ = new Subject<number>();\n\n    private viewport: CdkVirtualScrollViewport | null = null;\n\n    private readonly destroy$ = new Subject<void>();\n\n    constructor(\n        private readonly isIOS: boolean,\n        private readonly scrollService: TuiScrollService,\n    ) {}\n\n    @tuiPure\n    public get scrolledIndexChange(): Observable<number> {\n        return this.index$.pipe(distinctUntilChanged());\n    }\n\n    public attach(viewport: CdkVirtualScrollViewport): void {\n        const cycle = this.isIOS ? IOS_CYCLE_HEIGHT : ANDROID_CYCLE_HEIGHT;\n\n        this.viewport = viewport;\n        this.viewport.setTotalContentSize(cycle * 7);\n        this.updateRenderedRange(this.viewport);\n    }\n\n    public detach(): void {\n        this.index$.complete();\n        this.viewport = null;\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public onContentScrolled(): void {\n        if (this.viewport) {\n            this.updateRenderedRange(this.viewport);\n        }\n    }\n\n    /** These do not matter for this case */\n    public onDataLengthChanged(): void {}\n    public onContentRendered(): void {}\n    public onRenderedOffsetChanged(): void {}\n\n    public scrollToIndex(index: number, behavior: ScrollBehavior): void {\n        if (!this.viewport) {\n            return;\n        }\n\n        const scrollTop = this.getOffsetForIndex(index);\n\n        if (behavior !== 'smooth') {\n            this.viewport.scrollToOffset(scrollTop, behavior);\n\n            return;\n        }\n\n        this.scrollService\n            .scroll$(this.viewport.elementRef.nativeElement, scrollTop)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe();\n    }\n\n    private getOffsetForIndex(index: number): number {\n        const month = index % MONTHS_IN_YEAR;\n        const year = (index - month) / MONTHS_IN_YEAR;\n\n        return this.computeHeight(year, month);\n    }\n\n    private getIndexForOffset(offset: number): number {\n        const cycle = this.isIOS ? IOS_CYCLE : ANDROID_CYCLE;\n        const cycleHeight = this.isIOS ? IOS_CYCLE_HEIGHT : ANDROID_CYCLE_HEIGHT;\n        const remainder = offset % cycleHeight;\n        const years = ((offset - remainder) / cycleHeight) * YEARLY_CYCLE;\n\n        let accumulator = 0;\n\n        for (let year = 0; year < cycle.length; year++) {\n            for (let month = 0; month < (cycle[year]?.length ?? 0); month++) {\n                accumulator += cycle[year]?.[month] ?? 0;\n\n                if (accumulator - (cycle[year]?.[month] ?? 0) / 2 > remainder) {\n                    return Math.max((years + year) * MONTHS_IN_YEAR + month, 0);\n                }\n            }\n        }\n\n        return RANGE;\n    }\n\n    private computeHeight(year: number, month?: number): number {\n        const cycle = this.isIOS ? IOS_CYCLE : ANDROID_CYCLE;\n        const remainder = year % YEARLY_CYCLE;\n        const remainderHeight = reduceCycle(cycle, remainder, month);\n        const fullCycles = (year - remainder) / YEARLY_CYCLE;\n        const fullCyclesHeight = this.isIOS\n            ? fullCycles * IOS_CYCLE_HEIGHT\n            : fullCycles * ANDROID_CYCLE_HEIGHT;\n\n        return fullCyclesHeight + remainderHeight;\n    }\n\n    private updateRenderedRange(viewport: CdkVirtualScrollViewport): void {\n        const offset = viewport.measureScrollOffset();\n        const {start, end} = viewport.getRenderedRange();\n        const viewportSize = viewport.getViewportSize();\n        const dataLength = viewport.getDataLength();\n        const newRange = {start, end};\n        const firstVisibleIndex = this.getIndexForOffset(offset);\n        const startBuffer = offset - this.getOffsetForIndex(start);\n\n        if (startBuffer < BUFFER && start !== 0) {\n            newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER * 2));\n            newRange.end = Math.min(\n                dataLength,\n                this.getIndexForOffset(offset + viewportSize + BUFFER),\n            );\n        } else {\n            const endBuffer = this.getOffsetForIndex(end) - offset - viewportSize;\n\n            if (endBuffer < BUFFER && end !== dataLength) {\n                newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER));\n                newRange.end = Math.min(\n                    dataLength,\n                    this.getIndexForOffset(offset + viewportSize + BUFFER * 2),\n                );\n            }\n        }\n\n        viewport.setRenderedRange(newRange);\n        viewport.setRenderedContentOffset(this.getOffsetForIndex(newRange.start));\n        this.index$.next(firstVisibleIndex);\n    }\n}\n","import {VIRTUAL_SCROLL_STRATEGY} from '@angular/cdk/scrolling';\nimport {InjectionToken, Optional, type Provider} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {type TuiDayRange} from '@taiga-ui/cdk/date-time';\nimport {tuiWatch} from '@taiga-ui/cdk/observables';\nimport {TuiScrollService} from '@taiga-ui/cdk/services';\nimport {TUI_IS_IOS} from '@taiga-ui/cdk/tokens';\nimport {TUI_CALENDAR_DATE_STREAM} from '@taiga-ui/kit/tokens';\nimport {EMPTY, type Observable} from 'rxjs';\n\nimport {TuiMobileCalendarStrategy} from './mobile-calendar.strategy';\n\n/**\n * Stream for updating value\n */\nexport const TUI_VALUE_STREAM = new InjectionToken<Observable<TuiDayRange | null>>(\n    ngDevMode ? 'TUI_VALUE_STREAM' : '',\n);\n\nexport const TUI_MOBILE_CALENDAR_PROVIDERS: Provider[] = [\n    TuiScrollService,\n    {\n        provide: VIRTUAL_SCROLL_STRATEGY,\n        deps: [TUI_IS_IOS, TuiScrollService],\n        useClass: TuiMobileCalendarStrategy,\n    },\n    {\n        provide: TUI_VALUE_STREAM,\n        deps: [[new Optional(), TUI_CALENDAR_DATE_STREAM]],\n        useFactory: (\n            value$: Observable<TuiDayRange | null> | null,\n        ): Observable<TuiDayRange | null> =>\n            (value$ || EMPTY).pipe(tuiWatch(), takeUntilDestroyed()),\n    },\n];\n","import {\n    CdkFixedSizeVirtualScroll,\n    CdkVirtualForOf,\n    CdkVirtualScrollViewport,\n} from '@angular/cdk/scrolling';\nimport {AsyncPipe, DOCUMENT, NgForOf, NgIf} from '@angular/common';\nimport {\n    type AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    DestroyRef,\n    EventEmitter,\n    inject,\n    Input,\n    NgZone,\n    Output,\n    ViewChild,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TuiMobileCalendarSheet} from '@taiga-ui/addon-mobile/components/mobile-calendar-sheet';\nimport {TuiRipple, TuiTouchable} from '@taiga-ui/addon-mobile/directives';\nimport {TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {\n    MONTHS_IN_YEAR,\n    TUI_FIRST_DAY,\n    TUI_LAST_DAY,\n    TuiDay,\n    TuiDayRange,\n    TuiMonth,\n} from '@taiga-ui/cdk/date-time';\nimport {\n    tuiTypedFromEvent,\n    tuiZonefree,\n    tuiZonefreeScheduler,\n} from '@taiga-ui/cdk/observables';\nimport {TuiMapperPipe} from '@taiga-ui/cdk/pipes/mapper';\nimport {TUI_IS_E2E, TUI_IS_IOS} from '@taiga-ui/cdk/tokens';\nimport {type TuiBooleanHandler, type TuiMapper} from '@taiga-ui/cdk/types';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TUI_CALENDAR_SHEET_OPTIONS} from '@taiga-ui/core/components/calendar';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiMonthPipe} from '@taiga-ui/core/pipes/month';\nimport {TuiOrderWeekDaysPipe} from '@taiga-ui/core/pipes/order-week-days';\nimport {\n    TUI_ANIMATIONS_SPEED,\n    TUI_CLOSE_WORD,\n    TUI_COMMON_ICONS,\n    TUI_SHORT_WEEK_DAYS,\n} from '@taiga-ui/core/tokens';\nimport {tuiGetDuration} from '@taiga-ui/core/utils/miscellaneous';\nimport {\n    TUI_CANCEL_WORD,\n    TUI_CHOOSE_DAY_OR_RANGE_TEXTS,\n    TUI_DONE_WORD,\n} from '@taiga-ui/kit/tokens';\nimport {tuiToggleDay} from '@taiga-ui/kit/utils';\nimport {\n    BehaviorSubject,\n    debounceTime,\n    delay,\n    distinctUntilChanged,\n    filter,\n    identity,\n    map,\n    mergeMap,\n    type MonoTypeOperatorFunction,\n    race,\n    skip,\n    switchMap,\n    take,\n    takeUntil,\n    timer,\n    windowToggle,\n} from 'rxjs';\n\nimport {\n    RANGE,\n    SCROLL_DEBOUNCE_TIME,\n    STARTING_YEAR,\n    YEARS_IN_ROW,\n} from './mobile-calendar.const';\nimport {\n    TUI_MOBILE_CALENDAR_PROVIDERS,\n    TUI_VALUE_STREAM,\n} from './mobile-calendar.providers';\n\n@Component({\n    standalone: true,\n    selector: 'tui-mobile-calendar',\n    imports: [\n        AsyncPipe,\n        CdkFixedSizeVirtualScroll,\n        CdkVirtualForOf,\n        CdkVirtualScrollViewport,\n        NgForOf,\n        NgIf,\n        TuiButton,\n        TuiLink,\n        TuiMapperPipe,\n        TuiMobileCalendarSheet,\n        TuiMonthPipe,\n        TuiOrderWeekDaysPipe,\n        TuiRipple,\n        TuiTouchable,\n    ],\n    templateUrl: './mobile-calendar.template.html',\n    styleUrls: ['./mobile-calendar.style.less'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: TUI_MOBILE_CALENDAR_PROVIDERS,\n    host: {\n        '[class._ios]': 'isIOS',\n        '[class._initialized]': 'initialized',\n        '(mousedown.prevent)': '0',\n    },\n})\nexport class TuiMobileCalendar implements AfterViewInit {\n    @ViewChild('yearsScrollRef')\n    private readonly yearsScrollRef?: CdkVirtualScrollViewport;\n\n    @ViewChild('monthsScrollRef')\n    private readonly monthsScrollRef?: CdkVirtualScrollViewport;\n\n    private readonly value$ = new BehaviorSubject<\n        TuiDay | TuiDayRange | readonly TuiDay[] | null\n    >(null);\n\n    private readonly today = TuiDay.currentLocal();\n    private activeYear = 0;\n    private activeMonth = 0;\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly doc = inject(DOCUMENT);\n    private readonly speed = inject(TUI_ANIMATIONS_SPEED);\n    private readonly ngZone = inject(NgZone);\n\n    protected initialized = false;\n    protected readonly isIOS = inject(TUI_IS_IOS);\n    protected readonly isE2E = inject(TUI_IS_E2E);\n    protected readonly icons = inject(TUI_COMMON_ICONS);\n    protected readonly closeWord$ = inject(TUI_CLOSE_WORD);\n    protected readonly cancelWord$ = inject(TUI_CANCEL_WORD);\n    protected readonly doneWord$ = inject(TUI_DONE_WORD);\n    protected readonly unorderedWeekDays$ = inject(TUI_SHORT_WEEK_DAYS);\n    protected readonly chooseDayOrRangeTexts$ = inject(TUI_CHOOSE_DAY_OR_RANGE_TEXTS, {\n        optional: true,\n    });\n\n    protected readonly years = Array.from({length: RANGE}, (_, i) => i + STARTING_YEAR);\n    protected readonly months = Array.from(\n        {length: RANGE * 12},\n        (_, i) =>\n            new TuiMonth(\n                Math.floor(i / MONTHS_IN_YEAR) + STARTING_YEAR,\n                i % MONTHS_IN_YEAR,\n            ),\n    );\n\n    /**\n     * @deprecated use static DI options instead\n     * ```\n     * tuiCalendarSheetOptionsProvider({rangeMode: boolean})\n     * ```\n     * TODO(v5): delete it\n     */\n    @Input()\n    public single = !inject(TUI_CALENDAR_SHEET_OPTIONS).rangeMode;\n\n    @Input()\n    public multi = false;\n\n    @Input()\n    public min = TUI_FIRST_DAY;\n\n    @Input()\n    public max = TUI_LAST_DAY;\n\n    @Input()\n    public disabledItemHandler: TuiBooleanHandler<TuiDay> = TUI_FALSE_HANDLER;\n\n    @Output()\n    public readonly cancel = new EventEmitter<void>();\n\n    @Output()\n    public readonly confirm = new EventEmitter<\n        TuiDay | TuiDayRange | readonly TuiDay[]\n    >();\n\n    @Output()\n    public readonly valueChange = this.value$.pipe(\n        skip(1),\n        distinctUntilChanged((a, b) => a?.toString() === b?.toString()),\n        map((x) => (!this.single && x instanceof TuiDay ? new TuiDayRange(x, x) : x)),\n    );\n\n    constructor() {\n        inject(TUI_VALUE_STREAM)\n            .pipe(takeUntilDestroyed())\n            .subscribe((value) => {\n                this.value = value;\n            });\n    }\n\n    @Input()\n    public set value(value: TuiDay | TuiDayRange | readonly TuiDay[] | null | undefined) {\n        if (value !== undefined) {\n            this.value$.next(value);\n        }\n    }\n\n    public get value(): TuiDay | TuiDayRange | readonly TuiDay[] | null {\n        return this.value$.value;\n    }\n\n    public ngAfterViewInit(): void {\n        this.activeYear = this.initialYear;\n        this.activeMonth = this.initialMonth;\n\n        // Virtual scroll has not yet rendered items even in ngAfterViewInit\n        this.waitScrolledChange();\n    }\n\n    public setYear(year: number): void {\n        if (this.activeYear === year) {\n            return;\n        }\n\n        this.activeMonth += this.getMonthOffset(year);\n        this.activeYear = year;\n        this.scrollToActiveYear('smooth');\n\n        timer(0, tuiZonefreeScheduler(this.ngZone))\n            .pipe(tuiZonefree(this.ngZone), takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.scrollToActiveMonth());\n    }\n\n    protected get yearWidth(): number {\n        return this.doc.documentElement.clientWidth / YEARS_IN_ROW;\n    }\n\n    protected onClose(): void {\n        this.cancel.emit();\n    }\n\n    protected onConfirm(): void {\n        if (this.value) {\n            this.confirm.emit(this.value);\n        } else {\n            this.cancel.emit();\n        }\n    }\n\n    protected onDayClick(day: TuiDay): void {\n        if (this.single) {\n            this.value = day;\n        } else if (this.isMultiValue(this.value)) {\n            this.value = tuiToggleDay(this.value, day);\n        } else if (this.value instanceof TuiDay) {\n            this.value = TuiDayRange.sort(this.value, day);\n        } else if (this.value instanceof TuiDayRange) {\n            this.value = day;\n        } else if (!this.value) {\n            this.value = day;\n        }\n    }\n\n    protected getState(index: number): 'active' | 'adjacent' | null {\n        if (this.isYearActive(index)) {\n            return 'active';\n        }\n\n        if (this.isYearActive(index - 1) || this.isYearActive(index + 1)) {\n            return 'adjacent';\n        }\n\n        return null;\n    }\n\n    protected onMonthChange(month: number): void {\n        // Skipping initial callback where index === 0\n        if (!month || this.activeMonth === month) {\n            return;\n        }\n\n        this.activeMonth = month;\n\n        const activeYear = this.monthToYear(month);\n\n        if (activeYear === this.activeYear) {\n            return;\n        }\n\n        this.activeYear = activeYear;\n        this.scrollToActiveYear();\n    }\n\n    protected readonly disabledItemHandlerMapper: TuiMapper<\n        [TuiBooleanHandler<TuiDay>, TuiDay, TuiDay],\n        TuiBooleanHandler<TuiDay>\n    > = (disabledItemHandler, min, max) => (item) =>\n        item.dayBefore(min) ||\n        (max !== null && item.dayAfter(max)) ||\n        disabledItemHandler(item);\n\n    private get initialYear(): number {\n        if (!this.value) {\n            return this.today.year;\n        }\n\n        if (this.value instanceof TuiDay) {\n            return this.value.year;\n        }\n\n        if (!(this.value instanceof TuiDayRange)) {\n            return this.value?.[0]?.year ?? this.today.year;\n        }\n\n        return this.value.to.year;\n    }\n\n    private get initialMonth(): number {\n        if (!this.value) {\n            return this.today.month + (this.today.year - STARTING_YEAR) * MONTHS_IN_YEAR;\n        }\n\n        if (this.value instanceof TuiDay) {\n            return this.value.month + (this.value.year - STARTING_YEAR) * MONTHS_IN_YEAR;\n        }\n\n        if (!(this.value instanceof TuiDayRange)) {\n            return (\n                (this.value?.[0]?.month ?? this.today.month) +\n                ((this.value?.[0]?.year ?? this.today.year) - STARTING_YEAR) *\n                    MONTHS_IN_YEAR\n            );\n        }\n\n        return (\n            this.value.to.month + (this.value.to.year - STARTING_YEAR) * MONTHS_IN_YEAR\n        );\n    }\n\n    private isMultiValue(day: unknown): day is readonly TuiDay[] | undefined {\n        return !(day instanceof TuiDay) && !(day instanceof TuiDayRange) && this.multi;\n    }\n\n    private getYearsViewportSize(): number {\n        return this.yearsScrollRef?.getViewportSize() || 0;\n    }\n\n    private updateViewportDimension(): void {\n        this.yearsScrollRef?.checkViewportSize();\n        this.monthsScrollRef?.checkViewportSize();\n    }\n\n    private lateInit(): MonoTypeOperatorFunction<number> {\n        return this.getYearsViewportSize() > 0 ? identity : delay(200);\n    }\n\n    private waitScrolledChange(): void {\n        this.updateViewportDimension();\n\n        this.monthsScrollRef?.scrolledIndexChange\n            .pipe(\n                delay(tuiGetDuration(this.speed)),\n                this.lateInit(),\n                take(1),\n                takeUntilDestroyed(this.destroyRef),\n            )\n            .subscribe(() => {\n                this.initialized = true;\n                this.updateViewportDimension();\n                this.initYearScroll();\n                this.initMonthScroll();\n                this.scrollToActiveYear();\n                this.scrollToActiveMonth();\n            });\n    }\n\n    private initYearScroll(): void {\n        const {yearsScrollRef} = this;\n\n        if (!yearsScrollRef) {\n            return;\n        }\n\n        const touchstart$ = tuiTypedFromEvent(\n            yearsScrollRef.elementRef.nativeElement,\n            'touchstart',\n            {passive: true},\n        );\n        const touchend$ = tuiTypedFromEvent(\n            yearsScrollRef.elementRef.nativeElement,\n            'touchend',\n            {passive: true},\n        );\n        const click$ = tuiTypedFromEvent(\n            yearsScrollRef.elementRef.nativeElement,\n            'click',\n        );\n\n        // Refresh activeYear\n        yearsScrollRef\n            .elementScrolled()\n            .pipe(\n                // Ignore smooth scroll resulting from click on the exact year\n                windowToggle(touchstart$, () => click$),\n                mergeMap((x) => x),\n                // Delay is required to run months scroll in the next frame to prevent flicker\n                delay(0),\n                map(\n                    () =>\n                        Math.round(\n                            yearsScrollRef.measureScrollOffset() / this.yearWidth,\n                        ) +\n                        Math.floor(YEARS_IN_ROW / 2) +\n                        STARTING_YEAR,\n                ),\n                filter((activeYear) => activeYear !== this.activeYear),\n                takeUntilDestroyed(this.destroyRef),\n            )\n            .subscribe((activeYear) => {\n                this.activeMonth += this.getMonthOffset(activeYear);\n                this.activeYear = activeYear;\n                this.scrollToActiveMonth();\n            });\n\n        // Smooth scroll to activeYear after scrolling is done\n        touchstart$\n            .pipe(\n                switchMap(() => touchend$),\n                switchMap(() =>\n                    race(\n                        yearsScrollRef.elementScrolled(),\n                        timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone)),\n                    ).pipe(\n                        debounceTime(\n                            SCROLL_DEBOUNCE_TIME * 2,\n                            tuiZonefreeScheduler(this.ngZone),\n                        ),\n                        take(1),\n                        takeUntil(touchstart$),\n                    ),\n                ),\n                takeUntilDestroyed(this.destroyRef),\n            )\n            .subscribe(() => this.scrollToActiveYear('smooth'));\n    }\n\n    private initMonthScroll(): void {\n        const {monthsScrollRef} = this;\n\n        if (!monthsScrollRef) {\n            return;\n        }\n\n        const touchstart$ = tuiTypedFromEvent(\n            monthsScrollRef.elementRef.nativeElement,\n            'touchstart',\n            {passive: true},\n        );\n        const touchend$ = tuiTypedFromEvent(\n            monthsScrollRef.elementRef.nativeElement,\n            'touchend',\n            {passive: true},\n        );\n\n        // Smooth scroll to the closest month after scrolling is done\n        touchstart$\n            .pipe(\n                switchMap(() => touchend$),\n                switchMap(() =>\n                    race(\n                        monthsScrollRef.elementScrolled(),\n                        timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone)),\n                    ).pipe(\n                        debounceTime(\n                            SCROLL_DEBOUNCE_TIME * 2,\n                            tuiZonefreeScheduler(this.ngZone),\n                        ),\n                        take(1),\n                        takeUntil(touchstart$),\n                    ),\n                ),\n                takeUntilDestroyed(this.destroyRef),\n            )\n            .subscribe(() => this.scrollToActiveMonth('smooth'));\n    }\n\n    private scrollToActiveYear(behavior: ScrollBehavior = 'auto'): void {\n        this.yearsScrollRef?.scrollToIndex(\n            Math.max(this.activeYear - STARTING_YEAR - 2, 0),\n            this.isE2E ? 'auto' : behavior,\n        );\n    }\n\n    private scrollToActiveMonth(behavior: ScrollBehavior = 'auto'): void {\n        this.monthsScrollRef?.scrollToIndex(\n            this.activeMonth,\n            this.isE2E ? 'auto' : behavior,\n        );\n    }\n\n    private isYearActive(index: number): boolean {\n        return index === this.activeYear;\n    }\n\n    private monthToYear(month: number): number {\n        return Math.ceil((month + 1) / MONTHS_IN_YEAR) + STARTING_YEAR - 1;\n    }\n\n    private getMonthOffset(year: number): number {\n        return (year - this.activeYear) * MONTHS_IN_YEAR;\n    }\n}\n","<header\n    *ngIf=\"chooseDayOrRangeTexts$ | async as texts\"\n    class=\"t-header\"\n>\n    <button\n        appearance=\"\"\n        automation-id=\"tui-mobile-calendar__cancel\"\n        tuiIconButton\n        tuiRipple\n        type=\"button\"\n        class=\"t-close\"\n        [iconStart]=\"icons.close\"\n        [style.border-radius.%]=\"100\"\n        (click)=\"onClose()\"\n    >\n        {{ closeWord$ | async }}\n    </button>\n    <button\n        tuiLink\n        tuiTouchable=\"opacity\"\n        type=\"button\"\n        class=\"t-link t-link_close\"\n        (click)=\"onClose()\"\n    >\n        {{ cancelWord$ | async }}\n    </button>\n    <h2\n        automation-id=\"tui-mobile-calendar__label\"\n        class=\"t-label\"\n    >\n        {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n    </h2>\n    <button\n        automation-id=\"tui-mobile-calendar__confirm\"\n        tuiLink\n        tuiTouchable=\"opacity\"\n        type=\"button\"\n        class=\"t-link\"\n        (click)=\"onConfirm()\"\n    >\n        {{ doneWord$ | async }}\n    </button>\n</header>\n<cdk-virtual-scroll-viewport\n    #yearsScrollRef\n    orientation=\"horizontal\"\n    class=\"t-years\"\n    [itemSize]=\"yearWidth\"\n>\n    <div class=\"t-years-wrapper\">\n        <button\n            *cdkVirtualFor=\"let index of years\"\n            type=\"button\"\n            class=\"t-year\"\n            [attr.data-state]=\"getState(index)\"\n            (click)=\"setYear(index)\"\n        >\n            {{ index }}\n        </button>\n    </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n    <div\n        *ngFor=\"let day of unorderedWeekDays$ | tuiOrderWeekDays | async\"\n        class=\"t-day\"\n    >\n        {{ day }}\n    </div>\n</div>\n<cdk-virtual-scroll-viewport\n    #monthsScrollRef\n    itemSize=\"354\"\n    maxBufferPx=\"5000\"\n    minBufferPx=\"0\"\n    class=\"t-months\"\n    (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n    <section\n        *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n        class=\"t-month-wrapper\"\n    >\n        <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n        <tui-mobile-calendar-sheet\n            class=\"t-calendar\"\n            [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n            [month]=\"month\"\n            [single]=\"single\"\n            [value]=\"value\"\n            (dayClick)=\"onDayClick($event)\"\n        />\n    </section>\n</cdk-virtual-scroll-viewport>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}