{"version":3,"file":"taiga-ui-cdk-date-time.mjs","sources":["../../../projects/cdk/date-time/date-clamp.ts","../../../projects/cdk/date-time/date-time.ts","../../../projects/cdk/date-time/date-fillers.ts","../../../projects/cdk/date-time/day-of-week.ts","../../../projects/cdk/date-time/month-number.ts","../../../projects/cdk/date-time/year.ts","../../../projects/cdk/date-time/month.ts","../../../projects/cdk/date-time/day.ts","../../../projects/cdk/date-time/month-range.ts","../../../projects/cdk/date-time/day-range.ts","../../../projects/cdk/date-time/days.const.ts","../../../projects/cdk/date-time/time.ts","../../../projects/cdk/date-time/taiga-ui-cdk-date-time.ts"],"sourcesContent":["import {type TuiYear} from './year';\n\nexport function tuiDateClamp<T extends TuiYear>(date: T, min?: T, max?: T): T {\n    if (max && max < date) {\n        return max;\n    }\n\n    if (min && min > date) {\n        return min;\n    }\n\n    return date;\n}\n","import {CHAR_EN_DASH, CHAR_NO_BREAK_SPACE} from '@taiga-ui/cdk/constants';\n\nexport const DAYS_IN_WEEK = 7;\n\nexport const DAYS_IN_NORMAL_YEAR = 365;\n\nexport const DAYS_IN_LEAP_YEAR = 366;\n\nexport const MONTHS_IN_YEAR = 12;\n\nexport const MIN_DAY = 1;\n\nexport const MIN_MONTH = 0;\n\nexport const MAX_MONTH = 11;\n\nexport const MIN_YEAR = 0;\n\nexport const MAX_YEAR = 9999;\n\nexport const MAX_DISPLAYED_YEAR = 2099;\n\nexport const RANGE_SEPARATOR_CHAR = `${CHAR_NO_BREAK_SPACE}${CHAR_EN_DASH}${CHAR_NO_BREAK_SPACE}`;\n\nexport const MILLISECONDS_IN_SECOND = 1000;\n\nexport const SECONDS_IN_MINUTE = 60;\n\nexport const MINUTES_IN_HOUR = 60;\n\nexport const HOURS_IN_DAY = 24;\n\nexport const MILLISECONDS_IN_MINUTE = MILLISECONDS_IN_SECOND * SECONDS_IN_MINUTE;\n\nexport const MILLISECONDS_IN_HOUR = MILLISECONDS_IN_MINUTE * MINUTES_IN_HOUR;\n\nexport const MILLISECONDS_IN_DAY = MILLISECONDS_IN_HOUR * HOURS_IN_DAY;\n","import {RANGE_SEPARATOR_CHAR} from './date-time';\n\n/**\n * @internal 'dd.mm.yyyy'.length\n * Used in:\n * - {@link TuiInputDateComponent}\n * - {@link TuiInputDateRangeComponent}\n * - {@link TuiInputDateTimeComponent}\n */\nexport const DATE_FILLER_LENGTH = 10;\n/**\n * @internal\n * Used in {@link TuiInputDateRangeComponent}\n */\nexport const DATE_RANGE_FILLER_LENGTH =\n    2 * DATE_FILLER_LENGTH + RANGE_SEPARATOR_CHAR.length;\n","export const TuiDayOfWeek = {\n    Sunday: 0,\n    Monday: 1,\n    Tuesday: 2,\n    Wednesday: 3,\n    Thursday: 4,\n    Friday: 5,\n    Saturday: 6,\n} as const;\n","export const TuiMonthNumber = {\n    January: 0,\n    February: 1,\n    March: 2,\n    April: 3,\n    May: 4,\n    June: 5,\n    July: 6,\n    August: 7,\n    September: 8,\n    October: 9,\n    November: 10,\n    December: 11,\n} as const;\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\nimport {tuiInRange, tuiNormalizeToIntNumber} from '@taiga-ui/cdk/utils/math';\n\nimport {MAX_YEAR, MIN_YEAR} from './date-time';\nimport {type TuiYearLike} from './types';\n\n/**\n * Immutable year object\n * @nosideeffects\n */\nexport class TuiYear implements TuiYearLike {\n    constructor(public readonly year: number) {\n        ngDevMode && console.assert(TuiYear.isValidYear(year));\n    }\n\n    /**\n     * Checks year for validity\n     */\n    public static isValidYear(year: number): boolean {\n        return Number.isInteger(year) && tuiInRange(year, MIN_YEAR, MAX_YEAR + 1);\n    }\n\n    /**\n     * Check if passed year is a leap year\n     */\n    public static isLeapYear(year: number): boolean {\n        ngDevMode && console.assert(TuiYear.isValidYear(year));\n\n        return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n    }\n\n    /**\n     * Returns amount of leap years from year 0 to the passed one\n     */\n    public static getAbsoluteLeapYears(year: number): number {\n        ngDevMode && console.assert(TuiYear.isValidYear(year));\n\n        return Math.ceil(year / 400) + (Math.ceil(year / 4) - Math.ceil(year / 100));\n    }\n\n    public static lengthBetween(from: TuiYear, to: TuiYear): number {\n        return to.year - from.year;\n    }\n\n    /**\n     * Normalizes year by clamping it between min and max years\n     */\n    public static normalizeYearPart(year: number): number {\n        return tuiNormalizeToIntNumber(year, MIN_YEAR, MAX_YEAR);\n    }\n\n    public get formattedYear(): string {\n        return String(this.year).padStart(4, '0');\n    }\n\n    public get isLeapYear(): boolean {\n        return TuiYear.isLeapYear(this.year);\n    }\n\n    /**\n     * Returns amount of leap years from year 0 to current\n     */\n    public get absoluteLeapYears(): number {\n        return TuiYear.getAbsoluteLeapYears(this.year);\n    }\n\n    /**\n     * Passed year is after current\n     */\n    public yearBefore({year}: TuiYear): boolean {\n        return this.year < year;\n    }\n\n    /**\n     * Passed year is the same or after current\n     */\n    public yearSameOrBefore({year}: TuiYear): boolean {\n        return this.year <= year;\n    }\n\n    /**\n     * Passed year is the same as current\n     */\n    public yearSame({year}: TuiYear): boolean {\n        return this.year === year;\n    }\n\n    /**\n     * Passed year is either the same of before the current\n     */\n    public yearSameOrAfter({year}: TuiYear): boolean {\n        return this.year >= year;\n    }\n\n    /**\n     * Passed year is before current\n     */\n    public yearAfter({year}: TuiYear): boolean {\n        return this.year > year;\n    }\n\n    /**\n     * Immutably offsets year\n     */\n    public append({year = 0}: TuiYearLike): TuiYear {\n        ngDevMode && console.assert(Number.isInteger(year));\n\n        const resultYear = this.year + year;\n\n        ngDevMode && console.assert(TuiYear.isValidYear(resultYear));\n\n        return new TuiYear(resultYear);\n    }\n\n    public toString(): string {\n        return this.formattedYear;\n    }\n\n    public valueOf(): number {\n        return this.year;\n    }\n\n    /**\n     * Returns the primitive value of the given Date object.\n     * Depending on the argument, the method can return either a string or a number.\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive\n     */\n    public [Symbol.toPrimitive](hint: string): number | string {\n        return Date.prototype[Symbol.toPrimitive].call(this, hint);\n    }\n\n    public toJSON(): string {\n        return this.formattedYear;\n    }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nimport {tuiInRange, tuiNormalizeToIntNumber} from '@taiga-ui/cdk/utils/math';\n\nimport {MAX_MONTH, MIN_MONTH, MONTHS_IN_YEAR} from './date-time';\nimport {TuiMonthNumber} from './month-number';\nimport {type TuiMonthLike} from './types';\nimport {TuiYear} from './year';\n\n/**\n * Immutable object consisting of year and month\n */\nexport class TuiMonth extends TuiYear implements TuiMonthLike {\n    /**\n     * @param year\n     * @param month (starting with 0)\n     */\n    constructor(\n        year: number,\n        public readonly month: number,\n    ) {\n        super(year);\n        ngDevMode && console.assert(TuiMonth.isValidMonth(year, month));\n    }\n\n    /**\n     * Tests month and year for validity\n     */\n    public static isValidMonth(year: number, month: number): boolean {\n        return TuiYear.isValidYear(year) && TuiMonth.isValidMonthPart(month);\n    }\n\n    /**\n     * Returns number of days in a month\n     */\n    public static getMonthDaysCount(month: number, isLeapYear: boolean): number {\n        ngDevMode && console.assert(TuiMonth.isValidMonthPart(month));\n\n        switch (month) {\n            case TuiMonthNumber.April:\n            case TuiMonthNumber.June:\n            case TuiMonthNumber.November:\n            case TuiMonthNumber.September:\n                return 30;\n            case TuiMonthNumber.February:\n                return isLeapYear ? 29 : 28;\n            default:\n                return 31;\n        }\n    }\n\n    /**\n     * Returns current month and year based on local time zone\n     * @nosideeffects\n     */\n    public static currentLocal(): TuiMonth {\n        const nativeDate = new Date();\n\n        return new TuiMonth(nativeDate.getFullYear(), nativeDate.getMonth());\n    }\n\n    /**\n     * Returns current month and year based on UTC\n     */\n    public static currentUtc(): TuiMonth {\n        const nativeDate = new Date();\n\n        return new TuiMonth(nativeDate.getUTCFullYear(), nativeDate.getUTCMonth());\n    }\n\n    public static override lengthBetween(from: TuiMonth, to: TuiMonth): number {\n        const absoluteFrom = from.month + from.year * 12;\n        const absoluteTo = to.month + to.year * 12;\n\n        return absoluteTo - absoluteFrom;\n    }\n\n    /**\n     * Normalizes number by clamping it between min and max month\n     */\n    public static normalizeMonthPart(month: number): number {\n        return tuiNormalizeToIntNumber(month, MIN_MONTH, MAX_MONTH);\n    }\n\n    /**\n     * Tests month for validity\n     */\n    private static isValidMonthPart(month: number): boolean {\n        return Number.isInteger(month) && tuiInRange(month, MIN_MONTH, MAX_MONTH + 1);\n    }\n\n    public get formattedMonthPart(): string {\n        return String(this.month + 1).padStart(2, '0');\n    }\n\n    /**\n     * Returns days in a month\n     */\n    public get daysCount(): number {\n        return TuiMonth.getMonthDaysCount(this.month, this.isLeapYear);\n    }\n\n    /**\n     * Passed month and year are after current\n     */\n    public monthBefore(another: TuiMonth): boolean {\n        return (\n            this.yearBefore(another) ||\n            (this.yearSame(another) && this.month < another.month)\n        );\n    }\n\n    /**\n     * Passed month and year are after or the same as current\n     */\n    public monthSameOrBefore(another: TuiMonth): boolean {\n        return (\n            this.yearBefore(another) ||\n            (this.yearSame(another) && this.month <= another.month)\n        );\n    }\n\n    /**\n     * Passed month and year are the same as current\n     */\n    public monthSame(another: TuiMonth): boolean {\n        return this.yearSame(another) && this.month === another.month;\n    }\n\n    /**\n     * Passed month and year are either before or equal to current\n     */\n    public monthSameOrAfter(another: TuiMonth): boolean {\n        return (\n            this.yearAfter(another) ||\n            (this.yearSame(another) && this.month >= another.month)\n        );\n    }\n\n    /**\n     * Passed month and year are before current\n     */\n    public monthAfter(another: TuiMonth): boolean {\n        return (\n            this.yearAfter(another) ||\n            (this.yearSame(another) && this.month > another.month)\n        );\n    }\n\n    /**\n     * Immutably alters current month and year by passed offset\n     *\n     * @param offset\n     * @return new month and year object as a result of offsetting current\n     */\n    public override append({year = 0, month = 0}: TuiMonthLike): TuiMonth {\n        const totalMonths = (this.year + year) * MONTHS_IN_YEAR + this.month + month;\n\n        return new TuiMonth(\n            Math.floor(totalMonths / MONTHS_IN_YEAR),\n            totalMonths % MONTHS_IN_YEAR,\n        );\n    }\n\n    public override toString(): string {\n        return `${this.formattedMonthPart}.${this.formattedYear}`;\n    }\n\n    public override valueOf(): number {\n        return this.toLocalNativeDate().valueOf();\n    }\n\n    public override toJSON(): string {\n        return `${super.toJSON()}-${this.formattedMonthPart}`;\n    }\n\n    /**\n     * Returns native {@link Date} based on local time zone\n     */\n    public toLocalNativeDate(): Date {\n        const date = new Date(this.year, this.month);\n\n        // for years less than 1900\n        date.setFullYear(this.year);\n\n        return date;\n    }\n\n    /**\n     * Returns native {@link Date} based on UTC\n     */\n    public toUtcNativeDate(): Date {\n        return new Date(Date.UTC(this.year, this.month));\n    }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nimport {tuiInRange, tuiNormalizeToIntNumber} from '@taiga-ui/cdk/utils/math';\n\nimport {DATE_FILLER_LENGTH} from './date-fillers';\nimport {MIN_DAY, MONTHS_IN_YEAR} from './date-time';\nimport {TuiDayOfWeek} from './day-of-week';\nimport {TuiMonth} from './month';\nimport {TuiMonthNumber} from './month-number';\nimport {type TuiDateMode, type TuiDayLike} from './types';\nimport {TuiYear} from './year';\n\n/**\n * Immutable date object, consisting of day, month and year\n */\nexport class TuiDay extends TuiMonth {\n    /**\n     * @param year\n     * @param month (starting with 0)\n     * @param day\n     */\n    constructor(\n        year: number,\n        month: number,\n        public readonly day: number,\n    ) {\n        super(year, month);\n        ngDevMode && console.assert(TuiDay.isValidDay(year, month, day));\n    }\n\n    /**\n     * Creates {@link TuiDay} from native {@link Date} based on local time zone\n     */\n    public static fromLocalNativeDate(date: Date): TuiDay {\n        return new TuiDay(date.getFullYear(), date.getMonth(), date.getDate());\n    }\n\n    /**\n     * Creates {@link TuiDay} from native {@link Date} using UTC\n     */\n    public static fromUtcNativeDate(date: Date): TuiDay {\n        return new TuiDay(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n    }\n\n    /**\n     * Check validity of year, month and day\n     *\n     * @param year\n     * @param month\n     * @param day\n     * @return boolean validity\n     */\n    public static isValidDay(year: number, month: number, day: number): boolean {\n        return (\n            TuiMonth.isValidMonth(year, month) &&\n            Number.isInteger(day) &&\n            tuiInRange(\n                day,\n                MIN_DAY,\n                TuiMonth.getMonthDaysCount(month, TuiYear.isLeapYear(year)) + 1,\n            )\n        );\n    }\n\n    /**\n     * Current day based on local time zone\n     */\n    public static override currentLocal(): TuiDay {\n        const nativeDate = new Date();\n        const year = nativeDate.getFullYear();\n        const month = nativeDate.getMonth();\n        const day = nativeDate.getDate();\n\n        return new TuiDay(year, month, day);\n    }\n\n    /**\n     * Returns current day based on UTC\n     */\n    public static override currentUtc(): TuiDay {\n        const nativeDate = new Date();\n        const year = nativeDate.getUTCFullYear();\n        const month = nativeDate.getUTCMonth();\n        const day = nativeDate.getUTCDate();\n\n        return new TuiDay(year, month, day);\n    }\n\n    /**\n     * Calculates {@link TuiDay} normalizing year, month and day. {@link NaN} is turned into minimal value.\n     *\n     * @param year any year value, including invalid\n     * @param month any month value, including invalid (months start with 0)\n     * @param day any day value, including invalid\n     * @return normalized date\n     */\n    public static normalizeOf(year: number, month: number, day: number): TuiDay {\n        const normalizedYear = TuiYear.normalizeYearPart(year);\n        const normalizedMonth = TuiMonth.normalizeMonthPart(month);\n        const normalizedDay = TuiDay.normalizeDayPart(\n            day,\n            normalizedMonth,\n            normalizedYear,\n        );\n\n        return new TuiDay(normalizedYear, normalizedMonth, normalizedDay);\n    }\n\n    public static override lengthBetween(from: TuiDay, to: TuiDay): number {\n        return Math.round(\n            (to.toLocalNativeDate().getTime() - from.toLocalNativeDate().getTime()) /\n                (1000 * 60 * 60 * 24),\n        );\n    }\n\n    public static parseRawDateString(\n        date: string,\n        dateMode: TuiDateMode = 'DMY',\n    ): {day: number; month: number; year: number} {\n        ngDevMode &&\n            console.assert(\n                date.length === DATE_FILLER_LENGTH,\n                '[parseRawDateString]: wrong date string length',\n            );\n\n        switch (dateMode) {\n            case 'MDY':\n                return {\n                    day: parseInt(date.slice(3, 5), 10),\n                    month: parseInt(date.slice(0, 2), 10) - 1,\n                    year: parseInt(date.slice(6, 10), 10),\n                };\n\n            case 'YMD':\n                return {\n                    day: parseInt(date.slice(8, 10), 10),\n                    month: parseInt(date.slice(5, 7), 10) - 1,\n                    year: parseInt(date.slice(0, 4), 10),\n                };\n\n            case 'DMY':\n            default:\n                return {\n                    day: parseInt(date.slice(0, 2), 10),\n                    month: parseInt(date.slice(3, 5), 10) - 1,\n                    year: parseInt(date.slice(6, 10), 10),\n                };\n        }\n    }\n\n    // TODO: Move month and year related code corresponding classes\n    /**\n     * Parsing a string with date with normalization\n     *\n     * @param rawDate date string\n     * @param dateMode date format of the date string (DMY | MDY | YMD)\n     * @return normalized date\n     */\n    public static normalizeParse(rawDate: string, dateMode: TuiDateMode = 'DMY'): TuiDay {\n        const {day, month, year} = this.parseRawDateString(rawDate, dateMode);\n\n        return TuiDay.normalizeOf(year, month, day);\n    }\n\n    /**\n     * Parsing a date stringified in a toJSON format\n     * @param yearMonthDayString date string in format of YYYY-MM-DD\n     * @return date\n     * @throws exceptions if any part of the date is invalid\n     */\n    public static jsonParse(yearMonthDayString: string): TuiDay {\n        const {day, month, year} = this.parseRawDateString(yearMonthDayString, 'YMD');\n\n        if (\n            !TuiMonth.isValidMonth(year, month) ||\n            !Number.isInteger(day) ||\n            !tuiInRange(\n                day,\n                MIN_DAY,\n                TuiMonth.getMonthDaysCount(month, TuiYear.isLeapYear(year)) + 1,\n            )\n        ) {\n            throw new TuiInvalidDayException(year, month, day);\n        }\n\n        return new TuiDay(year, month, day);\n    }\n\n    public static normalizeDayPart(day: number, month: number, year: number): number {\n        ngDevMode && console.assert(TuiMonth.isValidMonth(year, month));\n\n        const monthDaysCount = TuiMonth.getMonthDaysCount(\n            month,\n            TuiYear.isLeapYear(year),\n        );\n\n        return tuiNormalizeToIntNumber(day, 1, monthDaysCount);\n    }\n\n    public get formattedDayPart(): string {\n        return String(this.day).padStart(2, '0');\n    }\n\n    public get isWeekend(): boolean {\n        const dayOfWeek = this.dayOfWeek(false);\n\n        return dayOfWeek === TuiDayOfWeek.Saturday || dayOfWeek === TuiDayOfWeek.Sunday;\n    }\n\n    /**\n     * Returns day of week\n     *\n     * @param startFromMonday whether week starts from Monday and not from Sunday\n     * @return day of week (from 0 to 6)\n     */\n    public dayOfWeek(startFromMonday = true): number {\n        const dayOfWeek = startFromMonday\n            ? this.toLocalNativeDate().getDay() - 1\n            : this.toLocalNativeDate().getDay();\n\n        return dayOfWeek < 0 ? 6 : dayOfWeek;\n    }\n\n    /**\n     * Passed date is after current\n     */\n    public dayBefore(another: TuiDay): boolean {\n        return (\n            this.monthBefore(another) ||\n            (this.monthSame(another) && this.day < another.day)\n        );\n    }\n\n    /**\n     * Passed date is after or equals to current\n     */\n    public daySameOrBefore(another: TuiDay): boolean {\n        return (\n            this.monthBefore(another) ||\n            (this.monthSame(another) && this.day <= another.day)\n        );\n    }\n\n    /**\n     * Passed date is the same as current\n     */\n    public daySame(another: TuiDay): boolean {\n        return this.monthSame(another) && this.day === another.day;\n    }\n\n    /**\n     * Passed date is either before or the same as current\n     */\n    public daySameOrAfter(another: TuiDay): boolean {\n        return (\n            this.monthAfter(another) ||\n            (this.monthSame(another) && this.day >= another.day)\n        );\n    }\n\n    /**\n     * Passed date is before current\n     */\n    public dayAfter(another: TuiDay): boolean {\n        return (\n            this.monthAfter(another) ||\n            (this.monthSame(another) && this.day > another.day)\n        );\n    }\n\n    /**\n     * Clamping date between two limits\n     *\n     * @param min\n     * @param max\n     * @return clamped date\n     */\n    public dayLimit(min: TuiDay | null, max: TuiDay | null): TuiDay {\n        if (min !== null && this.dayBefore(min)) {\n            return min;\n        }\n\n        if (max !== null && this.dayAfter(max)) {\n            return max;\n        }\n\n        return this;\n    }\n\n    /**\n     * Immutably alters current day by passed offset\n     *\n     * If resulting month has more days than original one, date is rounded to the maximum day\n     * in the resulting month. Offset of days will be calculated based on the resulted year and month\n     * to not interfere with parent classes methods\n     *\n     * @param offset\n     * @return new date object as a result of offsetting current\n     */\n    public override append({year = 0, month = 0, day = 0}: TuiDayLike): TuiDay {\n        const totalMonths = (this.year + year) * MONTHS_IN_YEAR + this.month + month;\n        let years = Math.floor(totalMonths / MONTHS_IN_YEAR);\n        let months = totalMonths % MONTHS_IN_YEAR;\n\n        let days =\n            Math.min(\n                this.day,\n                TuiMonth.getMonthDaysCount(months, TuiYear.isLeapYear(years)),\n            ) + day;\n\n        while (days > TuiMonth.getMonthDaysCount(months, TuiYear.isLeapYear(years))) {\n            days -= TuiMonth.getMonthDaysCount(months, TuiYear.isLeapYear(years));\n\n            if (months === TuiMonthNumber.December) {\n                years++;\n                months = TuiMonthNumber.January;\n            } else {\n                months++;\n            }\n        }\n\n        while (days < MIN_DAY) {\n            if (months === TuiMonthNumber.January) {\n                years--;\n                months = TuiMonthNumber.December;\n            } else {\n                months--;\n            }\n\n            days += TuiMonth.getMonthDaysCount(months, TuiYear.isLeapYear(years));\n        }\n\n        return new TuiDay(years, months, days);\n    }\n\n    /**\n     * Returns formatted whole date\n     */\n    public getFormattedDay(dateFormat: TuiDateMode, separator: string): string {\n        ngDevMode &&\n            console.assert(\n                separator.length === 1,\n                'Separator should consist of only 1 symbol',\n            );\n\n        const dd = this.formattedDayPart;\n        const mm = this.formattedMonthPart;\n        const yyyy = this.formattedYear;\n\n        switch (dateFormat) {\n            case 'MDY':\n                return `${mm}${separator}${dd}${separator}${yyyy}`;\n            case 'YMD':\n                return `${yyyy}${separator}${mm}${separator}${dd}`;\n            case 'DMY':\n            default:\n                return `${dd}${separator}${mm}${separator}${yyyy}`;\n        }\n    }\n\n    public override toString(dateFormat: TuiDateMode = 'DMY', separator = '.'): string {\n        return this.getFormattedDay(dateFormat, separator);\n    }\n\n    public override toJSON(): string {\n        return `${super.toJSON()}-${this.formattedDayPart}`;\n    }\n\n    /**\n     * Returns native {@link Date} based on local time zone\n     */\n    public override toLocalNativeDate(): Date {\n        const date = super.toLocalNativeDate();\n\n        date.setDate(this.day);\n\n        return date;\n    }\n\n    /**\n     * Returns native {@link Date} based on UTC\n     */\n    public override toUtcNativeDate(): Date {\n        return new Date(Date.UTC(this.year, this.month, this.day));\n    }\n}\n\nexport class TuiInvalidDayException extends Error {\n    constructor(year: number, month: number, day: number) {\n        super(ngDevMode ? `Invalid day: ${year}-${month}-${day}` : '');\n    }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nimport {RANGE_SEPARATOR_CHAR} from './date-time';\nimport {type TuiMonth} from './month';\n\n/**\n * An immutable range of two {@link TuiMonth} objects\n */\nexport class TuiMonthRange {\n    constructor(\n        public readonly from: TuiMonth,\n        public readonly to: TuiMonth,\n    ) {\n        ngDevMode && console.assert(from.monthSameOrBefore(to));\n    }\n\n    public static sort(month1: TuiMonth, month2: TuiMonth): TuiMonthRange {\n        return month1.monthSameOrBefore(month2)\n            ? new TuiMonthRange(month1, month2)\n            : new TuiMonthRange(month2, month1);\n    }\n\n    public get isSingleMonth(): boolean {\n        return this.from.monthSame(this.to);\n    }\n\n    public monthSame(another: TuiMonthRange): boolean {\n        return this.from.monthSame(another.from) && this.to.monthSame(another.to);\n    }\n\n    public toString(): string {\n        return `${this.from}${RANGE_SEPARATOR_CHAR}${this.to}`;\n    }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nimport {DATE_FILLER_LENGTH, DATE_RANGE_FILLER_LENGTH} from './date-fillers';\nimport {RANGE_SEPARATOR_CHAR} from './date-time';\nimport {TuiDay} from './day';\nimport {TuiMonthRange} from './month-range';\nimport {type TuiDateMode} from './types';\n\n/**\n * An immutable range of two {@link TuiDay} objects\n */\nexport class TuiDayRange extends TuiMonthRange {\n    constructor(\n        public override readonly from: TuiDay,\n        public override readonly to: TuiDay,\n    ) {\n        super(from, to);\n\n        ngDevMode && console.assert(from.daySameOrBefore(to));\n    }\n\n    /**\n     * Creates range from two days after sorting them\n     *\n     * @param day1\n     * @param day2\n     * @return new range with sorted days\n     */\n    public static override sort(day1: TuiDay, day2: TuiDay): TuiDayRange {\n        return day1.daySameOrBefore(day2)\n            ? new TuiDayRange(day1, day2)\n            : new TuiDayRange(day2, day1);\n    }\n\n    /**\n     * Parse and correct a day range in string format\n     *\n     * @param rangeString a string of dates in a format dd.mm.yyyy - dd.mm.yyyy\n     * @param dateMode {@link TuiDateMode}\n     * @return normalized day range object\n     */\n    public static normalizeParse(\n        rangeString: string,\n        dateMode: TuiDateMode = 'DMY',\n    ): TuiDayRange {\n        const leftDay = TuiDay.normalizeParse(\n            rangeString.slice(0, DATE_FILLER_LENGTH),\n            dateMode,\n        );\n\n        if (rangeString.length < DATE_RANGE_FILLER_LENGTH) {\n            return new TuiDayRange(leftDay, leftDay);\n        }\n\n        return TuiDayRange.sort(\n            leftDay,\n            TuiDay.normalizeParse(\n                rangeString.slice(DATE_FILLER_LENGTH + RANGE_SEPARATOR_CHAR.length),\n                dateMode,\n            ),\n        );\n    }\n\n    public get isSingleDay(): boolean {\n        return this.from.daySame(this.to);\n    }\n\n    /**\n     * Tests ranges for identity\n     *\n     * @param another second range to test against current\n     * @return `true` if days are identical\n     */\n    public daySame(another: TuiDayRange): boolean {\n        return this.from.daySame(another.from) && this.to.daySame(another.to);\n    }\n\n    /**\n     * Locks range between two days included, or limits from one side if the other is null\n     *\n     * @param min\n     * @param max\n     * @return range — clamped range\n     */\n    public dayLimit(min: TuiDay | null, max: TuiDay | null): TuiDayRange {\n        return new TuiDayRange(this.from.dayLimit(min, max), this.to.dayLimit(min, max));\n    }\n\n    /**\n     * Human readable format.\n     */\n    public getFormattedDayRange(dateFormat: TuiDateMode, dateSeparator: string): string {\n        const from = this.from.getFormattedDay(dateFormat, dateSeparator);\n        const to = this.to.getFormattedDay(dateFormat, dateSeparator);\n\n        return `${from}${RANGE_SEPARATOR_CHAR}${to}`;\n    }\n\n    public override toString(\n        dateFormat: TuiDateMode = 'DMY',\n        dateSeparator = '.',\n    ): string {\n        return this.getFormattedDayRange(dateFormat, dateSeparator);\n    }\n\n    public toArray(): readonly TuiDay[] {\n        const {from, to} = this;\n        const arr = [];\n\n        for (\n            const day = from.toUtcNativeDate();\n            day <= to.toUtcNativeDate();\n            day.setDate(day.getDate() + 1)\n        ) {\n            arr.push(TuiDay.fromLocalNativeDate(day));\n        }\n\n        return arr;\n    }\n}\n","import {\n    MAX_DISPLAYED_YEAR,\n    MAX_MONTH,\n    MAX_YEAR,\n    MIN_DAY,\n    MIN_MONTH,\n    MIN_YEAR,\n} from './date-time';\nimport {TuiDay} from './day';\n\nexport const TUI_FIRST_DAY = new TuiDay(MIN_YEAR, MIN_MONTH, MIN_DAY);\n\nexport const TUI_LAST_DAY = new TuiDay(MAX_YEAR, MAX_MONTH, 31);\n\nexport const TUI_LAST_DISPLAYED_DAY = new TuiDay(MAX_DISPLAYED_YEAR, MAX_MONTH, 31);\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nimport {CHAR_NO_BREAK_SPACE} from '@taiga-ui/cdk/constants';\nimport {tuiInRange} from '@taiga-ui/cdk/utils/math';\n\nimport {\n    HOURS_IN_DAY,\n    MILLISECONDS_IN_DAY,\n    MILLISECONDS_IN_HOUR,\n    MILLISECONDS_IN_MINUTE,\n    MILLISECONDS_IN_SECOND,\n    MINUTES_IN_HOUR,\n    SECONDS_IN_MINUTE,\n} from './date-time';\nimport {type TuiTimeLike, type TuiTimeMode} from './types';\n\n/**\n * Immutable time object with hours, minutes, seconds and ms\n */\nexport class TuiTime implements TuiTimeLike {\n    constructor(\n        public readonly hours: number,\n        public readonly minutes: number,\n        public readonly seconds = 0,\n        public readonly ms = 0,\n    ) {\n        ngDevMode &&\n            console.assert(\n                // Currently `TuiTime` could have hours more than 23\n                // in order to not break current behaviour of `isValidTime` the logic is duplicated\n                Number.isInteger(hours) &&\n                    tuiInRange(hours, 0, Infinity) &&\n                    Number.isInteger(minutes) &&\n                    tuiInRange(minutes, 0, MINUTES_IN_HOUR) &&\n                    Number.isInteger(seconds) &&\n                    tuiInRange(seconds, 0, SECONDS_IN_MINUTE) &&\n                    Number.isInteger(ms) &&\n                    tuiInRange(ms, 0, 1000),\n                'Time must be real, but got:',\n                hours,\n                minutes,\n                seconds,\n                ms,\n            );\n    }\n\n    /**\n     * Checks if time is valid\n     */\n    public static isValidTime(\n        hours: number,\n        minutes: number,\n        seconds = 0,\n        ms = 0,\n    ): boolean {\n        return (\n            Number.isInteger(hours) &&\n            tuiInRange(hours, 0, HOURS_IN_DAY) &&\n            Number.isInteger(minutes) &&\n            tuiInRange(minutes, 0, MINUTES_IN_HOUR) &&\n            Number.isInteger(seconds) &&\n            tuiInRange(seconds, 0, SECONDS_IN_MINUTE) &&\n            Number.isInteger(ms) &&\n            tuiInRange(ms, 0, 1000)\n        );\n    }\n\n    /**\n     * Current UTC time.\n     */\n    public static current(): TuiTime {\n        return TuiTime.fromAbsoluteMilliseconds(Date.now() % MILLISECONDS_IN_DAY);\n    }\n\n    /**\n     * Current time in local timezone\n     */\n    public static currentLocal(): TuiTime {\n        const date = new Date();\n\n        return TuiTime.fromAbsoluteMilliseconds(\n            (Date.now() - date.getTimezoneOffset() * MILLISECONDS_IN_MINUTE) %\n                MILLISECONDS_IN_DAY,\n        );\n    }\n\n    /**\n     * Calculates TuiTime from milliseconds\n     */\n    public static fromAbsoluteMilliseconds(milliseconds: number): TuiTime {\n        ngDevMode && console.assert(Number.isInteger(milliseconds));\n        ngDevMode &&\n            console.assert(\n                tuiInRange(milliseconds, 0, MILLISECONDS_IN_DAY),\n                `Milliseconds must be below ${MILLISECONDS_IN_DAY} (milliseconds in a day).`,\n            );\n\n        const hours = Math.floor(milliseconds / MILLISECONDS_IN_HOUR);\n        const minutes = Math.floor(\n            (milliseconds % MILLISECONDS_IN_HOUR) / MILLISECONDS_IN_MINUTE,\n        );\n        const seconds =\n            Math.floor(\n                ((milliseconds % MILLISECONDS_IN_HOUR) % MILLISECONDS_IN_MINUTE) / 1000,\n            ) || 0;\n        const ms =\n            Math.floor(\n                ((milliseconds % MILLISECONDS_IN_HOUR) % MILLISECONDS_IN_MINUTE) % 1000,\n            ) || 0;\n\n        return new TuiTime(hours, minutes, seconds, ms);\n    }\n\n    /**\n     * Parses string into TuiTime object\n     */\n    public static fromString(time: string): TuiTime {\n        const hours = this.parseHours(time);\n        const minutes = Number(time.slice(3, 5)) || 0;\n        const seconds = Number(time.slice(6, 8)) || 0;\n        const ms = Number(time.slice(9, 12)) || 0;\n\n        return new TuiTime(hours, minutes, seconds, ms);\n    }\n\n    /**\n     * Converts Date object into TuiTime\n     * @param date\n     */\n    public static fromLocalNativeDate(date: Date): TuiTime {\n        return new TuiTime(\n            date.getHours(),\n            date.getMinutes(),\n            date.getSeconds(),\n            date.getMilliseconds(),\n        );\n    }\n\n    private static parseMeridiemPeriod(time: string): 'AM' | 'PM' | null {\n        return (\n            (/[AP]M/.exec(time.toUpperCase().replaceAll(/\\W/g, ''))?.[0] as\n                | 'AM'\n                | 'PM') || null\n        );\n    }\n\n    private static parseHours(time: string): number {\n        const hours = Number(time.slice(0, 2));\n        const meridiem = this.parseMeridiemPeriod(time);\n\n        if (!meridiem) {\n            return hours;\n        }\n\n        if (hours === 12) {\n            return meridiem === 'AM' ? 0 : 12;\n        }\n\n        return meridiem === 'PM' ? hours + 12 : hours;\n    }\n\n    /**\n     * Shifts time by hours and minutes\n     */\n    public shift({hours = 0, minutes = 0, seconds = 0, ms = 0}: TuiTimeLike): TuiTime {\n        const totalMs =\n            this.toAbsoluteMilliseconds() +\n            hours * MILLISECONDS_IN_HOUR +\n            minutes * MILLISECONDS_IN_MINUTE +\n            seconds * MILLISECONDS_IN_SECOND +\n            ms;\n        const totalSeconds = Math.floor(totalMs / MILLISECONDS_IN_SECOND);\n        const totalMinutes = Math.floor(totalSeconds / SECONDS_IN_MINUTE);\n        const totalHours = Math.floor(totalMinutes / MINUTES_IN_HOUR);\n\n        return new TuiTime(\n            this.normalizeToRange(totalHours, HOURS_IN_DAY),\n            this.normalizeToRange(totalMinutes, MINUTES_IN_HOUR),\n            this.normalizeToRange(totalSeconds, SECONDS_IN_MINUTE),\n            this.normalizeToRange(totalMs, MILLISECONDS_IN_SECOND),\n        );\n    }\n\n    /**\n     * Converts TuiTime to string\n     */\n    public toString(\n        mode?: TuiTimeMode, // TODO(v5): remove usage of `TuiTimeMode` and inline all modes as huge union type\n    ): string {\n        const needAddMs = mode?.startsWith('HH:MM:SS.MSS') || (!mode && this.ms > 0);\n        const needAddSeconds =\n            needAddMs || mode?.startsWith('HH:MM:SS') || (!mode && this.seconds > 0);\n        const {hours = this.hours, meridiem = ''} = mode?.includes('AA')\n            ? this.toTwelveHour(this.hours)\n            : {};\n        const hhMm = `${this.formatTime(hours)}:${this.formatTime(this.minutes)}`;\n        const ss = needAddSeconds ? `:${this.formatTime(this.seconds)}` : '';\n        const mss = needAddMs ? `.${this.formatTime(this.ms, 3)}` : '';\n        const aa = meridiem && `${CHAR_NO_BREAK_SPACE}${meridiem}`;\n\n        return `${hhMm}${ss}${mss}${aa}`;\n    }\n\n    public valueOf(): number {\n        return this.toAbsoluteMilliseconds();\n    }\n\n    /**\n     * Returns the primitive value of the given Date object.\n     * Depending on the argument, the method can return either a string or a number.\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive\n     */\n    public [Symbol.toPrimitive](hint: string): number | string {\n        return Date.prototype[Symbol.toPrimitive].call(this, hint);\n    }\n\n    /**\n     * Converts TuiTime to milliseconds\n     */\n    public toAbsoluteMilliseconds(): number {\n        return (\n            this.hours * MILLISECONDS_IN_HOUR +\n            this.minutes * MILLISECONDS_IN_MINUTE +\n            this.seconds * 1000 +\n            this.ms\n        );\n    }\n\n    private formatTime(time: number, digits = 2): string {\n        return String(time).padStart(digits, '0');\n    }\n\n    private toTwelveHour(hours: number): {hours: number; meridiem: string} {\n        const meridiem = hours >= 12 ? 'PM' : 'AM';\n\n        if (hours === 0 || hours === 12) {\n            return {meridiem, hours: 12};\n        }\n\n        return {meridiem, hours: hours % 12};\n    }\n\n    private normalizeToRange(value: number, modulus: number): number {\n        return ((value % modulus) + modulus) % modulus;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}