{"version":3,"file":"ngwr-date-adapter.mjs","sources":["../../../projects/lib/date-adapter/wr-date-adapter.ts","../../../projects/lib/date-adapter/tokens/wr-date-locale.token.ts","../../../projects/lib/date-adapter/wr-native-date-adapter.ts","../../../projects/lib/date-adapter/provide-wr-date-adapter.ts","../../../projects/lib/date-adapter/ngwr-date-adapter.ts"],"sourcesContent":["/**\n * @license\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/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport type { WrDateFormat } from './interfaces';\n\n/**\n * Abstraction over a date object so the calendar, date picker and time picker\n * can work with `Date`, `date-fns`, `luxon`, or any other library a consumer\n * prefers — without changing component code.\n *\n * Default implementation: {@link WrNativeDateAdapter} (native `Date`,\n * `Intl.DateTimeFormat`). Register a different adapter via\n * `provideWrDateAdapter({ adapter: MyAdapter })`.\n *\n * Used as both the type and the DI token — `inject(WrDateAdapter)` works\n * directly thanks to Angular's class-as-token resolution.\n *\n * Every \"mutating\" method (`addX`, `setTime`) returns a **new** value;\n * adapters never mutate in place so consumers can pass dates around safely.\n */\nexport abstract class WrDateAdapter<TDate = Date> {\n  // Construction & identity\n\n  /** Current moment. */\n  abstract today(): TDate;\n\n  /** Defensive clone — must return an independent value, never the same reference. */\n  abstract clone(date: TDate): TDate;\n\n  /** Build a date from year / month (0-based) / day. */\n  abstract createDate(year: number, month: number, day: number): TDate;\n\n  /** `false` for `NaN` / invalid input. */\n  abstract isValid(date: TDate): boolean;\n\n  // Accessors\n\n  abstract getYear(date: TDate): number;\n  /** `0` (January) – `11` (December). */\n  abstract getMonth(date: TDate): number;\n  /** Day of the month, `1`-`31`. */\n  abstract getDate(date: TDate): number;\n  /** `0` (Sunday) – `6` (Saturday). */\n  abstract getDayOfWeek(date: TDate): number;\n  abstract getDaysInMonth(date: TDate): number;\n  abstract getHours(date: TDate): number;\n  abstract getMinutes(date: TDate): number;\n  abstract getSeconds(date: TDate): number;\n\n  // Immutable math\n\n  abstract addYears(date: TDate, amount: number): TDate;\n  abstract addMonths(date: TDate, amount: number): TDate;\n  abstract addDays(date: TDate, amount: number): TDate;\n  /** Returns a new date with the time portion replaced. */\n  abstract setTime(date: TDate, hours: number, minutes: number, seconds: number): TDate;\n\n  // Comparison\n\n  abstract isSameDay(a: TDate, b: TDate): boolean;\n  abstract isSameMonth(a: TDate, b: TDate): boolean;\n  /** Negative if `a < b`, positive if `a > b`, zero if equal (compared at day precision). */\n  abstract compareDate(a: TDate, b: TDate): number;\n\n  /**\n   * Convenience used by the calendar's range UI. Inclusive on both ends.\n   * Implementation can stay on the base class because it delegates to\n   * `compareDate`.\n   */\n  isWithinRange(date: TDate, start: TDate, end: TDate): boolean {\n    return this.compareDate(date, start) >= 0 && this.compareDate(date, end) <= 0;\n  }\n\n  // Formatting / parsing\n\n  /**\n   * Format a date. Accepts either a named {@link WrDateFormat} key (which the\n   * adapter resolves locale-aware) or a raw format string (`'dd.MM.yyyy'`).\n   *\n   * Supported tokens for raw strings: `yyyy`, `yy`, `MMMM`, `MMM`, `MM`, `M`,\n   * `dd`, `d`, `HH`, `H`, `hh`, `h`, `mm`, `ss`, `a` (am / pm).\n   */\n  abstract format(date: TDate, formatKeyOrString: WrDateFormat | (string & {})): string;\n\n  /**\n   * Parse a string into a date. Returns `null` when parsing fails. Accepts\n   * the same `formatKeyOrString` set as {@link format}.\n   */\n  abstract parse(value: string, formatKeyOrString: WrDateFormat | (string & {})): TDate | null;\n\n  // Locale info\n\n  /** `0` Sunday, `1` Monday — locale-dependent. */\n  abstract getFirstDayOfWeek(): number;\n\n  /** Names ordered from `getFirstDayOfWeek()` onwards. Length 7. */\n  abstract getDayOfWeekNames(style: 'narrow' | 'short' | 'long'): readonly string[];\n\n  /** Names from January (index `0`) to December (`11`). Length 12. */\n  abstract getMonthNames(style: 'narrow' | 'short' | 'long'): readonly string[];\n}\n","/**\n * @license\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/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { InjectionToken } from '@angular/core';\n\n/**\n * BCP 47 locale tag used by {@link WrDateAdapter} implementations for\n * formatting, parsing, and locale-derived defaults (first day of week,\n * month / day names). Defaults to `navigator.language` in the browser and\n * `'en-US'` on the server.\n *\n * Override via {@link provideWrDateAdapter}'s `locale` option.\n */\nexport const WR_DATE_LOCALE = new InjectionToken<string>('WR_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: () => {\n    if (typeof navigator !== 'undefined' && navigator.language) {\n      return navigator.language;\n    }\n    return 'en-US';\n  },\n});\n","/**\n * @license\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/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Service, inject } from '@angular/core';\n\nimport type { WrDateFormat } from './interfaces';\nimport { WR_DATE_LOCALE } from './tokens';\nimport { WrDateAdapter } from './wr-date-adapter';\n\nconst NAMED_KEYS = new Set<WrDateFormat>([\n  'shortDate',\n  'mediumDate',\n  'longDate',\n  'time',\n  'shortDateTime',\n  'mediumDateTime',\n]);\n\nconst INTL_OPTIONS: Readonly<Record<WrDateFormat, Intl.DateTimeFormatOptions>> = {\n  shortDate: { year: 'numeric', month: 'numeric', day: 'numeric' },\n  mediumDate: { year: 'numeric', month: 'short', day: 'numeric' },\n  longDate: { year: 'numeric', month: 'long', day: 'numeric' },\n  time: { hour: '2-digit', minute: '2-digit' },\n  shortDateTime: { year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit' },\n  mediumDateTime: { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' },\n};\n\n/** Recognised tokens, longest first so `MMMM` matches before `MMM`. */\nconst TOKEN_RE = /yyyy|yy|MMMM|MMM|MM|M|dd|d|HH|H|hh|h|mm|ss|a/g;\n\nconst MS_PER_DAY = 86_400_000;\n\nfunction pad(n: number, width = 2): string {\n  return String(Math.abs(n)).padStart(width, '0');\n}\n\n/** Whether `value` is one of the shared named format keys. */\nfunction isNamedFormat(value: string): value is WrDateFormat {\n  return NAMED_KEYS.has(value as WrDateFormat);\n}\n\nfunction tokenToRegex(token: string): string {\n  switch (token) {\n    case 'yyyy':\n      return '(\\\\d{4})';\n    case 'yy':\n      return '(\\\\d{2})';\n    case 'MM':\n    case 'dd':\n    case 'HH':\n    case 'hh':\n    case 'mm':\n    case 'ss':\n      return '(\\\\d{2})';\n    case 'M':\n    case 'd':\n    case 'H':\n    case 'h':\n      return '(\\\\d{1,2})';\n    case 'a':\n      return '(am|pm|AM|PM)';\n    default:\n      return '(.+)';\n  }\n}\n\n/**\n * Reference {@link WrDateAdapter} implementation backed by the native `Date`\n * object and `Intl.DateTimeFormat`. Zero external dependencies. Suitable for\n * most apps — swap to a `date-fns` / `luxon` adapter only when you need\n * timezone-aware math or richer parsing.\n */\n@Service()\nexport class WrNativeDateAdapter extends WrDateAdapter<Date> {\n  private readonly locale = inject(WR_DATE_LOCALE);\n\n  // Construction & identity\n\n  today(): Date {\n    return new Date();\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, day: number): Date {\n    // Native Date constructor with year < 100 maps to 1900 + year unless we explicitly setFullYear.\n    const d = new Date(year, month, day);\n    if (year >= 0 && year < 100) d.setFullYear(year);\n    return d;\n  }\n\n  isValid(date: Date): boolean {\n    return date instanceof Date && !Number.isNaN(date.getTime());\n  }\n\n  // Accessors\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  getDaysInMonth(date: Date): number {\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n  }\n\n  getHours(date: Date): number {\n    return date.getHours();\n  }\n\n  getMinutes(date: Date): number {\n    return date.getMinutes();\n  }\n\n  getSeconds(date: Date): number {\n    return date.getSeconds();\n  }\n\n  // Immutable math\n\n  addYears(date: Date, amount: number): Date {\n    const d = this.clone(date);\n    d.setFullYear(d.getFullYear() + amount);\n    return d;\n  }\n\n  addMonths(date: Date, amount: number): Date {\n    const d = this.clone(date);\n    const desiredDay = d.getDate();\n    d.setDate(1);\n    d.setMonth(d.getMonth() + amount);\n    // Clamp day to the new month's length (Jan 31 + 1 month → Feb 28/29).\n    d.setDate(Math.min(desiredDay, this.getDaysInMonth(d)));\n    return d;\n  }\n\n  addDays(date: Date, amount: number): Date {\n    return new Date(date.getTime() + amount * MS_PER_DAY);\n  }\n\n  setTime(date: Date, hours: number, minutes: number, seconds: number): Date {\n    const d = this.clone(date);\n    d.setHours(hours, minutes, seconds, 0);\n    return d;\n  }\n\n  // Comparison\n\n  isSameDay(a: Date, b: Date): boolean {\n    return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n  }\n\n  isSameMonth(a: Date, b: Date): boolean {\n    return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n  }\n\n  compareDate(a: Date, b: Date): number {\n    const ay = a.getFullYear();\n    const by = b.getFullYear();\n    if (ay !== by) return ay - by;\n    const am = a.getMonth();\n    const bm = b.getMonth();\n    if (am !== bm) return am - bm;\n    return a.getDate() - b.getDate();\n  }\n\n  // Formatting / parsing\n\n  // `(string & {})` keeps autocomplete for the WrDateFormat literals\n  // while still accepting any other string as a raw token pattern.\n  format(date: Date, formatKeyOrString: WrDateFormat | (string & {})): string {\n    if (isNamedFormat(formatKeyOrString)) {\n      return new Intl.DateTimeFormat(this.locale, INTL_OPTIONS[formatKeyOrString]).format(date);\n    }\n    return this.formatWithTokens(date, formatKeyOrString);\n  }\n\n  parse(value: string, formatKeyOrString: WrDateFormat | (string & {})): Date | null {\n    const raw = value?.trim();\n    if (!raw) return null;\n\n    // Named formats fall back to `new Date()` parsing — best-effort, locale-fragile.\n    if (isNamedFormat(formatKeyOrString)) {\n      const d = new Date(raw);\n      return this.isValid(d) ? d : null;\n    }\n\n    return this.parseWithTokens(raw, formatKeyOrString);\n  }\n\n  // Locale info\n\n  getFirstDayOfWeek(): number {\n    // `Intl.Locale.prototype.getWeekInfo` is Stage 3 — not in TS lib types yet,\n    // so we probe at runtime through an unknown cast.\n    try {\n      const locale = new Intl.Locale(this.locale) as unknown as { getWeekInfo?: () => { firstDay: number } };\n      const info = locale.getWeekInfo?.();\n      if (info && typeof info.firstDay === 'number') {\n        // Intl uses 1 (Mon) – 7 (Sun); we use 0 (Sun) – 6 (Sat).\n        return info.firstDay % 7;\n      }\n    } catch {\n      // Browser doesn't support Intl.Locale or getWeekInfo — fall through.\n    }\n    return this.locale.toLowerCase().startsWith('en-us') ? 0 : 1;\n  }\n\n  getDayOfWeekNames(style: 'narrow' | 'short' | 'long'): readonly string[] {\n    const formatter = new Intl.DateTimeFormat(this.locale, { weekday: style });\n    const first = this.getFirstDayOfWeek();\n    // Pick a reference Sunday and walk seven days.\n    const base = new Date(2024, 0, 7); // Sunday 7 Jan 2024\n    const out: string[] = [];\n    for (let i = 0; i < 7; i++) {\n      const d = new Date(base);\n      d.setDate(base.getDate() + ((first + i) % 7));\n      out.push(formatter.format(d));\n    }\n    return out;\n  }\n\n  getMonthNames(style: 'narrow' | 'short' | 'long'): readonly string[] {\n    const formatter = new Intl.DateTimeFormat(this.locale, { month: style });\n    const out: string[] = [];\n    for (let i = 0; i < 12; i++) {\n      out.push(formatter.format(new Date(2024, i, 15)));\n    }\n    return out;\n  }\n\n  // Internals: token-based format / parse\n\n  private formatWithTokens(date: Date, pattern: string): string {\n    const year = date.getFullYear();\n    const month = date.getMonth();\n    const day = date.getDate();\n    const hours24 = date.getHours();\n    const hours12 = hours24 % 12 === 0 ? 12 : hours24 % 12;\n    const minutes = date.getMinutes();\n    const seconds = date.getSeconds();\n    const monthNames = this.getMonthNames('long');\n    const monthShort = this.getMonthNames('short');\n\n    return pattern.replace(TOKEN_RE, token => {\n      switch (token) {\n        case 'yyyy':\n          return pad(year, 4);\n        case 'yy':\n          return pad(year % 100, 2);\n        case 'MMMM':\n          return monthNames[month] ?? '';\n        case 'MMM':\n          return monthShort[month] ?? '';\n        case 'MM':\n          return pad(month + 1);\n        case 'M':\n          return String(month + 1);\n        case 'dd':\n          return pad(day);\n        case 'd':\n          return String(day);\n        case 'HH':\n          return pad(hours24);\n        case 'H':\n          return String(hours24);\n        case 'hh':\n          return pad(hours12);\n        case 'h':\n          return String(hours12);\n        case 'mm':\n          return pad(minutes);\n        case 'ss':\n          return pad(seconds);\n        case 'a':\n          return hours24 < 12 ? 'am' : 'pm';\n      }\n      return token;\n    });\n  }\n\n  private parseWithTokens(value: string, pattern: string): Date | null {\n    const tokens: string[] = [];\n    const escaped = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    const regex = escaped.replace(TOKEN_RE, token => {\n      tokens.push(token);\n      return tokenToRegex(token);\n    });\n\n    const match = new RegExp(`^${regex}$`).exec(value);\n    if (!match) return null;\n\n    let year = new Date().getFullYear();\n    let month = 0;\n    let day = 1;\n    let hours = 0;\n    let minutes = 0;\n    let seconds = 0;\n    let isPm = false;\n    let hadHour12 = false;\n    let hour12 = 0;\n\n    for (let i = 0; i < tokens.length; i++) {\n      const token = tokens[i];\n      const raw = match[i + 1];\n      const n = Number(raw);\n      switch (token) {\n        case 'yyyy':\n          year = n;\n          break;\n        case 'yy':\n          year = 2000 + n;\n          break;\n        case 'MM':\n        case 'M':\n          month = n - 1;\n          break;\n        case 'dd':\n        case 'd':\n          day = n;\n          break;\n        case 'HH':\n        case 'H':\n          hours = n;\n          break;\n        case 'hh':\n        case 'h':\n          hadHour12 = true;\n          hour12 = n;\n          break;\n        case 'mm':\n          minutes = n;\n          break;\n        case 'ss':\n          seconds = n;\n          break;\n        case 'a':\n          isPm = raw.toLowerCase() === 'pm';\n          break;\n      }\n    }\n\n    if (hadHour12) {\n      hours = (hour12 % 12) + (isPm ? 12 : 0);\n    }\n\n    const out = new Date(year, month, day, hours, minutes, seconds);\n    return this.isValid(out) ? out : null;\n  }\n}\n\nexport { isNamedFormat };\n","/**\n * @license\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/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport type { WrDateAdapterOptions } from './interfaces';\nimport { WR_DATE_LOCALE } from './tokens';\nimport { WrDateAdapter } from './wr-date-adapter';\nimport { WrNativeDateAdapter } from './wr-native-date-adapter';\n\n/**\n * Register the date adapter and locale used by the calendar / date picker /\n * time picker. Call once at bootstrap.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideWrDateAdapter(),                 // native, browser locale\n *     // provideWrDateAdapter({ locale: 'ru-RU' }),\n *     // provideWrDateAdapter({ adapter: MyDateFnsAdapter, locale: 'fr' }),\n *   ],\n * });\n * ```\n */\nexport function provideWrDateAdapter(options: WrDateAdapterOptions = {}): EnvironmentProviders {\n  const providers: Parameters<typeof makeEnvironmentProviders>[0] = [\n    { provide: WrDateAdapter, useClass: options.adapter ?? WrNativeDateAdapter },\n  ];\n\n  if (options.locale) {\n    providers.push({ provide: WR_DATE_LOCALE, useValue: options.locale });\n  }\n\n  return makeEnvironmentProviders(providers);\n}\n\nexport type { WrDateAdapterOptions } from './interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}