{"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 TuiInputDate}\n * - {@link TuiInputDateRange}\n * - {@link TuiInputDateTime}\n */\nexport const DATE_FILLER_LENGTH = 10;\n/**\n * @internal\n * Used in {@link TuiInputDateRange}\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 = 'dd/mm/yyyy',\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 'mm/dd/yyyy':\n                return {\n                    day: Number.parseInt(date.slice(3, 5), 10),\n                    month: Number.parseInt(date.slice(0, 2), 10) - 1,\n                    year: Number.parseInt(date.slice(6, 10), 10),\n                };\n\n            case 'yyyy/mm/dd':\n                return {\n                    day: Number.parseInt(date.slice(8, 10), 10),\n                    month: Number.parseInt(date.slice(5, 7), 10) - 1,\n                    year: Number.parseInt(date.slice(0, 4), 10),\n                };\n\n            case 'dd/mm/yyyy':\n            default:\n                return {\n                    day: Number.parseInt(date.slice(0, 2), 10),\n                    month: Number.parseInt(date.slice(3, 5), 10) - 1,\n                    year: Number.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 (dd/mm/yyyy | mm/dd/yyyy | yyyy/mm/dd)\n     * @return normalized date\n     */\n    public static normalizeParse(\n        rawDate: string,\n        dateMode: TuiDateMode = 'dd/mm/yyyy',\n    ): 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 ymdString 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(ymdString: string): TuiDay {\n        const {day, month, year} = this.parseRawDateString(ymdString, 'yyyy/mm/dd');\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 equal 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        const monthDaysCount = TuiMonth.getMonthDaysCount(\n            months,\n            TuiYear.isLeapYear(years),\n        );\n        const currentMonthDaysCount = TuiMonth.getMonthDaysCount(\n            this.month,\n            TuiYear.isLeapYear(years),\n        );\n        let days = day;\n\n        if (this.day >= monthDaysCount) {\n            days += this.day - (currentMonthDaysCount - monthDaysCount);\n        } else if (\n            currentMonthDaysCount < monthDaysCount &&\n            this.day === currentMonthDaysCount\n        ) {\n            days += this.day + (monthDaysCount - currentMonthDaysCount);\n        } else {\n            days += this.day;\n        }\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 'mm/dd/yyyy':\n                return `${mm}${separator}${dd}${separator}${yyyy}`;\n            case 'yyyy/mm/dd':\n                return `${yyyy}${separator}${mm}${separator}${dd}`;\n            case 'dd/mm/yyyy':\n            default:\n                return `${dd}${separator}${mm}${separator}${yyyy}`;\n        }\n    }\n\n    public override toString(\n        dateFormat: TuiDateMode = 'dd/mm/yyyy',\n        separator = '.',\n    ): 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 = 'dd/mm/yyyy',\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 = 'dd/mm/yyyy',\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} 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 &&\n            console.assert(\n                Number.isInteger(milliseconds) && milliseconds >= 0,\n                'Milliseconds must be a non-negative integer.',\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?:\n            | 'HH AA'\n            | 'HH:MM AA'\n            | 'HH:MM:SS AA'\n            | 'HH:MM:SS.MSS AA'\n            | 'HH:MM:SS.MSS'\n            | 'HH:MM:SS'\n            | 'HH:MM'\n            | 'HH'\n            | 'MM:SS.MSS'\n            | 'MM:SS'\n            | 'SS.MSS',\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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"}