{"version":3,"file":"fundamental-ngx-core-datetime.mjs","sources":["../../../../libs/core/datetime/datetime-adapter.ts","../../../../libs/core/datetime/datetime-formats.ts","../../../../libs/core/datetime/datetime-format.pipes.ts","../../../../libs/core/datetime/datetime-utils.ts","../../../../libs/core/datetime/fd-date.utils.ts","../../../../libs/core/datetime/fd-date.ts","../../../../libs/core/datetime/fd-date-formats.ts","../../../../libs/core/datetime/fd-datetime-adapter.ts","../../../../libs/core/datetime/fd-datetime-pipes.module.ts","../../../../libs/core/datetime/fd-datetime.module.ts","../../../../libs/core/datetime/provide-date-time.ts","../../../../libs/core/datetime/fundamental-ngx-core-datetime.ts"],"sourcesContent":["import { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * Datetime Adapter is an abstract class that must be implemented by each adapter.\n * It's used to encapsulate a date/time manipulations as result\n * others places that uses it remain date type agnostic.\n *\n */\nexport abstract class DatetimeAdapter<D> {\n    /**\n     * Gets the year component of the given date.\n     * @param date The date to extract the year from.\n     * @returns The year number.\n     */\n    abstract getYear(date: D): number;\n\n    /**\n     * Gets the month of the given date.\n     * @param date The date to extract the month from.\n     * @returns The month number (min 1, max 12).\n     */\n    abstract getMonth(date: D): number;\n\n    /**\n     * Gets the day of month of the given date.\n     * @param date The date to extract the date of the month from.\n     * @returns The date number (min 1, max 31).\n     */\n    abstract getDate(date: D): number;\n\n    /**\n     * Gets the day of the week component of the given date.\n     * @param date The date to extract the day of the week from.\n     * @returns The day of week number (min 1, max 7, 1 = Sunday).\n     */\n    abstract getDayOfWeek(date: D): number;\n\n    /**\n     * Gets hours of the given date.\n     * @param date The date to extract the hours from.\n     * @returns The hours number (min 0, max 23).\n     */\n    abstract getHours(date: D): number;\n\n    /**\n     * Gets minutes of the given date.\n     * @param date The date to extract the minutes from.\n     * @returns The minutes number (min 0, max 59).\n     */\n    abstract getMinutes(date: D): number;\n\n    /**\n     * Gets seconds of the given date.\n     * @param date The date to extract the seconds from.\n     * @returns The seconds number (min 0, max 59).\n     */\n    abstract getSeconds(date: D): number;\n\n    /**\n     * Set hours.\n     * @param date The date to set hours to.\n     * @param hours\n     * @returns The new date instance.\n     */\n    abstract setHours(date: D, hours: number): D;\n\n    /**\n     * Set minutes.\n     * @param date The date to set minutes to.\n     * @param minutes\n     * @returns The new date instance.\n     */\n    abstract setMinutes(date: D, minutes: number): D;\n\n    /**\n     * Set seconds.\n     * @param date The date to set seconds to.\n     * @param seconds\n     * @returns The new date instance.\n     */\n    abstract setSeconds(date: D, seconds: number): D;\n\n    /**\n     * Gets week number of the given date\n     * @param date The date to extract the week number from.\n     * @returns The week number (min 1, max 53).\n     */\n    abstract getWeekNumber(date: D): number;\n\n    /**\n     * Gets a list of names for the months.\n     * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n     * @returns An ordered list of all month names, starting with January.\n     */\n    abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n    /**\n     * Gets a list of names for the dates of the month.\n     * @returns An ordered list of all date of the month names, starting with '1'.\n     */\n    abstract getDateNames(): string[];\n\n    /**\n     * Gets a list of names for the days of the week.\n     * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n     * @returns An ordered list of all weekday names, starting with Sunday.\n     */\n    abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n    /**\n     * Gets the name for the year of the given date.\n     * @param date The date to get the year name from.\n     * @returns The name of the given year (e.g. '2020').\n     */\n    abstract getYearName(date: D): string;\n\n    /**\n     * Gets the name for the week of the given date.\n     * @param date The date to get the week name from.\n     * @returns The name of the the week.\n     */\n    abstract getWeekName(date: D): string;\n\n    /**\n     * Gets a list of hour names.\n     * @returns An ordered list of all hours (0 - 24).\n     */\n    abstract getHourNames(options: { twoDigit: boolean; meridian: boolean }): string[];\n\n    /**\n     * Gets a list of minute names.\n     * @param options Configuration options for minute names\n     * @param options.twoDigit Whether to format minutes with two digits (e.g., '05' vs '5')\n     * @param options.minuteStep The interval between minutes (e.g., 1 for every minute, 5 for 5-minute intervals, 15 for 15-minute intervals). Defaults to 1.\n     * @returns An ordered list of minute names based on the step interval.\n     */\n    abstract getMinuteNames(options: { twoDigit: boolean; minuteStep?: number }): string[];\n\n    /**\n     * Gets a list of second names.\n     * @returns An ordered list of all hours (0 - 24).\n     */\n    abstract getSecondNames(options: { twoDigit: boolean }): string[];\n\n    /**\n     * Gets a list of day periods.\n     * @returns List of day periods, starts from AM ['AM', 'PM'].\n     */\n    abstract getDayPeriodNames(): [string, string];\n\n    /**\n     * Gets the first day of the week.\n     * @returns The first day of the week (0-indexed, 0 = Sunday).\n     */\n    abstract getFirstDayOfWeek(): number;\n\n    /**\n     * Gets the number of days in the month of the given date.\n     * @param date The date whose month should be checked.\n     * @returns The number of days in the month of the given date.\n     */\n    abstract getNumDaysInMonth(date: D): number;\n\n    /**\n     * Parses a date from a user-provided value.\n     * @param value The value to parse.\n     * @param parseFormat The expected format of the value being parsed\n     *     (type is implementation-dependent).\n     * @returns The parsed date.\n     */\n    abstract parse(value: unknown, parseFormat: unknown): D | null;\n\n    /**\n     * Formats a date as a string according to the given format.\n     * @param date The value to format.\n     * @param displayFormat The format to use to display the date as a string.\n     * @returns The formatted date string.\n     */\n    abstract format(date: Nullable<D>, displayFormat: unknown): string;\n\n    /**\n     * Creates a date with the given year, month, and date.\n     * @param year The full year of the date. (e.g. 1989).\n     * @param month The month of the date (1 = January). Must be an integer 1 - 12.\n     * @param date The month date. Must be an integer 1 - length of the given month.\n     * @returns The new date, or null if invalid.\n     */\n    abstract createDate(year: number, month?: number, date?: number): D;\n\n    /**\n     * Gets today's date where time value is set to 0\n     * @returns Today's date.\n     */\n    abstract today(): D;\n\n    /**\n     * Gets date and time at this moment.\n     * @returns date and time at this moment.\n     */\n    abstract now(): D;\n\n    /**\n     * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n     * calendar for each year and then finding the closest date in the new month. For example when\n     * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n     * @param date The date to add years to.\n     * @param years The number of years to add (may be negative).\n     * @returns A new date equal to the given one with the specified number of years added.\n     */\n    abstract addCalendarYears(date: D, years: number): D;\n\n    /**\n     * Adds the given number of months to the date. Months are counted as if flipping a page on the\n     * calendar for each month and then finding the closest date in the new month. For example when\n     * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n     * @param date The date to add months to.\n     * @param months The number of months to add (may be negative).\n     * @returns A new date equal to the given one with the specified number of months added.\n     */\n    abstract addCalendarMonths(date: D, months: number): D;\n\n    /**\n     * Adds the given number of days to the date. Days are counted as if moving one cell on the\n     * calendar for each day.\n     * @param date The date to add days to.\n     * @param days The number of days to add (may be negative).\n     * @returns A new date equal to the given one with the specified number of days added.\n     */\n    abstract addCalendarDays(date: D, days: number): D;\n\n    /**\n     * Clones the given date.\n     * @param date The date to clone\n     * @returns A new date equal to the given date.\n     */\n    abstract clone(date: D): D;\n\n    /**\n     * Method that check equality of 2 dates.\n     * Does not take into account time value\n     * @param date1 The first date to compare with\n     * @param date2 The second date to compare with\n     * @returns If dates are equal or not\n     */\n    abstract datesEqual(date1: Nullable<D>, date2: Nullable<D>): boolean;\n\n    /**\n     * Method that check equality of 2 dates taking into account time value as well\n     * @param date1 The first date to compare with\n     * @param date2 The second date to compare with\n     * @returns If dates are equal or not\n     */\n    abstract dateTimesEqual(date1: Nullable<D>, date2: Nullable<D>): boolean;\n\n    /**\n     * Method to check if date is between 2 dates\n     * @param dateToCheck The date to check if it's in a range\n     * @param startDate The start date of a range\n     * @param endDate The end date of a range\n     * @returns If date is in a given date range\n     */\n    abstract isBetween(dateToCheck: D, startDate: D, endDate: D): boolean;\n\n    /**\n     * Method that checks validity of current date.\n     * @param date The date to be checked\n     */\n    abstract isValid(date: Nullable<D>): date is D;\n\n    /**\n     * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n     * This method is used to generate date strings that are compatible with native HTML attributes\n     * such as the `min` or `max` attribute of an `<input>`.\n     * @param date The date to get the ISO date string for.\n     * @returns The ISO date string date string.\n     */\n    abstract toIso8601(date: D): string;\n\n    /**\n     * Format option includes period info.\n     * @param displayFormat The format to use to display the date as a string.\n     * @returns If time format includes period info.\n     */\n    abstract isTimeFormatIncludesDayPeriod(displayFormat: unknown): boolean;\n\n    /**\n     * Format option includes hours info.\n     * @param displayFormat The format to use to display the date as a string.\n     * @returns If time format includes minutes info.\n     */\n    abstract isTimeFormatIncludesHours(displayFormat: unknown): boolean;\n\n    /**\n     * Format option includes minutes info.\n     * @param displayFormat The format to use to display the date as a string.\n     * @returns If time format includes minutes info.\n     */\n    abstract isTimeFormatIncludesMinutes(displayFormat: unknown): boolean;\n\n    /**\n     * Format option includes seconds info.\n     * @param displayFormat The format to use to display the date as a string.\n     * @returns If time format includes seconds info.\n     */\n    abstract isTimeFormatIncludesSeconds(displayFormat: unknown): boolean;\n\n    /**\n     * @param date The date being referenced.\n     * @returns String representing how much time has passed since the date param.\n     */\n    abstract fromNow?(date: D): string;\n\n    /** locale changes stream */\n    readonly localeChanges: Observable<void>;\n\n    /** current locale */\n    protected locale: string;\n\n    /** @hidden */\n    private _localeChanges: Subject<void> = new Subject();\n\n    protected constructor() {\n        this.localeChanges = this._localeChanges.asObservable();\n    }\n    /**\n     * Sets the locale used for all dates.\n     * @param locale The new locale.\n     */\n    setLocale(locale: string): void {\n        this.locale = locale;\n        this._localeChanges.next();\n    }\n\n    /**\n     * Set hours, minutes and seconds at once.\n     * @param date The date to set time to.\n     * @param hours\n     * @param minutes\n     * @param seconds\n     * @returns The new date instance.\n     */\n    setTime(date: D, hours: number, minutes: number, seconds: number): D {\n        date = this.setHours(date, hours);\n        date = this.setMinutes(date, minutes);\n        date = this.setSeconds(date, seconds);\n        return date;\n    }\n\n    /**\n     * Get Amount of weeks in given month/year\n     * @param year The year of the date\n     * @param month The month of the date\n     * @param firstDayOfWeek The first day of week. 1 - Sunday, 2 - Monday...\n     * @returns Number of weeks in the given month\n     */\n    getAmountOfWeeks(year: number, month: number, firstDayOfWeek: number): number {\n        const firstOfMonth = new Date(year, month - 1, 1);\n        const lastOfMonth = new Date(year, month, 0);\n\n        const dayOffset = (firstOfMonth.getDay() - firstDayOfWeek + 8) % 7;\n        const used = dayOffset + lastOfMonth.getDate();\n\n        return Math.ceil(used / 7);\n    }\n\n    /**\n     * Compares two dates.\n     * @param first The first date to compare.\n     * @param second The second date to compare.\n     * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n     *     a number greater than 0 if the first date is later.\n     */\n    compareDate(first: D, second: D): number {\n        return (\n            this.getYear(first) - this.getYear(second) ||\n            this.getMonth(first) - this.getMonth(second) ||\n            this.getDate(first) - this.getDate(second) ||\n            this.getHours(first) - this.getHours(second) ||\n            this.getMinutes(first) - this.getMinutes(second) ||\n            this.getSeconds(first) - this.getSeconds(second)\n        );\n    }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * DateTimeFormats is intended to keep options\n * related to date-time formatting / parsing\n *\n */\nexport interface DateTimeFormats {\n    parse: {\n        dateInput: unknown;\n        timeInput: unknown;\n        dateTimeInput: unknown;\n    };\n    display: {\n        dateInput: unknown;\n        timeInput: unknown;\n        dateTimeInput: unknown;\n\n        dateA11yLabel: unknown;\n        monthA11yLabel: unknown;\n        yearA11yLabel: unknown;\n    };\n    rangeDelimiter: string;\n}\n\n/**\n * DateTimeFormats injection token\n */\nexport const DATE_TIME_FORMATS = new InjectionToken<DateTimeFormats>('date-formats');\n","import { Inject, Optional, Pipe, PipeTransform, Signal, inject } from '@angular/core';\nimport { FD_LANGUAGE_SIGNAL, FdLanguage, FdLanguageKeyIdentifier, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { DatetimeAdapter } from './datetime-adapter';\nimport { DATE_TIME_FORMATS, DateTimeFormats } from './datetime-formats';\n\n@Pipe({\n    name: 'dateFormat',\n    standalone: true\n})\nexport class DateFormatPipe<D> implements PipeTransform {\n    /** @hidden */\n    constructor(\n        private _dateTimeAdapter: DatetimeAdapter<D>,\n        @Optional() @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n    ) {}\n\n    /** Format date object */\n    transform(date: D, noDateMessage = ''): string {\n        if (date) {\n            return this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateInput);\n        } else {\n            return noDateMessage;\n        }\n    }\n}\n\n@Pipe({\n    name: 'dateTimeFormat',\n    standalone: true\n})\nexport class DateTimeFormatPipe<D> implements PipeTransform {\n    /** @hidden */\n    constructor(\n        private _dateTimeAdapter: DatetimeAdapter<D>,\n        @Optional() @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n    ) {}\n\n    /** Format date object */\n    transform(date: D, noDateMessage = ''): string {\n        if (date) {\n            return this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateTimeInput);\n        } else {\n            return noDateMessage;\n        }\n    }\n}\n\n@Pipe({\n    name: 'dateFromNow',\n    standalone: true\n})\nexport class DateFromNowPipe<D> implements PipeTransform {\n    /** @hidden */\n    constructor(private _dateTimeAdapter: DatetimeAdapter<D>) {}\n\n    /** Format date object */\n    transform(date: D, noDateMessage = ''): string {\n        if (this._dateTimeAdapter.fromNow && typeof this._dateTimeAdapter.fromNow === 'function') {\n            if (date) {\n                return this._dateTimeAdapter.fromNow(date);\n            } else {\n                return noDateMessage;\n            }\n        } else {\n            console.warn('No fromNow function provided to the DatetimeAdapter');\n            return '';\n        }\n    }\n}\n\n@Pipe({\n    name: 'dayPeriodFormat',\n    standalone: true\n})\nexport class DayPeriodFormatPipe<D> implements PipeTransform {\n    /** @hidden */\n    constructor(\n        private _dateTimeAdapter: DatetimeAdapter<D>,\n        @Optional() @Inject(DATE_TIME_FORMATS) private _dateTimeFormats: DateTimeFormats\n    ) {}\n\n    /** Format date object for day period */\n    transform(date: D, customFormat: any = {}, noDateMessage = ''): string {\n        if (!date) {\n            return noDateMessage;\n        }\n\n        return this._dateTimeAdapter.format(date, customFormat);\n    }\n}\n\n@Pipe({\n    name: 'translateDayPeriod',\n    standalone: true,\n    pure: false // required to update the value when the observable is resolved\n})\nexport class TranslateDayPeriodPipe implements PipeTransform {\n    /** @hidden */\n    private readonly _translationResolver = new TranslationResolver();\n    /** @hidden */\n    private readonly _currentLanguageSignal: Signal<FdLanguage> = inject(FD_LANGUAGE_SIGNAL);\n\n    /** Format date object for day period */\n    transform(value: string | null): string | null {\n        if (!value) {\n            return value;\n        }\n\n        const dayPeriodPattern = /(coreTime\\.\\w+Label)/;\n        const match = value.match(dayPeriodPattern);\n\n        if (match?.[0]) {\n            const currentLanguage = this._currentLanguageSignal();\n            const translatedValue = this._translationResolver.resolve(\n                currentLanguage,\n                match[0] as FdLanguageKeyIdentifier\n            );\n            return translatedValue ? value.replace(dayPeriodPattern, translatedValue) : value;\n        }\n\n        // If no day period pattern is found, return the original value\n        return value;\n    }\n}\n","/**\n * Converts a given time string to a desired format.\n *\n * @param {string} inputStr - The input time string to be converted.\n * @returns {string} - The converted time string in the desired format.\n */\nexport function convertToDesiredFormat(inputStr: string): string {\n    const dayPeriodMapping = {\n        morning: 0,\n        afternoon: 12,\n        evening: 12,\n        night: 0\n    };\n\n    const dayPeriodPattern = /\\b(morning|afternoon|evening|night)\\b/;\n    const amPmPattern = /\\b(AM|PM)\\b/i;\n\n    const convertDayPeriod = (input: string): string => {\n        const match = input.match(dayPeriodPattern);\n        if (match) {\n            const period = match[0].toLowerCase();\n            const timeShift = dayPeriodMapping[period];\n            input = input.replace(dayPeriodPattern, '').trim();\n            const timeMatch = input.match(/\\d{1,2}:\\d{2}/);\n            if (timeMatch) {\n                const [hoursStr, minutesStr] = timeMatch[0].split(':');\n                let hours = Number(hoursStr);\n                const minutes = Number(minutesStr);\n                hours = (hours % 12) + timeShift;\n                input = input.replace(\n                    timeMatch[0],\n                    `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`\n                );\n            }\n        }\n        return input;\n    };\n\n    const convertAmPm = (input: string): string => {\n        const match = input.match(amPmPattern);\n        if (match) {\n            const period = match[0].toUpperCase();\n            input = input.replace(amPmPattern, '').trim();\n            const timeMatch = input.match(/\\d{1,2}:\\d{2}/);\n            if (timeMatch) {\n                const [hoursStr, minutesStr] = timeMatch[0].split(':');\n                let hours = Number(hoursStr);\n                const minutes = Number(minutesStr);\n                if (period === 'PM' && hours < 12) {\n                    hours += 12;\n                }\n                if (period === 'AM' && hours === 12) {\n                    hours = 0;\n                }\n                input = input.replace(\n                    timeMatch[0],\n                    `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`\n                );\n            }\n        }\n        return input;\n    };\n\n    inputStr = convertDayPeriod(inputStr);\n    inputStr = convertAmPm(inputStr);\n\n    return inputStr.replace(/\\bat\\b/i, '').trim();\n}\n","/** Adds 0 if number is less then 10 */\nexport function _leftPad(n: number): string {\n    return n === n % 10 ? `0${n}` : `${n}`;\n}\n\n/** Converts date to ISO8601 */\nexport function toIso8601(fdDate: {\n    year: number;\n    month: number;\n    day: number;\n    hour: number;\n    minute: number;\n    second: number;\n}): string {\n    return [\n        [fdDate.year, _leftPad(fdDate.month), _leftPad(fdDate.day)].join('-'),\n        'T',\n        [_leftPad(fdDate.hour), _leftPad(fdDate.minute), _leftPad(fdDate.second)].join(':')\n    ].join('');\n}\n\n/**\n * @param params e.g. { year: 2020, month: 1, day: 1, hour: 0, minute: 0, second: 0 }\n */\nexport function isValidByParams(params: {\n    year: number;\n    month: number;\n    day?: number;\n    hour?: number;\n    minute?: number;\n    second?: number;\n}): boolean {\n    const { year, month, day, hour, minute, second } = params;\n    if (\n        !undefinedOrInRange(month, 1, 12) ||\n        !undefinedOrInRange(day, 1, 31) ||\n        !undefinedOrInRange(hour, 0, 23) ||\n        !undefinedOrInRange(minute, 0, 59) ||\n        !undefinedOrInRange(second, 0, 59)\n    ) {\n        return false;\n    }\n    if (!isNaN(year) && !isNaN(month) && day != null && !isNaN(day)) {\n        const tempDate = new Date(year, month - 1, day);\n        if (tempDate.getMonth() + 1 !== month) {\n            return false;\n        }\n    }\n    const date = new Date(year, month - 1, day, hour, minute, second);\n    return !Number.isNaN(date.getTime());\n}\n\nfunction undefinedOrInRange(value: number | undefined, from: number, to: number): boolean {\n    return value == null || (value >= from && value <= to);\n}\n","import { INVALID_DATE_ERROR } from '@fundamental-ngx/cdk/utils';\nimport { isValidByParams, toIso8601 } from './fd-date.utils';\n\n/**\n * FdDate class is used to represent date and time.\n *\n * It's a simplified analog of native Date instance.\n * It gives some convenience methods to work with date or time data.\n *\n */\nexport class FdDate {\n    /**\n     * The year of the date.\n     */\n    year: number;\n\n    /**\n     * The month of the date. 1 = January, 12 = December.\n     */\n    month: number;\n\n    /**\n     * Day of the date. Starts at 1.\n     */\n    day: number;\n\n    /**\n     * Date hours. 0 - 23.\n     */\n    hour: number;\n\n    /**\n     * Date minutes. 0 - 59.\n     */\n    minute: number;\n\n    /**\n     * Date seconds. 0 - 59.\n     */\n    second: number;\n\n    /**\n     * Validation state\n     */\n    /** @hidden */\n    private _isValid: boolean;\n\n    /**\n     * Create FdDate\n     * @param year e.g. 2020\n     * @param month 1 = January, 12 = December\n     * @param day 1 - 31\n     * @param hour 0 - 23\n     * @param minute 0 - 59\n     * @param second 0 - 59\n     */\n    constructor(\n        year?: number,\n        month: number = 1,\n        day: number = 1,\n        hour: number = 0,\n        minute: number = 0,\n        second: number = 0\n    ) {\n        if (year === undefined) {\n            return FdDate.getNow();\n        }\n\n        year = Number.parseInt(year + '', 10);\n        month = Number.parseInt(month + '', 10);\n        day = Number.parseInt(day + '', 10);\n        hour = Number.parseInt(hour + '', 10);\n        minute = Number.parseInt(minute + '', 10);\n        second = Number.parseInt(second + '', 10);\n\n        this._isValid = isValidByParams({\n            year,\n            month,\n            day,\n            hour,\n            minute,\n            second\n        });\n\n        this.year = this._isValid ? year : NaN;\n        this.month = this._isValid ? month : NaN;\n        this.day = this._isValid ? day : NaN;\n        this.hour = this._isValid ? hour : NaN;\n        this.minute = this._isValid ? minute : NaN;\n        this.second = this._isValid ? second : NaN;\n\n        return this;\n    }\n\n    /**\n     * Create FdDate instance of the current moment\n     */\n    static getNow(): FdDate {\n        return FdDate.getFdDateByDate(new Date());\n    }\n\n    /**\n     * Gets today's FdDate where hour, minute and second is set to 0\n     */\n    static getToday(): FdDate {\n        return FdDate.getNow().setTime(0, 0, 0);\n    }\n\n    /**\n     *  Convert js date object to FdDate model\n     */\n    static getFdDateByDate(date: Date): FdDate {\n        return new FdDate(\n            date.getFullYear(),\n            date.getMonth() + 1,\n            date.getDate(),\n            date.getHours(),\n            date.getMinutes(),\n            date.getSeconds()\n        );\n    }\n\n    /**\n     * Set hour, minute and second data\n     * @param hour\n     * @param minute\n     * @param second\n     */\n    setTime(hour: number, minute?: number, second?: number): FdDate {\n        this._isValid = isValidByParams({\n            year: this.year,\n            month: this.month,\n            day: this.day,\n            hour,\n            minute,\n            second\n        });\n\n        if (!this._isValid) {\n            this.hour = NaN;\n            this.minute = NaN;\n            this.second = NaN;\n        } else {\n            this.hour = hour || hour === 0 ? hour : this.hour;\n            this.minute = minute || minute === 0 ? minute : this.minute;\n            this.second = second || second === 0 ? second : this.second;\n        }\n\n        return this;\n    }\n\n    /**\n     * Get amount of milliseconds from 01.01.1970\n     */\n    getTimeStamp(): number {\n        return this.toDate().getTime();\n    }\n\n    /**\n     * Get number of weekday ex. Sunday = 1, Monday = 2, Tuesday = 3 etc.\n     */\n    getDayOfWeek(): number {\n        return this.toDate().getDay() + 1;\n    }\n\n    /**\n     * Get native date object from FdDate.\n     */\n    toDate(): Date {\n        // We have stricter validation rules than Date object.\n        // For example, Date allows values for month=100 or for day=100.\n        // Therefore, we need to do this trick for the consistency of the validation status\n        if (!this.isDateValid()) {\n            return new Date(NaN);\n        }\n        return new Date(this.year, this.month - 1, this.day, this.hour, this.minute, this.second);\n    }\n\n    /**\n     * Method that checks validity of current FdDate instance.\n     */\n    isDateValid(): boolean {\n        return this instanceof FdDate && this._isValid;\n    }\n\n    /**\n     * Get string representation in yyyy-mm-ddThh:mm:ss format\n     */\n    toString(): string {\n        if (!this.isDateValid()) {\n            return INVALID_DATE_ERROR;\n        }\n        if (!this.year || !this.month || !this.day) {\n            return '';\n        }\n\n        return toIso8601(this);\n    }\n\n    /**\n     * The valueOf() method returns the primitive value of a FdDate.\n     * Returns: The number of milliseconds between 1 January 1970 00:00:00 UTC and the given date.\n     */\n    valueOf(): number {\n        return this.getTimeStamp();\n    }\n\n    /**\n     * Get date string in yyyy-mm-dd format\n     */\n    toDateString(): string {\n        if (!this.isDateValid()) {\n            return INVALID_DATE_ERROR;\n        }\n        if (!this.year || !this.month || !this.day) {\n            return '';\n        }\n\n        return toIso8601(this).split('T')[0];\n    }\n\n    /**\n     * Get time string in hh:mm:ss format\n     */\n    toTimeString(): string {\n        if (!this.isDateValid()) {\n            return INVALID_DATE_ERROR;\n        }\n        if (!this.year || !this.month || !this.day) {\n            return '';\n        }\n        return toIso8601(this).split('T')[1];\n    }\n}\n","import { DateTimeFormats } from './datetime-formats';\n\nconst dateInput = { year: 'numeric', month: 'numeric', day: 'numeric' };\nconst timeInput = { hour: 'numeric', minute: '2-digit' };\nconst dateTimeInput = {\n    year: 'numeric',\n    month: 'numeric',\n    day: 'numeric',\n    hour: 'numeric',\n    minute: '2-digit'\n};\n\nexport const FD_DATETIME_FORMATS: DateTimeFormats = {\n    parse: {\n        dateInput,\n        timeInput,\n        dateTimeInput\n    },\n    display: {\n        dateInput,\n        timeInput,\n        dateTimeInput,\n\n        dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n        monthA11yLabel: { month: 'long', year: 'numeric' },\n        yearA11yLabel: { year: 'numeric' }\n    },\n    rangeDelimiter: ' - '\n};\n","import { Platform } from '@angular/cdk/platform';\nimport { Inject, Injectable, LOCALE_ID, Optional } from '@angular/core';\n\nimport { INVALID_DATE_ERROR, LETTERS_UNICODE_RANGE, range } from '@fundamental-ngx/cdk/utils';\n\nimport { FdLanguageKeyIdentifier } from '@fundamental-ngx/i18n';\nimport { DatetimeAdapter } from './datetime-adapter';\nimport { FdDate } from './fd-date';\nimport { toIso8601 } from './fd-date.utils';\n\nconst AM_DAY_PERIOD_DEFAULT = 'AM';\nconst PM_DAY_PERIOD_DEFAULT = 'PM';\n\ntype CustomDateTimeFormatOptions = Omit<Intl.DateTimeFormatOptions, 'dayPeriod'> & {\n    dayPeriod?: boolean;\n};\n\n/**\n * DatetimeAdapter implementation based on FdDate.\n *\n * This uses FdDate as a date model and relies on Intl.DateTimeFormat\n * for formatting and translation purposes.\n *\n */\n@Injectable()\nexport class FdDatetimeAdapter extends DatetimeAdapter<FdDate> {\n    /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n    private readonly _fixYearsRangeIssue: boolean;\n\n    /** @hidden */\n    constructor(@Optional() @Inject(LOCALE_ID) localeId: string, platform: Platform) {\n        super();\n        super.setLocale(localeId);\n        this._fixYearsRangeIssue = platform.TRIDENT || platform.EDGE;\n    }\n\n    /** @hidden */\n    fromNow?(date: FdDate): string;\n\n    /** Get year */\n    getYear(date: FdDate): number {\n        return date.year;\n    }\n\n    /** Get month */\n    getMonth(date: FdDate): number {\n        return date.month;\n    }\n\n    /** Get date */\n    getDate(date: FdDate): number {\n        return date.day;\n    }\n\n    /** Get day of week */\n    getDayOfWeek(date: FdDate): number {\n        return this._createDateInstanceByFdDate(date).getDay() + 1;\n    }\n\n    /** Get hours */\n    getHours(date: FdDate): number {\n        return date.hour;\n    }\n\n    /** Get minutes */\n    getMinutes(date: FdDate): number {\n        return date.minute;\n    }\n\n    /** Get seconds */\n    getSeconds(date: FdDate): number {\n        return date.second;\n    }\n\n    /** Get week number */\n    getWeekNumber(fdDate: FdDate): number {\n        const date = this._createDateInstanceByFdDate(fdDate);\n\n        date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n\n        // January 4 is always in week 1.\n        const firstWeek = new Date(date.getFullYear(), 0, 4);\n\n        // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n        return (\n            1 + Math.round(((date.getTime() - firstWeek.getTime()) / 86400000 - 3 + ((firstWeek.getDay() + 6) % 7)) / 7)\n        );\n    }\n\n    /** Get month names */\n    getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n        const dateTimeFormat = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'utc' });\n        return range(12, (i) =>\n            this._stripDirectionalityCharacters(this._format(dateTimeFormat, new Date(2017, i, 1)))\n        );\n    }\n\n    /** Get date names */\n    getDateNames(): string[] {\n        const dateTimeFormat = new Intl.DateTimeFormat(this.locale, { day: 'numeric', timeZone: 'utc' });\n        return range(31, (i) =>\n            this._stripDirectionalityCharacters(this._format(dateTimeFormat, new Date(2017, 0, i + 1)))\n        );\n    }\n\n    /** Get day of week names */\n    getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n        const dateTimeFormat = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'utc' });\n        return range(7, (i) =>\n            this._stripDirectionalityCharacters(this._format(dateTimeFormat, new Date(2017, 0, i + 1)))\n        );\n    }\n\n    /** Get year name */\n    getYearName(date: FdDate): string {\n        const dateTimeFormat = new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'utc' });\n        const dateInstance = this._createDateInstanceByFdDate(date);\n        return this._stripDirectionalityCharacters(this._format(dateTimeFormat, dateInstance));\n    }\n\n    /** Get week name */\n    getWeekName(date: FdDate): string {\n        const weekNumber = this.getWeekNumber(date);\n        return weekNumber.toLocaleString(this.locale);\n    }\n\n    /** Get hour names */\n    getHourNames({ meridian, twoDigit }: { twoDigit: boolean; meridian: boolean }): string[] {\n        return range(24, (hour) => {\n            if (meridian) {\n                hour = hour === 0 || hour === 12 ? 12 : hour % 12;\n            }\n            return hour.toLocaleString(this.locale, { minimumIntegerDigits: twoDigit ? 2 : 1 });\n        });\n    }\n\n    /** Get minute names */\n    getMinuteNames({ twoDigit, minuteStep = 1 }: { twoDigit: boolean; minuteStep?: number }): string[] {\n        const length = Math.ceil(60 / minuteStep);\n        return range(length, (index) => {\n            const minute = index * minuteStep;\n            return minute.toLocaleString(this.locale, { minimumIntegerDigits: twoDigit ? 2 : 1 });\n        });\n    }\n\n    /** Get second names */\n    getSecondNames({ twoDigit }: { twoDigit: boolean }): string[] {\n        return range(60, (second) => second.toLocaleString(this.locale, { minimumIntegerDigits: twoDigit ? 2 : 1 }));\n    }\n\n    /** Get day period names */\n    getDayPeriodNames(): [string, string] {\n        const DEFAULT_PERIODS: [string, string] = [AM_DAY_PERIOD_DEFAULT, PM_DAY_PERIOD_DEFAULT];\n\n        const formatter = new Intl.DateTimeFormat(this.locale, {\n            hour: 'numeric',\n            minute: 'numeric',\n            hour12: true\n        });\n\n        try {\n            const am = formatter.formatToParts(new Date(2020, 0, 1, 6)).find(({ type }) => type === 'dayPeriod')?.value;\n            const pm = formatter\n                .formatToParts(new Date(2020, 0, 1, 16))\n                .find(({ type }) => type === 'dayPeriod')?.value;\n\n            return am && pm ? [am, pm] : DEFAULT_PERIODS;\n        } catch {\n            const dayPeriodRegexp = new RegExp(`(${LETTERS_UNICODE_RANGE}+\\\\.*)+`, 'g');\n            const amRegExpMatch = formatter.format(new Date(2020, 0, 1, 6)).match(dayPeriodRegexp);\n            const pmRegExpMatch = formatter.format(new Date(2020, 0, 1, 16)).match(dayPeriodRegexp);\n\n            return amRegExpMatch && pmRegExpMatch\n                ? [amRegExpMatch[0], pmRegExpMatch[0]]\n                : [AM_DAY_PERIOD_DEFAULT, PM_DAY_PERIOD_DEFAULT];\n        }\n    }\n\n    /** Set hours */\n    setHours(date: FdDate, hours: number): FdDate {\n        const dateInstance = this._createDateInstanceByFdDate(date);\n        dateInstance.setHours(hours);\n        return this._createFdDateFromDateInstance(dateInstance);\n    }\n\n    /** Set minutes */\n    setMinutes(date: FdDate, hours: number): FdDate {\n        const dateInstance = this._createDateInstanceByFdDate(date);\n        dateInstance.setMinutes(hours);\n        return this._createFdDateFromDateInstance(dateInstance);\n    }\n\n    /** Set seconds */\n    setSeconds(date: FdDate, hours: number): FdDate {\n        const dateInstance = this._createDateInstanceByFdDate(date);\n        dateInstance.setSeconds(hours);\n        return this._createFdDateFromDateInstance(dateInstance);\n    }\n\n    /** Get first day of week */\n    getFirstDayOfWeek(): number {\n        // can't retrieve this info from Intl object or Date object, default to Sunday.\n        return 0;\n    }\n\n    /** Get number of days in a month */\n    getNumDaysInMonth(fdDate: FdDate): number {\n        const date = this._createDateInstanceByFdDate(fdDate);\n        date.setMonth(date.getMonth() + 1);\n        date.setDate(0);\n        return date.getDate();\n    }\n\n    /** Create a date object */\n    createDate(year: number, month = 1, date = 1): FdDate {\n        return new FdDate(year, month, date);\n    }\n\n    /** Get a today date object */\n    today(): FdDate {\n        return FdDate.getToday();\n    }\n\n    /** Get a now date object */\n    now(): FdDate {\n        return FdDate.getNow();\n    }\n\n    /** Parse any value to date object */\n    parse(value: any, parseFormat: Intl.DateTimeFormatOptions = {}): FdDate | null {\n        if (!value && value !== 0) {\n            return null;\n        }\n\n        if (value instanceof FdDate) {\n            return this.clone(value);\n        }\n        /**\n         * We have no way using the native JS Date to set the parse format or locale,\n         * so we ignore these parameters.\n         */\n        let date = new Date(Date.parse(value));\n        if (typeof value === 'number') {\n            date = new Date(value);\n        }\n\n        // Check if we are dealing with a time string\n        if (\n            Number.isNaN(date.valueOf()) &&\n            typeof value === 'string' &&\n            !parseFormat.year &&\n            !parseFormat.day &&\n            !parseFormat.month &&\n            parseFormat.hour\n        ) {\n            date = this._parseTimeString(value);\n        }\n\n        return this._createFdDateFromDateInstance(date);\n    }\n\n    /** Format date object to string */\n    format(date: FdDate, displayFormat: CustomDateTimeFormatOptions): string {\n        if (!this.isValid(date)) {\n            return INVALID_DATE_ERROR;\n        }\n\n        // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n        // if we attempt to format a date whose year is less than 1 or greater than 9999.\n        if (this._fixYearsRangeIssue && (date.year < 1 || date.year > 9999)) {\n            date = this.clone(date);\n            date.year = Math.max(1, Math.min(9999, date.year));\n        }\n        displayFormat = { ...displayFormat, timeZone: 'utc' };\n\n        return displayFormat.dayPeriod\n            ? this._formatWithDayPeriod(date, displayFormat)\n            : this._formatWithIntl(date, displayFormat);\n    }\n\n    /** Add years to a date */\n    addCalendarYears(date: FdDate, years: number): FdDate {\n        return this.addCalendarMonths(date, years * 12);\n    }\n\n    /** Add months to a date */\n    addCalendarMonths(fdDate: FdDate, months: number): FdDate {\n        const date = this._createDateInstanceByFdDate(fdDate);\n\n        date.setMonth(date.getMonth() + months);\n\n        // It's possible to wind up in the wrong month if the original month has more days than the new\n        // month. In this case we want to go to the last day of the desired month.\n        if (date.getDate() !== fdDate.day) {\n            date.setDate(0);\n        }\n\n        return this._createFdDateFromDateInstance(date);\n    }\n\n    /** Add days to a date */\n    addCalendarDays(fdDate: FdDate, days: number): FdDate {\n        const date = this._createDateInstanceByFdDate(fdDate);\n        date.setDate(date.getDate() + days);\n        return this._createFdDateFromDateInstance(date);\n    }\n\n    /** Clone a date object */\n    clone(date: FdDate): FdDate {\n        return new FdDate(date.year, date.month, date.day, date.hour, date.minute, date.second);\n    }\n\n    /** Check if date object is valid */\n    isValid(date: FdDate): date is FdDate {\n        if (!(date instanceof FdDate)) {\n            return false;\n        }\n        return date.isDateValid();\n    }\n\n    /** Check if date between given dates */\n    isBetween(dateToCheck: FdDate, startDate: FdDate, endDate: FdDate): boolean {\n        const date = this._createDateInstanceByFdDate(dateToCheck);\n        const start = this._createDateInstanceByFdDate(startDate);\n        const end = this._createDateInstanceByFdDate(endDate);\n        return date.getTime() > start.getTime() && date.getTime() < end.getTime();\n    }\n\n    /** Check if dates are equal */\n    datesEqual(date1: FdDate, date2: FdDate): boolean {\n        if (!date1 || !date2) {\n            return false;\n        }\n        // skip time value\n        const date1Str = this.toIso8601(date1).split('T')[0];\n        const date2Str = this.toIso8601(date2).split('T')[0];\n        return date1Str === date2Str;\n    }\n\n    /** Check if dates and time are equal */\n    dateTimesEqual(date1: FdDate, date2: FdDate): boolean {\n        if (!date1 || !date2) {\n            return false;\n        }\n        return this.toIso8601(date1) === this.toIso8601(date2);\n    }\n\n    /** Format date object to ISO8601 string */\n    toIso8601(fdDate: FdDate): string {\n        return toIso8601(fdDate);\n    }\n\n    /** Check if a time format includes a day period */\n    isTimeFormatIncludesDayPeriod(displayFormat: CustomDateTimeFormatOptions): boolean {\n        if (typeof displayFormat?.hour12 === 'boolean') {\n            return displayFormat.hour12;\n        }\n        const formattedDateNoPeriodOption = this.format(this.createDate(2020), displayFormat);\n        const formattedDateWithPeriodOption = this.format(this.createDate(2020), { ...displayFormat, hour12: true });\n        return formattedDateWithPeriodOption === formattedDateNoPeriodOption;\n    }\n\n    /** Check if a time format includes hours */\n    isTimeFormatIncludesHours(displayFormat: Intl.DateTimeFormatOptions): boolean {\n        return typeof displayFormat?.hour === 'string';\n    }\n\n    /** Check if a time format includes minutes */\n    isTimeFormatIncludesMinutes(displayFormat: Intl.DateTimeFormatOptions): boolean {\n        return typeof displayFormat?.minute === 'string';\n    }\n\n    /** Check if a time format includes seconds */\n    isTimeFormatIncludesSeconds(displayFormat: Intl.DateTimeFormatOptions): boolean {\n        return typeof displayFormat?.second === 'string';\n    }\n\n    /** Format with custom pattern including day period names */\n    private _formatWithDayPeriod(date: FdDate, displayFormat: CustomDateTimeFormatOptions): string {\n        const formattedTime = this._formatWithIntl(date, { ...displayFormat, dayPeriod: undefined });\n        const dayPeriodName = this._getDayPeriodName(date);\n\n        return this._insertDayPeriod(formattedTime, dayPeriodName, displayFormat);\n    }\n\n    /** Insert day period into the formatted string */\n    private _insertDayPeriod(\n        formattedTime: string,\n        dayPeriodName: FdLanguageKeyIdentifier,\n        displayFormat: CustomDateTimeFormatOptions\n    ): string {\n        if (displayFormat.year || displayFormat.month || displayFormat.day) {\n            return formattedTime\n                .replace(/(\\d{1,2}:\\d{2})( [AP]M)?/, `$1 ${dayPeriodName}`)\n                .replace(/,\\s*(\\d{1,2}:\\d{2})/, `, at $1 ${dayPeriodName}`);\n        } else {\n            return formattedTime.replace(/(\\d{1,2}:\\d{2}(:\\d{2})?)/, `$1 ${dayPeriodName}`);\n        }\n    }\n\n    /** Get day period name based on the hour */\n    private _getDayPeriodName(date: FdDate): FdLanguageKeyIdentifier {\n        const hour = date.hour;\n        if (hour < 6) {\n            return 'coreTime.nightLabel';\n        } else if (hour < 12) {\n            return 'coreTime.morningLabel';\n        } else if (hour < 18) {\n            return 'coreTime.afternoonLabel';\n        } else {\n            return 'coreTime.eveningLabel';\n        }\n    }\n\n    /** Format date using Intl.DateTimeFormat */\n    private _formatWithIntl(date: FdDate, displayFormat: any): string {\n        const formatter = new Intl.DateTimeFormat(this.locale, displayFormat);\n        const dateInstance = this._createDateInstanceByFdDate(date);\n        return this._stripDirectionalityCharacters(this._format(formatter, dateInstance));\n    }\n\n    /**\n     * @hidden\n     * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n     * other browsers do not. We remove them to make output consistent and because they interfere with\n     * date parsing.\n     * @param str The string to strip direction characters from.\n     * @returns The stripped string.\n     */\n    private _stripDirectionalityCharacters(str: string): string {\n        return str.replace(/[\\u200e\\u200f]/g, '').replace(/\\u202f/g, ' ');\n    }\n\n    /** @hidden */\n    private _format(formatter: Intl.DateTimeFormat, date: Date): string {\n        if (Number.isNaN(date.valueOf())) {\n            return INVALID_DATE_ERROR;\n        }\n        date = this._createUTCDateInstance(\n            date.getFullYear(),\n            date.getMonth(),\n            date.getDate(),\n            date.getHours(),\n            date.getMinutes(),\n            date.getSeconds(),\n            date.getMilliseconds()\n        );\n        return formatter.format(date);\n    }\n\n    /**\n     * @hidden\n     * Create native Date instance from FdDate\n     * @param date FdDate instance\n     * @returns date Native date instance\n     */\n    private _createDateInstanceByFdDate(fdDate: FdDate): Date {\n        const { year, month, day, hour, minute, second } = fdDate;\n        // We have stricter validation rules than Date object.\n        // For example, Date allows values for month=100 or for day=100.\n        // Therefore, we need to do this trick for the consistency of the validation status\n        if (!this.isValid(fdDate)) {\n            return new Date(NaN);\n        }\n        const date = new Date();\n        date.setFullYear(year, month - 1, day);\n        date.setHours(hour, minute, second, 0);\n        return date;\n    }\n\n    /**\n     * @hidden\n     * Create native Date instance in UTC\n     * @param year The year\n     * @param month The month as a number between 0 and 11\n     * @param day The date as a number between 1 and 31.\n     * @param hours The hours as a number between 0 - 24\n     * @param minutes The minutes as a number between 0 - 59\n     * @param seconds The seconds as a number between 0 - 59\n     * @param milliseconds The milliseconds as a number between 0 - 59\n     */\n    private _createUTCDateInstance(\n        year: number,\n        month: number,\n        day: number,\n        hours = 0,\n        minutes = 0,\n        seconds = 0,\n        milliseconds = 0\n    ): Date {\n        const utcDate = new Date();\n        utcDate.setUTCFullYear(year, month, day);\n        utcDate.setUTCHours(hours, minutes, seconds, milliseconds);\n        return utcDate;\n    }\n\n    /** @hidden */\n    private _createFdDateFromDateInstance(date: Date): FdDate {\n        return new FdDate(\n            date.getFullYear(),\n            date.getMonth() + 1,\n            date.getDate(),\n            date.getHours(),\n            date.getMinutes(),\n            date.getSeconds()\n        );\n    }\n\n    /**\n     * @hidden\n     *\n     * Since FdDatetimeAdapter can parse only \"en-US\" locale\n     * there is no reason to create comprehensive time parse\n     * that can understand plenty of locales.\n     *\n     * @param timeStr Time string to parse (E.g. '10:30 PM')\n     * @returns date Native date instance\n     *\n     */\n    private _parseTimeString(timeStr: string): Date {\n        /**\n         * Date.parse('10:30 AM') doesn't work so we need do a trick\n         * and prepend it by a date string.\n         */\n        const dateStr = new Intl.DateTimeFormat('en-US').format(new Date());\n        const dateTimeString = `${dateStr} ${timeStr}`;\n        return new Date(Date.parse(dateTimeString));\n    }\n}\n","import { NgModule, Type } from '@angular/core';\nimport {\n    DateFormatPipe,\n    DateFromNowPipe,\n    DateTimeFormatPipe,\n    DayPeriodFormatPipe,\n    TranslateDayPeriodPipe\n} from './datetime-format.pipes';\n\nconst PIPES: Type<unknown>[] = [\n    DateFormatPipe,\n    DateTimeFormatPipe,\n    DateFromNowPipe,\n    DayPeriodFormatPipe,\n    TranslateDayPeriodPipe\n];\n\n/**\n * @deprecated\n * Use imports of `DateFormatPipe`, `DateTimeFormatPipe`, `DateFromNowPipe` instead.\n */\n@NgModule({\n    imports: [...PIPES],\n    exports: [...PIPES]\n})\nexport class FdDatetimePipesModule {}\n","import { PlatformModule } from '@angular/cdk/platform';\nimport { NgModule } from '@angular/core';\n\nimport { DatetimeAdapter } from './datetime-adapter';\nimport { DATE_TIME_FORMATS } from './datetime-formats';\nimport { FD_DATETIME_FORMATS } from './fd-date-formats';\nimport { FdDatetimeAdapter } from './fd-datetime-adapter';\nimport { FdDatetimePipesModule } from './fd-datetime-pipes.module';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [PlatformModule],\n    providers: [{ provide: DatetimeAdapter, useClass: FdDatetimeAdapter }]\n})\nexport class FdDatetimeAdapterModule {}\n\n@NgModule({\n    imports: [FdDatetimeAdapterModule, FdDatetimePipesModule],\n    exports: [FdDatetimePipesModule, FdDatetimeAdapterModule],\n    providers: [{ provide: DATE_TIME_FORMATS, useValue: FD_DATETIME_FORMATS }]\n})\nexport class FdDatetimeModule {}\n","import { Provider } from '@angular/core';\nimport { DatetimeAdapter } from './datetime-adapter';\nimport { DATE_TIME_FORMATS } from './datetime-formats';\nimport { FD_DATETIME_FORMATS } from './fd-date-formats';\nimport { FdDatetimeAdapter } from './fd-datetime-adapter';\n\n/**\n * Provides default datetime formats and datetime adapter.\n */\nexport function provideDateTimeFormats(): Provider[] {\n    return [\n        { provide: DATE_TIME_FORMATS, useValue: FD_DATETIME_FORMATS },\n        {\n            provide: DatetimeAdapter,\n            useClass: FdDatetimeAdapter\n        }\n    ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DatetimeAdapter"],"mappings":"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"}