{"version":3,"file":"ng-zorro-antd-core-time.mjs","sources":["../../components/core/time/candy-date.ts","../../components/core/time/time.ts","../../components/core/time/date-config.ts","../../components/core/time/date-adapter.ts","../../components/core/time/date-fns-adapter.ts","../../components/core/time/native-adapter.ts","../../components/core/time/time-parser.ts","../../components/core/time/public-api.ts","../../components/core/time/ng-zorro-antd-core-time.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport {\n  addMonths,\n  addYears,\n  differenceInCalendarDays,\n  differenceInCalendarMonths,\n  differenceInCalendarQuarters,\n  differenceInCalendarYears,\n  differenceInHours,\n  differenceInMinutes,\n  differenceInSeconds,\n  getQuarter,\n  isFirstDayOfMonth,\n  isLastDayOfMonth,\n  isSameDay,\n  isSameHour,\n  isSameMinute,\n  isSameMonth,\n  isSameQuarter,\n  isSameSecond,\n  isSameYear,\n  isToday,\n  isValid,\n  setDay,\n  setMonth,\n  setQuarter,\n  setYear,\n  startOfMonth,\n  startOfWeek\n} from 'date-fns';\n\nimport { warn } from 'ng-zorro-antd/core/logger';\nimport { IndexableObject, NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { WeekDayIndex } from './date-config';\n\n/**\n * @deprecated Will be removed in v23.\n */\nexport type CandyDateMode = 'decade' | 'year' | 'quarter' | 'month' | 'day' | 'hour' | 'minute' | 'second';\n\n/**\n * @deprecated Use `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport type NormalizedMode = 'decade' | 'year' | 'month';\n\n/**\n * @deprecated Use `Date` and `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport type CandyDateType = CandyDate | Date | null | undefined;\n\n/**\n * @deprecated Use `Date | null` directly instead. Will be removed in v23.\n */\nexport type SingleValue = CandyDate | null;\n\n/**\n * @deprecated Use `Date | null` or `(Date | null)[]` directly instead. Will be removed in v23.\n */\nexport type CompatibleValue = SingleValue | SingleValue[];\n\n/**\n * @deprecated Will be removed in v23.\n */\nexport function wrongSortOrder(rangeValue: SingleValue[]): boolean {\n  const [start, end] = rangeValue;\n  return !!start && !!end && end.isBeforeDay(start);\n}\n\n/**\n * @deprecated Use `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport function normalizeRangeValue(\n  value: SingleValue[],\n  hasTimePicker: boolean,\n  type: NormalizedMode = 'month',\n  activePart: 'left' | 'right' = 'left'\n): CandyDate[] {\n  const [start, end] = value;\n  let newStart: CandyDate = start || new CandyDate();\n  let newEnd: CandyDate = end || (hasTimePicker ? newStart : newStart.add(1, type));\n\n  if (start && !end) {\n    newStart = start;\n    newEnd = hasTimePicker ? start : start.add(1, type);\n  } else if (!start && end) {\n    newStart = hasTimePicker ? end : end.add(-1, type);\n    newEnd = end;\n  } else if (start && end && !hasTimePicker) {\n    if (start.isSame(end, type)) {\n      newEnd = newStart.add(1, type);\n    } else {\n      if (activePart === 'left') {\n        newEnd = newStart.add(1, type);\n      } else {\n        newStart = newEnd.add(-1, type);\n      }\n    }\n  }\n  return [newStart, newEnd];\n}\n\n/**\n * @deprecated Use `Date` cloning directly instead. Will be removed in v23.\n */\nexport function cloneDate(value: CompatibleValue): CompatibleValue {\n  if (Array.isArray(value)) {\n    return value.map(v => (v instanceof CandyDate ? v.clone() : null));\n  } else {\n    return value instanceof CandyDate ? value.clone() : null;\n  }\n}\n\n/**\n * Wrapping kind APIs for date operating and unify\n * NOTE: every new API return new CandyDate object without side effects to the former Date object\n * NOTE: most APIs are based on local time other than customized locale id (this needs tobe support in future)\n * TODO: support format() against to angular's core API\n *\n * @deprecated Use `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport class CandyDate implements IndexableObject {\n  nativeDate: Date;\n  // locale: string; // Custom specified locale ID\n\n  constructor(date?: Date | string | number) {\n    if (date) {\n      if (date instanceof Date) {\n        this.nativeDate = date;\n      } else if (typeof date === 'string' || typeof date === 'number') {\n        warn('The string type is not recommended for date-picker, use \"Date\" type');\n        this.nativeDate = new Date(date);\n      } else {\n        throw new Error('The input date type is not supported (\"Date\" is now recommended)');\n      }\n    } else {\n      this.nativeDate = new Date();\n    }\n  }\n\n  calendarStart(options?: { weekStartsOn: WeekDayIndex | undefined }): CandyDate {\n    return new CandyDate(startOfWeek(startOfMonth(this.nativeDate), options));\n  }\n\n  // ---------------------------------------------------------------------\n  // | Native shortcuts\n  // -----------------------------------------------------------------------------\\\n\n  getYear(): number {\n    return this.nativeDate.getFullYear();\n  }\n\n  getMonth(): number {\n    return this.nativeDate.getMonth();\n  }\n\n  getDay(): number {\n    return this.nativeDate.getDay();\n  }\n\n  getTime(): number {\n    return this.nativeDate.getTime();\n  }\n\n  getDate(): number {\n    return this.nativeDate.getDate();\n  }\n\n  getHours(): number {\n    return this.nativeDate.getHours();\n  }\n\n  getMinutes(): number {\n    return this.nativeDate.getMinutes();\n  }\n\n  getSeconds(): number {\n    return this.nativeDate.getSeconds();\n  }\n\n  getMilliseconds(): number {\n    return this.nativeDate.getMilliseconds();\n  }\n\n  // ---------------------------------------------------------------------\n  // | New implementing APIs\n  // ---------------------------------------------------------------------\n\n  clone(): CandyDate {\n    return new CandyDate(new Date(this.nativeDate));\n  }\n\n  setHms(hour: number, minute: number, second: number): CandyDate {\n    const newDate = new Date(this.nativeDate.setHours(hour, minute, second));\n    return new CandyDate(newDate);\n  }\n\n  setYear(year: number): CandyDate {\n    return new CandyDate(setYear(this.nativeDate, year));\n  }\n\n  addYears(amount: number): CandyDate {\n    return new CandyDate(addYears(this.nativeDate, amount));\n  }\n\n  // NOTE: month starts from 0\n  // NOTE: Don't use the native API for month manipulation as it not restrict the date when it overflows, eg. (new Date('2018-7-31')).setMonth(1) will be date of 2018-3-03 instead of 2018-2-28\n  setMonth(month: number): CandyDate {\n    return new CandyDate(setMonth(this.nativeDate, month));\n  }\n\n  addMonths(amount: number): CandyDate {\n    return new CandyDate(addMonths(this.nativeDate, amount));\n  }\n\n  setDay(day: number, options?: { weekStartsOn: WeekDayIndex }): CandyDate {\n    return new CandyDate(setDay(this.nativeDate, day, options));\n  }\n\n  setDate(amount: number): CandyDate {\n    const date = new Date(this.nativeDate);\n    date.setDate(amount);\n    return new CandyDate(date);\n  }\n\n  getQuarter(): number {\n    return getQuarter(this.nativeDate);\n  }\n\n  setQuarter(quarter: number): CandyDate {\n    return new CandyDate(setQuarter(this.nativeDate, quarter));\n  }\n\n  addDays(amount: number): CandyDate {\n    return this.setDate(this.getDate() + amount);\n  }\n\n  add(amount: number, mode: NormalizedMode): CandyDate {\n    switch (mode) {\n      case 'decade':\n        return this.addYears(amount * 10);\n      case 'year':\n        return this.addYears(amount);\n      case 'month':\n        return this.addMonths(amount);\n      default:\n        return this.addMonths(amount);\n    }\n  }\n\n  isSame(date: CandyDateType, grain: CandyDateMode = 'day'): boolean {\n    if (date == null) {\n      return false;\n    }\n    let fn;\n    switch (grain) {\n      case 'decade':\n        fn = (pre: Date, next: Date) => Math.abs(pre.getFullYear() - next.getFullYear()) < 11;\n        break;\n      case 'year':\n        fn = isSameYear;\n        break;\n      case 'quarter':\n        fn = isSameQuarter;\n        break;\n      case 'month':\n        fn = isSameMonth;\n        break;\n      case 'day':\n        fn = isSameDay;\n        break;\n      case 'hour':\n        fn = isSameHour;\n        break;\n      case 'minute':\n        fn = isSameMinute;\n        break;\n      case 'second':\n        fn = isSameSecond;\n        break;\n      default:\n        fn = isSameDay;\n        break;\n    }\n    return fn(this.nativeDate, this.toNativeDate(date));\n  }\n\n  isSameYear(date: CandyDateType): boolean {\n    return this.isSame(date, 'year');\n  }\n  isSameQuarter(date: CandyDateType): boolean {\n    return this.isSame(date, 'quarter');\n  }\n\n  isSameMonth(date: CandyDateType): boolean {\n    return this.isSame(date, 'month');\n  }\n\n  isSameDay(date: CandyDateType): boolean {\n    return this.isSame(date, 'day');\n  }\n\n  isSameHour(date: CandyDateType): boolean {\n    return this.isSame(date, 'hour');\n  }\n\n  isSameMinute(date: CandyDateType): boolean {\n    return this.isSame(date, 'minute');\n  }\n\n  isSameSecond(date: CandyDateType): boolean {\n    return this.isSame(date, 'second');\n  }\n\n  isBefore(date: CandyDateType, grain: CandyDateMode = 'day'): boolean {\n    if (date == null) {\n      return false;\n    }\n    let fn;\n    switch (grain) {\n      case 'year':\n        fn = differenceInCalendarYears;\n        break;\n      case 'quarter':\n        fn = differenceInCalendarQuarters;\n        break;\n      case 'month':\n        fn = differenceInCalendarMonths;\n        break;\n      case 'day':\n        fn = differenceInCalendarDays;\n        break;\n      case 'hour':\n        fn = differenceInHours;\n        break;\n      case 'minute':\n        fn = differenceInMinutes;\n        break;\n      case 'second':\n        fn = differenceInSeconds;\n        break;\n      default:\n        fn = differenceInCalendarDays;\n        break;\n    }\n    return fn(this.nativeDate, this.toNativeDate(date)) < 0;\n  }\n\n  isBeforeYear(date: CandyDateType): boolean {\n    return this.isBefore(date, 'year');\n  }\n\n  isBeforeQuarter(date: CandyDateType): boolean {\n    return this.isBefore(date, 'quarter');\n  }\n\n  isBeforeMonth(date: CandyDateType): boolean {\n    return this.isBefore(date, 'month');\n  }\n\n  isBeforeDay(date: CandyDateType): boolean {\n    return this.isBefore(date, 'day');\n  }\n\n  // Equal to today accurate to \"day\"\n  isToday(): boolean {\n    return isToday(this.nativeDate);\n  }\n\n  isValid(): boolean {\n    return isValid(this.nativeDate);\n  }\n\n  isFirstDayOfMonth(): boolean {\n    return isFirstDayOfMonth(this.nativeDate);\n  }\n\n  isLastDayOfMonth(): boolean {\n    return isLastDayOfMonth(this.nativeDate);\n  }\n\n  private toNativeDate(date: NzSafeAny): Date {\n    return date instanceof CandyDate ? date.nativeDate : date;\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport const timeUnits: Array<[string, number]> = [\n  ['Y', 1000 * 60 * 60 * 24 * 365], // years\n  ['M', 1000 * 60 * 60 * 24 * 30], // months\n  ['D', 1000 * 60 * 60 * 24], // days\n  ['H', 1000 * 60 * 60], // hours\n  ['m', 1000 * 60], // minutes\n  ['s', 1000], // seconds\n  ['S', 1] // million seconds\n];\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { InjectionToken } from '@angular/core';\n\n/** Type for week day index (0 = Sunday, 1 = Monday, etc.) */\nexport type WeekDayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Configuration for date-related features. */\nexport interface NzDateConfig {\n  /** Customize the first day of a week. */\n  firstDayOfWeek?: WeekDayIndex;\n}\n\n/** Injection token for date configuration. */\nexport const NZ_DATE_CONFIG = new InjectionToken<NzDateConfig>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'nz-date-config' : ''\n);\n\n/** Injection token for the date locale used by the configured date adapter. */\nexport const NZ_DATE_LOCALE = new InjectionToken<unknown>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'nz-date-locale' : ''\n);\n\n/** Default date configuration. */\nexport const NZ_DATE_CONFIG_DEFAULT: NzDateConfig = {\n  firstDayOfWeek: undefined\n};\n\n/** Merges user config with default config. */\nexport function mergeDateConfig(config: NzDateConfig | null): NzDateConfig {\n  return { ...NZ_DATE_CONFIG_DEFAULT, ...config };\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NZ_DATE_CONFIG, NZ_DATE_CONFIG_DEFAULT, NZ_DATE_LOCALE, NzDateConfig } from './date-config';\n\nconst NOT_IMPLEMENTED = 'NzDateAdapter: method not implemented. Override this method in your adapter to opt in.';\n\n/**\n * Injection token for providing a custom NzDateAdapter implementation.\n */\nexport const NZ_DATE_ADAPTER = new InjectionToken<Type<NzDateAdapter<unknown>>>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'nz-date-adapter-type' : ''\n);\n\n/** Configuration for a date adapter provider. */\nexport interface NzDateAdapterConfig<TLocale = unknown> extends NzDateConfig {\n  /** Locale value used by the configured date adapter. */\n  locale?: TLocale;\n}\n\n/**\n * Provides a custom NzDateAdapter implementation.\n * Use this when you want to provide your own adapter implementation.\n *\n * @param adapterClass The adapter class to use (must extend NzDateAdapter)\n * @param config Optional configuration for the adapter\n * @returns EnvironmentProviders for the adapter\n *\n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n *   providers: [provideNzDateAdapter(JalaliDateAdapter, { locale: faIR, firstDayOfWeek: 6 })]\n * };\n * ```\n */\nexport function provideNzDateAdapter<TDate, TLocale, TAdapter extends NzDateAdapter<TDate, TLocale>>(\n  adapterClass: Type<TAdapter>,\n  config?: NzDateAdapterConfig<TLocale>\n): EnvironmentProviders {\n  const { locale, ...dateConfig } = config ?? {};\n\n  return makeEnvironmentProviders([\n    adapterClass,\n    { provide: NzDateAdapter, useExisting: adapterClass },\n    { provide: NZ_DATE_CONFIG, useValue: { ...NZ_DATE_CONFIG_DEFAULT, ...dateConfig } },\n    ...(locale !== undefined ? [{ provide: NZ_DATE_LOCALE, useValue: locale }] : [])\n  ]);\n}\n\n/**\n * NzDateAdapter is the abstraction boundary between ng-zorro-antd and any date library.\n *\n * CONTRACT FOR SUBCLASS AUTHORS:\n *\n * - You MUST implement all abstract methods.\n * - You MAY override derived methods for efficiency.\n * - You MAY override optional methods to opt into features.\n *\n * @see https://github.com/angular/components/blob/main/src/material/core/datetime/date-adapter.ts\n */\nexport abstract class NzDateAdapter<TDate, TLocale = unknown> {\n  /** The current locale. */\n  protected locale!: TLocale;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** Stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  // =============================================================\n  // MATERIAL CORE: ABSTRACT METHODS (MUST IMPLEMENT)\n  // =============================================================\n\n  /** Gets today's date. */\n  abstract today(): TDate;\n\n  /** Gets a date instance representing the given year, month, and day. */\n  abstract createDate(year: number, month: number, date: number): TDate;\n\n  /** Clones the given date. */\n  abstract clone(date: TDate): TDate;\n\n  // --- Date Getters (Material naming) ---\n\n  /** Gets the year component of the given date. */\n  abstract getYear(date: TDate): number;\n\n  /** Gets the month component of the given date (0-indexed, 0 = January). */\n  abstract getMonth(date: TDate): number;\n\n  /** Gets the date of the month component of the given date (1-indexed). */\n  abstract getDate(date: TDate): number;\n\n  /** Gets the day of the week component of the given date (0-indexed, 0 = Sunday). */\n  abstract getDayOfWeek(date: TDate): number;\n\n  /** Gets the number of days in the month of the given date. */\n  abstract getNumDaysInMonth(date: TDate): number;\n\n  // --- Date Names (Material naming) ---\n\n  /** Gets the name of the month for the given date. */\n  abstract getYearName(date: TDate): string;\n\n  /** Gets a list of month names for the given style. */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /** Gets a list of date names (e.g. '1', '2', ... '31'). */\n  abstract getDateNames(): string[];\n\n  /** Gets a list of day of the week names for the given style. */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  // --- Week ---\n\n  /** Gets the first day of the week (0 = Sunday, 1 = Monday, etc.). */\n  abstract getFirstDayOfWeek(): number;\n\n  // --- Date Math (Material naming) ---\n\n  /** Adds the specified number of years to the given date. */\n  abstract addCalendarYears(date: TDate, years: number): TDate;\n\n  /** Adds the specified number of months to the given date. */\n  abstract addCalendarMonths(date: TDate, months: number): TDate;\n\n  /** Adds the specified number of days to the given date. */\n  abstract addCalendarDays(date: TDate, days: number): TDate;\n\n  // --- Format / Parse ---\n\n  /** Formats a date as a string according to the given display format. */\n  abstract format(date: TDate, displayFormat: NzSafeAny): string;\n\n  /** Parses a value into a date. */\n  abstract parse(value: NzSafeAny, parseFormat: NzSafeAny): TDate | null;\n\n  // --- Validation ---\n\n  /** Checks whether the given object is a date instance. */\n  abstract isDateInstance(obj: NzSafeAny): boolean;\n\n  /** Checks whether the given date is valid. */\n  abstract isValid(date: TDate): boolean;\n\n  /** Gets a date instance representing an invalid date. */\n  abstract invalid(): TDate;\n\n  // =============================================================\n  // NG-ZORRO CORE: ABSTRACT METHODS (MUST IMPLEMENT)\n  // =============================================================\n\n  /** Gets the quarter component of the given date (1-4). */\n  abstract getQuarter(date: TDate): number;\n\n  /** Sets the quarter of the given date. */\n  abstract setQuarter(date: TDate, quarter: number): TDate;\n\n  /** Gets the start of the quarter for the given date. */\n  abstract startOfQuarter(date: TDate): TDate;\n\n  /** Gets the ISO week number for the given date. */\n  abstract getISOWeek(date: TDate): number;\n\n  // --- NG-ZORRO Date Setters (not in Material) ---\n\n  /** Sets the year of the given date. */\n  abstract setYear(date: TDate, year: number): TDate;\n\n  /** Sets the month of the given date (0-indexed). */\n  abstract setMonth(date: TDate, month: number): TDate;\n\n  /** Sets the day of the month of the given date (1-indexed). */\n  abstract setDate(date: TDate, day: number): TDate;\n\n  // =============================================================\n  // MATERIAL DERIVED: IMPLEMENTED METHODS (MAY OVERRIDE)\n  // =============================================================\n\n  /** Sets the locale used for formatting and parsing. */\n  setLocale(locale: TLocale): void {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object.\n   * Accepts ISO 8601 strings, Date objects, or null/undefined.\n   */\n  deserialize(value: NzSafeAny): TDate | null {\n    if (value == null || this.isDateInstance(value)) {\n      return value as TDate | null;\n    }\n    return this.invalid();\n  }\n\n  /** Gets a valid date object if possible, otherwise returns null. */\n  getValidDateOrNull(obj: unknown): TDate | null {\n    if (this.isDateInstance(obj)) {\n      const date = obj as TDate;\n      return this.isValid(date) ? date : null;\n    }\n    return null;\n  }\n\n  /** Compares two dates, returning a number indicating their relative order. */\n  compareDate(first: TDate, second: TDate): 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    );\n  }\n\n  /** Checks whether two dates represent the same calendar day. */\n  sameDate(first: TDate | null, second: TDate | null): boolean {\n    if (first && second) {\n      const firstValid = this.isValid(first);\n      const secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return this.compareDate(first, second) === 0;\n      }\n      return firstValid === secondValid;\n    }\n    return first === second;\n  }\n\n  /** Clamps a date between min and max bounds. */\n  clampDate(date: TDate, min?: TDate | null, max?: TDate | null): TDate {\n    if (min && this.compareDate(min, date) > 0) {\n      return this.clone(min);\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return this.clone(max);\n    }\n    return date;\n  }\n\n  /** Gets the calendar's start of month (first day at midnight). */\n  calendarStartOfMonth(date: TDate): TDate {\n    return this.createDate(this.getYear(date), this.getMonth(date), 1);\n  }\n\n  /** Gets the calendar's start of week. */\n  calendarStartOfWeek(date: TDate): TDate {\n    const dayOfWeek = this.getDayOfWeek(date);\n    const firstDayOfWeek = this.getFirstDayOfWeek();\n    const diff = (dayOfWeek - firstDayOfWeek + 7) % 7;\n    return this.addCalendarDays(date, -diff);\n  }\n\n  /** Checks whether the given date is the first day of its month. */\n  isFirstDayOfMonth(date: TDate): boolean {\n    return this.getDate(date) === 1;\n  }\n\n  /** Checks whether the given date is the last day of its month. */\n  isLastDayOfMonth(date: TDate): boolean {\n    return this.getDate(date) === this.getNumDaysInMonth(date);\n  }\n\n  /** Checks whether the given date is today. */\n  isToday(date: TDate): boolean {\n    return this.sameDate(date, this.today());\n  }\n\n  // =============================================================\n  // MATERIAL OPTIONAL: TIME METHODS (THROW BY DEFAULT)\n  // =============================================================\n\n  /** Sets the time on the given date. */\n  setTime(_date: TDate, _hours: number, _minutes: number, _seconds: number): TDate {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Gets the hours component of the given date. */\n  getHours(_date: TDate): number {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Gets the minutes component of the given date. */\n  getMinutes(_date: TDate): number {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Gets the seconds component of the given date. */\n  getSeconds(_date: TDate): number {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Parses a time value into a date. */\n  parseTime(_value: NzSafeAny, _parseFormat?: NzSafeAny): TDate | null {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Adds the specified number of seconds to the given date. */\n  addSeconds(_date: TDate, _amount: number): TDate {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Compares two times, returning a number indicating their relative order. */\n  compareTime(first: TDate, second: TDate): number {\n    return (\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  /** Checks whether two dates represent the same time (same hour, minute, second). */\n  sameTime(first: TDate | null, second: TDate | null): boolean {\n    if (first && second) {\n      return (!this.isValid(first) && !this.isValid(second)) || this.compareTime(first, second) === 0;\n    }\n    return first === second;\n  }\n\n  // =============================================================\n  // NG-ZORRO OPTIONAL: EXTENDED METHODS (THROW BY DEFAULT)\n  // =============================================================\n\n  /** Gets the milliseconds component of the given date. */\n  getMilliseconds(_date: TDate): number {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Gets the timestamp (milliseconds since epoch) of the given date. */\n  getTime(_date: TDate): number {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Gets the calendar system identifier for the given date. */\n  getCalendarId(_date: TDate): string {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  /** Gets the timezone offset for the given date. */\n  getTimezoneOffset(_date: TDate): number {\n    throw new Error(NOT_IMPLEMENTED);\n  }\n\n  // --- Legacy aliases (deprecated, use Material naming instead) ---\n\n  /**\n   * @deprecated Use `addCalendarYears` instead. Will be removed in v23.\n   */\n  addYears(date: TDate, amount: number): TDate {\n    return this.addCalendarYears(date, amount);\n  }\n\n  /**\n   * @deprecated Use `addCalendarMonths` instead. Will be removed in v23.\n   */\n  addMonths(date: TDate, amount: number): TDate {\n    return this.addCalendarMonths(date, amount);\n  }\n\n  /**\n   * @deprecated Use `addCalendarDays` instead. Will be removed in v23.\n   */\n  addDays(date: TDate, amount: number): TDate {\n    return this.addCalendarDays(date, amount);\n  }\n\n  /**\n   * @deprecated Use `getNumDaysInMonth` instead. Will be removed in v23.\n   */\n  getDaysInMonth(date: TDate): number {\n    return this.getNumDaysInMonth(date);\n  }\n\n  /**\n   * @deprecated Use `getDayOfWeek` instead. Will be removed in v23.\n   */\n  getDay(date: TDate): number {\n    return this.getDayOfWeek(date);\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { EnvironmentProviders, Injectable, inject } from '@angular/core';\n\nimport {\n  type Locale,\n  addDays,\n  addMonths,\n  addYears,\n  addSeconds,\n  isFirstDayOfMonth,\n  isLastDayOfMonth,\n  isToday,\n  isValid,\n  setMonth,\n  setYear,\n  startOfMonth,\n  startOfWeek,\n  startOfQuarter,\n  getQuarter,\n  setQuarter,\n  getISOWeek,\n  getDaysInMonth,\n  format as fnsFormat,\n  parse as fnsParse\n} from 'date-fns';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzDateAdapter, NzDateAdapterConfig, provideNzDateAdapter } from './date-adapter';\nimport { NZ_DATE_CONFIG, NZ_DATE_LOCALE } from './date-config';\n\n/** Configuration for date-fns date adapter. */\nexport interface NzDateFnsAdapterConfig extends NzDateAdapterConfig<Locale> {\n  /** Locale object from date-fns. */\n  locale?: Locale;\n}\n\n/**\n * Date adapter for date-fns.\n *\n * To use this adapter, add `provideNzDateFnsAdapter()` to your application providers.\n *\n * @note Requires date-fns as a peer dependency.\n */\n@Injectable({ providedIn: 'root' })\nexport class DateFnsDateAdapter extends NzDateAdapter<Date, Locale> {\n  private readonly dateLocale = inject(NZ_DATE_LOCALE, { optional: true });\n  private readonly dateConfig = inject(NZ_DATE_CONFIG, { optional: true });\n\n  constructor() {\n    super();\n    if (this.dateLocale) {\n      super.setLocale(this.dateLocale as Locale);\n    }\n  }\n\n  // =============================================================\n  // MATERIAL CORE: ABSTRACT METHODS\n  // =============================================================\n\n  today(): Date {\n    return new Date();\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    return new Date(year, month, date);\n  }\n\n  clone(date: Date): Date {\n    return new Date(date);\n  }\n\n  // --- Date Getters ---\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return getDaysInMonth(date);\n  }\n\n  // --- Date Names ---\n\n  getYearName(date: Date): string {\n    return fnsFormat(date, 'yyyy', { locale: this.locale });\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const format: 'MMMMM' | 'MMM' | 'MMMM' = style === 'narrow' ? 'MMMMM' : style === 'short' ? 'MMM' : 'MMMM';\n    return Array.from({ length: 12 }, (_, i) => fnsFormat(new Date(2024, i, 1), format, { locale: this.locale }));\n  }\n\n  getDateNames(): string[] {\n    return Array.from({ length: 31 }, (_, i) => String(i + 1));\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const format: 'EEEEEE' | 'EEE' | 'EEEE' = style === 'narrow' ? 'EEEEEE' : style === 'short' ? 'EEE' : 'EEEE';\n    return Array.from({ length: 7 }, (_, i) => fnsFormat(new Date(2024, 0, i + 1), format, { locale: this.locale }));\n  }\n\n  // --- Week ---\n\n  getFirstDayOfWeek(): number {\n    if (this.dateConfig?.firstDayOfWeek != null) {\n      return this.dateConfig.firstDayOfWeek;\n    } else {\n      return this.locale?.options?.weekStartsOn ?? 1;\n    }\n  }\n\n  // --- Date Math ---\n\n  addCalendarYears(date: Date, years: number): Date {\n    return addYears(date, years);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    return addMonths(date, months);\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return addDays(date, days);\n  }\n\n  // --- Format / Parse ---\n\n  format(date: Date, displayFormat: NzSafeAny): string {\n    if (!date) {\n      return '';\n    }\n    if (!this.isValid(date)) {\n      throw new Error('DateFnsDateAdapter: Cannot format invalid date.');\n    }\n    // Convert Angular-style bracket literals to date-fns single-quote literals\n    // e.g., 'yyyy-[Q]Q' → 'yyyy-'Q'Q'\n    const formatString = (displayFormat as string).replace(/\\[(.*?)\\]/g, \"'$1'\");\n    return fnsFormat(date, formatString, {\n      locale: this.locale,\n      useAdditionalWeekYearTokens: true,\n      useAdditionalDayOfYearTokens: true\n    });\n  }\n\n  parse(value: NzSafeAny, parseFormat: NzSafeAny): Date | null {\n    if (typeof value === 'string' && value.length > 0) {\n      const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat as string];\n\n      if (!formats.length) {\n        throw new Error('Formats array must not be empty.');\n      }\n\n      for (const currentFormat of formats) {\n        // Convert Angular-style bracket literals to date-fns single-quote literals\n        const formatString = currentFormat.replace(/\\[(.*?)\\]/g, \"'$1'\");\n        const fromFormat = fnsParse(value, formatString, new Date(), {\n          locale: this.locale,\n          weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6,\n          useAdditionalWeekYearTokens: true,\n          useAdditionalDayOfYearTokens: true\n        });\n\n        if (this.isValid(fromFormat)) {\n          return fromFormat;\n        }\n      }\n\n      return this.invalid();\n    } else if (typeof value === 'number') {\n      return new Date(value);\n    } else if (value instanceof Date) {\n      return this.clone(value);\n    }\n\n    return null;\n  }\n\n  // --- Validation ---\n\n  isDateInstance(obj: NzSafeAny): boolean {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date): boolean {\n    return isValid(date);\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  // =============================================================\n  // NG-ZORRO CORE: ABSTRACT METHODS\n  // =============================================================\n\n  getQuarter(date: Date): number {\n    return getQuarter(date);\n  }\n\n  setQuarter(date: Date, quarter: number): Date {\n    return setQuarter(date, quarter);\n  }\n\n  startOfQuarter(date: Date): Date {\n    return startOfQuarter(date);\n  }\n\n  getISOWeek(date: Date): number {\n    return getISOWeek(date);\n  }\n\n  // --- NG-ZORRO Date Setters ---\n\n  setYear(date: Date, year: number): Date {\n    return setYear(date, year);\n  }\n\n  setMonth(date: Date, month: number): Date {\n    return setMonth(date, month);\n  }\n\n  setDate(date: Date, day: number): Date {\n    const result = new Date(date);\n    result.setDate(day);\n    return result;\n  }\n\n  // =============================================================\n  // MATERIAL OPTIONAL: TIME METHODS\n  // =============================================================\n\n  override setTime(date: Date, hours: number, minutes: number, seconds: number): Date {\n    const result = new Date(date);\n    result.setHours(hours, minutes, seconds, 0);\n    return result;\n  }\n\n  override getHours(date: Date): number {\n    return date.getHours();\n  }\n\n  override getMinutes(date: Date): number {\n    return date.getMinutes();\n  }\n\n  override getSeconds(date: Date): number {\n    return date.getSeconds();\n  }\n\n  override parseTime(value: NzSafeAny, parseFormat?: NzSafeAny): Date | null {\n    return this.parse(value, parseFormat);\n  }\n\n  override addSeconds(date: Date, amount: number): Date {\n    return addSeconds(date, amount);\n  }\n\n  // =============================================================\n  // NG-ZORRO OPTIONAL: EXTENDED METHODS\n  // =============================================================\n\n  override getMilliseconds(date: Date): number {\n    return date.getMilliseconds();\n  }\n\n  override getTime(date: Date): number {\n    return date.getTime();\n  }\n\n  override isFirstDayOfMonth(date: Date): boolean {\n    return isFirstDayOfMonth(date);\n  }\n\n  override isLastDayOfMonth(date: Date): boolean {\n    return isLastDayOfMonth(date);\n  }\n\n  override isToday(date: Date): boolean {\n    return isToday(date);\n  }\n\n  override calendarStartOfMonth(date: Date): Date {\n    return startOfMonth(date);\n  }\n\n  override calendarStartOfWeek(date: Date): Date {\n    return startOfWeek(date, { weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6 });\n  }\n}\n\n/**\n * Provides the DateFnsDateAdapter as the NzDateAdapter implementation.\n * DateFnsDateAdapter uses date-fns library for date operations.\n *\n * @param config Optional configuration for the adapter\n * @returns EnvironmentProviders for the DateFnsDateAdapter\n *\n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n *   providers: [provideNzDateFnsAdapter({ locale: enUS, firstDayOfWeek: 1 })]\n * };\n * ```\n *\n * @note Requires date-fns as a peer dependency.\n */\nexport function provideNzDateFnsAdapter(config?: NzDateFnsAdapterConfig): EnvironmentProviders {\n  return provideNzDateAdapter(DateFnsDateAdapter, config);\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { EnvironmentProviders, Injectable, inject } from '@angular/core';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzDateAdapter, NzDateAdapterConfig, provideNzDateAdapter } from './date-adapter';\nimport { NZ_DATE_CONFIG, NZ_DATE_LOCALE } from './date-config';\n\n/** Configuration for native date adapter. */\nexport interface NzNativeDateAdapterConfig extends NzDateAdapterConfig<string> {\n  /** Locale string used by Intl.DateTimeFormat. */\n  locale?: string;\n}\n\n/** Matches strings that look like ISO 8601 dates (e.g. 2024-01-15, 2024-01-15T10:30:00). */\nconst ISO_8601_REGEX = /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n/** Matches time strings in formats like: 10:30, 10:30:45, 10:30 AM, 10.30.45 PM. */\nconst TIME_REGEX = /^(\\d?\\d)[:.](\\d?\\d)(?:[:.](\\d?\\d))?\\s*(AM|PM)?$/i;\n\n/** Creates an array of length `length` with values derived from `valueFunction`. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Checks if a value is within a specified numeric range. */\nfunction inRange(value: number, min: number, max: number): boolean {\n  return !isNaN(value) && value >= min && value <= max;\n}\n\n/**\n * Date adapter using native Date and Intl.DateTimeFormat.\n * Fully aligned with Angular Material's NativeDateAdapter implementation.\n */\n@Injectable()\nexport class NativeDateAdapter extends NzDateAdapter<Date, string> {\n  private readonly dateLocale = inject(NZ_DATE_LOCALE, { optional: true });\n  private readonly dateConfig = inject(NZ_DATE_CONFIG, { optional: true });\n\n  constructor() {\n    super();\n    if (this.dateLocale !== undefined && typeof this.dateLocale === 'string') {\n      this.setLocale(this.dateLocale);\n    } else {\n      this.setLocale('en-US');\n    }\n  }\n\n  // =============================================================\n  // MATERIAL CORE: ABSTRACT METHODS\n  // =============================================================\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const dtf = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'utc' });\n    return range(12, i => this._format(dtf, new Date(2017, i, 1)));\n  }\n\n  getDateNames(): string[] {\n    const dtf = new Intl.DateTimeFormat(this.locale, { day: 'numeric', timeZone: 'utc' });\n    return range(31, i => this._format(dtf, new Date(2017, 0, i + 1)));\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const dtf = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'utc' });\n    return range(7, i => this._format(dtf, new Date(2017, 0, i + 1)));\n  }\n\n  getYearName(date: Date): string {\n    const dtf = new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'utc' });\n    return this._format(dtf, date);\n  }\n\n  getFirstDayOfWeek(): number {\n    // Check for configured override first\n    if (this.dateConfig?.firstDayOfWeek != null) {\n      return this.dateConfig.firstDayOfWeek;\n    }\n    // Use Intl.Locale API if available (same as Material)\n    if (typeof Intl !== 'undefined' && (Intl as NzSafeAny).Locale) {\n      const locale = new (Intl as NzSafeAny).Locale(this.locale) as {\n        getWeekInfo?: () => { firstDay: number };\n        weekInfo?: { firstDay: number };\n      };\n      const firstDay = (locale.getWeekInfo?.() || locale.weekInfo)?.firstDay ?? 0;\n      // weekInfo.firstDay is 1-7 (Mon-Sun), we need 0-6 (Sun-Sat)\n      return firstDay === 7 ? 0 : firstDay;\n    }\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n    const result = this._createDateWithOverflow(year, month, date);\n    if (result.getMonth() !== month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: NzSafeAny, parseFormat: NzSafeAny): Date | null {\n    if (typeof value === 'number') {\n      return new Date(value);\n    }\n    if (value instanceof Date) {\n      return this.clone(value);\n    }\n    if (typeof value !== 'string') {\n      return null;\n    }\n    const text = value.trim();\n    if (!text) {\n      return null;\n    }\n    if (typeof parseFormat === 'string') {\n      const parsedByFormat = this.parseByToken(text, parseFormat);\n      if (parsedByFormat) {\n        return parsedByFormat;\n      }\n    }\n    const dateOnly = text.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n    if (dateOnly) {\n      return this.createDateOrInvalid(Number(dateOnly[1]), Number(dateOnly[2]) - 1, Number(dateOnly[3]));\n    }\n    const timestamp = Date.parse(text);\n    return isNaN(timestamp) ? this.invalid() : new Date(timestamp);\n  }\n\n  format(date: Date, displayFormat: NzSafeAny): string {\n    // NG-ZORRO extension: return empty string for null (Material throws error)\n    if (!date) {\n      return '';\n    }\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n    if (typeof displayFormat === 'object' && displayFormat !== null) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {\n        ...(displayFormat as Intl.DateTimeFormatOptions),\n        timeZone: 'utc'\n      });\n      return this._format(dtf, date);\n    }\n    // String format: NG-ZORRO extension for date-fns token compatibility\n    return this.formatByToken(date, displayFormat as string);\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    const newDate = this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n    // Adjust for month overflow (e.g., Jan 31 + 1 month should become Feb 28/29, not Mar 3)\n    if (this.getMonth(newDate) !== (((this.getMonth(date) + months) % 12) + 12) % 12) {\n      newDate.setDate(0);\n    }\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  override deserialize(value: NzSafeAny): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // Strict ISO 8601 validation (same as Material)\n      if (ISO_8601_REGEX.test(value)) {\n        const date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: NzSafeAny): boolean {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date): boolean {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  // =============================================================\n  // NG-ZORRO CORE: ABSTRACT METHODS\n  // =============================================================\n\n  getQuarter(date: Date): number {\n    return Math.floor(date.getMonth() / 3) + 1;\n  }\n\n  setQuarter(date: Date, quarter: number): Date {\n    const currentQuarter = this.getQuarter(date);\n    const monthOffset = (quarter - currentQuarter) * 3;\n    return this.addCalendarMonths(date, monthOffset);\n  }\n\n  startOfQuarter(date: Date): Date {\n    const quarter = this.getQuarter(date);\n    const month = (quarter - 1) * 3;\n    return this.createDate(this.getYear(date), month, 1);\n  }\n\n  getISOWeek(date: Date): number {\n    // ISO week calculation (same algorithm as Material's getISOWeek if available)\n    const target = new Date(date.valueOf());\n    const dayNr = (date.getDay() + 6) % 7;\n    target.setDate(target.getDate() - dayNr + 3);\n    const firstThursday = target.valueOf();\n    target.setMonth(0, 1);\n    if (target.getDay() !== 4) {\n      target.setMonth(0, 1 + ((4 - target.getDay() + 7) % 7));\n    }\n    return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);\n  }\n\n  setYear(date: Date, year: number): Date {\n    const result = this.clone(date);\n    result.setFullYear(year);\n    return result;\n  }\n\n  setMonth(date: Date, month: number): Date {\n    const result = this.clone(date);\n    result.setMonth(month);\n    return result;\n  }\n\n  setDate(date: Date, day: number): Date {\n    const result = this.clone(date);\n    result.setDate(day);\n    return result;\n  }\n\n  // =============================================================\n  // MATERIAL OPTIONAL: TIME METHODS\n  // =============================================================\n\n  override setTime(target: Date, hours: number, minutes: number, seconds: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!inRange(hours, 0, 23)) {\n        throw Error(`Invalid hours \"${hours}\". Hours value must be between 0 and 23.`);\n      }\n      if (!inRange(minutes, 0, 59)) {\n        throw Error(`Invalid minutes \"${minutes}\". Minutes value must be between 0 and 59.`);\n      }\n      if (!inRange(seconds, 0, 59)) {\n        throw Error(`Invalid seconds \"${seconds}\". Seconds value must be between 0 and 59.`);\n      }\n    }\n    const clone = this.clone(target);\n    clone.setHours(hours, minutes, seconds, 0);\n    return clone;\n  }\n\n  override getHours(date: Date): number {\n    return date.getHours();\n  }\n\n  override getMinutes(date: Date): number {\n    return date.getMinutes();\n  }\n\n  override getSeconds(date: Date): number {\n    return date.getSeconds();\n  }\n\n  override parseTime(userValue: NzSafeAny, parseFormat?: NzSafeAny): Date | null {\n    if (typeof userValue !== 'string') {\n      return userValue instanceof Date ? new Date(userValue.getTime()) : null;\n    }\n\n    const value = userValue.trim();\n\n    if (value.length === 0) {\n      return null;\n    }\n\n    // Attempt to parse the value directly.\n    let result = this._parseTimeString(value);\n\n    // Some locales add extra characters around the time, but are otherwise parseable\n    // (e.g. `00:05 ч.` in bg-BG). Try replacing all non-number and non-colon characters.\n    if (result === null) {\n      // Try stripping non-essential characters\n      const withoutExtras = value.replace(/[^0-9:(AM|PM)]/gi, '').trim();\n\n      if (withoutExtras.length > 0) {\n        result = this._parseTimeString(withoutExtras);\n      }\n    }\n\n    return result || this.invalid();\n  }\n\n  override addSeconds(date: Date, amount: number): Date {\n    return new Date(date.getTime() + amount * 1000);\n  }\n\n  // =============================================================\n  // NG-ZORRO OPTIONAL: EXTENDED METHODS\n  // =============================================================\n\n  override getMilliseconds(date: Date): number {\n    return date.getMilliseconds();\n  }\n\n  override getTime(date: Date): number {\n    return date.getTime();\n  }\n\n  override getCalendarId(_date: Date): string {\n    // Native Date only supports Gregorian calendar\n    return 'gregory';\n  }\n\n  override isFirstDayOfMonth(date: Date): boolean {\n    return this.getDate(date) === 1;\n  }\n\n  override isLastDayOfMonth(date: Date): boolean {\n    return this.getDate(date) === this.getNumDaysInMonth(date);\n  }\n\n  override isToday(date: Date): boolean {\n    return this.sameDate(date, this.today());\n  }\n\n  override calendarStartOfMonth(date: Date): Date {\n    return this.createDate(this.getYear(date), this.getMonth(date), 1);\n  }\n\n  override calendarStartOfWeek(date: Date): Date {\n    const dayOfWeek = this.getDayOfWeek(date);\n    const firstDayOfWeek = this.getFirstDayOfWeek();\n    const diff = (dayOfWeek - firstDayOfWeek + 7) % 7;\n    const result = this.addCalendarDays(date, -diff);\n    result.setHours(0, 0, 0, 0);\n    return result;\n  }\n\n  // =============================================================\n  // PRIVATE: MATERIAL-STYLE HELPERS\n  // =============================================================\n\n  /**\n   * Creates a date allowing for month/date overflow (e.g., Jan 32 becomes Feb 1).\n   * This is how Material handles date creation internally.\n   */\n  private _createDateWithOverflow(year: number, month: number, date: number): Date {\n    const result = new Date();\n    result.setFullYear(year, month, date);\n    result.setHours(0, 0, 0, 0);\n    return result;\n  }\n\n  /** Pads a number to two digits for ISO formatting. */\n  private _2digit(n: number): string {\n    return `00${n}`.slice(-2);\n  }\n\n  /**\n   * Formats a date using Intl.DateTimeFormat while avoiding DST issues.\n   * Uses UTC internally to ensure consistent formatting across timezones.\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date): string {\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\n  }\n\n  /**\n   * Parses time strings in various formats (10:30, 10:30:45, 10:30 AM, etc.)\n   * Returns null if the string cannot be parsed.\n   */\n  private _parseTimeString(value: string): Date | null {\n    const parsed = value.toUpperCase().match(TIME_REGEX);\n    if (parsed) {\n      let hours = parseInt(parsed[1]);\n      const minutes = parseInt(parsed[2]);\n      const seconds: number | undefined = parsed[3] == null ? undefined : parseInt(parsed[3]);\n      const amPm = parsed[4] as 'AM' | 'PM' | undefined;\n\n      // Handle 12-hour format\n      if (hours === 12) {\n        hours = amPm === 'AM' ? 0 : hours;\n      } else if (amPm === 'PM') {\n        hours += 12;\n      }\n\n      if (inRange(hours, 0, 23) && inRange(minutes, 0, 59) && (seconds == null || inRange(seconds, 0, 59))) {\n        return this.setTime(this.today(), hours, minutes, seconds || 0);\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Parses the date-fns-style token subset used by NG-ZORRO default formats.\n   * This intentionally stays small; complex calendar parsing belongs in custom adapters.\n   */\n  private parseByToken(value: string, formatStr: string): Date | null {\n    const tokenPatterns: Record<string, string> = {\n      yyyy: '(?<year>\\\\d{4})',\n      yy: '(?<year2>\\\\d{2})',\n      MM: '(?<month>\\\\d{2})',\n      M: '(?<month>\\\\d{1,2})',\n      dd: '(?<day>\\\\d{2})',\n      d: '(?<day>\\\\d{1,2})',\n      HH: '(?<hour>\\\\d{2})',\n      H: '(?<hour>\\\\d{1,2})',\n      mm: '(?<minute>\\\\d{2})',\n      m: '(?<minute>\\\\d{1,2})',\n      ss: '(?<second>\\\\d{2})',\n      s: '(?<second>\\\\d{1,2})'\n    };\n    const tokens = Object.keys(tokenPatterns).sort((a, b) => b.length - a.length);\n    let source = '';\n    for (let i = 0; i < formatStr.length;) {\n      if (formatStr[i] === '[') {\n        const end = formatStr.indexOf(']', i + 1);\n        const literal = end === -1 ? formatStr.slice(i + 1) : formatStr.slice(i + 1, end);\n        source += this.escapeRegex(literal);\n        i = end === -1 ? formatStr.length : end + 1;\n        continue;\n      }\n      const token = tokens.find(item => formatStr.startsWith(item, i));\n      if (token) {\n        source += tokenPatterns[token];\n        i += token.length;\n      } else {\n        source += this.escapeRegex(formatStr[i]);\n        i++;\n      }\n    }\n    let match: RegExpMatchArray | null;\n    try {\n      match = value.match(new RegExp(`^${source}$`));\n    } catch {\n      return null;\n    }\n    if (!match?.groups) {\n      return null;\n    }\n    const year = match.groups['year']\n      ? Number(match.groups['year'])\n      : match.groups['year2']\n        ? 2000 + Number(match.groups['year2'])\n        : this.today().getFullYear();\n    const month = match.groups['month'] ? Number(match.groups['month']) - 1 : 0;\n    const day = match.groups['day'] ? Number(match.groups['day']) : 1;\n    const hour = match.groups['hour'] ? Number(match.groups['hour']) : 0;\n    const minute = match.groups['minute'] ? Number(match.groups['minute']) : 0;\n    const second = match.groups['second'] ? Number(match.groups['second']) : 0;\n    if (\n      !inRange(month, 0, 11) ||\n      !inRange(day, 1, 31) ||\n      !inRange(hour, 0, 23) ||\n      !inRange(minute, 0, 59) ||\n      !inRange(second, 0, 59)\n    ) {\n      return this.invalid();\n    }\n    const result = this.createDateOrInvalid(year, month, day);\n    if (!this.isValid(result)) {\n      return result;\n    }\n    return this.setTime(result, hour, minute, second);\n  }\n\n  private createDateOrInvalid(year: number, month: number, date: number): Date {\n    try {\n      const result = this.createDate(year, month, date);\n      return this.getYear(result) === year && this.getMonth(result) === month && this.getDate(result) === date\n        ? result\n        : this.invalid();\n    } catch {\n      return this.invalid();\n    }\n  }\n\n  private escapeRegex(value: string): string {\n    return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n  }\n\n  // =============================================================\n  // PRIVATE: NG-ZORRO TOKEN-BASED FORMATTING\n  // =============================================================\n\n  /**\n   * Formats a date using date-fns-style token strings.\n   * This is a NG-ZORRO extension for compatibility with existing formats.\n   */\n  private formatByToken(date: Date, formatStr: string): string {\n    if (!formatStr) {\n      return '';\n    }\n    const locale = this.locale as string;\n\n    const dtfMonthShort = new Intl.DateTimeFormat(locale, { month: 'short', timeZone: 'utc' });\n    const dtfMonthLong = new Intl.DateTimeFormat(locale, { month: 'long', timeZone: 'utc' });\n    const dtfWeekdayNarrow = new Intl.DateTimeFormat(locale, { weekday: 'narrow', timeZone: 'utc' });\n    const dtfWeekdayShort = new Intl.DateTimeFormat(locale, { weekday: 'short', timeZone: 'utc' });\n    const dtfWeekdayLong = new Intl.DateTimeFormat(locale, { weekday: 'long', timeZone: 'utc' });\n\n    const quarter = this.getQuarter(date);\n    const hour12 = date.getHours() % 12 || 12;\n    const tokenValues: Record<string, string> = {\n      yyyy: date.getFullYear().toString().padStart(4, '0'),\n      yy: this._2digit(date.getFullYear() % 100),\n      MMMM: this._format(dtfMonthLong, date),\n      MMM: this._format(dtfMonthShort, date),\n      MM: this._2digit(date.getMonth() + 1),\n      M: (date.getMonth() + 1).toString(),\n      dd: this._2digit(date.getDate()),\n      d: date.getDate().toString(),\n      EEEEEE: this._format(dtfWeekdayNarrow, date),\n      EEEEE: this._format(dtfWeekdayNarrow, date),\n      EEEE: this._format(dtfWeekdayLong, date),\n      EEE: this._format(dtfWeekdayShort, date),\n      EE: this._format(dtfWeekdayShort, date),\n      E: this._format(dtfWeekdayShort, date),\n      HH: this._2digit(date.getHours()),\n      H: date.getHours().toString(),\n      hh: this._2digit(hour12),\n      h: hour12.toString(),\n      mm: this._2digit(date.getMinutes()),\n      m: date.getMinutes().toString(),\n      ss: this._2digit(date.getSeconds()),\n      s: date.getSeconds().toString(),\n      ww: this._2digit(this.getISOWeek(date)),\n      w: this.getISOWeek(date).toString(),\n      QQQ: `Q${quarter}`,\n      QQ: this._2digit(quarter),\n      Q: quarter.toString(),\n      a: date.getHours() < 12 ? 'AM' : 'PM'\n    };\n    const tokens = Object.keys(tokenValues).sort((a, b) => b.length - a.length);\n    let result = '';\n\n    for (let i = 0; i < formatStr.length;) {\n      if (formatStr[i] === '[') {\n        const end = formatStr.indexOf(']', i + 1);\n        result += end === -1 ? formatStr.slice(i + 1) : formatStr.slice(i + 1, end);\n        i = end === -1 ? formatStr.length : end + 1;\n        continue;\n      }\n\n      if (formatStr[i] === 'Q') {\n        let end = i + 1;\n        while (formatStr[end] === 'Q') {\n          end++;\n        }\n        const length = end - i;\n        result += length >= 4 ? quarter.toString() : tokenValues['Q'.repeat(length)];\n        i = end;\n        continue;\n      }\n\n      const token = tokens.find(item => formatStr.startsWith(item, i));\n      if (token) {\n        result += tokenValues[token];\n        i += token.length;\n      } else {\n        result += formatStr[i];\n        i++;\n      }\n    }\n\n    return result;\n  }\n}\n\n/**\n * Provides the NativeDateAdapter as the NzDateAdapter implementation.\n * NativeDateAdapter uses native Date and Intl.DateTimeFormat.\n *\n * @param config Optional configuration for the adapter\n * @returns EnvironmentProviders for the NativeDateAdapter\n *\n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n *   providers: [provideNzNativeDateAdapter({ locale: 'en-US', firstDayOfWeek: 0 })]\n * };\n * ```\n */\nexport function provideNzNativeDateAdapter(config?: NzNativeDateAdapterConfig): EnvironmentProviders {\n  return provideNzDateAdapter(NativeDateAdapter, config);\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\n// from https://github.com/hsuanxyz/ng-time-parser\nimport { FormStyle, getLocaleDayPeriods, TranslationWidth } from '@angular/common';\n\nimport { isNotNil } from 'ng-zorro-antd/core/util';\n\nexport interface TimeResult {\n  hour: number | null;\n  minute: number | null;\n  second: number | null;\n  period: number | null;\n}\n\nexport class NgTimeParser {\n  regex: RegExp = null!;\n  matchMap: Record<string, null | number> = {\n    hour: null,\n    minute: null,\n    second: null,\n    periodNarrow: null,\n    periodWide: null,\n    periodAbbreviated: null\n  };\n\n  constructor(\n    private format: string,\n    private localeId: string\n  ) {\n    this.genRegexp();\n  }\n\n  toDate(str: string): Date {\n    const result = this.getTimeResult(str);\n    const time = new Date();\n\n    if (isNotNil(result?.hour)) {\n      time.setHours(result!.hour);\n    }\n\n    if (isNotNil(result?.minute)) {\n      time.setMinutes(result!.minute);\n    }\n\n    if (isNotNil(result?.second)) {\n      time.setSeconds(result!.second);\n    }\n\n    if (result?.period === 1 && time.getHours() < 12) {\n      time.setHours(time.getHours() + 12);\n    }\n\n    return time;\n  }\n\n  getTimeResult(str: string): TimeResult | null {\n    const match = this.regex.exec(str);\n    let period = null;\n    if (match) {\n      if (isNotNil(this.matchMap.periodNarrow)) {\n        period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).indexOf(\n          match[this.matchMap.periodNarrow + 1]\n        );\n      }\n      if (isNotNil(this.matchMap.periodWide)) {\n        period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).indexOf(\n          match[this.matchMap.periodWide + 1]\n        );\n      }\n      if (isNotNil(this.matchMap.periodAbbreviated)) {\n        period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Abbreviated).indexOf(\n          match[this.matchMap.periodAbbreviated + 1]\n        );\n      }\n      return {\n        hour: isNotNil(this.matchMap.hour) ? Number.parseInt(match[this.matchMap.hour + 1], 10) : null,\n        minute: isNotNil(this.matchMap.minute) ? Number.parseInt(match[this.matchMap.minute + 1], 10) : null,\n        second: isNotNil(this.matchMap.second) ? Number.parseInt(match[this.matchMap.second + 1], 10) : null,\n        period\n      };\n    } else {\n      return null;\n    }\n  }\n\n  genRegexp(): void {\n    let regexStr = this.format.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$&');\n    const hourRegex = /h{1,2}/i;\n    const minuteRegex = /m{1,2}/;\n    const secondRegex = /s{1,2}/;\n    const periodNarrow = /aaaaa/;\n    const periodWide = /aaaa/;\n    const periodAbbreviated = /a{1,3}/;\n\n    const hourMatch = hourRegex.exec(this.format);\n    const minuteMatch = minuteRegex.exec(this.format);\n    const secondMatch = secondRegex.exec(this.format);\n    const periodNarrowMatch = periodNarrow.exec(this.format);\n    let periodWideMatch: null | RegExpExecArray = null;\n    let periodAbbreviatedMatch: null | RegExpExecArray = null;\n    if (!periodNarrowMatch) {\n      periodWideMatch = periodWide.exec(this.format);\n    }\n    if (!periodWideMatch && !periodNarrowMatch) {\n      periodAbbreviatedMatch = periodAbbreviated.exec(this.format);\n    }\n\n    const matchs = [hourMatch, minuteMatch, secondMatch, periodNarrowMatch, periodWideMatch, periodAbbreviatedMatch]\n      .filter(m => !!m)\n      .sort((a, b) => a!.index - b!.index);\n\n    matchs.forEach((match, index) => {\n      switch (match) {\n        case hourMatch:\n          this.matchMap.hour = index;\n          regexStr = regexStr.replace(hourRegex, '(\\\\d{1,2})');\n          break;\n        case minuteMatch:\n          this.matchMap.minute = index;\n          regexStr = regexStr.replace(minuteRegex, '(\\\\d{1,2})');\n          break;\n        case secondMatch:\n          this.matchMap.second = index;\n          regexStr = regexStr.replace(secondRegex, '(\\\\d{1,2})');\n          break;\n        case periodNarrowMatch: {\n          this.matchMap.periodNarrow = index;\n          const periodsNarrow = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).join('|');\n          regexStr = regexStr.replace(periodNarrow, `(${periodsNarrow})`);\n          break;\n        }\n        case periodWideMatch: {\n          this.matchMap.periodWide = index;\n          const periodsWide = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).join('|');\n          regexStr = regexStr.replace(periodWide, `(${periodsWide})`);\n          break;\n        }\n        case periodAbbreviatedMatch: {\n          this.matchMap.periodAbbreviated = index;\n          const periodsAbbreviated = getLocaleDayPeriods(\n            this.localeId,\n            FormStyle.Format,\n            TranslationWidth.Abbreviated\n          ).join('|');\n          regexStr = regexStr.replace(periodAbbreviated, `(${periodsAbbreviated})`);\n          break;\n        }\n      }\n    });\n\n    this.regex = new RegExp(regexStr);\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './candy-date';\nexport * from './time';\nexport * from './date-adapter';\nexport * from './date-config';\nexport { DateFnsDateAdapter, provideNzDateFnsAdapter } from './date-fns-adapter';\nexport type { NzDateFnsAdapterConfig } from './date-fns-adapter';\nexport { NativeDateAdapter, provideNzNativeDateAdapter } from './native-adapter';\nexport type { NzNativeDateAdapterConfig } from './native-adapter';\nexport { NgTimeParser as ɵNgTimeParser } from './time-parser';\nexport type { TimeResult as ɵTimeResult } from './time-parser';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["fnsFormat","format","fnsParse"],"mappings":"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"}