{"version":3,"file":"ngwr-calendar.mjs","sources":["../../../projects/lib/calendar/calendar.ts","../../../projects/lib/calendar/calendar.html","../../../projects/lib/calendar/ngwr-calendar.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 { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  afterNextRender,\n  computed,\n  effect,\n  inject,\n  input,\n  model,\n  signal,\n  untracked,\n} from '@angular/core';\n\nimport { WrDateAdapter } from 'ngwr/date-adapter';\n\nimport type { WrCalendarMode, WrCalendarRange } from './interfaces';\n\nconst ROWS = 6;\nconst COLS = 7;\n\n/**\n * Month-view calendar. Supports single-date selection (`mode=\"single\"`) or\n * date-range selection (`mode=\"range\"`). Reusable on its own; consumed by\n * `<wr-date-picker>` inside an overlay.\n *\n * Uses {@link WrDateAdapter} for all date math and formatting — register\n * one via {@link provideWrDateAdapter} at bootstrap.\n *\n * @example\n * ```html\n * <wr-calendar [(date)]=\"picked\" [min]=\"minDate\" />\n *\n * <wr-calendar mode=\"range\" [(range)]=\"[start, end]\" />\n * ```\n *\n * @see https://ngwr.dev/components/calendar\n */\n@Component({\n  selector: 'wr-calendar',\n  templateUrl: './calendar.html',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    '[class]': 'classes()',\n    role: 'grid',\n    '(keydown)': 'onKeyDown($event)',\n  },\n})\nexport class WrCalendar {\n  /** Selection mode. @default 'single' */\n  readonly mode = input<WrCalendarMode>('single');\n\n  /** Two-way bindable single value (used when `mode === 'single'`). */\n  readonly date = model<Date | null>(null);\n\n  /** Two-way bindable `[start, end]` (used when `mode === 'range'`). */\n  readonly range = model<WrCalendarRange>([null, null]);\n\n  /** Min selectable date (inclusive). */\n  readonly min = input<Date | null>(null);\n\n  /** Max selectable date (inclusive). */\n  readonly max = input<Date | null>(null);\n\n  /** Predicate — return `false` to disable specific dates (e.g. weekends only). */\n  readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n\n  /** Disable interaction entirely. @default false */\n  readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n  private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** Currently displayed month (any date inside it). */\n  protected readonly viewDate = signal(this.adapter.today());\n\n  /** Date currently focused by keyboard (single roving tabindex). */\n  protected readonly focusedDate = signal(this.adapter.today());\n\n  /** Hovered date during range-mode end-pick — drives the preview highlight. */\n  protected readonly hoverDate = signal<Date | null>(null);\n\n  /** Which sub-view is currently shown. Cycles `day → month → year` on header click. */\n  protected readonly viewMode = signal<'day' | 'month' | 'year'>('day');\n\n  protected readonly today = computed(() => this.adapter.today());\n\n  protected readonly weekdayNames = computed(() => this.adapter.getDayOfWeekNames('short'));\n\n  protected readonly monthsView = computed(() => this.adapter.getMonthNames('short'));\n\n  /** 12-year window centered on the floor-aligned decade containing `viewDate`. */\n  protected readonly yearsView = computed<readonly number[]>(() => {\n    const y = this.adapter.getYear(this.viewDate());\n    const start = Math.floor(y / 12) * 12;\n    return Array.from({ length: 12 }, (_, i) => start + i);\n  });\n\n  protected readonly headerLabel = computed(() => {\n    const v = this.viewDate();\n    switch (this.viewMode()) {\n      case 'day': {\n        const monthNames = this.adapter.getMonthNames('long');\n        return `${monthNames[this.adapter.getMonth(v)]} ${this.adapter.getYear(v)}`;\n      }\n      case 'month':\n        return `${this.adapter.getYear(v)}`;\n      case 'year': {\n        const years = this.yearsView();\n        return `${years[0]} – ${years[years.length - 1]}`;\n      }\n    }\n  });\n\n  /** 6×7 day grid covering the current month plus spillover. */\n  protected readonly weeks = computed<readonly (readonly Date[])[]>(() => {\n    const view = this.viewDate();\n    const year = this.adapter.getYear(view);\n    const month = this.adapter.getMonth(view);\n    const firstOfMonth = this.adapter.createDate(year, month, 1);\n    const firstWeekday = this.adapter.getDayOfWeek(firstOfMonth);\n    const firstDayOfWeek = this.adapter.getFirstDayOfWeek();\n    const lead = (firstWeekday - firstDayOfWeek + 7) % 7;\n    const gridStart = this.adapter.addDays(firstOfMonth, -lead);\n\n    const out: Date[][] = [];\n    for (let w = 0; w < ROWS; w++) {\n      const row: Date[] = [];\n      for (let d = 0; d < COLS; d++) {\n        row.push(this.adapter.addDays(gridStart, w * COLS + d));\n      }\n      out.push(row);\n    }\n    return out;\n  });\n\n  protected readonly classes = computed(() => {\n    const parts = ['wr-calendar', `wr-calendar--${this.mode()}`];\n    if (this.disabled()) parts.push('wr-calendar--disabled');\n    return parts.join(' ');\n  });\n\n  constructor() {\n    // Initial focus: selected date if any, else today. Also snap viewDate to that month.\n    afterNextRender(() => {\n      const initial = this.date() ?? this.range()[0] ?? this.adapter.today();\n      this.focusedDate.set(initial);\n      this.viewDate.set(initial);\n    });\n\n    // Keep viewDate in sync when date / range changes externally to a\n    // different month. The viewDate read must stay untracked — otherwise\n    // the effect re-runs on every internal navigation (month stepping,\n    // year picking) and snaps the view back to the selected month.\n    effect(() => {\n      const candidate = this.mode() === 'single' ? this.date() : this.range()[0];\n      if (!candidate) return;\n      untracked(() => {\n        if (!this.adapter.isSameMonth(candidate, this.viewDate())) {\n          this.viewDate.set(candidate);\n        }\n      });\n    });\n  }\n\n  // Navigation\n\n  /** Header `‹` button — steps by month / year / decade based on the active view. */\n  protected prev(): void {\n    this.viewDate.set(this.stepViewDate(-1));\n  }\n\n  /** Header `›` button — steps by month / year / decade based on the active view. */\n  protected next(): void {\n    this.viewDate.set(this.stepViewDate(1));\n  }\n\n  /** Header label click — zooms out (`day → month → year`). No-op at year view. */\n  protected onLabelClick(): void {\n    if (this.disabled()) return;\n    if (this.viewMode() === 'day') {\n      this.viewMode.set('month');\n    } else if (this.viewMode() === 'month') {\n      this.viewMode.set('year');\n    }\n  }\n\n  protected onMonthSelect(monthIdx: number): void {\n    if (this.isMonthDisabled(monthIdx)) return;\n    const v = this.viewDate();\n    this.viewDate.set(this.adapter.createDate(this.adapter.getYear(v), monthIdx, 1));\n    this.viewMode.set('day');\n  }\n\n  protected onYearSelect(year: number): void {\n    if (this.isYearDisabled(year)) return;\n    const v = this.viewDate();\n    this.viewDate.set(this.adapter.createDate(year, this.adapter.getMonth(v), 1));\n    this.viewMode.set('month');\n  }\n\n  private stepViewDate(direction: -1 | 1): Date {\n    const v = this.viewDate();\n    switch (this.viewMode()) {\n      case 'day':\n        return this.adapter.addMonths(v, direction);\n      case 'month':\n        return this.adapter.addYears(v, direction);\n      case 'year':\n        return this.adapter.addYears(v, direction * 12);\n    }\n  }\n\n  // Cell state predicates (used by template)\n\n  protected isToday(date: Date): boolean {\n    return this.adapter.isSameDay(date, this.today());\n  }\n\n  protected isOutOfMonth(date: Date): boolean {\n    return !this.adapter.isSameMonth(date, this.viewDate());\n  }\n\n  protected isSelected(date: Date): boolean {\n    if (this.mode() === 'single') {\n      const v = this.date();\n      return v ? this.adapter.isSameDay(date, v) : false;\n    }\n    const [start, end] = this.range();\n    if (start && this.adapter.isSameDay(date, start)) return true;\n    if (end && this.adapter.isSameDay(date, end)) return true;\n    return false;\n  }\n\n  protected isInRange(date: Date): boolean {\n    if (this.mode() !== 'range') return false;\n    const [start, end] = this.range();\n    if (!start || !end) return false;\n    return this.adapter.compareDate(date, start) > 0 && this.adapter.compareDate(date, end) < 0;\n  }\n\n  protected isInRangePreview(date: Date): boolean {\n    if (this.mode() !== 'range') return false;\n    const [start, end] = this.range();\n    const hover = this.hoverDate();\n    if (!start || end || !hover) return false;\n    const before = this.adapter.compareDate(start, hover) <= 0;\n    const lo = before ? start : hover;\n    const hi = before ? hover : start;\n    return this.adapter.compareDate(date, lo) > 0 && this.adapter.compareDate(date, hi) < 0;\n  }\n\n  protected isFocused(date: Date): boolean {\n    return this.adapter.isSameDay(date, this.focusedDate());\n  }\n\n  protected isDisabled(date: Date): boolean {\n    if (this.disabled()) return true;\n    const min = this.min();\n    if (min && this.adapter.compareDate(date, min) < 0) return true;\n    const max = this.max();\n    if (max && this.adapter.compareDate(date, max) > 0) return true;\n    const filter = this.dateFilter();\n    if (filter && !filter(date)) return true;\n    return false;\n  }\n\n  // Month / year view predicates\n\n  protected isMonthCurrent(monthIdx: number): boolean {\n    return this.adapter.getMonth(this.viewDate()) === monthIdx;\n  }\n\n  protected isMonthSelected(monthIdx: number): boolean {\n    const v = this.mode() === 'single' ? this.date() : this.range()[0];\n    if (!v) return false;\n    return this.adapter.getYear(v) === this.adapter.getYear(this.viewDate()) && this.adapter.getMonth(v) === monthIdx;\n  }\n\n  protected isMonthDisabled(monthIdx: number): boolean {\n    if (this.disabled()) return true;\n    const year = this.adapter.getYear(this.viewDate());\n    const monthStart = this.adapter.createDate(year, monthIdx, 1);\n    const monthEnd = this.adapter.createDate(year, monthIdx, this.adapter.getDaysInMonth(monthStart));\n    const min = this.min();\n    if (min && this.adapter.compareDate(monthEnd, min) < 0) return true;\n    const max = this.max();\n    if (max && this.adapter.compareDate(monthStart, max) > 0) return true;\n    return false;\n  }\n\n  protected isYearCurrent(year: number): boolean {\n    return this.adapter.getYear(this.viewDate()) === year;\n  }\n\n  protected isYearSelected(year: number): boolean {\n    const v = this.mode() === 'single' ? this.date() : this.range()[0];\n    return v ? this.adapter.getYear(v) === year : false;\n  }\n\n  protected isYearDisabled(year: number): boolean {\n    if (this.disabled()) return true;\n    const min = this.min();\n    if (min && year < this.adapter.getYear(min)) return true;\n    const max = this.max();\n    if (max && year > this.adapter.getYear(max)) return true;\n    return false;\n  }\n\n  // Interaction\n\n  protected onCellClick(date: Date): void {\n    if (this.isDisabled(date)) return;\n    if (this.mode() === 'single') {\n      this.date.set(this.adapter.clone(date));\n    } else {\n      this.applyRangeClick(date);\n    }\n    this.focusedDate.set(date);\n    if (!this.adapter.isSameMonth(date, this.viewDate())) {\n      this.viewDate.set(date);\n    }\n  }\n\n  protected onCellEnter(date: Date): void {\n    if (this.mode() === 'range') this.hoverDate.set(date);\n  }\n\n  protected onCellLeave(): void {\n    if (this.mode() === 'range') this.hoverDate.set(null);\n  }\n\n  private applyRangeClick(date: Date): void {\n    const [start, end] = this.range();\n    if (!start || (start && end)) {\n      this.range.set([this.adapter.clone(date), null]);\n      return;\n    }\n    if (this.adapter.compareDate(date, start) < 0) {\n      this.range.set([this.adapter.clone(date), start]);\n    } else {\n      this.range.set([start, this.adapter.clone(date)]);\n    }\n    this.hoverDate.set(null);\n  }\n\n  // Keyboard\n\n  protected onKeyDown(event: KeyboardEvent): void {\n    if (this.disabled()) return;\n    const current = this.focusedDate();\n    let next: Date | null = null;\n\n    switch (event.key) {\n      case 'ArrowLeft':\n        next = this.adapter.addDays(current, -1);\n        break;\n      case 'ArrowRight':\n        next = this.adapter.addDays(current, 1);\n        break;\n      case 'ArrowUp':\n        next = this.adapter.addDays(current, -7);\n        break;\n      case 'ArrowDown':\n        next = this.adapter.addDays(current, 7);\n        break;\n      case 'Home': {\n        const dow = this.adapter.getDayOfWeek(current);\n        const first = this.adapter.getFirstDayOfWeek();\n        next = this.adapter.addDays(current, -((dow - first + 7) % 7));\n        break;\n      }\n      case 'End': {\n        const dow = this.adapter.getDayOfWeek(current);\n        const first = this.adapter.getFirstDayOfWeek();\n        next = this.adapter.addDays(current, 6 - ((dow - first + 7) % 7));\n        break;\n      }\n      case 'PageUp':\n        next = event.shiftKey ? this.adapter.addYears(current, -1) : this.adapter.addMonths(current, -1);\n        break;\n      case 'PageDown':\n        next = event.shiftKey ? this.adapter.addYears(current, 1) : this.adapter.addMonths(current, 1);\n        break;\n      case 'Enter':\n      case ' ':\n        event.preventDefault();\n        this.onCellClick(current);\n        return;\n    }\n\n    if (!next) return;\n    event.preventDefault();\n    this.focusedDate.set(next);\n    if (!this.adapter.isSameMonth(next, this.viewDate())) {\n      this.viewDate.set(next);\n    }\n    queueMicrotask(() => this.focusActiveCell());\n  }\n\n  private focusActiveCell(): void {\n    const el = this.host.nativeElement.querySelector('.wr-calendar__day--focused');\n    (el as HTMLElement | null)?.focus();\n  }\n\n  /** Used by the template's `track` expression. */\n  protected trackByTime(_: number, date: Date): number {\n    return date.getTime();\n  }\n}\n","<div class=\"wr-calendar__header\">\n  <button\n    type=\"button\"\n    class=\"wr-calendar__nav wr-calendar__nav--prev\"\n    [attr.aria-label]=\"\n      viewMode() === 'year' ? 'Previous 12 years' : viewMode() === 'month' ? 'Previous year' : 'Previous month'\n    \"\n    [disabled]=\"disabled()\"\n    (click)=\"prev()\"\n  >\n    <svg\n      width=\"18\"\n      height=\"18\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n    >\n      <path d=\"m15 18-6-6 6-6\" />\n    </svg>\n  </button>\n  <button\n    type=\"button\"\n    class=\"wr-calendar__label\"\n    aria-live=\"polite\"\n    [disabled]=\"disabled() || viewMode() === 'year'\"\n    (click)=\"onLabelClick()\"\n  >\n    {{ headerLabel() }}\n  </button>\n  <button\n    type=\"button\"\n    class=\"wr-calendar__nav wr-calendar__nav--next\"\n    [attr.aria-label]=\"viewMode() === 'year' ? 'Next 12 years' : viewMode() === 'month' ? 'Next year' : 'Next month'\"\n    [disabled]=\"disabled()\"\n    (click)=\"next()\"\n  >\n    <svg\n      width=\"18\"\n      height=\"18\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n    >\n      <path d=\"m9 18 6-6-6-6\" />\n    </svg>\n  </button>\n</div>\n\n@switch (viewMode()) {\n  @case ('day') {\n    <div class=\"wr-calendar__weekdays\" role=\"row\">\n      @for (name of weekdayNames(); track name) {\n        <span class=\"wr-calendar__weekday\" role=\"columnheader\">{{ name }}</span>\n      }\n    </div>\n\n    <div class=\"wr-calendar__grid\" (mouseleave)=\"onCellLeave()\">\n      @for (week of weeks(); track $index) {\n        <div class=\"wr-calendar__week\" role=\"row\">\n          @for (day of week; track trackByTime($index, day)) {\n            <button\n              type=\"button\"\n              class=\"wr-calendar__day\"\n              role=\"gridcell\"\n              [class.wr-calendar__day--today]=\"isToday(day)\"\n              [class.wr-calendar__day--out-of-month]=\"isOutOfMonth(day)\"\n              [class.wr-calendar__day--selected]=\"isSelected(day)\"\n              [class.wr-calendar__day--in-range]=\"isInRange(day)\"\n              [class.wr-calendar__day--range-preview]=\"isInRangePreview(day)\"\n              [class.wr-calendar__day--focused]=\"isFocused(day)\"\n              [disabled]=\"isDisabled(day)\"\n              [attr.tabindex]=\"isFocused(day) ? 0 : -1\"\n              [attr.aria-selected]=\"isSelected(day)\"\n              [attr.aria-disabled]=\"isDisabled(day)\"\n              (click)=\"onCellClick(day)\"\n              (mouseenter)=\"onCellEnter(day)\"\n            >\n              {{ day.getDate() }}\n            </button>\n          }\n        </div>\n      }\n    </div>\n  }\n\n  @case ('month') {\n    <div class=\"wr-calendar__months\" role=\"grid\">\n      @for (name of monthsView(); track name) {\n        <button\n          type=\"button\"\n          class=\"wr-calendar__chip\"\n          role=\"gridcell\"\n          [class.wr-calendar__chip--current]=\"isMonthCurrent($index)\"\n          [class.wr-calendar__chip--selected]=\"isMonthSelected($index)\"\n          [disabled]=\"isMonthDisabled($index)\"\n          [attr.aria-selected]=\"isMonthSelected($index)\"\n          [attr.aria-disabled]=\"isMonthDisabled($index)\"\n          (click)=\"onMonthSelect($index)\"\n        >\n          {{ name }}\n        </button>\n      }\n    </div>\n  }\n\n  @case ('year') {\n    <div class=\"wr-calendar__years\" role=\"grid\">\n      @for (year of yearsView(); track year) {\n        <button\n          type=\"button\"\n          class=\"wr-calendar__chip\"\n          role=\"gridcell\"\n          [class.wr-calendar__chip--current]=\"isYearCurrent(year)\"\n          [class.wr-calendar__chip--selected]=\"isYearSelected(year)\"\n          [disabled]=\"isYearDisabled(year)\"\n          [attr.aria-selected]=\"isYearSelected(year)\"\n          [attr.aria-disabled]=\"isYearDisabled(year)\"\n          (click)=\"onYearSelect(year)\"\n        >\n          {{ year }}\n        </button>\n      }\n    </div>\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}