@raintonic/formaui 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs +8 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-date-picker.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-form-field.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-menu.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-menu.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-popover.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-radio.mjs +6 -5
- package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-select.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-time-picker.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tooltip.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui.mjs +1 -1
- package/fesm2022/raintonic-formaui.mjs.map +1 -1
- package/llms-full.txt +1 -0
- package/package.json +1 -1
- package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -1
- package/types/raintonic-formaui-components-radio.d.ts +2 -1
- package/types/raintonic-formaui-components-radio.d.ts.map +1 -1
- package/types/raintonic-formaui.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-date-picker.mjs","sources":["../../../lib/components/date-picker/calendar/calendar.intl.ts","../../../lib/components/date-picker/date-picker.utils.ts","../../../lib/components/date-picker/calendar/calendar.component.ts","../../../lib/components/date-picker/calendar/calendar.component.html","../../../lib/components/date-picker/date-picker.intl.ts","../../../lib/components/date-picker/date-picker.types.ts","../../../lib/components/date-picker/date-picker.component.ts","../../../lib/components/date-picker/date-picker.component.html","../../../lib/components/date-picker/raintonic-formaui-components-date-picker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiCalendarIntl extends FuiIntlBase {\r\n rootAriaLabel = 'Calendar';\r\n prevMonthLabel = 'Previous month';\r\n prevYearLabel = 'Previous year';\r\n prevDecadeLabel = 'Previous decade';\r\n nextMonthLabel = 'Next month';\r\n nextYearLabel = 'Next year';\r\n nextDecadeLabel = 'Next decade';\r\n switchToMonthViewLabel = 'Switch to month view';\r\n switchToYearViewLabel = 'Switch to year view';\r\n}\r\n","/**\r\n * Normalize a date to noon to avoid DST edge cases.\r\n */\r\nexport function normalizeDate(date: Date): Date {\r\n const d = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 12, 0, 0, 0);\r\n return d;\r\n}\r\n\r\n/**\r\n * Check if two dates are the same day (ignoring time).\r\n */\r\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\r\n if (!a || !b) return false;\r\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\r\n}\r\n\r\n/**\r\n * Check if a date is within [min, max] bounds (day-level).\r\n */\r\nexport function isDateInRange(date: Date, min: Date | null, max: Date | null): boolean {\r\n const d = normalizeDate(date).getTime();\r\n if (min && normalizeDate(min).getTime() > d) return false;\r\n if (max && normalizeDate(max).getTime() < d) return false;\r\n return true;\r\n}\r\n\r\n/**\r\n * Get number of days in a given month.\r\n */\r\nexport function getDaysInMonth(year: number, month: number): number {\r\n return new Date(year, month + 1, 0).getDate();\r\n}\r\n\r\n/**\r\n * Get localized weekday labels.\r\n * @param firstDayOfWeek 0=Sunday, 1=Monday, etc.\r\n * @param format 'short' | 'narrow'\r\n */\r\nexport function getWeekdayLabels(firstDayOfWeek = 1, format: 'short' | 'narrow' = 'narrow'): string[] {\r\n const formatter = new Intl.DateTimeFormat(undefined, { weekday: format });\r\n const labels: string[] = [];\r\n // Jan 4, 2024 is a Thursday — use a known date to map\r\n // Instead, iterate from a known Sunday (Jan 7, 2024)\r\n const sunday = new Date(2024, 0, 7); // Known Sunday\r\n for (let i = 0; i < 7; i++) {\r\n const dayIndex = (firstDayOfWeek + i) % 7;\r\n const date = new Date(sunday);\r\n date.setDate(sunday.getDate() + dayIndex);\r\n labels.push(formatter.format(date));\r\n }\r\n return labels;\r\n}\r\n\r\n/**\r\n * Get localized month label.\r\n */\r\nexport function getMonthLabel(year: number, month: number, format: 'long' | 'short' = 'long'): string {\r\n const formatter = new Intl.DateTimeFormat(undefined, { month: format, year: 'numeric' });\r\n return formatter.format(new Date(year, month, 1));\r\n}\r\n\r\n/**\r\n * Get short month name (for month view grid).\r\n */\r\nexport function getShortMonthName(month: number): string {\r\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'short' });\r\n return formatter.format(new Date(2024, month, 1));\r\n}\r\n\r\n/**\r\n * Build a 6x7 calendar grid for a given month.\r\n * @returns 6 rows of 7 Date objects each.\r\n */\r\nexport function buildCalendarGrid(year: number, month: number, firstDayOfWeek = 1): Date[][] {\r\n const firstOfMonth = new Date(year, month, 1);\r\n const dayOfWeek = firstOfMonth.getDay();\r\n // How many days to show from the previous month\r\n const offset = (dayOfWeek - firstDayOfWeek + 7) % 7;\r\n const startDate = new Date(year, month, 1 - offset);\r\n\r\n const weeks: Date[][] = [];\r\n const current = new Date(startDate);\r\n for (let week = 0; week < 6; week++) {\r\n const row: Date[] = [];\r\n for (let day = 0; day < 7; day++) {\r\n row.push(normalizeDate(new Date(current)));\r\n current.setDate(current.getDate() + 1);\r\n }\r\n weeks.push(row);\r\n }\r\n return weeks;\r\n}\r\n\r\n// --- Format / Parse ---\r\n\r\nfunction getSeparator(format: string): string {\r\n // Find first non-letter character\r\n const match = /[^dMyy]/.exec(format);\r\n return match ? match[0] : '/';\r\n}\r\n\r\n/**\r\n * Format a Date to a string using the given format pattern.\r\n * Supported tokens: dd, d, MM, M, yyyy, yy\r\n */\r\nexport function formatDate(date: Date | null, format: string): string {\r\n if (!date || isNaN(date.getTime())) return '';\r\n const day = date.getDate();\r\n const month = date.getMonth() + 1;\r\n const year = date.getFullYear();\r\n\r\n let result = format;\r\n // Replace in order of longest token first to avoid partial matches\r\n result = result.replace('dd', String(day).padStart(2, '0'));\r\n result = result.replace(/\\bd\\b/, String(day));\r\n result = result.replace('MM', String(month).padStart(2, '0'));\r\n result = result.replace(/\\bM\\b/, String(month));\r\n result = result.replace('yyyy', String(year).padStart(4, '0'));\r\n result = result.replace('yy', String(year % 100).padStart(2, '0'));\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse a date string to a Date using the given format.\r\n * Returns null on failure.\r\n */\r\nexport function parseDate(text: string, format: string): Date | null {\r\n if (!text?.trim()) return null;\r\n\r\n const sep = getSeparator(format);\r\n const parts = text.split(sep);\r\n\r\n // Build a map of token → position in split parts\r\n let day = -1;\r\n let month = -1;\r\n let year = -1;\r\n\r\n // Build expected parts from format\r\n const formatParts = format.split(sep);\r\n if (parts.length !== formatParts.length) return null;\r\n\r\n for (let i = 0; i < formatParts.length; i++) {\r\n const fp = formatParts[i];\r\n const val = parseInt(parts[i], 10);\r\n if (isNaN(val)) return null;\r\n\r\n if (fp === 'dd' || fp === 'd') {\r\n day = val;\r\n } else if (fp === 'MM' || fp === 'M') {\r\n month = val;\r\n } else if (fp === 'yyyy') {\r\n year = val;\r\n } else if (fp === 'yy') {\r\n year = val < 50 ? 2000 + val : 1900 + val;\r\n }\r\n }\r\n\r\n if (day < 1 || day > 31 || month < 1 || month > 12 || year < 0) return null;\r\n\r\n // Validate day for the given month\r\n const daysInMonth = getDaysInMonth(year, month - 1);\r\n if (day > daysInMonth) return null;\r\n\r\n return normalizeDate(new Date(year, month - 1, day));\r\n}\r\n\r\n/**\r\n * Apply date mask to raw input as user types.\r\n * Returns the masked value and corrected cursor position.\r\n */\r\nexport function applyDateMask(rawInput: string, format: string): { masked: string; cursor: number } {\r\n const sep = getSeparator(format);\r\n const digits = rawInput.replace(/\\D/g, '');\r\n\r\n // Build a pattern of digit counts from format tokens\r\n // e.g., 'dd/MM/yyyy' → [2, 2, 4] with separators at positions 2, 5\r\n const formatParts = format.split(sep);\r\n const digitCounts = formatParts.map((p) => p.length);\r\n const maxDigits = digitCounts.reduce((a, b) => a + b, 0);\r\n\r\n const capped = digits.substring(0, maxDigits);\r\n\r\n let masked = '';\r\n let digitIndex = 0;\r\n\r\n for (let partIdx = 0; partIdx < digitCounts.length; partIdx++) {\r\n const count = digitCounts[partIdx];\r\n const partDigits = capped.substring(digitIndex, digitIndex + count);\r\n\r\n if (partDigits.length === 0) break;\r\n\r\n if (partIdx > 0) {\r\n masked += sep;\r\n }\r\n masked += partDigits;\r\n digitIndex += partDigits.length;\r\n\r\n // Auto-insert separator when part is complete and there are more digits\r\n if (partDigits.length === count && digitIndex < capped.length && partIdx < digitCounts.length - 1) {\r\n // separator will be added in next iteration\r\n }\r\n }\r\n\r\n return { masked, cursor: masked.length };\r\n}\r\n\r\n/**\r\n * Check if date a is before date b (day-level).\r\n */\r\nexport function isBefore(a: Date, b: Date): boolean {\r\n return normalizeDate(a).getTime() < normalizeDate(b).getTime();\r\n}\r\n\r\n/**\r\n * Check if date a is after date b (day-level).\r\n */\r\nexport function isAfter(a: Date, b: Date): boolean {\r\n return normalizeDate(a).getTime() > normalizeDate(b).getTime();\r\n}\r\n\r\n/**\r\n * Check if date is between start and end (inclusive, day-level).\r\n */\r\nexport function isBetween(date: Date, start: Date | null, end: Date | null): boolean {\r\n if (!start || !end) return false;\r\n const d = normalizeDate(date).getTime();\r\n const s = normalizeDate(start).getTime();\r\n const e = normalizeDate(end).getTime();\r\n const min = Math.min(s, e);\r\n const max = Math.max(s, e);\r\n return d >= min && d <= max;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiCalendarIntl } from './calendar.intl';\r\nimport { CalendarDay, CalendarMonth, CalendarView, CalendarYear, DateFilterFn } from '../date-picker.types';\r\nimport {\r\n buildCalendarGrid,\r\n getDaysInMonth,\r\n getShortMonthName,\r\n getWeekdayLabels,\r\n isAfter,\r\n isBefore,\r\n isBetween,\r\n isDateInRange,\r\n isSameDay,\r\n normalizeDate,\r\n} from '../date-picker.utils';\r\n\r\n/**\r\n * @component FuiCalendarComponent\r\n * @selector fui-calendar\r\n * @description Internal calendar grid used by `fui-date-picker`. Renders day, month,\r\n * and year views with full keyboard navigation (Arrow keys, Home, End, PageUp/Down,\r\n * Enter, Escape). Supports single-date selection and range highlighting with hover preview.\r\n *\r\n * @input selected - Currently selected date for single mode (Date | null)\r\n * @input rangeStart - Start date of a range selection (Date | null)\r\n * @input rangeEnd - End date of a range selection (Date | null)\r\n * @input range - Whether range mode is active (default: false)\r\n * @input min - Minimum selectable date (Date | null)\r\n * @input max - Maximum selectable date (Date | null)\r\n * @input dateFilter - Custom filter function to disable specific dates (DateFilterFn | null)\r\n * @input startAt - Initial date to display when the calendar opens (Date | null)\r\n * @input firstDayOfWeek - First day of the week: 0 = Sunday, 1 = Monday (default: 1)\r\n * @input hoveredDate - Currently hovered date for range preview (Date | null)\r\n *\r\n * @output dateSelected - Emits the Date when a day cell is clicked or confirmed via keyboard\r\n * @output dateHovered - Emits the hovered Date or null on mouse enter/leave\r\n * @output monthChanged - Emits the new view Date when navigating months/years\r\n *\r\n * @example\r\n * <fui-calendar\r\n * [selected]=\"selectedDate\"\r\n * [min]=\"minDate\"\r\n * [max]=\"maxDate\"\r\n * (dateSelected)=\"onDateSelected($event)\">\r\n * </fui-calendar>\r\n */\r\n@Component({\r\n selector: 'fui-calendar',\r\n standalone: true,\r\n imports: [FuiIconComponent],\r\n templateUrl: './calendar.component.html',\r\n styleUrls: ['./calendar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-calendar',\r\n tabindex: '0',\r\n role: 'application',\r\n '[attr.aria-label]': 'intl.rootAriaLabel',\r\n },\r\n})\r\nexport class FuiCalendarComponent {\r\n readonly intl = inject(FuiCalendarIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n /** @internal — bumped when Intl mutates so computeds that read plain intl fields reinvoke. */\r\n private readonly _intlTick = signal(0);\r\n\r\n // Inputs\r\n readonly selected = input<Date | null>(null);\r\n readonly rangeStart = input<Date | null>(null);\r\n readonly rangeEnd = input<Date | null>(null);\r\n readonly range = input(false);\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n readonly dateFilter = input<DateFilterFn | null>(null);\r\n readonly startAt = input<Date | null>(null);\r\n readonly firstDayOfWeek = input(1);\r\n readonly hoveredDate = input<Date | null>(null);\r\n\r\n // Outputs\r\n readonly dateSelected = output<Date>();\r\n readonly dateHovered = output<Date | null>();\r\n readonly monthChanged = output<Date>();\r\n\r\n // Internal state\r\n readonly currentView = signal<CalendarView>('days');\r\n readonly viewDate = signal(normalizeDate(new Date()));\r\n readonly activeDate = signal(normalizeDate(new Date()));\r\n\r\n // Computed: weekday header labels\r\n readonly weekDayHeaders = computed(() => getWeekdayLabels(this.firstDayOfWeek(), 'narrow'));\r\n\r\n // Computed: month/year labels for header\r\n readonly monthYearLabel = computed(() => {\r\n const d = this.viewDate();\r\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });\r\n return formatter.format(d);\r\n });\r\n\r\n readonly yearLabel = computed(() => {\r\n return String(this.viewDate().getFullYear());\r\n });\r\n\r\n readonly decadeLabel = computed(() => {\r\n const year = this.viewDate().getFullYear();\r\n const start = year - (year % 12);\r\n return `${start} \\u2013 ${start + 11}`;\r\n });\r\n\r\n // Accessible navigation button labels\r\n readonly prevButtonLabel = computed(() => {\r\n this._intlTick();\r\n switch (this.currentView()) {\r\n case 'days':\r\n return this.intl.prevMonthLabel;\r\n case 'months':\r\n return this.intl.prevYearLabel;\r\n case 'years':\r\n return this.intl.prevDecadeLabel;\r\n }\r\n });\r\n\r\n readonly nextButtonLabel = computed(() => {\r\n this._intlTick();\r\n switch (this.currentView()) {\r\n case 'days':\r\n return this.intl.nextMonthLabel;\r\n case 'months':\r\n return this.intl.nextYearLabel;\r\n case 'years':\r\n return this.intl.nextDecadeLabel;\r\n }\r\n });\r\n\r\n readonly headerButtonLabel = computed(() => {\r\n this._intlTick();\r\n switch (this.currentView()) {\r\n case 'days':\r\n return this.intl.switchToMonthViewLabel;\r\n case 'months':\r\n return this.intl.switchToYearViewLabel;\r\n case 'years':\r\n return this.decadeLabel();\r\n }\r\n });\r\n\r\n // Computed: 6x7 calendar day grid\r\n readonly weeks = computed<CalendarDay[][]>(() => {\r\n const vd = this.viewDate();\r\n const grid = buildCalendarGrid(vd.getFullYear(), vd.getMonth(), this.firstDayOfWeek());\r\n const today = normalizeDate(new Date());\r\n const sel = this.selected();\r\n const rStart = this.rangeStart();\r\n const rEnd = this.rangeEnd();\r\n const hovered = this.hoveredDate();\r\n const isRange = this.range();\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n const filter = this.dateFilter();\r\n\r\n return grid.map((week) =>\r\n week.map((date) => {\r\n const isCurrentMonth = date.getMonth() === vd.getMonth();\r\n const isDisabled = !isDateInRange(date, minDate, maxDate) || (filter ? !filter(date) : false);\r\n const isSelected = !isRange ? isSameDay(date, sel) : isSameDay(date, rStart) || isSameDay(date, rEnd);\r\n const isRangeStart = isRange && isSameDay(date, rStart);\r\n const isRangeEnd = isRange && rEnd ? isSameDay(date, rEnd) : false;\r\n const isInRange =\r\n isRange && rStart && rEnd ? isBetween(date, rStart, rEnd) && !isRangeStart && !isRangeEnd : false;\r\n const isRangePreview =\r\n isRange && rStart && !rEnd && hovered\r\n ? isBetween(date, rStart, hovered) && !isSameDay(date, rStart) && !isSameDay(date, hovered)\r\n : false;\r\n\r\n return {\r\n date,\r\n day: date.getDate(),\r\n isCurrentMonth,\r\n isToday: isSameDay(date, today),\r\n isSelected,\r\n isDisabled,\r\n isRangeStart,\r\n isRangeEnd,\r\n isInRange,\r\n isRangePreview,\r\n } satisfies CalendarDay;\r\n }),\r\n );\r\n });\r\n\r\n // Computed: 3x4 months grid\r\n readonly monthsGrid = computed<CalendarMonth[][]>(() => {\r\n const vd = this.viewDate();\r\n const currentYear = vd.getFullYear();\r\n const now = new Date();\r\n const sel = this.selected();\r\n const rStart = this.rangeStart();\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n\r\n const months: CalendarMonth[] = [];\r\n for (let m = 0; m < 12; m++) {\r\n const isDisabled = this._isMonthDisabled(currentYear, m, minDate, maxDate);\r\n const isSelected = sel ? sel.getFullYear() === currentYear && sel.getMonth() === m : false;\r\n months.push({\r\n month: m,\r\n label: getShortMonthName(m),\r\n isCurrentMonth: now.getFullYear() === currentYear && now.getMonth() === m,\r\n isSelected: isSelected || (rStart ? rStart.getFullYear() === currentYear && rStart.getMonth() === m : false),\r\n isDisabled,\r\n });\r\n }\r\n\r\n // Arrange in 4 rows of 3\r\n const grid: CalendarMonth[][] = [];\r\n for (let i = 0; i < 12; i += 3) {\r\n grid.push(months.slice(i, i + 3));\r\n }\r\n return grid;\r\n });\r\n\r\n // Computed: 3x4 years grid\r\n readonly yearsGrid = computed<CalendarYear[][]>(() => {\r\n const vd = this.viewDate();\r\n const baseYear = vd.getFullYear();\r\n const startYear = baseYear - (baseYear % 12);\r\n const now = new Date();\r\n const sel = this.selected();\r\n const rStart = this.rangeStart();\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n\r\n const years: CalendarYear[] = [];\r\n for (let i = 0; i < 12; i++) {\r\n const year = startYear + i;\r\n const isDisabled = this._isYearDisabled(year, minDate, maxDate);\r\n const isSelected = sel ? sel.getFullYear() === year : false;\r\n years.push({\r\n year,\r\n isCurrentYear: now.getFullYear() === year,\r\n isSelected: isSelected || (rStart ? rStart.getFullYear() === year : false),\r\n isDisabled,\r\n });\r\n }\r\n\r\n const grid: CalendarYear[][] = [];\r\n for (let i = 0; i < 12; i += 3) {\r\n grid.push(years.slice(i, i + 3));\r\n }\r\n return grid;\r\n });\r\n\r\n private readonly _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this._intlTick.update((v) => v + 1);\r\n this._cdr.markForCheck();\r\n });\r\n // Initialize viewDate from startAt or selected or now\r\n const initial = this.startAt() ?? this.selected() ?? new Date();\r\n this.viewDate.set(normalizeDate(initial));\r\n this.activeDate.set(normalizeDate(initial));\r\n }\r\n\r\n // --- Header actions ---\r\n\r\n onHeaderLabelClick(): void {\r\n const view = this.currentView();\r\n if (view === 'days') {\r\n this.currentView.set('months');\r\n } else if (view === 'months') {\r\n this.currentView.set('years');\r\n }\r\n }\r\n\r\n onPrev(): void {\r\n const view = this.currentView();\r\n const vd = this.viewDate();\r\n if (view === 'days') {\r\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() - 1, 1, 12));\r\n } else if (view === 'months') {\r\n this.viewDate.set(new Date(vd.getFullYear() - 1, vd.getMonth(), 1, 12));\r\n } else {\r\n this.viewDate.set(new Date(vd.getFullYear() - 12, vd.getMonth(), 1, 12));\r\n }\r\n this.monthChanged.emit(this.viewDate());\r\n }\r\n\r\n onNext(): void {\r\n const view = this.currentView();\r\n const vd = this.viewDate();\r\n if (view === 'days') {\r\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() + 1, 1, 12));\r\n } else if (view === 'months') {\r\n this.viewDate.set(new Date(vd.getFullYear() + 1, vd.getMonth(), 1, 12));\r\n } else {\r\n this.viewDate.set(new Date(vd.getFullYear() + 12, vd.getMonth(), 1, 12));\r\n }\r\n this.monthChanged.emit(this.viewDate());\r\n }\r\n\r\n // --- Day view actions ---\r\n\r\n onDayClick(day: CalendarDay): void {\r\n if (day.isDisabled) return;\r\n this.dateSelected.emit(day.date);\r\n }\r\n\r\n onDayMouseEnter(day: CalendarDay): void {\r\n if (day.isDisabled) return;\r\n this.dateHovered.emit(day.date);\r\n }\r\n\r\n onDayMouseLeave(): void {\r\n this.dateHovered.emit(null);\r\n }\r\n\r\n // --- Month/year view actions ---\r\n\r\n onMonthClick(month: CalendarMonth): void {\r\n if (month.isDisabled) return;\r\n const vd = this.viewDate();\r\n this.viewDate.set(new Date(vd.getFullYear(), month.month, 1, 12));\r\n this.currentView.set('days');\r\n }\r\n\r\n onYearClick(year: CalendarYear): void {\r\n if (year.isDisabled) return;\r\n const vd = this.viewDate();\r\n this.viewDate.set(new Date(year.year, vd.getMonth(), 1, 12));\r\n this.currentView.set('months');\r\n }\r\n\r\n // --- Keyboard navigation ---\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n const view = this.currentView();\r\n if (view === 'days') {\r\n this._handleDayKeydown(event);\r\n } else if (view === 'months') {\r\n this._handleMonthKeydown(event);\r\n } else {\r\n this._handleYearKeydown(event);\r\n }\r\n }\r\n\r\n private _handleDayKeydown(event: KeyboardEvent): void {\r\n const active = this.activeDate();\r\n let newDate: Date | null = null;\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() - 1, 12);\r\n break;\r\n case 'ArrowRight':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() + 1, 12);\r\n break;\r\n case 'ArrowUp':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() - 7, 12);\r\n break;\r\n case 'ArrowDown':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() + 7, 12);\r\n break;\r\n case 'Home':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), 1, 12);\r\n break;\r\n case 'End':\r\n newDate = new Date(\r\n active.getFullYear(),\r\n active.getMonth(),\r\n getDaysInMonth(active.getFullYear(), active.getMonth()),\r\n 12,\r\n );\r\n break;\r\n case 'PageUp':\r\n if (event.shiftKey) {\r\n newDate = new Date(active.getFullYear() - 1, active.getMonth(), active.getDate(), 12);\r\n } else {\r\n newDate = new Date(active.getFullYear(), active.getMonth() - 1, active.getDate(), 12);\r\n }\r\n break;\r\n case 'PageDown':\r\n if (event.shiftKey) {\r\n newDate = new Date(active.getFullYear() + 1, active.getMonth(), active.getDate(), 12);\r\n } else {\r\n newDate = new Date(active.getFullYear(), active.getMonth() + 1, active.getDate(), 12);\r\n }\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (isDateInRange(active, this.min(), this.max())) {\r\n const filter = this.dateFilter();\r\n if (!filter || filter(active)) {\r\n this.dateSelected.emit(active);\r\n }\r\n }\r\n return;\r\n case 'Escape':\r\n // Let parent handle\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n if (newDate) {\r\n event.preventDefault();\r\n this.activeDate.set(normalizeDate(newDate));\r\n // If the new active date is in a different month, update viewDate\r\n if (\r\n newDate.getMonth() !== this.viewDate().getMonth() ||\r\n newDate.getFullYear() !== this.viewDate().getFullYear()\r\n ) {\r\n this.viewDate.set(new Date(newDate.getFullYear(), newDate.getMonth(), 1, 12));\r\n this.monthChanged.emit(this.viewDate());\r\n }\r\n }\r\n }\r\n\r\n private _handleMonthKeydown(event: KeyboardEvent): void {\r\n // Simple arrow key handling for month grid (3 columns)\r\n const vd = this.viewDate();\r\n let month = vd.getMonth();\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n month--;\r\n break;\r\n case 'ArrowRight':\r\n month++;\r\n break;\r\n case 'ArrowUp':\r\n month -= 3;\r\n break;\r\n case 'ArrowDown':\r\n month += 3;\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.viewDate.set(new Date(vd.getFullYear(), month, 1, 12));\r\n this.currentView.set('days');\r\n return;\r\n case 'Escape':\r\n this.currentView.set('days');\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n if (month < 0) {\r\n this.viewDate.set(new Date(vd.getFullYear() - 1, 11, 1, 12));\r\n } else if (month > 11) {\r\n this.viewDate.set(new Date(vd.getFullYear() + 1, 0, 1, 12));\r\n } else {\r\n this.viewDate.set(new Date(vd.getFullYear(), month, 1, 12));\r\n }\r\n }\r\n\r\n private _handleYearKeydown(event: KeyboardEvent): void {\r\n const vd = this.viewDate();\r\n let year = vd.getFullYear();\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n year--;\r\n break;\r\n case 'ArrowRight':\r\n year++;\r\n break;\r\n case 'ArrowUp':\r\n year -= 3;\r\n break;\r\n case 'ArrowDown':\r\n year += 3;\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.viewDate.set(new Date(year, vd.getMonth(), 1, 12));\r\n this.currentView.set('months');\r\n return;\r\n case 'Escape':\r\n this.currentView.set('months');\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.viewDate.set(new Date(year, vd.getMonth(), 1, 12));\r\n }\r\n\r\n // Track by functions\r\n trackByWeek(_index: number, _week: CalendarDay[]): number {\r\n return _index;\r\n }\r\n\r\n trackByDay(_index: number, day: CalendarDay): number {\r\n return day.date.getTime();\r\n }\r\n\r\n trackByMonth(_index: number, month: CalendarMonth): number {\r\n return month.month;\r\n }\r\n\r\n trackByYear(_index: number, year: CalendarYear): number {\r\n return year.year;\r\n }\r\n\r\n trackByRow(_index: number): number {\r\n return _index;\r\n }\r\n\r\n // Helper: is entire month disabled?\r\n private _isMonthDisabled(year: number, month: number, min: Date | null, max: Date | null): boolean {\r\n if (min) {\r\n const lastOfMonth = new Date(year, month + 1, 0);\r\n if (isBefore(lastOfMonth, min) && !isSameDay(lastOfMonth, min)) return true;\r\n }\r\n if (max) {\r\n const firstOfMonth = new Date(year, month, 1);\r\n if (isAfter(firstOfMonth, max) && !isSameDay(firstOfMonth, max)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Helper: is entire year disabled?\r\n private _isYearDisabled(year: number, min: Date | null, max: Date | null): boolean {\r\n if (min && year < min.getFullYear()) return true;\r\n if (max && year > max.getFullYear()) return true;\r\n return false;\r\n }\r\n\r\n // Public: focus the calendar for keyboard nav\r\n focus(): void {\r\n this._elementRef.nativeElement.focus();\r\n }\r\n}\r\n","<!-- Calendar Header -->\r\n<div class=\"fui-calendar__header\">\r\n <button type=\"button\" class=\"fui-calendar__nav-btn\" (click)=\"onPrev()\" [attr.aria-label]=\"prevButtonLabel()\">\r\n <fui-icon name=\"caret-left\" size=\"sm\" />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"fui-calendar__header-label\"\r\n (click)=\"onHeaderLabelClick()\"\r\n [attr.aria-label]=\"headerButtonLabel()\"\r\n >\r\n @switch (currentView()) {\r\n @case ('days') {\r\n {{ monthYearLabel() }}\r\n }\r\n @case ('months') {\r\n {{ yearLabel() }}\r\n }\r\n @case ('years') {\r\n {{ decadeLabel() }}\r\n }\r\n }\r\n </button>\r\n\r\n <button type=\"button\" class=\"fui-calendar__nav-btn\" (click)=\"onNext()\" [attr.aria-label]=\"nextButtonLabel()\">\r\n <fui-icon name=\"caret-right\" size=\"sm\" />\r\n </button>\r\n</div>\r\n\r\n<!-- Day View -->\r\n@if (currentView() === 'days') {\r\n <table class=\"fui-calendar__grid\" role=\"grid\" [attr.aria-label]=\"monthYearLabel()\" (keydown)=\"onKeydown($event)\">\r\n <thead>\r\n <tr>\r\n @for (header of weekDayHeaders(); track header) {\r\n <th class=\"fui-calendar__weekday\" scope=\"col\">{{ header }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of weeks(); track trackByWeek($index, week)) {\r\n <tr>\r\n @for (day of week; track trackByDay($index, day)) {\r\n <td\r\n class=\"fui-calendar__cell\"\r\n [class.--today]=\"day.isToday\"\r\n [class.--selected]=\"day.isSelected\"\r\n [class.--outside]=\"!day.isCurrentMonth\"\r\n [class.--disabled]=\"day.isDisabled\"\r\n [class.--range-start]=\"day.isRangeStart\"\r\n [class.--range-end]=\"day.isRangeEnd\"\r\n [class.--in-range]=\"day.isInRange\"\r\n [class.--range-preview]=\"day.isRangePreview\"\r\n role=\"gridcell\"\r\n [attr.aria-selected]=\"day.isSelected\"\r\n [attr.aria-disabled]=\"day.isDisabled\"\r\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\r\n [attr.tabindex]=\"day.isCurrentMonth && !day.isDisabled ? 0 : -1\"\r\n (click)=\"onDayClick(day)\"\r\n (mouseenter)=\"onDayMouseEnter(day)\"\r\n (mouseleave)=\"onDayMouseLeave()\"\r\n >\r\n <span class=\"fui-calendar__day\">{{ day.day }}</span>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n}\r\n\r\n<!-- Month View -->\r\n@if (currentView() === 'months') {\r\n <div class=\"fui-calendar__months\" role=\"grid\" [attr.aria-label]=\"yearLabel()\" (keydown)=\"onKeydown($event)\">\r\n @for (row of monthsGrid(); track trackByRow($index)) {\r\n <div class=\"fui-calendar__months-row\" role=\"row\">\r\n @for (month of row; track trackByMonth($index, month)) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-calendar__month-cell\"\r\n [class.--current]=\"month.isCurrentMonth\"\r\n [class.--selected]=\"month.isSelected\"\r\n [class.--disabled]=\"month.isDisabled\"\r\n role=\"gridcell\"\r\n [attr.aria-selected]=\"month.isSelected\"\r\n [attr.aria-disabled]=\"month.isDisabled\"\r\n [disabled]=\"month.isDisabled\"\r\n (click)=\"onMonthClick(month)\"\r\n >\r\n {{ month.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Year View -->\r\n@if (currentView() === 'years') {\r\n <div class=\"fui-calendar__years\" role=\"grid\" [attr.aria-label]=\"decadeLabel()\" (keydown)=\"onKeydown($event)\">\r\n @for (row of yearsGrid(); track trackByRow($index)) {\r\n <div class=\"fui-calendar__years-row\" role=\"row\">\r\n @for (year of row; track trackByYear($index, year)) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-calendar__year-cell\"\r\n [class.--current]=\"year.isCurrentYear\"\r\n [class.--selected]=\"year.isSelected\"\r\n [class.--disabled]=\"year.isDisabled\"\r\n role=\"gridcell\"\r\n [attr.aria-selected]=\"year.isSelected\"\r\n [attr.aria-disabled]=\"year.isDisabled\"\r\n [disabled]=\"year.isDisabled\"\r\n (click)=\"onYearClick(year)\"\r\n >\r\n {{ year.year }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Live region for screen readers -->\r\n<div class=\"fui-calendar__announcer\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @switch (currentView()) {\r\n @case ('days') {\r\n {{ monthYearLabel() }}\r\n }\r\n @case ('months') {\r\n {{ yearLabel() }}\r\n }\r\n @case ('years') {\r\n {{ decadeLabel() }}\r\n }\r\n }\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiDatePickerIntl extends FuiIntlBase {\r\n endDateAriaLabel = 'End date';\r\n openCalendarAriaLabel = 'Open calendar';\r\n calendarDialogAriaLabel = 'Calendar';\r\n}\r\n","export type DatePickerValue = Date | null;\r\n\r\nexport interface DateRange {\r\n start: Date | null;\r\n end: Date | null;\r\n}\r\n\r\nexport type DatePickerModelValue = DatePickerValue | DateRange;\r\n\r\nexport type DateFilterFn = (date: Date) => boolean;\r\n\r\nexport type CalendarView = 'days' | 'months' | 'years';\r\n\r\nexport interface CalendarDay {\r\n date: Date;\r\n day: number;\r\n isCurrentMonth: boolean;\r\n isToday: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n isRangeStart: boolean;\r\n isRangeEnd: boolean;\r\n isInRange: boolean;\r\n isRangePreview: boolean;\r\n}\r\n\r\nexport interface CalendarMonth {\r\n month: number;\r\n label: string;\r\n isCurrentMonth: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\nexport interface CalendarYear {\r\n year: number;\r\n isCurrentYear: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\nexport const DEFAULT_DATE_FORMAT = 'dd/MM/yyyy';\r\nexport const RANGE_SEPARATOR = ' \\u2014 ';\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n DoCheck,\r\n effect,\r\n ElementRef,\r\n inject,\r\n NgZone,\r\n input,\r\n InputSignal,\r\n OnDestroy,\r\n output,\r\n OutputEmitterRef,\r\n signal,\r\n ViewChild,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormGroupDirective,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n NgForm,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { injectNgControl, updateErrorState, syncRequiredState, syncNgControlDisabled } from '@raintonic/formaui/cdk/form-field';\r\nimport { FUI_FORM_FIELD_CONTROL, FuiFormFieldControl } from '@raintonic/formaui/core';\r\nimport { DefaultErrorStateMatcher, ErrorStateMatcher } from '@raintonic/formaui/core';\r\nimport { FuiConnectedPosition, FuiOverlayRef, FuiOverlayService } from '@raintonic/formaui/cdk/overlay';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiCalendarComponent } from './calendar/calendar.component';\r\nimport { FuiDatePickerIntl } from './date-picker.intl';\r\nimport {\r\n DateFilterFn,\r\n DatePickerModelValue,\r\n DateRange,\r\n DEFAULT_DATE_FORMAT,\r\n RANGE_SEPARATOR,\r\n} from './date-picker.types';\r\nimport { applyDateMask, formatDate, isAfter, isBefore, normalizeDate, parseDate } from './date-picker.utils';\r\n\r\n/**\r\n * @component FuiDatePickerComponent\r\n * @selector fui-date-picker\r\n * @description A date picker form control with inline text input, calendar overlay panel,\r\n * and optional range selection. Integrates with `fui-form-field` via `FuiFormFieldControl`\r\n * and supports Reactive Forms (ControlValueAccessor) plus built-in Validator for min/max/filter\r\n * constraints. Uses the overlay service for proper dropdown positioning.\r\n *\r\n * @input placeholder - Placeholder text for the date input (alias: 'placeholder')\r\n * @input disabled - Whether the picker is disabled (alias: 'disabled')\r\n * @input readonly - Whether the picker is read-only\r\n * @input range - Enables date-range mode with start/end inputs (default: false)\r\n * @input format - Display format string (default: 'DD/MM/YYYY')\r\n * @input min - Minimum selectable date (Date | null)\r\n * @input max - Maximum selectable date (Date | null)\r\n * @input dateFilter - Custom filter function to disable specific dates (DateFilterFn | null)\r\n * @input startAt - Initial calendar view date when opened (Date | null)\r\n * @input firstDayOfWeek - First day of the week: 0 = Sunday, 1 = Monday (default: 1)\r\n * @input rangeSeparator - Separator string between range start/end display (default: RANGE_SEPARATOR)\r\n * @input errorStateMatcher - Custom error state matcher (ErrorStateMatcher | null)\r\n *\r\n * @output valueChange - Emits the new model value on change (Date | DateRange | null)\r\n * @output dateChange - Emits the new model value on date selection (Date | DateRange | null)\r\n * @output openedChange - Emits boolean when the calendar panel opens or closes\r\n *\r\n * @cssvar --fui-date-picker-font-size - Font size of the input text\r\n * @cssvar --fui-date-picker-panel-border-radius - Border radius of the calendar panel\r\n * @cssvar --fui-date-picker-panel-shadow - Box shadow of the calendar panel\r\n * @cssvar --fui-date-picker-panel-bg - Background color of the calendar panel\r\n * @cssvar --fui-date-picker-panel-border-color - Border color of the calendar panel\r\n * @cssvar --fui-date-picker-toggle-size - Size of the calendar toggle icon button\r\n *\r\n * @example\r\n * <fui-form-field>\r\n * <fui-label>Birth date</fui-label>\r\n * <fui-date-picker formControlName=\"birthDate\" placeholder=\"DD/MM/YYYY\"></fui-date-picker>\r\n * </fui-form-field>\r\n *\r\n * @example\r\n * <fui-form-field>\r\n * <fui-label>Stay period</fui-label>\r\n * <fui-date-picker [range]=\"true\" formControlName=\"period\"></fui-date-picker>\r\n * </fui-form-field>\r\n */\r\n@Component({\r\n selector: 'fui-date-picker',\r\n standalone: true,\r\n imports: [FuiIconComponent, FuiCalendarComponent],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-date-picker',\r\n '[attr.id]': 'id',\r\n '[class.fui-date-picker--open]': 'panelOpen()',\r\n '[class.fui-date-picker--disabled]': 'disabled()',\r\n '[class.fui-date-picker--range]': 'range()',\r\n '[class.fui-date-picker--focused]': 'focused()',\r\n '[class.fui-date-picker--error]': 'errorState()',\r\n '[class.fui-date-picker--readonly]': '_readOnly()',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: FuiDatePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: FuiDatePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: FUI_FORM_FIELD_CONTROL,\r\n useExisting: FuiDatePickerComponent,\r\n },\r\n ],\r\n})\r\nexport class FuiDatePickerComponent\r\n implements ControlValueAccessor, Validator, FuiFormFieldControl, DoCheck, OnDestroy\r\n{\r\n static nextId = 0;\r\n readonly controlType = 'fui-date-picker';\r\n\r\n readonly intl = inject(FuiDatePickerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n // Inputs\r\n readonly placeholderInput: InputSignal<string> = input('', { alias: 'placeholder' });\r\n readonly disabledInput: InputSignal<boolean> = input(false, { alias: 'disabled' });\r\n readonly readonly: InputSignal<boolean> = input(false);\r\n readonly range: InputSignal<boolean> = input(false);\r\n readonly format: InputSignal<string> = input(DEFAULT_DATE_FORMAT);\r\n readonly min: InputSignal<Date | null> = input<Date | null>(null);\r\n readonly max: InputSignal<Date | null> = input<Date | null>(null);\r\n readonly dateFilter: InputSignal<DateFilterFn | null> = input<DateFilterFn | null>(null);\r\n readonly startAt: InputSignal<Date | null> = input<Date | null>(null);\r\n readonly firstDayOfWeek: InputSignal<number> = input(1);\r\n readonly rangeSeparator: InputSignal<string> = input(RANGE_SEPARATOR);\r\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | null> = input<ErrorStateMatcher | null>(null);\r\n\r\n // Outputs\r\n readonly valueChange: OutputEmitterRef<DatePickerModelValue> = output<DatePickerModelValue>();\r\n readonly dateChange: OutputEmitterRef<DatePickerModelValue> = output<DatePickerModelValue>();\r\n readonly openedChange: OutputEmitterRef<boolean> = output<boolean>();\r\n\r\n // Internal state\r\n private readonly _value: WritableSignal<DatePickerModelValue> = signal(null);\r\n private readonly _focused: WritableSignal<boolean> = signal(false);\r\n private readonly _disabled: WritableSignal<boolean> = signal(false);\r\n private readonly _ngControlDisabled: WritableSignal<boolean> = signal(false);\r\n private readonly _required: WritableSignal<boolean> = signal(false);\r\n private readonly _errorState: WritableSignal<boolean> = signal(false);\r\n readonly _readOnly: WritableSignal<boolean> = signal(false);\r\n readonly panelOpen = signal(false);\r\n\r\n // Range hover\r\n readonly hoveredDate = signal<Date | null>(null);\r\n\r\n // FuiFormFieldControl\r\n readonly stateChanges = new Subject<void>();\r\n private _uid = `fui-date-picker-${FuiDatePickerComponent.nextId++}`;\r\n _ariaDescribedby: string | null = null;\r\n\r\n // Form references\r\n private _parentForm = inject(NgForm, { optional: true });\r\n private _parentFormGroup = inject(FormGroupDirective, { optional: true });\r\n private _defaultErrorStateMatcher = inject(DefaultErrorStateMatcher);\r\n private readonly _ngControlRef = injectNgControl();\r\n get ngControl(): NgControl | null {\r\n return this._ngControlRef.ngControl;\r\n }\r\n\r\n // Interface signals\r\n readonly placeholder = computed(() => this.placeholderInput());\r\n readonly required = this._required;\r\n readonly value = this._value;\r\n readonly focused = this._focused;\r\n readonly disabled = computed(() => this._disabled() || this.disabledInput() || this._ngControlDisabled());\r\n readonly errorState = this._errorState;\r\n readonly id = this._uid;\r\n\r\n readonly empty = computed(() => {\r\n const val = this._value();\r\n if (val === null) return true;\r\n if (this.range() && this._isDateRange(val)) {\r\n return val.start === null && val.end === null;\r\n }\r\n return false;\r\n });\r\n\r\n // Computed: selected date for single mode calendar input\r\n readonly selectedDate = computed<Date | null>(() => {\r\n const val = this._value();\r\n if (val instanceof Date) return val;\r\n return null;\r\n });\r\n\r\n readonly rangeStartDate = computed<Date | null>(() => {\r\n const val = this._value();\r\n if (this._isDateRange(val)) return val.start;\r\n return null;\r\n });\r\n\r\n readonly rangeEndDate = computed<Date | null>(() => {\r\n const val = this._value();\r\n if (this._isDateRange(val)) return val.end;\r\n return null;\r\n });\r\n\r\n // ViewChildren\r\n @ViewChild('triggerEl', { static: false }) triggerEl?: ElementRef<HTMLDivElement>;\r\n @ViewChild('calendarPanel', { static: false }) calendarPanel?: ElementRef<HTMLDivElement>;\r\n @ViewChild('startInput', { static: false }) startInputEl?: ElementRef<HTMLInputElement>;\r\n @ViewChild('endInput', { static: false }) endInputEl?: ElementRef<HTMLInputElement>;\r\n @ViewChild('calendar', { static: false }) calendarComponent?: FuiCalendarComponent;\r\n\r\n // Overlay\r\n private _overlayRef: FuiOverlayRef | null = null;\r\n private _overlaySubscriptions = new Subscription();\r\n private readonly _overlayService = inject(FuiOverlayService);\r\n private readonly _elementRef = inject(ElementRef);\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _ngZone = inject(NgZone);\r\n private _outsideClickSub?: Subscription;\r\n\r\n // CVA callbacks\r\n private _onChange: (value: DatePickerModelValue) => void = () => {\r\n /* noop */\r\n };\r\n private _onTouched: () => void = () => {\r\n /* noop */\r\n };\r\n private _onValidatorChange: () => void = () => {\r\n /* noop */\r\n };\r\n\r\n // Input text tracking\r\n readonly startInputText = signal('');\r\n readonly endInputText = signal('');\r\n\r\n // Display value for form-field readOnly mode (duck-typed like select/autocomplete)\r\n readonly displayValue = computed(() => {\r\n if (this.range()) {\r\n const start = this.startInputText();\r\n const end = this.endInputText();\r\n if (!start && !end) return '';\r\n return `${start || '—'} ${this.rangeSeparator()} ${end || '—'}`;\r\n }\r\n return this.startInputText() || '';\r\n });\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this._cdr.markForCheck();\r\n });\r\n\r\n void Promise.resolve().then(() => {\r\n if (this._ngControlRef.ngControl) {\r\n this._ngControlRef.ngControl.valueAccessor = this;\r\n }\r\n });\r\n\r\n // Effect to emit state changes\r\n effect(() => {\r\n this.placeholderInput();\r\n this.readonly();\r\n this.disabledInput();\r\n this.range();\r\n this.format();\r\n this.errorStateMatcher();\r\n this._focused();\r\n this._disabled();\r\n this._value();\r\n this._ngControlDisabled();\r\n this._required();\r\n this._errorState();\r\n\r\n this.stateChanges.next();\r\n });\r\n\r\n // Re-trigger validation when min/max/dateFilter change\r\n effect(() => {\r\n this.min();\r\n this.max();\r\n this.dateFilter();\r\n this._onValidatorChange();\r\n });\r\n\r\n // Sync display text when value changes\r\n effect(() => {\r\n const val = this._value();\r\n const fmt = this.format();\r\n if (this.range() && this._isDateRange(val)) {\r\n this.startInputText.set(formatDate(val.start, fmt));\r\n this.endInputText.set(formatDate(val.end, fmt));\r\n } else if (val instanceof Date) {\r\n this.startInputText.set(formatDate(val, fmt));\r\n } else {\r\n this.startInputText.set('');\r\n this.endInputText.set('');\r\n }\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (this.ngControl) {\r\n updateErrorState(\r\n this.ngControl,\r\n this._errorState,\r\n this.errorStateMatcher(),\r\n this._defaultErrorStateMatcher,\r\n this._parentForm,\r\n this._parentFormGroup,\r\n this.stateChanges,\r\n );\r\n syncRequiredState(this.ngControl, this._required, this.stateChanges);\r\n syncNgControlDisabled(this.ngControl, this._ngControlDisabled, this.stateChanges);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n this._outsideClickSub?.unsubscribe();\r\n this._disposeOverlay();\r\n }\r\n\r\n // --- CVA ---\r\n\r\n writeValue(value: DatePickerModelValue | string): void {\r\n if (typeof value === 'string') {\r\n const parsed = parseDate(value, this.format());\r\n this._value.set(parsed);\r\n } else if (value instanceof Date) {\r\n this._value.set(normalizeDate(value));\r\n } else if (value && typeof value === 'object' && ('start' in value || 'end' in value)) {\r\n const range = value;\r\n this._value.set({\r\n start: range.start ? normalizeDate(range.start) : null,\r\n end: range.end ? normalizeDate(range.end) : null,\r\n });\r\n } else {\r\n this._value.set(null);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n registerOnChange(fn: (value: DatePickerModelValue) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled.set(isDisabled);\r\n this.stateChanges.next();\r\n }\r\n\r\n // --- Validator ---\r\n\r\n validate(_control: AbstractControl): ValidationErrors | null {\r\n const value = this._value();\r\n if (value === null) return null;\r\n\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n const filter = this.dateFilter();\r\n\r\n if (value instanceof Date) {\r\n return this._validateSingleDate(value, minDate, maxDate, filter);\r\n }\r\n\r\n if (this._isDateRange(value)) {\r\n const errors: ValidationErrors = {};\r\n if (value.start) {\r\n const startErrors = this._validateSingleDate(value.start, minDate, maxDate, filter);\r\n if (startErrors) Object.assign(errors, startErrors);\r\n }\r\n if (value.end) {\r\n const endErrors = this._validateSingleDate(value.end, minDate, maxDate, filter);\r\n if (endErrors) Object.assign(errors, endErrors);\r\n }\r\n return Object.keys(errors).length > 0 ? errors : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this._onValidatorChange = fn;\r\n }\r\n\r\n private _validateSingleDate(\r\n date: Date,\r\n min: Date | null,\r\n max: Date | null,\r\n filter: DateFilterFn | null,\r\n ): ValidationErrors | null {\r\n if (min && isBefore(date, min)) {\r\n return { dateMin: { min, actual: date } };\r\n }\r\n if (max && isAfter(date, max)) {\r\n return { dateMax: { max, actual: date } };\r\n }\r\n if (filter && !filter(date)) {\r\n return { dateFilter: { actual: date } };\r\n }\r\n return null;\r\n }\r\n\r\n // --- FuiFormFieldControl ---\r\n\r\n onContainerClick(_event: MouseEvent): void {\r\n if (!this.disabled()) {\r\n this.startInputEl?.nativeElement.focus();\r\n if (!this.panelOpen()) {\r\n this.open();\r\n }\r\n }\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n this._ariaDescribedby = ids.length ? ids.join(' ') : null;\r\n }\r\n\r\n setReadOnly(readOnly: boolean): void {\r\n this._readOnly.set(readOnly);\r\n }\r\n\r\n // --- Panel open/close ---\r\n\r\n open(): void {\r\n if (this.disabled() || this.readonly() || this.panelOpen()) return;\r\n\r\n requestAnimationFrame(() => {\r\n this.panelOpen.set(true);\r\n this._focused.set(true);\r\n this.openedChange.emit(true);\r\n\r\n setTimeout(() => {\r\n this._createOverlay();\r\n this._listenForOutsideClicks();\r\n this.calendarComponent?.focus();\r\n });\r\n });\r\n }\r\n\r\n close(): void {\r\n if (!this.panelOpen()) return;\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this.panelOpen.set(false);\r\n this._focused.set(false);\r\n this.hoveredDate.set(null);\r\n this._disposeOverlay();\r\n this.openedChange.emit(false);\r\n this._onTouched();\r\n\r\n setTimeout(() => {\r\n this.startInputEl?.nativeElement.focus();\r\n }, 0);\r\n }\r\n\r\n toggle(): void {\r\n if (this.panelOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n // --- Trigger click ---\r\n\r\n onTriggerClick(): void {\r\n if (!this.disabled() && !this.readonly()) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n onToggleClick(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (!this.disabled() && !this.readonly()) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n // --- Input masking (start input) ---\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const { masked, cursor } = applyDateMask(input.value, this.format());\r\n input.value = masked;\r\n input.setSelectionRange(cursor, cursor);\r\n this.startInputText.set(masked);\r\n }\r\n\r\n onBlur(): void {\r\n const text = this.startInputText();\r\n if (!text) {\r\n if (!this.range()) {\r\n this._setValue(null);\r\n }\r\n return;\r\n }\r\n const parsed = parseDate(text, this.format());\r\n if (parsed) {\r\n if (this.range()) {\r\n const current = this._value();\r\n const rangeVal = this._isDateRange(current) ? current : { start: null, end: null };\r\n this._setValue({ ...rangeVal, start: parsed });\r\n } else {\r\n this._setValue(parsed);\r\n }\r\n } else {\r\n // Invalid input — revert to formatted value\r\n const val = this._value();\r\n if (this.range() && this._isDateRange(val)) {\r\n this.startInputText.set(formatDate(val.start, this.format()));\r\n } else if (val instanceof Date) {\r\n this.startInputText.set(formatDate(val, this.format()));\r\n } else {\r\n this.startInputText.set('');\r\n }\r\n }\r\n if (!this.panelOpen()) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this.panelOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n } else if ((event.key === 'ArrowDown' || event.key === 'Enter') && !this.panelOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n }\r\n }\r\n\r\n // --- End input (range mode) ---\r\n\r\n onEndInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const { masked, cursor } = applyDateMask(input.value, this.format());\r\n input.value = masked;\r\n input.setSelectionRange(cursor, cursor);\r\n this.endInputText.set(masked);\r\n }\r\n\r\n onEndBlur(): void {\r\n const text = this.endInputText();\r\n if (!text) return;\r\n const parsed = parseDate(text, this.format());\r\n if (parsed) {\r\n const current = this._value();\r\n const rangeVal = this._isDateRange(current) ? current : { start: null, end: null };\r\n this._setValue({ ...rangeVal, end: parsed });\r\n } else {\r\n const val = this._value();\r\n if (this._isDateRange(val)) {\r\n this.endInputText.set(formatDate(val.end, this.format()));\r\n } else {\r\n this.endInputText.set('');\r\n }\r\n }\r\n if (!this.panelOpen()) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n onEndKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this.panelOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n }\r\n\r\n onInputFocus(): void {\r\n this._focused.set(true);\r\n }\r\n\r\n // --- Calendar events ---\r\n\r\n onDateSelected(date: Date): void {\r\n if (this.range()) {\r\n this._handleRangeSelection(date);\r\n } else {\r\n this._setValue(date);\r\n this.close();\r\n }\r\n }\r\n\r\n onDateHovered(date: Date | null): void {\r\n this.hoveredDate.set(date);\r\n }\r\n\r\n // Start listening for outside clicks when panel opens\r\n private _listenForOutsideClicks(): void {\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this._ngZone.runOutsideAngular(() => {\r\n setTimeout(() => {\r\n this._outsideClickSub = fromEvent<MouseEvent>(this._document, 'click')\r\n .pipe(\r\n filter(() => this.panelOpen()),\r\n filter((event) => {\r\n const target = event.target as HTMLElement;\r\n const hostElement = this._elementRef.nativeElement;\r\n const overlayElement = this._overlayRef?.overlayElement;\r\n return !hostElement.contains(target) && !overlayElement?.contains(target);\r\n }),\r\n )\r\n .subscribe(() => {\r\n this._ngZone.run(() => {\r\n this.close();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n // --- Private helpers ---\r\n\r\n private _handleRangeSelection(date: Date): void {\r\n const current = this._value();\r\n const rangeVal = this._isDateRange(current) ? current : { start: null, end: null };\r\n\r\n if (!rangeVal.start || rangeVal.end) {\r\n // First click or resetting\r\n this._setValue({ start: date, end: null });\r\n this.hoveredDate.set(null);\r\n } else {\r\n // Second click — auto-swap if needed\r\n let start = rangeVal.start;\r\n let end = date;\r\n if (normalizeDate(end).getTime() < normalizeDate(start).getTime()) {\r\n [start, end] = [end, start];\r\n }\r\n this._setValue({ start, end });\r\n this.close();\r\n }\r\n }\r\n\r\n private _setValue(value: DatePickerModelValue): void {\r\n this._value.set(value);\r\n this._onChange(value);\r\n this.valueChange.emit(value);\r\n this.dateChange.emit(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n private _createOverlay(): void {\r\n if (this._overlayRef || !this.calendarPanel || !this.triggerEl) return;\r\n\r\n const triggerElement = this.triggerEl.nativeElement;\r\n const triggerWidth = triggerElement.getBoundingClientRect().width;\r\n\r\n const positions: FuiConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n ];\r\n\r\n const positionStrategy = this._overlayService\r\n .position()\r\n .connectedTo(triggerElement, positions)\r\n .withPush(true)\r\n .withViewportMargin(8);\r\n\r\n this._overlayRef = this._overlayService.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlayService.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'fui-date-picker-backdrop',\r\n backdropClickBehavior: 'close',\r\n panelClass: ['fui-date-picker-overlay-panel'],\r\n minWidth: Math.max(triggerWidth, 280),\r\n });\r\n\r\n // Track overlay subscriptions for proper cleanup\r\n this._overlaySubscriptions.unsubscribe();\r\n this._overlaySubscriptions = new Subscription();\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.backdropClick.subscribe(() => {\r\n this.close();\r\n }),\r\n );\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.keydownEvents.subscribe((event) => {\r\n if (event.key === 'Escape') {\r\n this.close();\r\n }\r\n }),\r\n );\r\n\r\n const panelElement = this.calendarPanel.nativeElement;\r\n this._overlayRef.attach(panelElement);\r\n }\r\n\r\n private _disposeOverlay(): void {\r\n this._overlaySubscriptions.unsubscribe();\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = null;\r\n }\r\n }\r\n\r\n private _isDateRange(val: DatePickerModelValue): val is DateRange {\r\n return val !== null && !(val instanceof Date) && typeof val === 'object' && 'start' in val;\r\n }\r\n\r\n // Public: get the computed placeholder for the start input\r\n getStartPlaceholder(): string {\r\n const p = this.placeholderInput();\r\n if (p) return p;\r\n return this.format().toLowerCase();\r\n }\r\n\r\n getEndPlaceholder(): string {\r\n return this.format().toLowerCase();\r\n }\r\n}\r\n","<!-- Trigger area -->\r\n<div #triggerEl class=\"fui-date-picker__trigger\" (click)=\"onTriggerClick()\">\r\n <!-- Start input -->\r\n <input\r\n #startInput\r\n class=\"fui-date-picker__input\"\r\n [id]=\"id\"\r\n [value]=\"startInputText()\"\r\n [placeholder]=\"getStartPlaceholder()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [attr.aria-describedby]=\"_ariaDescribedby\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"errorState()\"\r\n [attr.aria-expanded]=\"panelOpen()\"\r\n aria-haspopup=\"dialog\"\r\n aria-autocomplete=\"none\"\r\n role=\"combobox\"\r\n inputmode=\"numeric\"\r\n autocomplete=\"off\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onInputFocus()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n\r\n <!-- Range separator + end input -->\r\n @if (range()) {\r\n <span class=\"fui-date-picker__range-separator\" aria-hidden=\"true\">{{ rangeSeparator() }}</span>\r\n <input\r\n #endInput\r\n class=\"fui-date-picker__input fui-date-picker__input--end\"\r\n [value]=\"endInputText()\"\r\n [placeholder]=\"getEndPlaceholder()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [attr.aria-label]=\"intl.endDateAriaLabel\"\r\n [attr.aria-invalid]=\"errorState()\"\r\n inputmode=\"numeric\"\r\n autocomplete=\"off\"\r\n (input)=\"onEndInput($event)\"\r\n (blur)=\"onEndBlur()\"\r\n (focus)=\"onInputFocus()\"\r\n (keydown)=\"onEndKeydown($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n }\r\n\r\n <!-- Calendar toggle button — hidden in readOnly mode -->\r\n @if (!_readOnly()) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-date-picker__toggle\"\r\n tabindex=\"-1\"\r\n [attr.aria-expanded]=\"panelOpen()\"\r\n [disabled]=\"disabled()\"\r\n aria-haspopup=\"dialog\"\r\n [attr.aria-label]=\"intl.openCalendarAriaLabel\"\r\n (click)=\"onToggleClick($event)\"\r\n >\r\n <fui-icon name=\"calendar-blank\" size=\"sm\" />\r\n </button>\r\n }\r\n</div>\r\n\r\n<!-- Calendar panel -->\r\n@if (panelOpen()) {\r\n <div\r\n #calendarPanel\r\n class=\"fui-date-picker__panel\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"intl.calendarDialogAriaLabel\"\r\n >\r\n <fui-calendar\r\n #calendar\r\n [selected]=\"selectedDate()\"\r\n [rangeStart]=\"rangeStartDate()\"\r\n [rangeEnd]=\"rangeEndDate()\"\r\n [range]=\"range()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateFilter]=\"dateFilter()\"\r\n [startAt]=\"startAt()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n [hoveredDate]=\"hoveredDate()\"\r\n (dateSelected)=\"onDateSelected($event)\"\r\n (dateHovered)=\"onDateHovered($event)\"\r\n />\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-date-picker.mjs","sources":["../../../lib/components/date-picker/calendar/calendar.intl.ts","../../../lib/components/date-picker/date-picker.utils.ts","../../../lib/components/date-picker/calendar/calendar.component.ts","../../../lib/components/date-picker/calendar/calendar.component.html","../../../lib/components/date-picker/date-picker.intl.ts","../../../lib/components/date-picker/date-picker.types.ts","../../../lib/components/date-picker/date-picker.component.ts","../../../lib/components/date-picker/date-picker.component.html","../../../lib/components/date-picker/raintonic-formaui-components-date-picker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiCalendarIntl extends FuiIntlBase {\r\n rootAriaLabel = 'Calendar';\r\n prevMonthLabel = 'Previous month';\r\n prevYearLabel = 'Previous year';\r\n prevDecadeLabel = 'Previous decade';\r\n nextMonthLabel = 'Next month';\r\n nextYearLabel = 'Next year';\r\n nextDecadeLabel = 'Next decade';\r\n switchToMonthViewLabel = 'Switch to month view';\r\n switchToYearViewLabel = 'Switch to year view';\r\n}\r\n","/**\r\n * Normalize a date to noon to avoid DST edge cases.\r\n */\r\nexport function normalizeDate(date: Date): Date {\r\n const d = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 12, 0, 0, 0);\r\n return d;\r\n}\r\n\r\n/**\r\n * Check if two dates are the same day (ignoring time).\r\n */\r\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\r\n if (!a || !b) return false;\r\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\r\n}\r\n\r\n/**\r\n * Check if a date is within [min, max] bounds (day-level).\r\n */\r\nexport function isDateInRange(date: Date, min: Date | null, max: Date | null): boolean {\r\n const d = normalizeDate(date).getTime();\r\n if (min && normalizeDate(min).getTime() > d) return false;\r\n if (max && normalizeDate(max).getTime() < d) return false;\r\n return true;\r\n}\r\n\r\n/**\r\n * Get number of days in a given month.\r\n */\r\nexport function getDaysInMonth(year: number, month: number): number {\r\n return new Date(year, month + 1, 0).getDate();\r\n}\r\n\r\n/**\r\n * Get localized weekday labels.\r\n * @param firstDayOfWeek 0=Sunday, 1=Monday, etc.\r\n * @param format 'short' | 'narrow'\r\n */\r\nexport function getWeekdayLabels(firstDayOfWeek = 1, format: 'short' | 'narrow' = 'narrow'): string[] {\r\n const formatter = new Intl.DateTimeFormat(undefined, { weekday: format });\r\n const labels: string[] = [];\r\n // Jan 4, 2024 is a Thursday — use a known date to map\r\n // Instead, iterate from a known Sunday (Jan 7, 2024)\r\n const sunday = new Date(2024, 0, 7); // Known Sunday\r\n for (let i = 0; i < 7; i++) {\r\n const dayIndex = (firstDayOfWeek + i) % 7;\r\n const date = new Date(sunday);\r\n date.setDate(sunday.getDate() + dayIndex);\r\n labels.push(formatter.format(date));\r\n }\r\n return labels;\r\n}\r\n\r\n/**\r\n * Get localized month label.\r\n */\r\nexport function getMonthLabel(year: number, month: number, format: 'long' | 'short' = 'long'): string {\r\n const formatter = new Intl.DateTimeFormat(undefined, { month: format, year: 'numeric' });\r\n return formatter.format(new Date(year, month, 1));\r\n}\r\n\r\n/**\r\n * Get short month name (for month view grid).\r\n */\r\nexport function getShortMonthName(month: number): string {\r\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'short' });\r\n return formatter.format(new Date(2024, month, 1));\r\n}\r\n\r\n/**\r\n * Build a 6x7 calendar grid for a given month.\r\n * @returns 6 rows of 7 Date objects each.\r\n */\r\nexport function buildCalendarGrid(year: number, month: number, firstDayOfWeek = 1): Date[][] {\r\n const firstOfMonth = new Date(year, month, 1);\r\n const dayOfWeek = firstOfMonth.getDay();\r\n // How many days to show from the previous month\r\n const offset = (dayOfWeek - firstDayOfWeek + 7) % 7;\r\n const startDate = new Date(year, month, 1 - offset);\r\n\r\n const weeks: Date[][] = [];\r\n const current = new Date(startDate);\r\n for (let week = 0; week < 6; week++) {\r\n const row: Date[] = [];\r\n for (let day = 0; day < 7; day++) {\r\n row.push(normalizeDate(new Date(current)));\r\n current.setDate(current.getDate() + 1);\r\n }\r\n weeks.push(row);\r\n }\r\n return weeks;\r\n}\r\n\r\n// --- Format / Parse ---\r\n\r\nfunction getSeparator(format: string): string {\r\n // Find first non-letter character\r\n const match = /[^dMyy]/.exec(format);\r\n return match ? match[0] : '/';\r\n}\r\n\r\n/**\r\n * Format a Date to a string using the given format pattern.\r\n * Supported tokens: dd, d, MM, M, yyyy, yy\r\n */\r\nexport function formatDate(date: Date | null, format: string): string {\r\n if (!date || isNaN(date.getTime())) return '';\r\n const day = date.getDate();\r\n const month = date.getMonth() + 1;\r\n const year = date.getFullYear();\r\n\r\n let result = format;\r\n // Replace in order of longest token first to avoid partial matches\r\n result = result.replace('dd', String(day).padStart(2, '0'));\r\n result = result.replace(/\\bd\\b/, String(day));\r\n result = result.replace('MM', String(month).padStart(2, '0'));\r\n result = result.replace(/\\bM\\b/, String(month));\r\n result = result.replace('yyyy', String(year).padStart(4, '0'));\r\n result = result.replace('yy', String(year % 100).padStart(2, '0'));\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse a date string to a Date using the given format.\r\n * Returns null on failure.\r\n */\r\nexport function parseDate(text: string, format: string): Date | null {\r\n if (!text?.trim()) return null;\r\n\r\n const sep = getSeparator(format);\r\n const parts = text.split(sep);\r\n\r\n // Build a map of token → position in split parts\r\n let day = -1;\r\n let month = -1;\r\n let year = -1;\r\n\r\n // Build expected parts from format\r\n const formatParts = format.split(sep);\r\n if (parts.length !== formatParts.length) return null;\r\n\r\n for (let i = 0; i < formatParts.length; i++) {\r\n const fp = formatParts[i];\r\n const val = parseInt(parts[i], 10);\r\n if (isNaN(val)) return null;\r\n\r\n if (fp === 'dd' || fp === 'd') {\r\n day = val;\r\n } else if (fp === 'MM' || fp === 'M') {\r\n month = val;\r\n } else if (fp === 'yyyy') {\r\n year = val;\r\n } else if (fp === 'yy') {\r\n year = val < 50 ? 2000 + val : 1900 + val;\r\n }\r\n }\r\n\r\n if (day < 1 || day > 31 || month < 1 || month > 12 || year < 0) return null;\r\n\r\n // Validate day for the given month\r\n const daysInMonth = getDaysInMonth(year, month - 1);\r\n if (day > daysInMonth) return null;\r\n\r\n return normalizeDate(new Date(year, month - 1, day));\r\n}\r\n\r\n/**\r\n * Apply date mask to raw input as user types.\r\n * Returns the masked value and corrected cursor position.\r\n */\r\nexport function applyDateMask(rawInput: string, format: string): { masked: string; cursor: number } {\r\n const sep = getSeparator(format);\r\n const digits = rawInput.replace(/\\D/g, '');\r\n\r\n // Build a pattern of digit counts from format tokens\r\n // e.g., 'dd/MM/yyyy' → [2, 2, 4] with separators at positions 2, 5\r\n const formatParts = format.split(sep);\r\n const digitCounts = formatParts.map((p) => p.length);\r\n const maxDigits = digitCounts.reduce((a, b) => a + b, 0);\r\n\r\n const capped = digits.substring(0, maxDigits);\r\n\r\n let masked = '';\r\n let digitIndex = 0;\r\n\r\n for (let partIdx = 0; partIdx < digitCounts.length; partIdx++) {\r\n const count = digitCounts[partIdx];\r\n const partDigits = capped.substring(digitIndex, digitIndex + count);\r\n\r\n if (partDigits.length === 0) break;\r\n\r\n if (partIdx > 0) {\r\n masked += sep;\r\n }\r\n masked += partDigits;\r\n digitIndex += partDigits.length;\r\n\r\n // Auto-insert separator when part is complete and there are more digits\r\n if (partDigits.length === count && digitIndex < capped.length && partIdx < digitCounts.length - 1) {\r\n // separator will be added in next iteration\r\n }\r\n }\r\n\r\n return { masked, cursor: masked.length };\r\n}\r\n\r\n/**\r\n * Check if date a is before date b (day-level).\r\n */\r\nexport function isBefore(a: Date, b: Date): boolean {\r\n return normalizeDate(a).getTime() < normalizeDate(b).getTime();\r\n}\r\n\r\n/**\r\n * Check if date a is after date b (day-level).\r\n */\r\nexport function isAfter(a: Date, b: Date): boolean {\r\n return normalizeDate(a).getTime() > normalizeDate(b).getTime();\r\n}\r\n\r\n/**\r\n * Check if date is between start and end (inclusive, day-level).\r\n */\r\nexport function isBetween(date: Date, start: Date | null, end: Date | null): boolean {\r\n if (!start || !end) return false;\r\n const d = normalizeDate(date).getTime();\r\n const s = normalizeDate(start).getTime();\r\n const e = normalizeDate(end).getTime();\r\n const min = Math.min(s, e);\r\n const max = Math.max(s, e);\r\n return d >= min && d <= max;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiCalendarIntl } from './calendar.intl';\r\nimport { CalendarDay, CalendarMonth, CalendarView, CalendarYear, DateFilterFn } from '../date-picker.types';\r\nimport {\r\n buildCalendarGrid,\r\n getDaysInMonth,\r\n getShortMonthName,\r\n getWeekdayLabels,\r\n isAfter,\r\n isBefore,\r\n isBetween,\r\n isDateInRange,\r\n isSameDay,\r\n normalizeDate,\r\n} from '../date-picker.utils';\r\n\r\n/**\r\n * @component FuiCalendarComponent\r\n * @selector fui-calendar\r\n * @description Internal calendar grid used by `fui-date-picker`. Renders day, month,\r\n * and year views with full keyboard navigation (Arrow keys, Home, End, PageUp/Down,\r\n * Enter, Escape). Supports single-date selection and range highlighting with hover preview.\r\n *\r\n * @input selected - Currently selected date for single mode (Date | null)\r\n * @input rangeStart - Start date of a range selection (Date | null)\r\n * @input rangeEnd - End date of a range selection (Date | null)\r\n * @input range - Whether range mode is active (default: false)\r\n * @input min - Minimum selectable date (Date | null)\r\n * @input max - Maximum selectable date (Date | null)\r\n * @input dateFilter - Custom filter function to disable specific dates (DateFilterFn | null)\r\n * @input startAt - Initial date to display when the calendar opens (Date | null)\r\n * @input firstDayOfWeek - First day of the week: 0 = Sunday, 1 = Monday (default: 1)\r\n * @input hoveredDate - Currently hovered date for range preview (Date | null)\r\n *\r\n * @output dateSelected - Emits the Date when a day cell is clicked or confirmed via keyboard\r\n * @output dateHovered - Emits the hovered Date or null on mouse enter/leave\r\n * @output monthChanged - Emits the new view Date when navigating months/years\r\n *\r\n * @example\r\n * <fui-calendar\r\n * [selected]=\"selectedDate\"\r\n * [min]=\"minDate\"\r\n * [max]=\"maxDate\"\r\n * (dateSelected)=\"onDateSelected($event)\">\r\n * </fui-calendar>\r\n */\r\n@Component({\r\n selector: 'fui-calendar',\r\n standalone: true,\r\n imports: [FuiIconComponent],\r\n templateUrl: './calendar.component.html',\r\n styleUrls: ['./calendar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-calendar',\r\n tabindex: '0',\r\n role: 'application',\r\n '[attr.aria-label]': 'intl.rootAriaLabel',\r\n },\r\n})\r\nexport class FuiCalendarComponent {\r\n readonly intl = inject(FuiCalendarIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n /** @internal — bumped when Intl mutates so computeds that read plain intl fields reinvoke. */\r\n private readonly _intlTick = signal(0);\r\n\r\n // Inputs\r\n readonly selected = input<Date | null>(null);\r\n readonly rangeStart = input<Date | null>(null);\r\n readonly rangeEnd = input<Date | null>(null);\r\n readonly range = input(false);\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n readonly dateFilter = input<DateFilterFn | null>(null);\r\n readonly startAt = input<Date | null>(null);\r\n readonly firstDayOfWeek = input(1);\r\n readonly hoveredDate = input<Date | null>(null);\r\n\r\n // Outputs\r\n readonly dateSelected = output<Date>();\r\n readonly dateHovered = output<Date | null>();\r\n readonly monthChanged = output<Date>();\r\n\r\n // Internal state\r\n readonly currentView = signal<CalendarView>('days');\r\n readonly viewDate = signal(normalizeDate(new Date()));\r\n readonly activeDate = signal(normalizeDate(new Date()));\r\n\r\n // Computed: weekday header labels\r\n readonly weekDayHeaders = computed(() => getWeekdayLabels(this.firstDayOfWeek(), 'narrow'));\r\n\r\n // Computed: month/year labels for header\r\n readonly monthYearLabel = computed(() => {\r\n const d = this.viewDate();\r\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });\r\n return formatter.format(d);\r\n });\r\n\r\n readonly yearLabel = computed(() => {\r\n return String(this.viewDate().getFullYear());\r\n });\r\n\r\n readonly decadeLabel = computed(() => {\r\n const year = this.viewDate().getFullYear();\r\n const start = year - (year % 12);\r\n return `${start} \\u2013 ${start + 11}`;\r\n });\r\n\r\n // Accessible navigation button labels\r\n readonly prevButtonLabel = computed(() => {\r\n this._intlTick();\r\n switch (this.currentView()) {\r\n case 'days':\r\n return this.intl.prevMonthLabel;\r\n case 'months':\r\n return this.intl.prevYearLabel;\r\n case 'years':\r\n return this.intl.prevDecadeLabel;\r\n }\r\n });\r\n\r\n readonly nextButtonLabel = computed(() => {\r\n this._intlTick();\r\n switch (this.currentView()) {\r\n case 'days':\r\n return this.intl.nextMonthLabel;\r\n case 'months':\r\n return this.intl.nextYearLabel;\r\n case 'years':\r\n return this.intl.nextDecadeLabel;\r\n }\r\n });\r\n\r\n readonly headerButtonLabel = computed(() => {\r\n this._intlTick();\r\n switch (this.currentView()) {\r\n case 'days':\r\n return this.intl.switchToMonthViewLabel;\r\n case 'months':\r\n return this.intl.switchToYearViewLabel;\r\n case 'years':\r\n return this.decadeLabel();\r\n }\r\n });\r\n\r\n // Computed: 6x7 calendar day grid\r\n readonly weeks = computed<CalendarDay[][]>(() => {\r\n const vd = this.viewDate();\r\n const grid = buildCalendarGrid(vd.getFullYear(), vd.getMonth(), this.firstDayOfWeek());\r\n const today = normalizeDate(new Date());\r\n const sel = this.selected();\r\n const rStart = this.rangeStart();\r\n const rEnd = this.rangeEnd();\r\n const hovered = this.hoveredDate();\r\n const isRange = this.range();\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n const filter = this.dateFilter();\r\n\r\n return grid.map((week) =>\r\n week.map((date) => {\r\n const isCurrentMonth = date.getMonth() === vd.getMonth();\r\n const isDisabled = !isDateInRange(date, minDate, maxDate) || (filter ? !filter(date) : false);\r\n const isSelected = !isRange ? isSameDay(date, sel) : isSameDay(date, rStart) || isSameDay(date, rEnd);\r\n const isRangeStart = isRange && isSameDay(date, rStart);\r\n const isRangeEnd = isRange && rEnd ? isSameDay(date, rEnd) : false;\r\n const isInRange =\r\n isRange && rStart && rEnd ? isBetween(date, rStart, rEnd) && !isRangeStart && !isRangeEnd : false;\r\n const isRangePreview =\r\n isRange && rStart && !rEnd && hovered\r\n ? isBetween(date, rStart, hovered) && !isSameDay(date, rStart) && !isSameDay(date, hovered)\r\n : false;\r\n\r\n return {\r\n date,\r\n day: date.getDate(),\r\n isCurrentMonth,\r\n isToday: isSameDay(date, today),\r\n isSelected,\r\n isDisabled,\r\n isRangeStart,\r\n isRangeEnd,\r\n isInRange,\r\n isRangePreview,\r\n } satisfies CalendarDay;\r\n }),\r\n );\r\n });\r\n\r\n // Computed: 3x4 months grid\r\n readonly monthsGrid = computed<CalendarMonth[][]>(() => {\r\n const vd = this.viewDate();\r\n const currentYear = vd.getFullYear();\r\n const now = new Date();\r\n const sel = this.selected();\r\n const rStart = this.rangeStart();\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n\r\n const months: CalendarMonth[] = [];\r\n for (let m = 0; m < 12; m++) {\r\n const isDisabled = this._isMonthDisabled(currentYear, m, minDate, maxDate);\r\n const isSelected = sel ? sel.getFullYear() === currentYear && sel.getMonth() === m : false;\r\n months.push({\r\n month: m,\r\n label: getShortMonthName(m),\r\n isCurrentMonth: now.getFullYear() === currentYear && now.getMonth() === m,\r\n isSelected: isSelected || (rStart ? rStart.getFullYear() === currentYear && rStart.getMonth() === m : false),\r\n isDisabled,\r\n });\r\n }\r\n\r\n // Arrange in 4 rows of 3\r\n const grid: CalendarMonth[][] = [];\r\n for (let i = 0; i < 12; i += 3) {\r\n grid.push(months.slice(i, i + 3));\r\n }\r\n return grid;\r\n });\r\n\r\n // Computed: 3x4 years grid\r\n readonly yearsGrid = computed<CalendarYear[][]>(() => {\r\n const vd = this.viewDate();\r\n const baseYear = vd.getFullYear();\r\n const startYear = baseYear - (baseYear % 12);\r\n const now = new Date();\r\n const sel = this.selected();\r\n const rStart = this.rangeStart();\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n\r\n const years: CalendarYear[] = [];\r\n for (let i = 0; i < 12; i++) {\r\n const year = startYear + i;\r\n const isDisabled = this._isYearDisabled(year, minDate, maxDate);\r\n const isSelected = sel ? sel.getFullYear() === year : false;\r\n years.push({\r\n year,\r\n isCurrentYear: now.getFullYear() === year,\r\n isSelected: isSelected || (rStart ? rStart.getFullYear() === year : false),\r\n isDisabled,\r\n });\r\n }\r\n\r\n const grid: CalendarYear[][] = [];\r\n for (let i = 0; i < 12; i += 3) {\r\n grid.push(years.slice(i, i + 3));\r\n }\r\n return grid;\r\n });\r\n\r\n private readonly _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this._intlTick.update((v) => v + 1);\r\n this._cdr.markForCheck();\r\n });\r\n // Initialize viewDate from startAt or selected or now\r\n const initial = this.startAt() ?? this.selected() ?? new Date();\r\n this.viewDate.set(normalizeDate(initial));\r\n this.activeDate.set(normalizeDate(initial));\r\n }\r\n\r\n // --- Header actions ---\r\n\r\n onHeaderLabelClick(): void {\r\n const view = this.currentView();\r\n if (view === 'days') {\r\n this.currentView.set('months');\r\n } else if (view === 'months') {\r\n this.currentView.set('years');\r\n }\r\n }\r\n\r\n onPrev(): void {\r\n const view = this.currentView();\r\n const vd = this.viewDate();\r\n if (view === 'days') {\r\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() - 1, 1, 12));\r\n } else if (view === 'months') {\r\n this.viewDate.set(new Date(vd.getFullYear() - 1, vd.getMonth(), 1, 12));\r\n } else {\r\n this.viewDate.set(new Date(vd.getFullYear() - 12, vd.getMonth(), 1, 12));\r\n }\r\n this.monthChanged.emit(this.viewDate());\r\n }\r\n\r\n onNext(): void {\r\n const view = this.currentView();\r\n const vd = this.viewDate();\r\n if (view === 'days') {\r\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() + 1, 1, 12));\r\n } else if (view === 'months') {\r\n this.viewDate.set(new Date(vd.getFullYear() + 1, vd.getMonth(), 1, 12));\r\n } else {\r\n this.viewDate.set(new Date(vd.getFullYear() + 12, vd.getMonth(), 1, 12));\r\n }\r\n this.monthChanged.emit(this.viewDate());\r\n }\r\n\r\n // --- Day view actions ---\r\n\r\n onDayClick(day: CalendarDay): void {\r\n if (day.isDisabled) return;\r\n this.dateSelected.emit(day.date);\r\n }\r\n\r\n onDayMouseEnter(day: CalendarDay): void {\r\n if (day.isDisabled) return;\r\n this.dateHovered.emit(day.date);\r\n }\r\n\r\n onDayMouseLeave(): void {\r\n this.dateHovered.emit(null);\r\n }\r\n\r\n // --- Month/year view actions ---\r\n\r\n onMonthClick(month: CalendarMonth): void {\r\n if (month.isDisabled) return;\r\n const vd = this.viewDate();\r\n this.viewDate.set(new Date(vd.getFullYear(), month.month, 1, 12));\r\n this.currentView.set('days');\r\n }\r\n\r\n onYearClick(year: CalendarYear): void {\r\n if (year.isDisabled) return;\r\n const vd = this.viewDate();\r\n this.viewDate.set(new Date(year.year, vd.getMonth(), 1, 12));\r\n this.currentView.set('months');\r\n }\r\n\r\n // --- Keyboard navigation ---\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n const view = this.currentView();\r\n if (view === 'days') {\r\n this._handleDayKeydown(event);\r\n } else if (view === 'months') {\r\n this._handleMonthKeydown(event);\r\n } else {\r\n this._handleYearKeydown(event);\r\n }\r\n }\r\n\r\n private _handleDayKeydown(event: KeyboardEvent): void {\r\n const active = this.activeDate();\r\n let newDate: Date | null = null;\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() - 1, 12);\r\n break;\r\n case 'ArrowRight':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() + 1, 12);\r\n break;\r\n case 'ArrowUp':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() - 7, 12);\r\n break;\r\n case 'ArrowDown':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), active.getDate() + 7, 12);\r\n break;\r\n case 'Home':\r\n newDate = new Date(active.getFullYear(), active.getMonth(), 1, 12);\r\n break;\r\n case 'End':\r\n newDate = new Date(\r\n active.getFullYear(),\r\n active.getMonth(),\r\n getDaysInMonth(active.getFullYear(), active.getMonth()),\r\n 12,\r\n );\r\n break;\r\n case 'PageUp':\r\n if (event.shiftKey) {\r\n newDate = new Date(active.getFullYear() - 1, active.getMonth(), active.getDate(), 12);\r\n } else {\r\n newDate = new Date(active.getFullYear(), active.getMonth() - 1, active.getDate(), 12);\r\n }\r\n break;\r\n case 'PageDown':\r\n if (event.shiftKey) {\r\n newDate = new Date(active.getFullYear() + 1, active.getMonth(), active.getDate(), 12);\r\n } else {\r\n newDate = new Date(active.getFullYear(), active.getMonth() + 1, active.getDate(), 12);\r\n }\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (isDateInRange(active, this.min(), this.max())) {\r\n const filter = this.dateFilter();\r\n if (!filter || filter(active)) {\r\n this.dateSelected.emit(active);\r\n }\r\n }\r\n return;\r\n case 'Escape':\r\n // Let parent handle\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n if (newDate) {\r\n event.preventDefault();\r\n this.activeDate.set(normalizeDate(newDate));\r\n // If the new active date is in a different month, update viewDate\r\n if (\r\n newDate.getMonth() !== this.viewDate().getMonth() ||\r\n newDate.getFullYear() !== this.viewDate().getFullYear()\r\n ) {\r\n this.viewDate.set(new Date(newDate.getFullYear(), newDate.getMonth(), 1, 12));\r\n this.monthChanged.emit(this.viewDate());\r\n }\r\n }\r\n }\r\n\r\n private _handleMonthKeydown(event: KeyboardEvent): void {\r\n // Simple arrow key handling for month grid (3 columns)\r\n const vd = this.viewDate();\r\n let month = vd.getMonth();\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n month--;\r\n break;\r\n case 'ArrowRight':\r\n month++;\r\n break;\r\n case 'ArrowUp':\r\n month -= 3;\r\n break;\r\n case 'ArrowDown':\r\n month += 3;\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.viewDate.set(new Date(vd.getFullYear(), month, 1, 12));\r\n this.currentView.set('days');\r\n return;\r\n case 'Escape':\r\n this.currentView.set('days');\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n if (month < 0) {\r\n this.viewDate.set(new Date(vd.getFullYear() - 1, 11, 1, 12));\r\n } else if (month > 11) {\r\n this.viewDate.set(new Date(vd.getFullYear() + 1, 0, 1, 12));\r\n } else {\r\n this.viewDate.set(new Date(vd.getFullYear(), month, 1, 12));\r\n }\r\n }\r\n\r\n private _handleYearKeydown(event: KeyboardEvent): void {\r\n const vd = this.viewDate();\r\n let year = vd.getFullYear();\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n year--;\r\n break;\r\n case 'ArrowRight':\r\n year++;\r\n break;\r\n case 'ArrowUp':\r\n year -= 3;\r\n break;\r\n case 'ArrowDown':\r\n year += 3;\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.viewDate.set(new Date(year, vd.getMonth(), 1, 12));\r\n this.currentView.set('months');\r\n return;\r\n case 'Escape':\r\n this.currentView.set('months');\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.viewDate.set(new Date(year, vd.getMonth(), 1, 12));\r\n }\r\n\r\n // Track by functions\r\n trackByWeek(_index: number, _week: CalendarDay[]): number {\r\n return _index;\r\n }\r\n\r\n trackByDay(_index: number, day: CalendarDay): number {\r\n return day.date.getTime();\r\n }\r\n\r\n trackByMonth(_index: number, month: CalendarMonth): number {\r\n return month.month;\r\n }\r\n\r\n trackByYear(_index: number, year: CalendarYear): number {\r\n return year.year;\r\n }\r\n\r\n trackByRow(_index: number): number {\r\n return _index;\r\n }\r\n\r\n // Helper: is entire month disabled?\r\n private _isMonthDisabled(year: number, month: number, min: Date | null, max: Date | null): boolean {\r\n if (min) {\r\n const lastOfMonth = new Date(year, month + 1, 0);\r\n if (isBefore(lastOfMonth, min) && !isSameDay(lastOfMonth, min)) return true;\r\n }\r\n if (max) {\r\n const firstOfMonth = new Date(year, month, 1);\r\n if (isAfter(firstOfMonth, max) && !isSameDay(firstOfMonth, max)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Helper: is entire year disabled?\r\n private _isYearDisabled(year: number, min: Date | null, max: Date | null): boolean {\r\n if (min && year < min.getFullYear()) return true;\r\n if (max && year > max.getFullYear()) return true;\r\n return false;\r\n }\r\n\r\n // Public: focus the calendar for keyboard nav\r\n focus(): void {\r\n this._elementRef.nativeElement.focus();\r\n }\r\n}\r\n","<!-- Calendar Header -->\r\n<div class=\"fui-calendar__header\">\r\n <button type=\"button\" class=\"fui-calendar__nav-btn\" (click)=\"onPrev()\" [attr.aria-label]=\"prevButtonLabel()\">\r\n <fui-icon name=\"caret-left\" size=\"sm\" />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"fui-calendar__header-label\"\r\n (click)=\"onHeaderLabelClick()\"\r\n [attr.aria-label]=\"headerButtonLabel()\"\r\n >\r\n @switch (currentView()) {\r\n @case ('days') {\r\n {{ monthYearLabel() }}\r\n }\r\n @case ('months') {\r\n {{ yearLabel() }}\r\n }\r\n @case ('years') {\r\n {{ decadeLabel() }}\r\n }\r\n }\r\n </button>\r\n\r\n <button type=\"button\" class=\"fui-calendar__nav-btn\" (click)=\"onNext()\" [attr.aria-label]=\"nextButtonLabel()\">\r\n <fui-icon name=\"caret-right\" size=\"sm\" />\r\n </button>\r\n</div>\r\n\r\n<!-- Day View -->\r\n@if (currentView() === 'days') {\r\n <table class=\"fui-calendar__grid\" role=\"grid\" [attr.aria-label]=\"monthYearLabel()\" (keydown)=\"onKeydown($event)\">\r\n <thead>\r\n <tr>\r\n @for (header of weekDayHeaders(); track header) {\r\n <th class=\"fui-calendar__weekday\" scope=\"col\">{{ header }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of weeks(); track trackByWeek($index, week)) {\r\n <tr>\r\n @for (day of week; track trackByDay($index, day)) {\r\n <td\r\n class=\"fui-calendar__cell\"\r\n [class.--today]=\"day.isToday\"\r\n [class.--selected]=\"day.isSelected\"\r\n [class.--outside]=\"!day.isCurrentMonth\"\r\n [class.--disabled]=\"day.isDisabled\"\r\n [class.--range-start]=\"day.isRangeStart\"\r\n [class.--range-end]=\"day.isRangeEnd\"\r\n [class.--in-range]=\"day.isInRange\"\r\n [class.--range-preview]=\"day.isRangePreview\"\r\n role=\"gridcell\"\r\n [attr.aria-selected]=\"day.isSelected\"\r\n [attr.aria-disabled]=\"day.isDisabled\"\r\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\r\n [attr.tabindex]=\"day.isCurrentMonth && !day.isDisabled ? 0 : -1\"\r\n (click)=\"onDayClick(day)\"\r\n (mouseenter)=\"onDayMouseEnter(day)\"\r\n (mouseleave)=\"onDayMouseLeave()\"\r\n >\r\n <span class=\"fui-calendar__day\">{{ day.day }}</span>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n}\r\n\r\n<!-- Month View -->\r\n@if (currentView() === 'months') {\r\n <div class=\"fui-calendar__months\" role=\"grid\" [attr.aria-label]=\"yearLabel()\" (keydown)=\"onKeydown($event)\">\r\n @for (row of monthsGrid(); track trackByRow($index)) {\r\n <div class=\"fui-calendar__months-row\" role=\"row\">\r\n @for (month of row; track trackByMonth($index, month)) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-calendar__month-cell\"\r\n [class.--current]=\"month.isCurrentMonth\"\r\n [class.--selected]=\"month.isSelected\"\r\n [class.--disabled]=\"month.isDisabled\"\r\n role=\"gridcell\"\r\n [attr.aria-selected]=\"month.isSelected\"\r\n [attr.aria-disabled]=\"month.isDisabled\"\r\n [disabled]=\"month.isDisabled\"\r\n (click)=\"onMonthClick(month)\"\r\n >\r\n {{ month.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Year View -->\r\n@if (currentView() === 'years') {\r\n <div class=\"fui-calendar__years\" role=\"grid\" [attr.aria-label]=\"decadeLabel()\" (keydown)=\"onKeydown($event)\">\r\n @for (row of yearsGrid(); track trackByRow($index)) {\r\n <div class=\"fui-calendar__years-row\" role=\"row\">\r\n @for (year of row; track trackByYear($index, year)) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-calendar__year-cell\"\r\n [class.--current]=\"year.isCurrentYear\"\r\n [class.--selected]=\"year.isSelected\"\r\n [class.--disabled]=\"year.isDisabled\"\r\n role=\"gridcell\"\r\n [attr.aria-selected]=\"year.isSelected\"\r\n [attr.aria-disabled]=\"year.isDisabled\"\r\n [disabled]=\"year.isDisabled\"\r\n (click)=\"onYearClick(year)\"\r\n >\r\n {{ year.year }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Live region for screen readers -->\r\n<div class=\"fui-calendar__announcer\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @switch (currentView()) {\r\n @case ('days') {\r\n {{ monthYearLabel() }}\r\n }\r\n @case ('months') {\r\n {{ yearLabel() }}\r\n }\r\n @case ('years') {\r\n {{ decadeLabel() }}\r\n }\r\n }\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiDatePickerIntl extends FuiIntlBase {\r\n endDateAriaLabel = 'End date';\r\n openCalendarAriaLabel = 'Open calendar';\r\n calendarDialogAriaLabel = 'Calendar';\r\n}\r\n","export type DatePickerValue = Date | null;\r\n\r\nexport interface DateRange {\r\n start: Date | null;\r\n end: Date | null;\r\n}\r\n\r\nexport type DatePickerModelValue = DatePickerValue | DateRange;\r\n\r\nexport type DateFilterFn = (date: Date) => boolean;\r\n\r\nexport type CalendarView = 'days' | 'months' | 'years';\r\n\r\nexport interface CalendarDay {\r\n date: Date;\r\n day: number;\r\n isCurrentMonth: boolean;\r\n isToday: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n isRangeStart: boolean;\r\n isRangeEnd: boolean;\r\n isInRange: boolean;\r\n isRangePreview: boolean;\r\n}\r\n\r\nexport interface CalendarMonth {\r\n month: number;\r\n label: string;\r\n isCurrentMonth: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\nexport interface CalendarYear {\r\n year: number;\r\n isCurrentYear: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\nexport const DEFAULT_DATE_FORMAT = 'dd/MM/yyyy';\r\nexport const RANGE_SEPARATOR = ' \\u2014 ';\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n DoCheck,\r\n effect,\r\n ElementRef,\r\n inject,\r\n NgZone,\r\n input,\r\n InputSignal,\r\n OnDestroy,\r\n output,\r\n OutputEmitterRef,\r\n signal,\r\n ViewChild,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormGroupDirective,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n NgForm,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { injectNgControl, updateErrorState, syncRequiredState, syncNgControlDisabled } from '@raintonic/formaui/cdk/form-field';\r\nimport { FUI_FORM_FIELD_CONTROL, FuiFormFieldControl } from '@raintonic/formaui/core';\r\nimport { DefaultErrorStateMatcher, ErrorStateMatcher } from '@raintonic/formaui/core';\r\nimport { FuiConnectedPosition, FuiOverlayRef, FuiOverlayService } from '@raintonic/formaui/cdk/overlay';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiCalendarComponent } from './calendar/calendar.component';\r\nimport { FuiDatePickerIntl } from './date-picker.intl';\r\nimport {\r\n DateFilterFn,\r\n DatePickerModelValue,\r\n DateRange,\r\n DEFAULT_DATE_FORMAT,\r\n RANGE_SEPARATOR,\r\n} from './date-picker.types';\r\nimport { applyDateMask, formatDate, isAfter, isBefore, normalizeDate, parseDate } from './date-picker.utils';\r\n\r\n/**\r\n * @component FuiDatePickerComponent\r\n * @selector fui-date-picker\r\n * @description A date picker form control with inline text input, calendar overlay panel,\r\n * and optional range selection. Integrates with `fui-form-field` via `FuiFormFieldControl`\r\n * and supports Reactive Forms (ControlValueAccessor) plus built-in Validator for min/max/filter\r\n * constraints. Uses the overlay service for proper dropdown positioning.\r\n *\r\n * @input placeholder - Placeholder text for the date input (alias: 'placeholder')\r\n * @input disabled - Whether the picker is disabled (alias: 'disabled')\r\n * @input readonly - Whether the picker is read-only\r\n * @input range - Enables date-range mode with start/end inputs (default: false)\r\n * @input format - Display format string (default: 'DD/MM/YYYY')\r\n * @input min - Minimum selectable date (Date | null)\r\n * @input max - Maximum selectable date (Date | null)\r\n * @input dateFilter - Custom filter function to disable specific dates (DateFilterFn | null)\r\n * @input startAt - Initial calendar view date when opened (Date | null)\r\n * @input firstDayOfWeek - First day of the week: 0 = Sunday, 1 = Monday (default: 1)\r\n * @input rangeSeparator - Separator string between range start/end display (default: RANGE_SEPARATOR)\r\n * @input errorStateMatcher - Custom error state matcher (ErrorStateMatcher | null)\r\n *\r\n * @output valueChange - Emits the new model value on change (Date | DateRange | null)\r\n * @output dateChange - Emits the new model value on date selection (Date | DateRange | null)\r\n * @output openedChange - Emits boolean when the calendar panel opens or closes\r\n *\r\n * @cssvar --fui-date-picker-font-size - Font size of the input text\r\n * @cssvar --fui-date-picker-panel-border-radius - Border radius of the calendar panel\r\n * @cssvar --fui-date-picker-panel-shadow - Box shadow of the calendar panel\r\n * @cssvar --fui-date-picker-panel-bg - Background color of the calendar panel\r\n * @cssvar --fui-date-picker-panel-border-color - Border color of the calendar panel\r\n * @cssvar --fui-date-picker-toggle-size - Size of the calendar toggle icon button\r\n *\r\n * @example\r\n * <fui-form-field>\r\n * <fui-label>Birth date</fui-label>\r\n * <fui-date-picker formControlName=\"birthDate\" placeholder=\"DD/MM/YYYY\"></fui-date-picker>\r\n * </fui-form-field>\r\n *\r\n * @example\r\n * <fui-form-field>\r\n * <fui-label>Stay period</fui-label>\r\n * <fui-date-picker [range]=\"true\" formControlName=\"period\"></fui-date-picker>\r\n * </fui-form-field>\r\n */\r\n@Component({\r\n selector: 'fui-date-picker',\r\n standalone: true,\r\n imports: [FuiIconComponent, FuiCalendarComponent],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-date-picker',\r\n '[attr.id]': 'id',\r\n '[class.fui-date-picker--open]': 'panelOpen()',\r\n '[class.fui-date-picker--disabled]': 'disabled()',\r\n '[class.fui-date-picker--range]': 'range()',\r\n '[class.fui-date-picker--focused]': 'focused()',\r\n '[class.fui-date-picker--error]': 'errorState()',\r\n '[class.fui-date-picker--readonly]': '_readOnly()',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: FuiDatePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: FuiDatePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: FUI_FORM_FIELD_CONTROL,\r\n useExisting: FuiDatePickerComponent,\r\n },\r\n ],\r\n})\r\nexport class FuiDatePickerComponent\r\n implements ControlValueAccessor, Validator, FuiFormFieldControl, DoCheck, OnDestroy\r\n{\r\n static nextId = 0;\r\n readonly controlType = 'fui-date-picker';\r\n\r\n readonly intl = inject(FuiDatePickerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n // Inputs\r\n readonly placeholderInput: InputSignal<string> = input('', { alias: 'placeholder' });\r\n readonly disabledInput: InputSignal<boolean> = input(false, { alias: 'disabled' });\r\n readonly readonly: InputSignal<boolean> = input(false);\r\n readonly range: InputSignal<boolean> = input(false);\r\n readonly format: InputSignal<string> = input(DEFAULT_DATE_FORMAT);\r\n readonly min: InputSignal<Date | null> = input<Date | null>(null);\r\n readonly max: InputSignal<Date | null> = input<Date | null>(null);\r\n readonly dateFilter: InputSignal<DateFilterFn | null> = input<DateFilterFn | null>(null);\r\n readonly startAt: InputSignal<Date | null> = input<Date | null>(null);\r\n readonly firstDayOfWeek: InputSignal<number> = input(1);\r\n readonly rangeSeparator: InputSignal<string> = input(RANGE_SEPARATOR);\r\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | null> = input<ErrorStateMatcher | null>(null);\r\n\r\n // Outputs\r\n readonly valueChange: OutputEmitterRef<DatePickerModelValue> = output<DatePickerModelValue>();\r\n readonly dateChange: OutputEmitterRef<DatePickerModelValue> = output<DatePickerModelValue>();\r\n readonly openedChange: OutputEmitterRef<boolean> = output<boolean>();\r\n\r\n // Internal state\r\n private readonly _value: WritableSignal<DatePickerModelValue> = signal(null);\r\n private readonly _focused: WritableSignal<boolean> = signal(false);\r\n private readonly _disabled: WritableSignal<boolean> = signal(false);\r\n private readonly _ngControlDisabled: WritableSignal<boolean> = signal(false);\r\n private readonly _required: WritableSignal<boolean> = signal(false);\r\n private readonly _errorState: WritableSignal<boolean> = signal(false);\r\n readonly _readOnly: WritableSignal<boolean> = signal(false);\r\n readonly panelOpen = signal(false);\r\n\r\n // Range hover\r\n readonly hoveredDate = signal<Date | null>(null);\r\n\r\n // FuiFormFieldControl\r\n readonly stateChanges = new Subject<void>();\r\n private _uid = `fui-date-picker-${FuiDatePickerComponent.nextId++}`;\r\n _ariaDescribedby: string | null = null;\r\n\r\n // Form references\r\n private _parentForm = inject(NgForm, { optional: true });\r\n private _parentFormGroup = inject(FormGroupDirective, { optional: true });\r\n private _defaultErrorStateMatcher = inject(DefaultErrorStateMatcher);\r\n private readonly _ngControlRef = injectNgControl();\r\n get ngControl(): NgControl | null {\r\n return this._ngControlRef.ngControl;\r\n }\r\n\r\n // Interface signals\r\n readonly placeholder = computed(() => this.placeholderInput());\r\n readonly required = this._required;\r\n readonly value = this._value;\r\n readonly focused = this._focused;\r\n readonly disabled = computed(() => this._disabled() || this.disabledInput() || this._ngControlDisabled());\r\n readonly errorState = this._errorState;\r\n readonly id = this._uid;\r\n\r\n readonly empty = computed(() => {\r\n const val = this._value();\r\n if (val === null) return true;\r\n if (this.range() && this._isDateRange(val)) {\r\n return val.start === null && val.end === null;\r\n }\r\n return false;\r\n });\r\n\r\n // Computed: selected date for single mode calendar input\r\n readonly selectedDate = computed<Date | null>(() => {\r\n const val = this._value();\r\n if (val instanceof Date) return val;\r\n return null;\r\n });\r\n\r\n readonly rangeStartDate = computed<Date | null>(() => {\r\n const val = this._value();\r\n if (this._isDateRange(val)) return val.start;\r\n return null;\r\n });\r\n\r\n readonly rangeEndDate = computed<Date | null>(() => {\r\n const val = this._value();\r\n if (this._isDateRange(val)) return val.end;\r\n return null;\r\n });\r\n\r\n // ViewChildren\r\n @ViewChild('triggerEl', { static: false }) triggerEl?: ElementRef<HTMLDivElement>;\r\n @ViewChild('calendarPanel', { static: false }) calendarPanel?: ElementRef<HTMLDivElement>;\r\n @ViewChild('startInput', { static: false }) startInputEl?: ElementRef<HTMLInputElement>;\r\n @ViewChild('endInput', { static: false }) endInputEl?: ElementRef<HTMLInputElement>;\r\n @ViewChild('calendar', { static: false }) calendarComponent?: FuiCalendarComponent;\r\n\r\n // Overlay\r\n private _overlayRef: FuiOverlayRef | null = null;\r\n private _overlaySubscriptions = new Subscription();\r\n private readonly _overlayService = inject(FuiOverlayService);\r\n private readonly _elementRef = inject(ElementRef);\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _ngZone = inject(NgZone);\r\n private _outsideClickSub?: Subscription;\r\n\r\n // CVA callbacks\r\n private _onChange: (value: DatePickerModelValue) => void = () => {\r\n /* noop */\r\n };\r\n private _onTouched: () => void = () => {\r\n /* noop */\r\n };\r\n private _onValidatorChange: () => void = () => {\r\n /* noop */\r\n };\r\n\r\n // Input text tracking\r\n readonly startInputText = signal('');\r\n readonly endInputText = signal('');\r\n\r\n // Display value for form-field readOnly mode (duck-typed like select/autocomplete)\r\n readonly displayValue = computed(() => {\r\n if (this.range()) {\r\n const start = this.startInputText();\r\n const end = this.endInputText();\r\n if (!start && !end) return '';\r\n return `${start || '—'} ${this.rangeSeparator()} ${end || '—'}`;\r\n }\r\n return this.startInputText() || '';\r\n });\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this._cdr.markForCheck();\r\n });\r\n\r\n void Promise.resolve().then(() => {\r\n if (this._ngControlRef.ngControl) {\r\n this._ngControlRef.ngControl.valueAccessor = this;\r\n }\r\n });\r\n\r\n // Effect to emit state changes\r\n effect(() => {\r\n this.placeholderInput();\r\n this.readonly();\r\n this.disabledInput();\r\n this.range();\r\n this.format();\r\n this.errorStateMatcher();\r\n this._focused();\r\n this._disabled();\r\n this._value();\r\n this._ngControlDisabled();\r\n this._required();\r\n this._errorState();\r\n\r\n this.stateChanges.next();\r\n });\r\n\r\n // Re-trigger validation when min/max/dateFilter change\r\n effect(() => {\r\n this.min();\r\n this.max();\r\n this.dateFilter();\r\n this._onValidatorChange();\r\n });\r\n\r\n // Sync display text when value changes\r\n effect(() => {\r\n const val = this._value();\r\n const fmt = this.format();\r\n if (this.range() && this._isDateRange(val)) {\r\n this.startInputText.set(formatDate(val.start, fmt));\r\n this.endInputText.set(formatDate(val.end, fmt));\r\n } else if (val instanceof Date) {\r\n this.startInputText.set(formatDate(val, fmt));\r\n } else {\r\n this.startInputText.set('');\r\n this.endInputText.set('');\r\n }\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (this.ngControl) {\r\n updateErrorState(\r\n this.ngControl,\r\n this._errorState,\r\n this.errorStateMatcher(),\r\n this._defaultErrorStateMatcher,\r\n this._parentForm,\r\n this._parentFormGroup,\r\n this.stateChanges,\r\n );\r\n syncRequiredState(this.ngControl, this._required, this.stateChanges);\r\n syncNgControlDisabled(this.ngControl, this._ngControlDisabled, this.stateChanges);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n this._outsideClickSub?.unsubscribe();\r\n this._disposeOverlay();\r\n }\r\n\r\n // --- CVA ---\r\n\r\n writeValue(value: DatePickerModelValue | string): void {\r\n if (typeof value === 'string') {\r\n const parsed = parseDate(value, this.format());\r\n this._value.set(parsed);\r\n } else if (value instanceof Date) {\r\n this._value.set(normalizeDate(value));\r\n } else if (value && typeof value === 'object' && ('start' in value || 'end' in value)) {\r\n const range = value;\r\n this._value.set({\r\n start: range.start ? normalizeDate(range.start) : null,\r\n end: range.end ? normalizeDate(range.end) : null,\r\n });\r\n } else {\r\n this._value.set(null);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n registerOnChange(fn: (value: DatePickerModelValue) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled.set(isDisabled);\r\n this.stateChanges.next();\r\n }\r\n\r\n // --- Validator ---\r\n\r\n validate(_control: AbstractControl): ValidationErrors | null {\r\n const value = this._value();\r\n if (value === null) return null;\r\n\r\n const minDate = this.min();\r\n const maxDate = this.max();\r\n const filter = this.dateFilter();\r\n\r\n if (value instanceof Date) {\r\n return this._validateSingleDate(value, minDate, maxDate, filter);\r\n }\r\n\r\n if (this._isDateRange(value)) {\r\n const errors: ValidationErrors = {};\r\n if (value.start) {\r\n const startErrors = this._validateSingleDate(value.start, minDate, maxDate, filter);\r\n if (startErrors) Object.assign(errors, startErrors);\r\n }\r\n if (value.end) {\r\n const endErrors = this._validateSingleDate(value.end, minDate, maxDate, filter);\r\n if (endErrors) Object.assign(errors, endErrors);\r\n }\r\n return Object.keys(errors).length > 0 ? errors : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this._onValidatorChange = fn;\r\n }\r\n\r\n private _validateSingleDate(\r\n date: Date,\r\n min: Date | null,\r\n max: Date | null,\r\n filter: DateFilterFn | null,\r\n ): ValidationErrors | null {\r\n if (min && isBefore(date, min)) {\r\n return { dateMin: { min, actual: date } };\r\n }\r\n if (max && isAfter(date, max)) {\r\n return { dateMax: { max, actual: date } };\r\n }\r\n if (filter && !filter(date)) {\r\n return { dateFilter: { actual: date } };\r\n }\r\n return null;\r\n }\r\n\r\n // --- FuiFormFieldControl ---\r\n\r\n onContainerClick(_event: MouseEvent): void {\r\n if (!this.disabled()) {\r\n this.startInputEl?.nativeElement.focus();\r\n if (!this.panelOpen()) {\r\n this.open();\r\n }\r\n }\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n this._ariaDescribedby = ids.length ? ids.join(' ') : null;\r\n }\r\n\r\n setReadOnly(readOnly: boolean): void {\r\n this._readOnly.set(readOnly);\r\n }\r\n\r\n // --- Panel open/close ---\r\n\r\n open(): void {\r\n if (this.disabled() || this.readonly() || this.panelOpen()) return;\r\n\r\n requestAnimationFrame(() => {\r\n this.panelOpen.set(true);\r\n this._focused.set(true);\r\n this.openedChange.emit(true);\r\n\r\n setTimeout(() => {\r\n this._createOverlay();\r\n this._listenForOutsideClicks();\r\n this.calendarComponent?.focus();\r\n });\r\n });\r\n }\r\n\r\n close(): void {\r\n if (!this.panelOpen()) return;\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this.panelOpen.set(false);\r\n this._focused.set(false);\r\n this.hoveredDate.set(null);\r\n this._disposeOverlay();\r\n this.openedChange.emit(false);\r\n this._onTouched();\r\n\r\n setTimeout(() => {\r\n this.startInputEl?.nativeElement.focus();\r\n }, 0);\r\n }\r\n\r\n toggle(): void {\r\n if (this.panelOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n // --- Trigger click ---\r\n\r\n onTriggerClick(): void {\r\n if (!this.disabled() && !this.readonly()) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n onToggleClick(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (!this.disabled() && !this.readonly()) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n // --- Input masking (start input) ---\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const { masked, cursor } = applyDateMask(input.value, this.format());\r\n input.value = masked;\r\n input.setSelectionRange(cursor, cursor);\r\n this.startInputText.set(masked);\r\n }\r\n\r\n onBlur(): void {\r\n const text = this.startInputText();\r\n if (!text) {\r\n if (!this.range()) {\r\n this._setValue(null);\r\n }\r\n return;\r\n }\r\n const parsed = parseDate(text, this.format());\r\n if (parsed) {\r\n if (this.range()) {\r\n const current = this._value();\r\n const rangeVal = this._isDateRange(current) ? current : { start: null, end: null };\r\n this._setValue({ ...rangeVal, start: parsed });\r\n } else {\r\n this._setValue(parsed);\r\n }\r\n } else {\r\n // Invalid input — revert to formatted value\r\n const val = this._value();\r\n if (this.range() && this._isDateRange(val)) {\r\n this.startInputText.set(formatDate(val.start, this.format()));\r\n } else if (val instanceof Date) {\r\n this.startInputText.set(formatDate(val, this.format()));\r\n } else {\r\n this.startInputText.set('');\r\n }\r\n }\r\n if (!this.panelOpen()) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this.panelOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n } else if ((event.key === 'ArrowDown' || event.key === 'Enter') && !this.panelOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n }\r\n }\r\n\r\n // --- End input (range mode) ---\r\n\r\n onEndInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const { masked, cursor } = applyDateMask(input.value, this.format());\r\n input.value = masked;\r\n input.setSelectionRange(cursor, cursor);\r\n this.endInputText.set(masked);\r\n }\r\n\r\n onEndBlur(): void {\r\n const text = this.endInputText();\r\n if (!text) return;\r\n const parsed = parseDate(text, this.format());\r\n if (parsed) {\r\n const current = this._value();\r\n const rangeVal = this._isDateRange(current) ? current : { start: null, end: null };\r\n this._setValue({ ...rangeVal, end: parsed });\r\n } else {\r\n const val = this._value();\r\n if (this._isDateRange(val)) {\r\n this.endInputText.set(formatDate(val.end, this.format()));\r\n } else {\r\n this.endInputText.set('');\r\n }\r\n }\r\n if (!this.panelOpen()) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n onEndKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this.panelOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n }\r\n\r\n onInputFocus(): void {\r\n this._focused.set(true);\r\n }\r\n\r\n // --- Calendar events ---\r\n\r\n onDateSelected(date: Date): void {\r\n if (this.range()) {\r\n this._handleRangeSelection(date);\r\n } else {\r\n this._setValue(date);\r\n this.close();\r\n }\r\n }\r\n\r\n onDateHovered(date: Date | null): void {\r\n this.hoveredDate.set(date);\r\n }\r\n\r\n // Start listening for outside clicks when panel opens\r\n private _listenForOutsideClicks(): void {\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this._ngZone.runOutsideAngular(() => {\r\n setTimeout(() => {\r\n this._outsideClickSub = fromEvent<MouseEvent>(this._document, 'click')\r\n .pipe(\r\n filter(() => this.panelOpen()),\r\n filter((event) => {\r\n const target = event.target as HTMLElement;\r\n const hostElement = this._elementRef.nativeElement;\r\n const overlayElement = this._overlayRef?.overlayElement;\r\n return !hostElement.contains(target) && !overlayElement?.contains(target);\r\n }),\r\n )\r\n .subscribe(() => {\r\n this._ngZone.run(() => {\r\n this.close();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n // --- Private helpers ---\r\n\r\n private _handleRangeSelection(date: Date): void {\r\n const current = this._value();\r\n const rangeVal = this._isDateRange(current) ? current : { start: null, end: null };\r\n\r\n if (!rangeVal.start || rangeVal.end) {\r\n // First click or resetting\r\n this._setValue({ start: date, end: null });\r\n this.hoveredDate.set(null);\r\n } else {\r\n // Second click — auto-swap if needed\r\n let start = rangeVal.start;\r\n let end = date;\r\n if (normalizeDate(end).getTime() < normalizeDate(start).getTime()) {\r\n [start, end] = [end, start];\r\n }\r\n this._setValue({ start, end });\r\n this.close();\r\n }\r\n }\r\n\r\n private _setValue(value: DatePickerModelValue): void {\r\n this._value.set(value);\r\n this._onChange(value);\r\n this.valueChange.emit(value);\r\n this.dateChange.emit(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n private _createOverlay(): void {\r\n if (this._overlayRef || !this.calendarPanel || !this.triggerEl) return;\r\n\r\n const triggerElement = this.triggerEl.nativeElement;\r\n const triggerWidth = triggerElement.getBoundingClientRect().width;\r\n\r\n const positions: FuiConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n ];\r\n\r\n const positionStrategy = this._overlayService\r\n .position()\r\n .connectedTo(triggerElement, positions)\r\n .withPush(true)\r\n .withViewportMargin(8);\r\n\r\n this._overlayRef = this._overlayService.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlayService.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'fui-date-picker-backdrop',\r\n backdropClickBehavior: 'close',\r\n panelClass: ['fui-date-picker-overlay-panel'],\r\n minWidth: Math.max(triggerWidth, 280),\r\n });\r\n\r\n // Track overlay subscriptions for proper cleanup\r\n this._overlaySubscriptions.unsubscribe();\r\n this._overlaySubscriptions = new Subscription();\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.backdropClick.subscribe(() => {\r\n this.close();\r\n }),\r\n );\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.keydownEvents.subscribe((event) => {\r\n if (event.key === 'Escape') {\r\n this.close();\r\n }\r\n }),\r\n );\r\n\r\n const panelElement = this.calendarPanel.nativeElement;\r\n this._overlayRef.attach(panelElement);\r\n }\r\n\r\n private _disposeOverlay(): void {\r\n this._overlaySubscriptions.unsubscribe();\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = null;\r\n }\r\n }\r\n\r\n private _isDateRange(val: DatePickerModelValue): val is DateRange {\r\n return val !== null && !(val instanceof Date) && typeof val === 'object' && 'start' in val;\r\n }\r\n\r\n // Public: get the computed placeholder for the start input\r\n getStartPlaceholder(): string {\r\n const p = this.placeholderInput();\r\n if (p) return p;\r\n return this.format().toLowerCase();\r\n }\r\n\r\n getEndPlaceholder(): string {\r\n return this.format().toLowerCase();\r\n }\r\n}\r\n","<!-- Trigger area -->\r\n<div #triggerEl class=\"fui-date-picker__trigger\" (click)=\"onTriggerClick()\">\r\n <!-- Start input -->\r\n <input\r\n #startInput\r\n class=\"fui-date-picker__input\"\r\n [id]=\"id\"\r\n [value]=\"startInputText()\"\r\n [placeholder]=\"getStartPlaceholder()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [attr.aria-describedby]=\"_ariaDescribedby\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"errorState()\"\r\n [attr.aria-expanded]=\"panelOpen()\"\r\n aria-haspopup=\"dialog\"\r\n aria-autocomplete=\"none\"\r\n role=\"combobox\"\r\n inputmode=\"numeric\"\r\n autocomplete=\"off\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onInputFocus()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n\r\n <!-- Range separator + end input -->\r\n @if (range()) {\r\n <span class=\"fui-date-picker__range-separator\" aria-hidden=\"true\">{{ rangeSeparator() }}</span>\r\n <input\r\n #endInput\r\n class=\"fui-date-picker__input fui-date-picker__input--end\"\r\n [value]=\"endInputText()\"\r\n [placeholder]=\"getEndPlaceholder()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [attr.aria-label]=\"intl.endDateAriaLabel\"\r\n [attr.aria-invalid]=\"errorState()\"\r\n inputmode=\"numeric\"\r\n autocomplete=\"off\"\r\n (input)=\"onEndInput($event)\"\r\n (blur)=\"onEndBlur()\"\r\n (focus)=\"onInputFocus()\"\r\n (keydown)=\"onEndKeydown($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n }\r\n\r\n <!-- Calendar toggle button — hidden in readOnly mode -->\r\n @if (!_readOnly()) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-date-picker__toggle\"\r\n tabindex=\"-1\"\r\n [attr.aria-expanded]=\"panelOpen()\"\r\n [disabled]=\"disabled()\"\r\n aria-haspopup=\"dialog\"\r\n [attr.aria-label]=\"intl.openCalendarAriaLabel\"\r\n (click)=\"onToggleClick($event)\"\r\n >\r\n <fui-icon name=\"calendar-blank\" size=\"sm\" />\r\n </button>\r\n }\r\n</div>\r\n\r\n<!-- Calendar panel -->\r\n@if (panelOpen()) {\r\n <div\r\n #calendarPanel\r\n class=\"fui-date-picker__panel\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"intl.calendarDialogAriaLabel\"\r\n >\r\n <fui-calendar\r\n #calendar\r\n [selected]=\"selectedDate()\"\r\n [rangeStart]=\"rangeStartDate()\"\r\n [rangeEnd]=\"rangeEndDate()\"\r\n [range]=\"range()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateFilter]=\"dateFilter()\"\r\n [startAt]=\"startAt()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n [hoveredDate]=\"hoveredDate()\"\r\n (dateSelected)=\"onDateSelected($event)\"\r\n (dateHovered)=\"onDateHovered($event)\"\r\n />\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|