{"version":3,"file":"ngx-material-date-fns-adapter.mjs","sources":["../../../projects/ngx-material-date-fns-adapter/src/lib/date-fns-adapter.ts","../../../projects/ngx-material-date-fns-adapter/src/lib/date-fns-formats.ts","../../../projects/ngx-material-date-fns-adapter/src/lib/index.ts","../../../projects/ngx-material-date-fns-adapter/src/public-api.ts","../../../projects/ngx-material-date-fns-adapter/src/ngx-material-date-fns-adapter.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\r\nimport { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';\r\n\r\nimport * as gregorian from 'date-fns';\r\nimport * as jalali from 'date-fns-jalali';\r\n//\r\nimport { Locale } from 'date-fns';\r\nimport { enUS } from 'date-fns/locale';\r\nimport { faIR } from 'date-fns-jalali/locale';\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n  const valuesArray = Array(length);\r\n  for (let i = 0; i < length; i++) {\r\n    valuesArray[i] = valueFunction(i);\r\n  }\r\n  return valuesArray;\r\n}\r\n\r\ntype CalendarType = 'gregorian' | 'jalali';\r\n\r\ntype DateFnsSubset = {\r\n  setMonth: typeof gregorian.setMonth;\r\n  setDate: typeof gregorian.setDate;\r\n  getMonth: typeof gregorian.getMonth;\r\n  getYear: typeof gregorian.getYear;\r\n  getDate: typeof gregorian.getDate;\r\n  getDay: typeof gregorian.getDay;\r\n  getHours: typeof gregorian.getHours;\r\n  getMinutes: typeof gregorian.getMinutes;\r\n  getSeconds: typeof gregorian.getSeconds;\r\n  getDaysInMonth: typeof gregorian.getDaysInMonth;\r\n  formatISO: typeof gregorian.formatISO;\r\n  addYears: typeof gregorian.addYears;\r\n  addMonths: typeof gregorian.addMonths;\r\n  addDays: typeof gregorian.addDays;\r\n  addSeconds: typeof gregorian.addSeconds;\r\n  isValid: typeof gregorian.isValid;\r\n  isDate: typeof gregorian.isDate;\r\n  format: typeof gregorian.format;\r\n  parseISO: typeof gregorian.parseISO;\r\n  parse: typeof gregorian.parse;\r\n  set: typeof gregorian.set;\r\n};\r\n\r\nconst dateFns: Record<CalendarType, DateFnsSubset> = {\r\n  gregorian: {\r\n    setMonth: gregorian.setMonth,\r\n    setDate: gregorian.setDate,\r\n    getMonth: gregorian.getMonth,\r\n    getYear: gregorian.getYear,\r\n    getDate: gregorian.getDate,\r\n    getDay: gregorian.getDay,\r\n    getHours: gregorian.getHours,\r\n    getMinutes: gregorian.getMinutes,\r\n    getSeconds: gregorian.getSeconds,\r\n    getDaysInMonth: gregorian.getDaysInMonth,\r\n    formatISO: gregorian.formatISO,\r\n    addYears: gregorian.addYears,\r\n    addMonths: gregorian.addMonths,\r\n    addDays: gregorian.addDays,\r\n    addSeconds: gregorian.addSeconds,\r\n    isValid: gregorian.isValid,\r\n    isDate: gregorian.isDate,\r\n    format: gregorian.format,\r\n    parseISO: gregorian.parseISO,\r\n    parse: gregorian.parse,\r\n    set: gregorian.set,\r\n  },\r\n  jalali: {\r\n    setMonth: jalali.setMonth,\r\n    setDate: jalali.setDate,\r\n    getMonth: jalali.getMonth,\r\n    getYear: jalali.getYear,\r\n    getDate: jalali.getDate,\r\n    getDay: jalali.getDay,\r\n    getHours: jalali.getHours,\r\n    getMinutes: jalali.getMinutes,\r\n    getSeconds: jalali.getSeconds,\r\n    getDaysInMonth: jalali.getDaysInMonth,\r\n    formatISO: jalali.formatISO,\r\n    addYears: jalali.addYears,\r\n    addMonths: jalali.addMonths,\r\n    addDays: jalali.addDays,\r\n    addSeconds: jalali.addSeconds,\r\n    isValid: jalali.isValid,\r\n    isDate: jalali.isDate,\r\n    format: jalali.format,\r\n    parseISO: jalali.parseISO,\r\n    parse: jalali.parse,\r\n    set: jalali.set,\r\n  },\r\n};\r\n\r\n// date-fns doesn't have a way to read/print month names or days of the week directly,\r\n// so we get them by formatting a date with a format that produces the desired month/day.\r\nconst MONTH_FORMATS = {\r\n  long: 'LLLL',\r\n  short: 'LLL',\r\n  narrow: 'LLLLL',\r\n};\r\n\r\nconst DAY_OF_WEEK_FORMATS = {\r\n  long: 'EEEE',\r\n  short: 'EEE',\r\n  narrow: 'EEEEE',\r\n};\r\n\r\n@Injectable()\r\nexport class DateFnsAdapter extends DateAdapter<Date, Locale> {\r\n  /** Calendar type. */\r\n  private _calendarType: CalendarType = 'gregorian';\r\n\r\n  private get activeDateFns() {\r\n    return dateFns[this._calendarType];\r\n  }\r\n\r\n  /**\r\n   * constructor\r\n   */\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    super();\r\n    const matDateLocale = inject(MAT_DATE_LOCALE, { optional: true });\r\n    this.setLocale(matDateLocale as Locale);\r\n  }\r\n\r\n  /**\r\n   * Sets the locale used for all dates.\r\n   *\r\n   * @param locale The new locale\r\n   */\r\n  override setLocale(locale: Locale = enUS): void {\r\n    if (locale.code === 'fa-IR') {\r\n      locale = faIR;\r\n      this._calendarType = 'jalali';\r\n    } else {\r\n      this._calendarType = 'gregorian';\r\n    }\r\n\r\n    super.setLocale(locale);\r\n  }\r\n\r\n  getYear(date: Date): number {\r\n    return this.activeDateFns.getYear(date);\r\n  }\r\n\r\n  getMonth(date: Date): number {\r\n    return this.activeDateFns.getMonth(date);\r\n  }\r\n\r\n  getDate(date: Date): number {\r\n    return this.activeDateFns.getDate(date);\r\n  }\r\n\r\n  getDayOfWeek(date: Date): number {\r\n    return this.activeDateFns.getDay(date);\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const pattern = MONTH_FORMATS[style];\r\n    return range(12, (i) => this.format(this.activeDateFns.setMonth(this.today(), i), pattern));\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    const dtf = typeof Intl !== 'undefined' ? new Intl.DateTimeFormat(this.locale.code, { day: 'numeric' }) : null;\r\n\r\n    return range(31, (i) => {\r\n      const date = this.createDate(2017, 0, i + 1);\r\n\r\n      if (dtf) {\r\n        return dtf.format(date).replace(/[\\u200e\\u200f]/g, '');\r\n      }\r\n\r\n      return this.format(date, 'd');\r\n    });\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const pattern = DAY_OF_WEEK_FORMATS[style];\r\n    return range(7, (i) => this.format(new Date(2017, 0, i + 1), pattern));\r\n  }\r\n\r\n  getYearName(date: Date): string {\r\n    return this.format(date, 'y');\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    return this.locale.options?.weekStartsOn ?? 0;\r\n  }\r\n\r\n  getNumDaysInMonth(date: Date): number {\r\n    return this.activeDateFns.getDaysInMonth(date);\r\n  }\r\n\r\n  clone(date: Date): Date {\r\n    return new Date(date.getTime());\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number): Date {\r\n    // Check for invalid month and date (except upper bound on date which we have to check after\r\n    // creating the Date).\r\n    if (month < 0 || month > 11) {\r\n      throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n    }\r\n\r\n    if (date < 1) {\r\n      throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n    }\r\n\r\n    const result = this.activeDateFns.set(new Date(), {\r\n      year,\r\n      month,\r\n      date,\r\n      hours: 0,\r\n      minutes: 0,\r\n      seconds: 0,\r\n      milliseconds: 0,\r\n    });\r\n\r\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n    if (this.getMonth(result) !== month) {\r\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  today(): Date {\r\n    return new Date();\r\n  }\r\n\r\n  parse(value: unknown, parseFormat: string | string[]): Date | null {\r\n    if (typeof value === 'string' && value.length > 0) {\r\n      const iso8601Date = this.activeDateFns.parseISO(value);\r\n\r\n      if (this.isValid(iso8601Date)) {\r\n        return iso8601Date;\r\n      }\r\n\r\n      const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n      if (!formats.length) {\r\n        throw Error('Formats array must not be empty.');\r\n      }\r\n\r\n      for (const currentFormat of formats) {\r\n        const fromFormat = this.activeDateFns.parse(value, currentFormat, new Date(), {\r\n          locale: this.locale,\r\n        });\r\n\r\n        if (this.isValid(fromFormat)) {\r\n          return fromFormat;\r\n        }\r\n      }\r\n\r\n      return this.invalid();\r\n    } else if (typeof value === 'number') {\r\n      return new Date(value);\r\n    } else if (value instanceof Date) {\r\n      return this.clone(value);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  format(date: Date, displayFormat: string): string {\r\n    if (!this.isValid(date)) {\r\n      throw Error('DateFnsAdapter: Cannot format invalid date.');\r\n    }\r\n\r\n    // fix persian Month short name\r\n    if (this.locale.code === 'fa-IR' && displayFormat === 'LLL') {\r\n      displayFormat = 'LLLL';\r\n    }\r\n\r\n    // fix persian monthYearLabel\r\n    if (this.locale.code === 'fa-IR' && displayFormat === 'LLL uuuu') {\r\n      displayFormat = 'LLLL uuuu';\r\n    }\r\n\r\n    return this.activeDateFns.format(date, displayFormat, {\r\n      locale: this.locale,\r\n    });\r\n  }\r\n\r\n  addCalendarYears(date: Date, years: number): Date {\r\n    return this.activeDateFns.addYears(date, years);\r\n  }\r\n\r\n  addCalendarMonths(date: Date, months: number): Date {\r\n    return this.activeDateFns.addMonths(date, months);\r\n  }\r\n\r\n  addCalendarDays(date: Date, days: number): Date {\r\n    return this.activeDateFns.addDays(date, days);\r\n  }\r\n\r\n  toIso8601(date: Date): string {\r\n    return this.activeDateFns.formatISO(date, {\r\n      representation: 'date',\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\r\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\r\n   * invalid date for all other values.\r\n   */\r\n  override deserialize(value: unknown): Date | null {\r\n    if (typeof value === 'string') {\r\n      if (!value) {\r\n        return null;\r\n      }\r\n      const date = this.activeDateFns.parseISO(value);\r\n      if (this.isValid(date)) {\r\n        return date;\r\n      }\r\n    }\r\n    return super.deserialize(value);\r\n  }\r\n\r\n  isDateInstance(obj: unknown): obj is Date {\r\n    return this.activeDateFns.isDate(obj);\r\n  }\r\n\r\n  isValid(date: Date): boolean {\r\n    return this.activeDateFns.isValid(date);\r\n  }\r\n\r\n  invalid(): Date {\r\n    return new Date(NaN);\r\n  }\r\n\r\n  override setTime(target: Date, hours: number, minutes: number, seconds: number): Date {\r\n    if (hours < 0 || hours > 23) {\r\n      throw Error(`Invalid hours \"${hours}\". Hours value must be between 0 and 23.`);\r\n    }\r\n    if (minutes < 0 || minutes > 59) {\r\n      throw Error(`Invalid minutes \"${minutes}\". Minutes value must be between 0 and 59.`);\r\n    }\r\n    if (seconds < 0 || seconds > 59) {\r\n      throw Error(`Invalid seconds \"${seconds}\". Seconds value must be between 0 and 59.`);\r\n    }\r\n\r\n    return this.activeDateFns.set(this.clone(target), {\r\n      hours,\r\n      minutes,\r\n      seconds,\r\n      milliseconds: 0,\r\n    });\r\n  }\r\n\r\n  override getHours(date: Date): number {\r\n    return this.activeDateFns.getHours(date);\r\n  }\r\n\r\n  override getMinutes(date: Date): number {\r\n    return this.activeDateFns.getMinutes(date);\r\n  }\r\n\r\n  override getSeconds(date: Date): number {\r\n    return this.activeDateFns.getSeconds(date);\r\n  }\r\n\r\n  override parseTime(value: unknown, parseFormat: string | string[]): Date | null {\r\n    return this.parse(value, parseFormat);\r\n  }\r\n\r\n  override addSeconds(date: Date, amount: number): Date {\r\n    return this.activeDateFns.addSeconds(date, amount);\r\n  }\r\n}\r\n","import { MatDateFormats } from '@angular/material/core';\r\n\r\nexport const MAT_DATE_FNS_FORMATS: MatDateFormats = {\r\n  parse: {\r\n    dateInput: 'P',\r\n    timeInput: 'p',\r\n  },\r\n  display: {\r\n    dateInput: 'P',\r\n    timeInput: 'p',\r\n    monthYearLabel: 'LLL uuuu',\r\n    dateA11yLabel: 'PP',\r\n    monthYearA11yLabel: 'LLLL uuuu',\r\n    timeOptionLabel: 'p',\r\n  },\r\n};\r\n","import { NgModule, Provider } from '@angular/core';\r\nimport {\r\n  DateAdapter,\r\n  MAT_DATE_FORMATS,\r\n  MAT_DATE_LOCALE,\r\n  MatDateFormats,\r\n} from '@angular/material/core';\r\nimport { DateFnsAdapter } from './date-fns-adapter';\r\nimport { MAT_DATE_FNS_FORMATS } from './date-fns-formats';\r\n\r\n@NgModule({\r\n  providers: [\r\n    {\r\n      provide: DateAdapter,\r\n      useClass: DateFnsAdapter,\r\n      deps: [MAT_DATE_LOCALE],\r\n    },\r\n  ],\r\n})\r\nexport class DateFnsModule {}\r\n\r\n@NgModule({\r\n  providers: [provideDateFnsAdapter()],\r\n})\r\nexport class NgxMatDateFnsModule {}\r\n\r\nexport function provideDateFnsAdapter(\r\n  formats: MatDateFormats = MAT_DATE_FNS_FORMATS\r\n): Provider[] {\r\n  return [\r\n    {\r\n      provide: DateAdapter,\r\n      useClass: DateFnsAdapter,\r\n      deps: [MAT_DATE_LOCALE],\r\n    },\r\n    { provide: MAT_DATE_FORMATS, useValue: formats },\r\n  ];\r\n}\r\n","/*\r\n * Public API Surface of ngx-material-date-fns-adapter\r\n */\r\n\r\nexport * from './lib/date-fns-adapter';\r\nexport * from './lib/date-fns-formats';\r\nexport * from './lib/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}