ngx-com 0.0.19 → 0.0.21

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.
Files changed (56) hide show
  1. package/fesm2022/ngx-com-components-alert.mjs +346 -0
  2. package/fesm2022/ngx-com-components-alert.mjs.map +1 -0
  3. package/fesm2022/ngx-com-components-button.mjs +1 -1
  4. package/fesm2022/ngx-com-components-button.mjs.map +1 -1
  5. package/fesm2022/ngx-com-components-calendar.mjs +29 -36
  6. package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
  7. package/fesm2022/ngx-com-components-card.mjs +1 -1
  8. package/fesm2022/ngx-com-components-card.mjs.map +1 -1
  9. package/fesm2022/ngx-com-components-carousel.mjs +708 -0
  10. package/fesm2022/ngx-com-components-carousel.mjs.map +1 -0
  11. package/fesm2022/ngx-com-components-checkbox.mjs +17 -8
  12. package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
  13. package/fesm2022/ngx-com-components-code-block.mjs +158 -0
  14. package/fesm2022/ngx-com-components-code-block.mjs.map +1 -0
  15. package/fesm2022/ngx-com-components-collapsible.mjs +1 -1
  16. package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
  17. package/fesm2022/ngx-com-components-confirm.mjs +3 -3
  18. package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
  19. package/fesm2022/ngx-com-components-dialog.mjs +703 -0
  20. package/fesm2022/ngx-com-components-dialog.mjs.map +1 -0
  21. package/fesm2022/ngx-com-components-dropdown.mjs +36 -31
  22. package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
  23. package/fesm2022/ngx-com-components-form-field.mjs +48 -8
  24. package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
  25. package/fesm2022/ngx-com-components-item.mjs +1 -1
  26. package/fesm2022/ngx-com-components-item.mjs.map +1 -1
  27. package/fesm2022/ngx-com-components-paginator.mjs +3 -3
  28. package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
  29. package/fesm2022/ngx-com-components-radio.mjs +16 -9
  30. package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
  31. package/fesm2022/ngx-com-components-segmented-control.mjs +1 -1
  32. package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
  33. package/fesm2022/ngx-com-components-separator.mjs +102 -0
  34. package/fesm2022/ngx-com-components-separator.mjs.map +1 -0
  35. package/fesm2022/ngx-com-components-switch.mjs +258 -0
  36. package/fesm2022/ngx-com-components-switch.mjs.map +1 -0
  37. package/fesm2022/ngx-com-components-table.mjs +631 -0
  38. package/fesm2022/ngx-com-components-table.mjs.map +1 -0
  39. package/fesm2022/ngx-com-components-tabs.mjs +2 -2
  40. package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
  41. package/fesm2022/ngx-com-components-toast.mjs +783 -0
  42. package/fesm2022/ngx-com-components-toast.mjs.map +1 -0
  43. package/package.json +33 -1
  44. package/types/ngx-com-components-alert.d.ts +166 -0
  45. package/types/ngx-com-components-carousel.d.ts +281 -0
  46. package/types/ngx-com-components-checkbox.d.ts +7 -2
  47. package/types/ngx-com-components-code-block.d.ts +66 -0
  48. package/types/ngx-com-components-confirm.d.ts +2 -2
  49. package/types/ngx-com-components-dialog.d.ts +264 -0
  50. package/types/ngx-com-components-dropdown.d.ts +8 -5
  51. package/types/ngx-com-components-form-field.d.ts +19 -3
  52. package/types/ngx-com-components-radio.d.ts +5 -3
  53. package/types/ngx-com-components-separator.d.ts +75 -0
  54. package/types/ngx-com-components-switch.d.ts +110 -0
  55. package/types/ngx-com-components-table.d.ts +377 -0
  56. package/types/ngx-com-components-toast.d.ts +217 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-com-components-calendar.mjs","sources":["../../../projects/com/components/calendar/calendar.types.ts","../../../projects/com/components/calendar/date-adapter/date-adapter.ts","../../../projects/com/components/calendar/date-adapter/native-date-adapter.ts","../../../projects/com/components/calendar/calendar-cell.variants.ts","../../../projects/com/components/calendar/calendar-header.variants.ts","../../../projects/com/components/calendar/calendar.variants.ts","../../../projects/com/components/calendar/calendar.utils.ts","../../../projects/com/components/calendar/calendar-cell.ts","../../../projects/com/components/calendar/calendar-header.ts","../../../projects/com/components/calendar/views/calendar-view-base.ts","../../../projects/com/components/calendar/views/month-view.ts","../../../projects/com/components/calendar/views/year-view.ts","../../../projects/com/components/calendar/views/multi-year-view.ts","../../../projects/com/components/calendar/views/index.ts","../../../projects/com/components/calendar/selection/selection-strategy.ts","../../../projects/com/components/calendar/selection/single-selection-strategy.ts","../../../projects/com/components/calendar/selection/range-selection-strategy.ts","../../../projects/com/components/calendar/selection/multi-selection-strategy.ts","../../../projects/com/components/calendar/selection/week-selection-strategy.ts","../../../projects/com/components/calendar/selection/index.ts","../../../projects/com/components/calendar/calendar.ts","../../../projects/com/components/calendar/providers.ts","../../../projects/com/components/calendar/datepicker/datepicker.types.ts","../../../projects/com/components/calendar/datepicker/datepicker.variants.ts","../../../projects/com/components/calendar/timepicker/timepicker.variants.ts","../../../projects/com/components/calendar/timepicker/timepicker.types.ts","../../../projects/com/components/calendar/timepicker/timepicker.component.ts","../../../projects/com/components/calendar/datepicker/datepicker.component.ts","../../../projects/com/components/calendar/datepicker/date-range-picker.component.ts","../../../projects/com/components/calendar/datepicker/index.ts","../../../projects/com/components/calendar/timepicker/index.ts","../../../projects/com/components/calendar/index.ts","../../../projects/com/components/calendar/ngx-com-components-calendar.ts"],"sourcesContent":["/**\n * Calendar shared types and interfaces\n */\n\n/** Represents a date range with a start and end date */\nexport interface DateRange<D> {\n /** Start of the date range */\n start: D | null;\n /** End of the date range */\n end: D | null;\n}\n\n/** Factory function to create a DateRange */\nexport function createDateRange<D>(start: D | null, end: D | null): DateRange<D> {\n return { start, end };\n}\n\n/** Available calendar views */\nexport type CalendarView = 'month' | 'year' | 'multi-year';\n\n/** Cell states for styling */\nexport type CalendarCellState =\n | 'default'\n | 'today'\n | 'selected'\n | 'range-start'\n | 'range-middle'\n | 'range-end'\n | 'disabled'\n | 'preview-start'\n | 'preview-middle'\n | 'preview-end';\n\n/** Data structure representing a calendar cell */\nexport interface CalendarCell<D> {\n /** The date value this cell represents */\n value: D;\n /** Display text for the cell */\n displayValue: string;\n /** Accessible label for screen readers */\n ariaLabel: string;\n /** Whether this cell is enabled/selectable */\n enabled: boolean;\n /** CSS classes to apply (from dateClass input) */\n cssClasses: string;\n /** Whether this cell represents today */\n isToday: boolean;\n /** Whether this cell is currently selected */\n isSelected: boolean;\n /** Whether this cell is the start of a range */\n isRangeStart: boolean;\n /** Whether this cell is in the middle of a range */\n isRangeMiddle: boolean;\n /** Whether this cell is the end of a range */\n isRangeEnd: boolean;\n /** Whether this cell is the start of a preview range */\n isPreviewStart: boolean;\n /** Whether this cell is in the middle of a preview range */\n isPreviewMiddle: boolean;\n /** Whether this cell is the end of a preview range */\n isPreviewEnd: boolean;\n /** Comparison value for keyboard navigation and selection */\n compareValue: number;\n}\n\n/** Configuration for creating a calendar cell */\nexport interface CalendarCellConfig<D> {\n value: D;\n displayValue: string;\n ariaLabel: string;\n enabled?: boolean;\n cssClasses?: string;\n compareValue: number;\n}\n\n/** Factory function to create a CalendarCell with defaults */\nexport function createCalendarCell<D>(config: CalendarCellConfig<D>): CalendarCell<D> {\n return {\n value: config.value,\n displayValue: config.displayValue,\n ariaLabel: config.ariaLabel,\n enabled: config.enabled ?? true,\n cssClasses: config.cssClasses ?? '',\n compareValue: config.compareValue,\n isToday: false,\n isSelected: false,\n isRangeStart: false,\n isRangeMiddle: false,\n isRangeEnd: false,\n isPreviewStart: false,\n isPreviewMiddle: false,\n isPreviewEnd: false,\n };\n}\n\n/** Style format for month and day names */\nexport type NameStyle = 'long' | 'short' | 'narrow';\n\n/** Number of days in a week */\nexport const DAYS_PER_WEEK = 7;\n\n/** Number of weeks displayed in month view */\nexport const WEEKS_PER_MONTH = 6;\n\n/** Number of years displayed in multi-year view */\nexport const YEARS_PER_PAGE = 24;\n\n/** Number of rows in multi-year view */\nexport const YEARS_PER_ROW = 4;\n\n/** Number of months per row in year view */\nexport const MONTHS_PER_ROW = 4;\n\n/** Function type for custom date filtering */\nexport type DateFilterFn<D> = (date: D) => boolean;\n\n/** Function type for applying custom CSS classes to dates */\nexport type DateClassFn<D> = (date: D, view: CalendarView) => string;\n","import { InjectionToken } from '@angular/core';\nimport type { NameStyle } from '../calendar.types';\n\n/**\n * Abstract date adapter class that provides date manipulation operations.\n * Implement this class to support different date libraries (date-fns, Luxon, Temporal, etc.)\n */\nexport abstract class DateAdapter<D> {\n /** The locale to use for formatting. Can be overridden. */\n locale: string = 'en-US';\n\n /** Gets today's date */\n abstract today(): D;\n\n /** Gets the year component of the given date */\n abstract getYear(date: D): number;\n\n /** Gets the month component of the given date (0-indexed, 0 = January) */\n abstract getMonth(date: D): number;\n\n /** Gets the day of month component of the given date */\n abstract getDate(date: D): number;\n\n /** Gets the day of the week (0 = Sunday, 6 = Saturday) */\n abstract getDayOfWeek(date: D): number;\n\n /** Adds the given number of days to the date */\n abstract addDays(date: D, days: number): D;\n\n /** Adds the given number of months to the date */\n abstract addMonths(date: D, months: number): D;\n\n /** Adds the given number of years to the date */\n abstract addYears(date: D, years: number): D;\n\n /** Creates a new date with the given year, month (0-indexed), and day */\n abstract createDate(year: number, month: number, date: number): D;\n\n /** Gets the number of days in the month of the given date */\n abstract getNumDaysInMonth(date: D): number;\n\n /** Gets the first day of the week (0 = Sunday, 1 = Monday, etc.) */\n abstract getFirstDayOfWeek(): number;\n\n /** Gets the names of the months */\n abstract getMonthNames(style: NameStyle): string[];\n\n /** Gets the names of the days of the week */\n abstract getDayOfWeekNames(style: NameStyle): string[];\n\n /** Gets the display name for a year */\n abstract getYearName(date: D): string;\n\n /** Formats the date according to the given format string */\n abstract format(date: D, displayFormat: string): string;\n\n /** Parses a date string into a date object */\n abstract parse(value: string, parseFormat: string): D | null;\n\n /** Checks whether the given date is valid */\n abstract isValid(date: D): boolean;\n\n /** Checks whether two dates are the same day */\n abstract isSameDay(first: D, second: D): boolean;\n\n /** Compares two dates. Returns -1 if first < second, 0 if equal, 1 if first > second */\n abstract compareDate(first: D, second: D): number;\n\n /** Clamps the given date to the specified min/max range */\n abstract clampDate(date: D, min: D | null, max: D | null): D;\n\n /**\n * Gets the first day of the month for the given date\n */\n getFirstDayOfMonth(date: D): D {\n return this.createDate(this.getYear(date), this.getMonth(date), 1);\n }\n\n /**\n * Checks whether two dates are in the same month and year\n */\n isSameMonthAndYear(first: D, second: D): boolean {\n return (\n this.getYear(first) === this.getYear(second) &&\n this.getMonth(first) === this.getMonth(second)\n );\n }\n\n /**\n * Checks whether the given date is within the specified range\n */\n isDateInRange(date: D, start: D | null, end: D | null): boolean {\n if (!start || !end) return false;\n const compareToStart = this.compareDate(date, start);\n const compareToEnd = this.compareDate(date, end);\n return compareToStart >= 0 && compareToEnd <= 0;\n }\n\n /** Gets the hour component of the given date (0-23) */\n abstract getHours(date: D): number;\n\n /** Gets the minute component of the given date (0-59) */\n abstract getMinutes(date: D): number;\n\n /** Gets the second component of the given date (0-59) */\n abstract getSeconds(date: D): number;\n\n /** Returns a new date with the given hour, minute, second set */\n abstract setTime(date: D, hours: number, minutes: number, seconds: number): D;\n\n /** Creates a date with the given year, month (0-indexed), day, hours, minutes, seconds */\n abstract createDateTime(\n year: number,\n month: number,\n day: number,\n hours: number,\n minutes: number,\n seconds: number,\n ): D;\n\n /**\n * Gets a unique identifier for the date (useful for trackBy)\n */\n getId(date: D): string {\n return `${this.getYear(date)}-${this.getMonth(date)}-${this.getDate(date)}`;\n }\n\n /**\n * Sets the locale for the adapter\n */\n setLocale(locale: string): void {\n this.locale = locale;\n }\n}\n\n/** Injection token for the DateAdapter */\nexport const DATE_ADAPTER: InjectionToken<DateAdapter<unknown>> = new InjectionToken<DateAdapter<unknown>>('DATE_ADAPTER');\n","import { inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { DateAdapter } from './date-adapter';\nimport type { NameStyle } from '../calendar.types';\n\n/**\n * DateAdapter implementation using the native JavaScript Date object.\n * This is the default adapter shipped with the library.\n */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n private readonly localeId: string = inject(LOCALE_ID);\n\n constructor() {\n super();\n this.locale = this.localeId;\n }\n\n override today(): Date {\n return this.stripTime(new Date());\n }\n\n override getYear(date: Date): number {\n return date.getFullYear();\n }\n\n override getMonth(date: Date): number {\n return date.getMonth();\n }\n\n override getDate(date: Date): number {\n return date.getDate();\n }\n\n override getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n override addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return this.stripTime(result);\n }\n\n override addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n const targetMonth = result.getMonth() + months;\n const targetYear = result.getFullYear() + Math.floor(targetMonth / 12);\n const normalizedMonth = ((targetMonth % 12) + 12) % 12;\n\n // Handle month overflow (e.g., Jan 31 + 1 month = Feb 28/29)\n const daysInTargetMonth = this.getDaysInMonth(targetYear, normalizedMonth);\n const targetDay = Math.min(result.getDate(), daysInTargetMonth);\n\n result.setFullYear(targetYear, normalizedMonth, targetDay);\n return this.stripTime(result);\n }\n\n override addYears(date: Date, years: number): Date {\n return this.addMonths(date, years * 12);\n }\n\n override createDate(year: number, month: number, day: number): Date {\n // Validate inputs\n if (month < 0 || month > 11) {\n throw new Error(`Invalid month index \"${month}\". Month index must be between 0 and 11.`);\n }\n\n if (day < 1) {\n throw new Error(`Invalid date \"${day}\". Date must be greater than 0.`);\n }\n\n const result = new Date(year, month, day);\n\n // Check for date overflow (e.g., Feb 30)\n if (result.getMonth() !== month) {\n throw new Error(`Invalid date \"${day}\" for month index \"${month}\".`);\n }\n\n return this.stripTime(result);\n }\n\n override getNumDaysInMonth(date: Date): number {\n return this.getDaysInMonth(this.getYear(date), this.getMonth(date));\n }\n\n override getFirstDayOfWeek(): number {\n try {\n // Modern browsers: use Intl.Locale API (Chrome 99+, Firefox 104+, Safari 17+)\n const locale = new Intl.Locale(this.locale);\n if ('weekInfo' in locale && locale.weekInfo) {\n // weekInfo.firstDay is 1=Mon, 7=Sun; convert to 0=Sun, 1=Mon...\n const firstDay = (locale.weekInfo as { firstDay: number }).firstDay;\n return firstDay === 7 ? 0 : firstDay;\n }\n } catch {\n // Fallback silently for older browsers\n }\n\n // Legacy fallback for browsers without weekInfo support\n const sundayLocales = ['en', 'ja', 'ko', 'zh'];\n const localePrefix = this.locale.split('-')[0] ?? this.locale;\n return sundayLocales.includes(localePrefix) ? 0 : 1;\n }\n\n override setLocale(locale: string): void {\n try {\n // Validate locale string using Intl.DateTimeFormat\n new Intl.DateTimeFormat(locale);\n this.locale = locale;\n } catch {\n console.warn(`Invalid locale: ${locale}. Falling back to en-US.`);\n this.locale = 'en-US';\n }\n }\n\n override getMonthNames(style: NameStyle): string[] {\n const formatter = new Intl.DateTimeFormat(this.locale, { month: style });\n return Array.from({ length: 12 }, (_, i) => {\n const date = new Date(2020, i, 1);\n return formatter.format(date);\n });\n }\n\n override getDayOfWeekNames(style: NameStyle): string[] {\n const formatter = new Intl.DateTimeFormat(this.locale, { weekday: style });\n // Start from a known Sunday (Jan 4, 2020 is a Saturday, Jan 5 is Sunday)\n return Array.from({ length: 7 }, (_, i) => {\n const date = new Date(2020, 0, 5 + i); // Jan 5, 2020 is a Sunday\n return formatter.format(date);\n });\n }\n\n override getYearName(date: Date): string {\n const formatter = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\n return formatter.format(date);\n }\n\n override format(date: Date, displayFormat: string): string {\n if (!this.isValid(date)) {\n throw new Error('Cannot format invalid date.');\n }\n\n // Support common format patterns\n const formatOptions = this.parseFormatString(displayFormat);\n const formatter = new Intl.DateTimeFormat(this.locale, formatOptions);\n return formatter.format(date);\n }\n\n override parse(value: string, _parseFormat: string): Date | null {\n if (!value) return null;\n\n // Attempt to parse using Date.parse\n const timestamp = Date.parse(value);\n if (isNaN(timestamp)) {\n return null;\n }\n\n return this.stripTime(new Date(timestamp));\n }\n\n override isValid(date: Date): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n override isSameDay(first: Date, second: Date): boolean {\n return (\n this.getYear(first) === this.getYear(second) &&\n this.getMonth(first) === this.getMonth(second) &&\n this.getDate(first) === this.getDate(second)\n );\n }\n\n override compareDate(first: Date, second: Date): number {\n const yearDiff = this.getYear(first) - this.getYear(second);\n if (yearDiff !== 0) return yearDiff > 0 ? 1 : -1;\n\n const monthDiff = this.getMonth(first) - this.getMonth(second);\n if (monthDiff !== 0) return monthDiff > 0 ? 1 : -1;\n\n const dateDiff = this.getDate(first) - this.getDate(second);\n if (dateDiff !== 0) return dateDiff > 0 ? 1 : -1;\n\n return 0;\n }\n\n override getHours(date: Date): number {\n return date.getHours();\n }\n\n override getMinutes(date: Date): number {\n return date.getMinutes();\n }\n\n override getSeconds(date: Date): number {\n return date.getSeconds();\n }\n\n override setTime(date: Date, hours: number, minutes: number, seconds: number): Date {\n const result = new Date(date);\n result.setHours(hours, minutes, seconds, 0);\n return result;\n }\n\n override createDateTime(\n year: number,\n month: number,\n day: number,\n hours: number,\n minutes: number,\n seconds: number,\n ): Date {\n if (month < 0 || month > 11) {\n throw new Error(`Invalid month index \"${month}\". Month index must be between 0 and 11.`);\n }\n\n if (day < 1) {\n throw new Error(`Invalid date \"${day}\". Date must be greater than 0.`);\n }\n\n const result = new Date(year, month, day, hours, minutes, seconds);\n\n if (result.getMonth() !== month) {\n throw new Error(`Invalid date \"${day}\" for month index \"${month}\".`);\n }\n\n return result;\n }\n\n override clampDate(date: Date, min: Date | null, max: Date | null): Date {\n if (min && this.compareDate(date, min) < 0) {\n return min;\n }\n if (max && this.compareDate(date, max) > 0) {\n return max;\n }\n return date;\n }\n\n /**\n * Strips the time component from a date, returning midnight\n */\n private stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n /**\n * Gets the number of days in a specific month\n */\n private getDaysInMonth(year: number, month: number): number {\n // Day 0 of next month gives us the last day of current month\n return new Date(year, month + 1, 0).getDate();\n }\n\n /**\n * Parses a format string into Intl.DateTimeFormat options\n */\n private parseFormatString(format: string): Intl.DateTimeFormatOptions {\n // Simple format mapping - can be extended as needed\n const formatMap: Record<string, Intl.DateTimeFormatOptions> = {\n short: { dateStyle: 'short' },\n medium: { dateStyle: 'medium' },\n long: { dateStyle: 'long' },\n full: { dateStyle: 'full' },\n monthYear: { year: 'numeric', month: 'long' },\n monthYearShort: { year: 'numeric', month: 'short' },\n dayMonth: { day: 'numeric', month: 'long' },\n dayMonthYear: { day: 'numeric', month: 'long', year: 'numeric' },\n time: { hour: 'numeric', minute: '2-digit' },\n timeWithSeconds: { hour: 'numeric', minute: '2-digit', second: '2-digit' },\n dateTimeShort: { dateStyle: 'short', timeStyle: 'short' },\n dateTimeMedium: { dateStyle: 'medium', timeStyle: 'short' },\n dateTimeLong: { dateStyle: 'long', timeStyle: 'medium' },\n };\n\n return formatMap[format] ?? { dateStyle: 'medium' };\n }\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\ntype CellView = 'month' | 'year' | 'multi-year';\ntype CellState =\n | 'default'\n | 'today'\n | 'selected'\n | 'range-start'\n | 'range-middle'\n | 'range-end'\n | 'preview-start'\n | 'preview-middle'\n | 'preview-end'\n | 'disabled';\ntype WrapperRange = 'none' | 'start' | 'middle' | 'end' | 'single';\n\n/**\n * CVA variants for calendar cell styling.\n * Uses semantic theme tokens for consistent cross-theme styling.\n *\n * @tokens `--color-ring`, `--color-foreground`, `--color-muted`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\nexport const calendarCellVariants: (props?: {\n view?: CellView;\n state?: CellState;\n outside?: boolean;\n}) => string = cva(\n // Base styles applied to all cells\n [\n 'relative',\n 'flex',\n 'items-center',\n 'justify-center',\n 'cursor-pointer',\n 'select-none',\n 'transition-colors',\n 'duration-150',\n 'outline-none',\n 'focus-visible:ring-2',\n 'focus-visible:ring-offset-2',\n 'focus-visible:ring-ring',\n ],\n {\n variants: {\n view: {\n month: ['h-9', 'w-9', 'text-sm', 'rounded-full'],\n year: ['h-10', 'w-16', 'text-sm', 'rounded-calendar-cell'],\n 'multi-year': ['h-10', 'w-14', 'text-sm', 'rounded-calendar-cell'],\n },\n state: {\n default: ['text-foreground', 'hover:bg-muted'],\n today: [\n 'text-primary',\n 'font-semibold',\n 'ring-1',\n 'ring-ring',\n 'hover:bg-primary-subtle',\n ],\n selected: [\n 'bg-primary',\n 'text-primary-foreground',\n 'font-semibold',\n 'hover:bg-primary-hover',\n ],\n 'range-start': [\n 'bg-primary',\n 'text-primary-foreground',\n 'font-semibold',\n 'rounded-l-full',\n 'rounded-r-none',\n 'hover:bg-primary-hover',\n ],\n 'range-middle': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-none',\n 'hover:brightness-95',\n ],\n 'range-end': [\n 'bg-primary',\n 'text-primary-foreground',\n 'font-semibold',\n 'rounded-r-full',\n 'rounded-l-none',\n 'hover:bg-primary-hover',\n ],\n 'preview-start': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-l-full',\n 'rounded-r-none',\n 'ring-1',\n 'ring-ring',\n 'opacity-70',\n ],\n 'preview-middle': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-none',\n 'opacity-70',\n ],\n 'preview-end': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-r-full',\n 'rounded-l-none',\n 'ring-1',\n 'ring-ring',\n 'opacity-70',\n ],\n disabled: ['text-disabled-foreground', 'cursor-not-allowed', 'hover:bg-transparent'],\n },\n outside: {\n true: ['text-muted-foreground'],\n false: [],\n },\n },\n compoundVariants: [\n {\n state: 'disabled',\n outside: true,\n class: ['text-disabled-foreground'],\n },\n {\n state: 'selected',\n class: ['ring-0'],\n },\n ],\n defaultVariants: {\n view: 'month',\n state: 'default',\n outside: false,\n },\n }\n);\n\nexport type CalendarCellVariants = {\n view?: CellView;\n state?: CellState;\n outside?: boolean;\n};\n\n/**\n * CVA variants for the calendar cell wrapper (used for range backgrounds)\n *\n * @tokens `--color-primary-subtle`\n */\nexport const calendarCellWrapperVariants: (props?: { range?: WrapperRange | undefined }) => string = cva(\n ['relative', 'flex', 'items-center', 'justify-center'],\n {\n variants: {\n range: {\n none: [],\n start: ['bg-primary-subtle', 'rounded-l-full'],\n middle: ['bg-primary-subtle'],\n end: ['bg-primary-subtle', 'rounded-r-full'],\n single: [],\n },\n },\n defaultVariants: {\n range: 'none',\n },\n }\n);\n\nexport type CalendarCellWrapperVariants = {\n range?: WrapperRange | undefined;\n};\n","import { cva } from 'class-variance-authority';\n\ntype ButtonType = 'navigation' | 'period';\n\n/**\n * CVA variants for the calendar header container.\n */\nexport const calendarHeaderVariants: () => string = cva(\n [\n 'flex',\n 'items-center',\n 'justify-between',\n 'px-2',\n 'py-1',\n 'mb-2',\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\nexport type CalendarHeaderVariants = Record<string, never>;\n\n/**\n * CVA variants for the calendar header buttons.\n *\n * @tokens `--color-foreground`, `--color-ring`, `--color-muted`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\nexport const calendarHeaderButtonVariants: (props?: { type?: ButtonType }) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'select-none',\n 'transition-colors',\n 'duration-150',\n 'outline-none',\n 'text-foreground',\n 'focus-visible:ring-2',\n 'focus-visible:ring-offset-2',\n 'focus-visible:ring-ring',\n 'disabled:cursor-not-allowed',\n 'disabled:text-disabled-foreground',\n ],\n {\n variants: {\n type: {\n navigation: [\n 'h-9',\n 'w-9',\n 'rounded-full',\n 'hover:bg-muted',\n ],\n period: [\n 'px-3',\n 'py-1.5',\n 'text-sm',\n 'font-semibold',\n 'rounded-calendar-cell',\n 'hover:bg-muted',\n ],\n },\n },\n defaultVariants: {\n type: 'navigation',\n },\n }\n);\n\nexport type CalendarHeaderButtonVariants = {\n type?: ButtonType;\n};\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * CVA variants for the main calendar container.\n *\n * @tokens `--color-background`, `--color-border-subtle`, `--radius-calendar`\n */\nexport const calendarVariants: (props?: { bordered?: boolean }) => string = cva(\n [\n 'com-calendar',\n 'inline-block',\n 'p-2',\n 'bg-background',\n ],\n {\n variants: {\n bordered: {\n true: ['rounded-calendar', 'shadow-sm', 'border', 'border-border-subtle'],\n false: [],\n },\n },\n defaultVariants: {\n bordered: true,\n },\n }\n);\n\nexport type CalendarVariants = VariantProps<typeof calendarVariants>;\n\n/**\n * CVA variants for the months container in month view.\n * Handles single vs dual-month layouts.\n */\nexport const monthsContainerVariants: (props?: { columns?: 1 | 2 }) => string = cva('', {\n variants: {\n columns: {\n 1: '',\n 2: 'flex gap-4',\n },\n },\n defaultVariants: {\n columns: 1,\n },\n});\n\nexport type MonthsContainerVariants = VariantProps<typeof monthsContainerVariants>;\n","import type { DateAdapter } from './date-adapter';\nimport type { NameStyle } from './calendar.types';\n\n/**\n * Creates a 2D grid from a flat array of items.\n *\n * @param items The flat array of items to arrange into a grid\n * @param columns Number of columns per row\n * @returns 2D array where each inner array is a row\n */\nexport function createGrid<T>(items: T[], columns: number): T[][] {\n const grid: T[][] = [];\n for (let i = 0; i < items.length; i += columns) {\n grid.push(items.slice(i, i + columns));\n }\n return grid;\n}\n\n/**\n * Calculates the new index when navigating a grid with arrow keys.\n *\n * @param currentIndex Current position in the flat array\n * @param direction Navigation direction ('left' | 'right' | 'up' | 'down')\n * @param totalItems Total number of items in the grid\n * @param columns Number of columns per row\n * @returns New index or null if navigation would go out of bounds\n */\nexport function navigateGrid(\n currentIndex: number,\n direction: 'left' | 'right' | 'up' | 'down',\n totalItems: number,\n columns: number\n): number | null {\n let newIndex: number;\n\n switch (direction) {\n case 'left':\n newIndex = currentIndex - 1;\n break;\n case 'right':\n newIndex = currentIndex + 1;\n break;\n case 'up':\n newIndex = currentIndex - columns;\n break;\n case 'down':\n newIndex = currentIndex + columns;\n break;\n default:\n return null;\n }\n\n if (newIndex < 0 || newIndex >= totalItems) {\n return null;\n }\n\n return newIndex;\n}\n\n/**\n * Weekday header information for the month view.\n */\nexport interface WeekdayHeader {\n /** Full label for the weekday (used in aria-label) */\n label: string;\n /** Narrow/abbreviated label (displayed in the header cell) */\n narrow: string;\n}\n\n/**\n * Gets weekday headers for the calendar month view.\n * The headers are ordered starting from the first day of the week.\n *\n * @param adapter Date adapter to use for getting weekday names\n * @param style Style for the full label ('long' | 'short' | 'narrow')\n * @param firstDayOfWeek Optional override for first day of week (0=Sun, 1=Mon, ..., 6=Sat)\n * @returns Array of weekday headers starting from first day of week\n */\nexport function getWeekdayHeaders<D>(\n adapter: DateAdapter<D>,\n style: NameStyle = 'long',\n firstDayOfWeek?: number\n): WeekdayHeader[] {\n const startDay = firstDayOfWeek ?? adapter.getFirstDayOfWeek();\n const longNames = adapter.getDayOfWeekNames(style);\n const narrowNames = adapter.getDayOfWeekNames('narrow');\n\n const headers: WeekdayHeader[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDay + i) % 7;\n headers.push({\n label: longNames[dayIndex] ?? '',\n narrow: narrowNames[dayIndex] ?? '',\n });\n }\n return headers;\n}\n\n/**\n * Checks whether a date should be disabled based on constraints.\n *\n * @param date The date to check\n * @param minDate Minimum allowed date (inclusive)\n * @param maxDate Maximum allowed date (inclusive)\n * @param dateFilter Custom filter function\n * @param adapter Date adapter for comparisons\n * @returns true if the date should be disabled\n */\nexport function isDateDisabled<D>(\n date: D,\n minDate: D | null,\n maxDate: D | null,\n dateFilter: ((d: D) => boolean) | null,\n adapter: DateAdapter<D>\n): boolean {\n if (minDate && adapter.compareDate(date, minDate) < 0) {\n return true;\n }\n if (maxDate && adapter.compareDate(date, maxDate) > 0) {\n return true;\n }\n if (dateFilter && !dateFilter(date)) {\n return true;\n }\n return false;\n}\n\n/**\n * Checks whether a month should be disabled based on constraints.\n * A month is disabled if ALL days in that month are disabled.\n *\n * @param year The year of the month to check\n * @param month The month to check (0-indexed)\n * @param minDate Minimum allowed date\n * @param maxDate Maximum allowed date\n * @param adapter Date adapter for date operations\n * @returns true if the entire month should be disabled\n */\nexport function isMonthDisabled<D>(\n year: number,\n month: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>\n): boolean {\n const firstOfMonth = adapter.createDate(year, month, 1);\n const lastOfMonth = adapter.createDate(year, month, adapter.getNumDaysInMonth(firstOfMonth));\n\n // Month is disabled if it's entirely before min or entirely after max\n if (minDate && adapter.compareDate(lastOfMonth, minDate) < 0) {\n return true;\n }\n if (maxDate && adapter.compareDate(firstOfMonth, maxDate) > 0) {\n return true;\n }\n return false;\n}\n\n/**\n * Checks whether a year should be disabled based on constraints.\n * A year is disabled if ALL months in that year are disabled.\n *\n * @param year The year to check\n * @param minDate Minimum allowed date\n * @param maxDate Maximum allowed date\n * @param adapter Date adapter for date operations\n * @returns true if the entire year should be disabled\n */\nexport function isYearDisabled<D>(\n year: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>\n): boolean {\n const firstOfYear = adapter.createDate(year, 0, 1);\n const lastOfYear = adapter.createDate(year, 11, 31);\n\n // Year is disabled if it's entirely before min or entirely after max\n if (minDate && adapter.compareDate(lastOfYear, minDate) < 0) {\n return true;\n }\n if (maxDate && adapter.compareDate(firstOfYear, maxDate) > 0) {\n return true;\n }\n return false;\n}\n\n/**\n * Gets the starting year for the multi-year view grid.\n * Aligns the year to be at the start of a YEARS_PER_PAGE block.\n *\n * @param activeYear The currently active year\n * @param yearsPerPage Number of years shown per page (default 24)\n * @returns The first year of the multi-year page\n */\nexport function getMultiYearStartingYear(activeYear: number, yearsPerPage: number = 24): number {\n return Math.floor(activeYear / yearsPerPage) * yearsPerPage;\n}\n\n/**\n * Joins CSS class strings, filtering out null/undefined values.\n * Unlike `mergeClasses` from utils, this does NOT resolve Tailwind conflicts -\n * it simply concatenates class strings. Use when classes are guaranteed not to conflict.\n *\n * @param classes - Class strings (may include null/undefined)\n * @returns Space-separated class string\n */\nexport function joinClasses(...classes: (string | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n calendarCellVariants,\n calendarCellWrapperVariants,\n} from './calendar-cell.variants';\nimport type { CalendarCellVariants } from './calendar-cell.variants';\nimport type { CalendarCell, CalendarCellState, CalendarView } from './calendar.types';\n\n/** Event emitted when a navigation key is pressed */\nexport interface CalendarCellKeyNavEvent<D> {\n direction: string;\n cell: CalendarCell<D>;\n}\n\n/**\n * A single cell in the calendar grid.\n * This is a shared, stateless component used across all calendar views.\n *\n * @example\n * ```html\n * <com-calendar-cell\n * [cell]=\"dayCell\"\n * [view]=\"'month'\"\n * (selected)=\"onSelect($event)\"\n * />\n * ```\n *\n * @tokens `--color-ring`, `--color-foreground`, `--color-muted`, `--color-muted-foreground`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\n@Component({\n selector: 'com-calendar-cell',\n template: `\n <div [class]=\"wrapperClasses()\">\n <button\n #cellButton\n type=\"button\"\n [class]=\"cellClasses()\"\n [attr.aria-label]=\"cell().ariaLabel\"\n [attr.aria-selected]=\"cell().isSelected || null\"\n [attr.aria-disabled]=\"!cell().enabled || null\"\n [attr.aria-current]=\"cell().isToday ? 'date' : null\"\n [attr.tabindex]=\"tabindex()\"\n [disabled]=\"!cell().enabled\"\n (click)=\"onCellClick()\"\n (keydown)=\"onKeydown($event)\"\n (mouseenter)=\"onMouseEnter()\"\n (focus)=\"onFocus()\"\n >\n @if (cellTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"cellTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: cell() }\"\n />\n } @else {\n {{ cell().displayValue }}\n }\n </button>\n </div>\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'gridcell',\n },\n})\nexport class ComCalendarCell<D> {\n /** Reference to the button element for focus management */\n private readonly buttonRef: Signal<ElementRef<HTMLButtonElement> | undefined> = viewChild<ElementRef<HTMLButtonElement>>('cellButton');\n\n /** The cell data to render */\n readonly cell: InputSignal<CalendarCell<D>> = input.required<CalendarCell<D>>();\n\n /** The current calendar view */\n readonly view: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** Whether this cell is outside the current month (for month view) */\n readonly outside: InputSignal<boolean> = input<boolean>(false);\n\n /** Tab index for keyboard navigation (-1 for not focusable, 0 for focusable) */\n readonly tabindex: InputSignal<number> = input<number>(-1);\n\n /** Custom template for cell content */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> = input<TemplateRef<{\n $implicit: CalendarCell<D>;\n }> | null>(null);\n\n /** Emitted when the cell is selected */\n readonly selected: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when the cell is focused */\n readonly focused: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when the mouse enters the cell (for range preview) */\n readonly previewed: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when a navigation key is pressed */\n readonly keyNav: OutputEmitterRef<CalendarCellKeyNavEvent<D>> = output<CalendarCellKeyNavEvent<D>>();\n\n /** Computed cell state for styling */\n protected readonly cellState: Signal<CalendarCellState> = computed<CalendarCellState>(() => {\n const c = this.cell();\n\n if (!c.enabled) return 'disabled';\n if (c.isRangeStart) return 'range-start';\n if (c.isRangeEnd) return 'range-end';\n if (c.isRangeMiddle) return 'range-middle';\n if (c.isPreviewStart) return 'preview-start';\n if (c.isPreviewEnd) return 'preview-end';\n if (c.isPreviewMiddle) return 'preview-middle';\n if (c.isSelected) return 'selected';\n if (c.isToday) return 'today';\n return 'default';\n });\n\n /** Computed wrapper range state */\n protected readonly wrapperRange: Signal<'none' | 'start' | 'middle' | 'end' | 'single'> = computed(() => {\n const c = this.cell();\n if (c.isRangeStart && c.isRangeEnd) return 'single';\n if (c.isRangeStart) return 'start';\n if (c.isRangeEnd) return 'end';\n if (c.isRangeMiddle) return 'middle';\n return 'none';\n });\n\n /** Computed CSS classes for the cell button */\n protected readonly cellClasses: Signal<string> = computed(() => {\n const c = this.cell();\n const variants: CalendarCellVariants = {\n view: this.view(),\n state: this.cellState(),\n outside: this.outside(),\n };\n const baseClasses = calendarCellVariants(variants);\n return c.cssClasses ? `${baseClasses} ${c.cssClasses}` : baseClasses;\n });\n\n /** Computed CSS classes for the wrapper div */\n protected readonly wrapperClasses: Signal<string> = computed(() => {\n return calendarCellWrapperVariants({ range: this.wrapperRange() });\n });\n\n protected onCellClick(): void {\n const c = this.cell();\n if (c.enabled) {\n this.selected.emit(c);\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const c = this.cell();\n const navKeys: Record<string, string> = {\n ArrowLeft: 'left',\n ArrowRight: 'right',\n ArrowUp: 'up',\n ArrowDown: 'down',\n Home: 'home',\n End: 'end',\n PageUp: 'pageUp',\n PageDown: 'pageDown',\n };\n\n const direction = navKeys[event.key];\n if (direction) {\n event.preventDefault();\n this.keyNav.emit({ direction, cell: c });\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (c.enabled) {\n this.selected.emit(c);\n }\n }\n }\n\n protected onMouseEnter(): void {\n this.previewed.emit(this.cell());\n }\n\n protected onFocus(): void {\n this.focused.emit(this.cell());\n }\n\n /** Focuses the button element within this cell */\n focusButton(): void {\n this.buttonRef()?.nativeElement.focus();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n} from '@angular/core';\nimport {\n calendarHeaderVariants,\n calendarHeaderButtonVariants,\n} from './calendar-header.variants';\n\n/**\n * Navigation header component for the calendar.\n * Provides prev/next buttons and a clickable period label for view switching.\n *\n * @example\n * ```html\n * <com-calendar-header\n * [periodLabel]=\"'January 2024'\"\n * [periodAriaLabel]=\"'January 2024, click to switch view'\"\n * [prevDisabled]=\"false\"\n * [nextDisabled]=\"false\"\n * [canSwitchView]=\"true\"\n * (prevClicked)=\"onPrev()\"\n * (nextClicked)=\"onNext()\"\n * (periodClicked)=\"onPeriodClick()\"\n * />\n * ```\n *\n * @tokens `--color-foreground`, `--color-ring`, `--color-muted`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\n@Component({\n selector: 'com-calendar-header',\n template: `\n <div [class]=\"headerClasses()\">\n <button\n type=\"button\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"prevDisabled()\"\n [attr.aria-label]=\"prevAriaLabel()\"\n (click)=\"prevClicked.emit()\"\n >\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M15 18l-6-6 6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <button\n type=\"button\"\n [class]=\"periodButtonClasses()\"\n [attr.aria-label]=\"periodAriaLabel()\"\n [disabled]=\"!canSwitchView()\"\n (click)=\"onPeriodClick()\"\n >\n {{ periodLabel() }}\n </button>\n\n <button\n type=\"button\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"nextDisabled()\"\n [attr.aria-label]=\"nextAriaLabel()\"\n (click)=\"nextClicked.emit()\"\n >\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M9 18l6-6-6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-header-host block',\n },\n})\nexport class ComCalendarHeader {\n /** Display text (e.g., \"January 2024\", \"2024\", \"2000 – 2023\") */\n readonly periodLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for period button */\n readonly periodAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for previous button */\n readonly prevAriaLabel: InputSignal<string> = input<string>('Previous');\n\n /** Accessible label for next button */\n readonly nextAriaLabel: InputSignal<string> = input<string>('Next');\n\n /** Disable previous button */\n readonly prevDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Disable next button */\n readonly nextDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether clicking period label switches view */\n readonly canSwitchView: InputSignal<boolean> = input<boolean>(true);\n\n /** Emitted when previous button is clicked */\n readonly prevClicked: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when next button is clicked */\n readonly nextClicked: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when period label is clicked (switch view) */\n readonly periodClicked: OutputEmitterRef<void> = output<void>();\n\n /** Computed header container classes */\n protected readonly headerClasses: Signal<string> = computed(() =>\n calendarHeaderVariants()\n );\n\n /** Computed navigation button classes */\n protected readonly navButtonClasses: Signal<string> = computed(() =>\n calendarHeaderButtonVariants({ type: 'navigation' })\n );\n\n /** Computed period button classes */\n protected readonly periodButtonClasses: Signal<string> = computed(() =>\n calendarHeaderButtonVariants({ type: 'period' })\n );\n\n /**\n * Handles period button click.\n * Only emits if view switching is allowed.\n */\n protected onPeriodClick(): void {\n if (this.canSwitchView()) {\n this.periodClicked.emit();\n }\n }\n}\n","import {\n Directive,\n afterEveryRender,\n inject,\n input,\n output,\n computed,\n signal,\n type Signal,\n type InputSignal,\n type OutputEmitterRef,\n type WritableSignal,\n type TemplateRef,\n} from '@angular/core';\nimport type { ComCalendarCell } from '../calendar-cell';\nimport type {\n CalendarCell,\n CalendarView,\n DateFilterFn,\n DateClassFn,\n DateRange,\n} from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\n\n/**\n * Abstract base class for calendar view components.\n * Provides shared inputs, outputs, and utility methods for month, year, and multi-year views.\n *\n * @tokens None - abstract base class, tokens are defined in concrete view components\n */\n@Directive()\nexport abstract class CalendarViewBase<D> {\n /** Date adapter for date operations */\n protected readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** The date to display and navigate from */\n readonly activeDate: InputSignal<D> = input.required<D>();\n\n /** The currently selected date or date range */\n readonly selected: InputSignal<D | DateRange<D> | null> = input<D | DateRange<D> | null>(null);\n\n /** Minimum selectable date */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Custom function to add CSS classes to dates */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** Start date for range preview (hover state) */\n readonly previewStart: InputSignal<D | null> = input<D | null>(null);\n\n /** End date for range preview (hover state) */\n readonly previewEnd: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom template for cell content */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> = input<\n TemplateRef<{ $implicit: CalendarCell<D> }> | null\n >(null);\n\n /** Emitted when a date is selected */\n readonly selectedChange: OutputEmitterRef<D> = output<D>();\n\n /** Emitted when the active date changes (keyboard navigation) */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Emitted when the preview range changes (mouse hover) */\n readonly previewChange: OutputEmitterRef<D | null> = output<D | null>();\n\n /** The calendar view type for this component */\n protected abstract readonly view: CalendarView;\n\n /** Cell components for focus management. Must be implemented by each view using viewChildren. */\n protected abstract readonly cellComponents: Signal<readonly ComCalendarCell<D>[]>;\n\n /** Internal signal for tracking the focused cell's compare value */\n protected readonly focusedCellValue: WritableSignal<number | null> = signal<number | null>(null);\n\n /** Signal for pending focus operation (set by focusCell, consumed by afterRender) */\n protected readonly focusPending: WritableSignal<number | null> = signal<number | null>(null);\n\n constructor() {\n // Handle focus after render to ensure DOM is updated\n afterEveryRender(() => {\n const pending = this.focusPending();\n if (pending !== null) {\n const cellComponent = this.cellComponents().find(\n c => c.cell().compareValue === pending\n );\n cellComponent?.focusButton();\n this.focusPending.set(null);\n }\n });\n }\n\n /**\n * The grid of cells to display.\n * Must be implemented by each view to generate the appropriate cells.\n */\n abstract readonly cells: Signal<CalendarCell<D>[][]>;\n\n /**\n * Accessible label for the grid (e.g., \"January 2024\").\n * Must be implemented by each view.\n */\n abstract readonly gridLabel: Signal<string>;\n\n /** Today's date for comparison */\n protected readonly today: Signal<D> = computed(() => this.dateAdapter.today());\n\n /**\n * Checks if a date is the currently selected date.\n */\n protected isSelected(date: D): boolean {\n const sel = this.selected();\n if (!sel) return false;\n\n // Single date selection\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.isSameDay(date, sel);\n }\n\n // Range selection - check start or end\n const range = sel as DateRange<D>;\n if (range.start && this.dateAdapter.isSameDay(date, range.start)) return true;\n if (range.end && this.dateAdapter.isSameDay(date, range.end)) return true;\n return false;\n }\n\n /**\n * Checks if a date is the start of a selected range.\n */\n protected isRangeStart(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.start !== null && this.dateAdapter.isSameDay(date, sel.start);\n }\n\n /**\n * Checks if a date is the end of a selected range.\n */\n protected isRangeEnd(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.end !== null && this.dateAdapter.isSameDay(date, sel.end);\n }\n\n /**\n * Checks if a date is in the middle of a selected range.\n */\n protected isRangeMiddle(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n if (!sel.start || !sel.end) return false;\n return this.dateAdapter.isDateInRange(date, sel.start, sel.end) && !this.isRangeStart(date) && !this.isRangeEnd(date);\n }\n\n /**\n * Checks if a date is the start of the preview range.\n */\n protected isPreviewStart(date: D): boolean {\n const start = this.previewStart();\n return start !== null && this.dateAdapter.isSameDay(date, start);\n }\n\n /**\n * Checks if a date is the end of the preview range.\n */\n protected isPreviewEnd(date: D): boolean {\n const end = this.previewEnd();\n return end !== null && this.dateAdapter.isSameDay(date, end);\n }\n\n /**\n * Checks if a date is in the middle of the preview range.\n */\n protected isPreviewMiddle(date: D): boolean {\n const start = this.previewStart();\n const end = this.previewEnd();\n if (!start || !end) return false;\n return (\n this.dateAdapter.isDateInRange(date, start, end) && !this.isPreviewStart(date) && !this.isPreviewEnd(date)\n );\n }\n\n /**\n * Type guard to check if a value is a DateRange.\n */\n protected isDateRange(value: D | DateRange<D>): value is DateRange<D> {\n return value !== null && typeof value === 'object' && 'start' in value && 'end' in value;\n }\n\n /**\n * Handles cell selection events.\n */\n onCellSelected(cell: CalendarCell<D>): void {\n if (cell.enabled) {\n this.selectedChange.emit(cell.value);\n }\n }\n\n /**\n * Handles cell preview events (mouse hover).\n */\n onCellPreviewed(cell: CalendarCell<D>): void {\n this.previewChange.emit(cell.value);\n }\n\n /**\n * Clears the preview when mouse leaves the grid.\n */\n onGridMouseLeave(): void {\n this.previewChange.emit(null);\n }\n\n /**\n * Handles keyboard navigation within the grid.\n * Must be implemented by each view to handle view-specific navigation.\n */\n abstract onKeyNav(event: { direction: string; cell: CalendarCell<D> }): void;\n\n /**\n * Checks if a cell should have tabindex=\"0\" (be the focusable cell).\n */\n isActiveCell(cell: CalendarCell<D>): boolean {\n const focused = this.focusedCellValue();\n if (focused !== null) {\n return cell.compareValue === focused;\n }\n // Default to the active date's cell\n return this.getActiveCompareValue() === cell.compareValue;\n }\n\n /**\n * Gets the compare value for the active date.\n * Must be implemented by each view.\n */\n protected abstract getActiveCompareValue(): number;\n\n /**\n * Focuses the cell with the given compare value.\n * Uses afterRender to ensure DOM is updated before focusing.\n * Public to allow parent components to manage cross-grid focus in dual-month mode.\n */\n focusCell(compareValue: number): void {\n this.focusedCellValue.set(compareValue);\n this.focusPending.set(compareValue);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n viewChildren,\n type InputSignal,\n type Signal,\n} from '@angular/core';\nimport { ComCalendarCell, type CalendarCellKeyNavEvent } from '../calendar-cell';\nimport type { CalendarCell, CalendarView } from '../calendar.types';\nimport {\n DAYS_PER_WEEK,\n WEEKS_PER_MONTH,\n createCalendarCell,\n} from '../calendar.types';\nimport { createGrid, getWeekdayHeaders, isDateDisabled, type WeekdayHeader } from '../calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst TOTAL_CELLS = DAYS_PER_WEEK * WEEKS_PER_MONTH;\n\n/**\n * Month view component displaying a 7x6 grid of days.\n * Shows the days of the current month with leading/trailing days from adjacent months.\n *\n * @example\n * ```html\n * <com-calendar-month-view\n * [activeDate]=\"activeDate()\"\n * [selected]=\"selected()\"\n * (selectedChange)=\"onDateSelected($event)\"\n * (activeDateChange)=\"onActiveDateChange($event)\"\n * />\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Component({\n selector: 'com-calendar-month-view',\n template: `\n <div\n role=\"grid\"\n class=\"com-calendar-month-view\"\n [attr.aria-label]=\"gridLabel()\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n <!-- Weekday headers -->\n <div role=\"row\" class=\"com-calendar-month-view__header grid grid-cols-7 gap-0\">\n @for (header of weekdayHeaders(); track $index) {\n <div\n role=\"columnheader\"\n class=\"com-calendar-month-view__header-cell flex items-center justify-center h-9 text-xs font-medium text-muted-foreground\"\n [attr.aria-label]=\"header.label\"\n >\n {{ header.narrow }}\n </div>\n }\n </div>\n\n <!-- Day cells -->\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"com-calendar-month-view__row grid grid-cols-7 gap-0\">\n @for (cell of row; track cell.compareValue) {\n <com-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [outside]=\"isOutsideMonth(cell)\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n imports: [ComCalendarCell],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-month-view-host',\n },\n})\nexport class ComCalendarMonthView<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarView = 'month';\n\n /** Cell components for focus management */\n protected readonly cellComponents: Signal<readonly ComCalendarCell<D>[]> = viewChildren(ComCalendarCell<D>);\n\n /** Override first day of week (0=Sun, 1=Mon, ..., 6=Sat) */\n readonly firstDayOfWeek: InputSignal<number> = input<number>(0);\n\n /** Grid index for dual-month display (0=left, 1=right) */\n readonly gridIndex: InputSignal<number> = input<number>(0);\n\n /** Weekday header labels */\n readonly weekdayHeaders: Signal<WeekdayHeader[]> = computed(() => {\n return getWeekdayHeaders(this.dateAdapter, 'long', this.firstDayOfWeek());\n });\n\n /** The month being displayed (0-indexed) */\n readonly displayMonth: Signal<number> = computed(() => {\n return this.dateAdapter.getMonth(this.activeDate());\n });\n\n /** The year being displayed */\n readonly displayYear: Signal<number> = computed(() => {\n return this.dateAdapter.getYear(this.activeDate());\n });\n\n /** Grid of day cells (7 columns x 6 rows = 42 cells) */\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const activeDate = this.activeDate();\n const year = this.dateAdapter.getYear(activeDate);\n const month = this.dateAdapter.getMonth(activeDate);\n const firstOfMonth = this.dateAdapter.getFirstDayOfMonth(activeDate);\n const firstDayOfWeek = this.firstDayOfWeek();\n\n // Calculate the offset to start the grid\n // How many days from the previous month should we show?\n const firstDayOfMonthWeekday = this.dateAdapter.getDayOfWeek(firstOfMonth);\n const offset = (firstDayOfMonthWeekday - firstDayOfWeek + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n\n // Start date is the first cell (may be in previous month)\n const startDate = this.dateAdapter.addDays(firstOfMonth, -offset);\n\n const today = this.today();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n const dateClass = this.dateClass();\n\n const days: CalendarCell<D>[] = [];\n\n for (let i = 0; i < TOTAL_CELLS; i++) {\n const date = this.dateAdapter.addDays(startDate, i);\n const dayOfMonth = this.dateAdapter.getDate(date);\n const cellMonth = this.dateAdapter.getMonth(date);\n const isDisabled = isDateDisabled(date, minDate, maxDate, dateFilter, this.dateAdapter);\n const isToday = this.dateAdapter.isSameDay(date, today);\n const cssClasses = dateClass ? dateClass(date, this.view) : '';\n\n // Create a unique compare value using year, month, day\n const cellYear = this.dateAdapter.getYear(date);\n const compareValue = cellYear * 10000 + cellMonth * 100 + dayOfMonth;\n\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: String(dayOfMonth),\n ariaLabel: this.dateAdapter.format(date, 'fullDate'),\n enabled: !isDisabled,\n cssClasses,\n compareValue,\n });\n\n // Update computed properties\n cell.isToday = isToday;\n cell.isSelected = this.isSelected(date);\n cell.isRangeStart = this.isRangeStart(date);\n cell.isRangeEnd = this.isRangeEnd(date);\n cell.isRangeMiddle = this.isRangeMiddle(date);\n cell.isPreviewStart = this.isPreviewStart(date);\n cell.isPreviewEnd = this.isPreviewEnd(date);\n cell.isPreviewMiddle = this.isPreviewMiddle(date);\n\n days.push(cell);\n }\n\n return createGrid(days, DAYS_PER_WEEK);\n });\n\n /** Accessible label for the grid showing month and year */\n readonly gridLabel: Signal<string> = computed(() => {\n const monthNames = this.dateAdapter.getMonthNames('long');\n return `${monthNames[this.displayMonth()]} ${this.displayYear()}`;\n });\n\n /** First date of the displayed month */\n private readonly firstOfMonth: Signal<D> = computed(() => {\n return this.dateAdapter.getFirstDayOfMonth(this.activeDate());\n });\n\n protected getActiveCompareValue(): number {\n const date = this.activeDate();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n const day = this.dateAdapter.getDate(date);\n return year * 10000 + month * 100 + day;\n }\n\n /**\n * Checks if a cell is outside the current displayed month.\n */\n isOutsideMonth(cell: CalendarCell<D>): boolean {\n const cellMonth = this.dateAdapter.getMonth(cell.value);\n return cellMonth !== this.displayMonth();\n }\n\n /**\n * Handles keyboard navigation for the month view.\n * - Arrow left/right: ±1 day\n * - Arrow up/down: ±7 days (one week)\n * - Home: First day of week\n * - End: Last day of week\n * - PageUp: Previous month\n * - PageDown: Next month\n */\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentDate = event.cell.value;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n newDate = this.dateAdapter.addDays(currentDate, -1);\n break;\n\n case 'right':\n newDate = this.dateAdapter.addDays(currentDate, 1);\n break;\n\n case 'up':\n newDate = this.dateAdapter.addDays(currentDate, -DAYS_PER_WEEK);\n break;\n\n case 'down':\n newDate = this.dateAdapter.addDays(currentDate, DAYS_PER_WEEK);\n break;\n\n case 'home': {\n // Go to first day of the week\n const dayOfWeek = this.dateAdapter.getDayOfWeek(currentDate);\n const firstDay = this.firstDayOfWeek();\n const diff = (dayOfWeek - firstDay + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, -diff);\n break;\n }\n\n case 'end': {\n // Go to last day of the week\n const dayOfWeek = this.dateAdapter.getDayOfWeek(currentDate);\n const firstDay = this.firstDayOfWeek();\n const daysUntilEnd = (6 - dayOfWeek + firstDay + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, daysUntilEnd);\n break;\n }\n\n case 'pageUp':\n newDate = this.dateAdapter.addMonths(currentDate, -1);\n break;\n\n case 'pageDown':\n newDate = this.dateAdapter.addMonths(currentDate, 1);\n break;\n }\n\n if (newDate) {\n // Update focus cell compare value\n const year = this.dateAdapter.getYear(newDate);\n const month = this.dateAdapter.getMonth(newDate);\n const day = this.dateAdapter.getDate(newDate);\n const compareValue = year * 10000 + month * 100 + day;\n this.focusCell(compareValue);\n this.activeDateChange.emit(newDate);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { ComCalendarCell, type CalendarCellKeyNavEvent } from '../calendar-cell';\nimport type { CalendarCell, CalendarView } from '../calendar.types';\nimport { MONTHS_PER_ROW, createCalendarCell } from '../calendar.types';\nimport { createGrid, isMonthDisabled } from '../calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst MONTHS_PER_YEAR = 12;\n\n/**\n * Year view component displaying a 4x3 grid of months.\n * Allows the user to select a month within the currently active year.\n *\n * @example\n * ```html\n * <com-calendar-year-view\n * [activeDate]=\"activeDate()\"\n * [selected]=\"selected()\"\n * (selectedChange)=\"onMonthSelected($event)\"\n * (activeDateChange)=\"onActiveMonthChange($event)\"\n * />\n * ```\n *\n * @tokens None - uses ComCalendarCell which provides all token styling\n */\n@Component({\n selector: 'com-calendar-year-view',\n template: `\n <div\n role=\"grid\"\n class=\"com-calendar-year-view\"\n [attr.aria-label]=\"gridLabel()\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"com-calendar-year-view__row grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <com-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n imports: [ComCalendarCell],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-year-view-host',\n },\n})\nexport class ComCalendarYearView<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarView = 'year';\n\n /** Cell components for focus management */\n protected readonly cellComponents: Signal<readonly ComCalendarCell<D>[]> = viewChildren(ComCalendarCell<D>);\n\n /** The year being displayed */\n readonly displayYear: Signal<number> = computed(() => {\n return this.dateAdapter.getYear(this.activeDate());\n });\n\n /** Grid of month cells (4 columns x 3 rows = 12 months) */\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const year = this.displayYear();\n const monthNames = this.dateAdapter.getMonthNames('short');\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const todayMonth = this.dateAdapter.getMonth(today);\n const activeMonth = this.dateAdapter.getMonth(this.activeDate());\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n\n const months: CalendarCell<D>[] = [];\n\n for (let month = 0; month < MONTHS_PER_YEAR; month++) {\n const date = this.dateAdapter.createDate(year, month, 1);\n const isDisabled = isMonthDisabled(year, month, minDate, maxDate, this.dateAdapter);\n const isToday = year === todayYear && month === todayMonth;\n const isSelectedMonth = this.isMonthSelected(year, month);\n const cssClasses = dateClass ? dateClass(date, this.view) : '';\n\n const monthName = monthNames[month] ?? '';\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: monthName,\n ariaLabel: `${monthName} ${year}`,\n enabled: !isDisabled,\n cssClasses,\n compareValue: month,\n });\n\n // Update computed properties\n cell.isToday = isToday;\n cell.isSelected = isSelectedMonth;\n cell.isRangeStart = this.isMonthRangeStart(year, month);\n cell.isRangeEnd = this.isMonthRangeEnd(year, month);\n cell.isRangeMiddle = this.isMonthRangeMiddle(year, month);\n cell.isPreviewStart = this.isMonthPreviewStart(year, month);\n cell.isPreviewEnd = this.isMonthPreviewEnd(year, month);\n cell.isPreviewMiddle = this.isMonthPreviewMiddle(year, month);\n\n months.push(cell);\n }\n\n return createGrid(months, MONTHS_PER_ROW);\n });\n\n /** Accessible label for the grid */\n readonly gridLabel: Signal<string> = computed(() => {\n return `${this.displayYear()}`;\n });\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getMonth(this.activeDate());\n }\n\n /**\n * Handles keyboard navigation for the year view.\n * - Arrow left/right: ±1 month\n * - Arrow up/down: ±4 months (one row)\n * - Home: January\n * - End: December\n * - PageUp: Previous year\n * - PageDown: Next year\n */\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentMonth = this.dateAdapter.getMonth(event.cell.value);\n const year = this.displayYear();\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentMonth > 0) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -1);\n this.focusCell(currentMonth - 1);\n }\n break;\n\n case 'right':\n if (currentMonth < 11) {\n newDate = this.dateAdapter.addMonths(event.cell.value, 1);\n this.focusCell(currentMonth + 1);\n }\n break;\n\n case 'up':\n if (currentMonth >= MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -MONTHS_PER_ROW);\n this.focusCell(currentMonth - MONTHS_PER_ROW);\n }\n break;\n\n case 'down':\n if (currentMonth < MONTHS_PER_YEAR - MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, MONTHS_PER_ROW);\n this.focusCell(currentMonth + MONTHS_PER_ROW);\n }\n break;\n\n case 'home':\n newDate = this.dateAdapter.createDate(year, 0, 1);\n this.focusCell(0);\n break;\n\n case 'end':\n newDate = this.dateAdapter.createDate(year, 11, 1);\n this.focusCell(11);\n break;\n\n case 'pageUp':\n newDate = this.dateAdapter.addYears(event.cell.value, -1);\n break;\n\n case 'pageDown':\n newDate = this.dateAdapter.addYears(event.cell.value, 1);\n break;\n }\n\n if (newDate) {\n this.activeDateChange.emit(newDate);\n }\n }\n\n private isMonthSelected(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n\n if (!this.isDateRange(sel)) {\n return (\n this.dateAdapter.getYear(sel) === year && this.dateAdapter.getMonth(sel) === month\n );\n }\n\n const range = sel;\n if (\n range.start &&\n this.dateAdapter.getYear(range.start) === year &&\n this.dateAdapter.getMonth(range.start) === month\n ) {\n return true;\n }\n if (\n range.end &&\n this.dateAdapter.getYear(range.end) === year &&\n this.dateAdapter.getMonth(range.end) === month\n ) {\n return true;\n }\n return false;\n }\n\n private isMonthRangeStart(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return (\n this.dateAdapter.getYear(sel.start) === year &&\n this.dateAdapter.getMonth(sel.start) === month\n );\n }\n\n private isMonthRangeEnd(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return (\n this.dateAdapter.getYear(sel.end) === year && this.dateAdapter.getMonth(sel.end) === month\n );\n }\n\n private isMonthRangeMiddle(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n\n const monthDate = this.dateAdapter.createDate(year, month, 1);\n const startMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(sel.start),\n this.dateAdapter.getMonth(sel.start),\n 1\n );\n const endMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(sel.end),\n this.dateAdapter.getMonth(sel.end),\n 1\n );\n\n return (\n this.dateAdapter.compareDate(monthDate, startMonth) > 0 &&\n this.dateAdapter.compareDate(monthDate, endMonth) < 0\n );\n }\n\n private isMonthPreviewStart(year: number, month: number): boolean {\n const start = this.previewStart();\n if (!start) return false;\n return (\n this.dateAdapter.getYear(start) === year && this.dateAdapter.getMonth(start) === month\n );\n }\n\n private isMonthPreviewEnd(year: number, month: number): boolean {\n const end = this.previewEnd();\n if (!end) return false;\n return this.dateAdapter.getYear(end) === year && this.dateAdapter.getMonth(end) === month;\n }\n\n private isMonthPreviewMiddle(year: number, month: number): boolean {\n const start = this.previewStart();\n const end = this.previewEnd();\n if (!start || !end) return false;\n\n const monthDate = this.dateAdapter.createDate(year, month, 1);\n const startMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(start),\n this.dateAdapter.getMonth(start),\n 1\n );\n const endMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(end),\n this.dateAdapter.getMonth(end),\n 1\n );\n\n return (\n this.dateAdapter.compareDate(monthDate, startMonth) > 0 &&\n this.dateAdapter.compareDate(monthDate, endMonth) < 0\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { ComCalendarCell, type CalendarCellKeyNavEvent } from '../calendar-cell';\nimport type { CalendarCell, CalendarView } from '../calendar.types';\nimport { YEARS_PER_PAGE, YEARS_PER_ROW, createCalendarCell } from '../calendar.types';\nimport { createGrid, getMultiYearStartingYear, isYearDisabled } from '../calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\n/**\n * Multi-year view component displaying a 4x6 grid of years (24 years total).\n * Allows the user to select a year within the displayed range.\n *\n * @example\n * ```html\n * <com-calendar-multi-year-view\n * [activeDate]=\"activeDate()\"\n * [selected]=\"selected()\"\n * (selectedChange)=\"onYearSelected($event)\"\n * (activeDateChange)=\"onActiveYearChange($event)\"\n * />\n * ```\n *\n * @tokens None - uses ComCalendarCell which provides all token styling\n */\n@Component({\n selector: 'com-calendar-multi-year-view',\n template: `\n <div\n role=\"grid\"\n class=\"com-calendar-multi-year-view\"\n [attr.aria-label]=\"gridLabel()\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"com-calendar-multi-year-view__row grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <com-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n imports: [ComCalendarCell],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-multi-year-view-host',\n },\n})\nexport class ComCalendarMultiYearView<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarView = 'multi-year';\n\n /** Cell components for focus management */\n protected readonly cellComponents: Signal<readonly ComCalendarCell<D>[]> = viewChildren(ComCalendarCell<D>);\n\n /** The first year in the displayed range */\n readonly startYear: Signal<number> = computed(() => {\n const activeYear = this.dateAdapter.getYear(this.activeDate());\n return getMultiYearStartingYear(activeYear, YEARS_PER_PAGE);\n });\n\n /** The last year in the displayed range */\n readonly endYear: Signal<number> = computed(() => {\n return this.startYear() + YEARS_PER_PAGE - 1;\n });\n\n /** Grid of year cells (4 columns x 6 rows = 24 years) */\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const start = this.startYear();\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const activeYear = this.dateAdapter.getYear(this.activeDate());\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n\n const years: CalendarCell<D>[] = [];\n\n for (let i = 0; i < YEARS_PER_PAGE; i++) {\n const year = start + i;\n const date = this.dateAdapter.createDate(year, 0, 1);\n const isDisabled = isYearDisabled(year, minDate, maxDate, this.dateAdapter);\n const isToday = year === todayYear;\n const isSelectedYear = this.isYearSelected(year);\n const cssClasses = dateClass ? dateClass(date, this.view) : '';\n\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: this.dateAdapter.getYearName(date),\n ariaLabel: this.dateAdapter.getYearName(date),\n enabled: !isDisabled,\n cssClasses,\n compareValue: year,\n });\n\n // Update computed properties\n cell.isToday = isToday;\n cell.isSelected = isSelectedYear;\n cell.isRangeStart = this.isYearRangeStart(year);\n cell.isRangeEnd = this.isYearRangeEnd(year);\n cell.isRangeMiddle = this.isYearRangeMiddle(year);\n cell.isPreviewStart = this.isYearPreviewStart(year);\n cell.isPreviewEnd = this.isYearPreviewEnd(year);\n cell.isPreviewMiddle = this.isYearPreviewMiddle(year);\n\n years.push(cell);\n }\n\n return createGrid(years, YEARS_PER_ROW);\n });\n\n /** Accessible label for the grid showing the year range */\n readonly gridLabel: Signal<string> = computed(() => {\n return `${this.startYear()} – ${this.endYear()}`;\n });\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getYear(this.activeDate());\n }\n\n /**\n * Handles keyboard navigation for the multi-year view.\n * - Arrow left/right: ±1 year\n * - Arrow up/down: ±4 years (one row)\n * - Home: First year in range\n * - End: Last year in range\n * - PageUp: Previous 24 years\n * - PageDown: Next 24 years\n */\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentYear = this.dateAdapter.getYear(event.cell.value);\n const start = this.startYear();\n const end = this.endYear();\n const indexInPage = currentYear - start;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentYear > start) {\n newDate = this.dateAdapter.addYears(event.cell.value, -1);\n this.focusCell(currentYear - 1);\n }\n break;\n\n case 'right':\n if (currentYear < end) {\n newDate = this.dateAdapter.addYears(event.cell.value, 1);\n this.focusCell(currentYear + 1);\n }\n break;\n\n case 'up':\n if (indexInPage >= YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, -YEARS_PER_ROW);\n this.focusCell(currentYear - YEARS_PER_ROW);\n }\n break;\n\n case 'down':\n if (indexInPage < YEARS_PER_PAGE - YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, YEARS_PER_ROW);\n this.focusCell(currentYear + YEARS_PER_ROW);\n }\n break;\n\n case 'home':\n newDate = this.dateAdapter.createDate(start, 0, 1);\n this.focusCell(start);\n break;\n\n case 'end':\n newDate = this.dateAdapter.createDate(end, 0, 1);\n this.focusCell(end);\n break;\n\n case 'pageUp':\n newDate = this.dateAdapter.addYears(event.cell.value, -YEARS_PER_PAGE);\n break;\n\n case 'pageDown':\n newDate = this.dateAdapter.addYears(event.cell.value, YEARS_PER_PAGE);\n break;\n }\n\n if (newDate) {\n this.activeDateChange.emit(newDate);\n }\n }\n\n private isYearSelected(year: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.getYear(sel) === year;\n }\n\n const range = sel;\n if (range.start && this.dateAdapter.getYear(range.start) === year) {\n return true;\n }\n if (range.end && this.dateAdapter.getYear(range.end) === year) {\n return true;\n }\n return false;\n }\n\n private isYearRangeStart(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return this.dateAdapter.getYear(sel.start) === year;\n }\n\n private isYearRangeEnd(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return this.dateAdapter.getYear(sel.end) === year;\n }\n\n private isYearRangeMiddle(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n\n const startYear = this.dateAdapter.getYear(sel.start);\n const endYear = this.dateAdapter.getYear(sel.end);\n\n return year > startYear && year < endYear;\n }\n\n private isYearPreviewStart(year: number): boolean {\n const start = this.previewStart();\n if (!start) return false;\n return this.dateAdapter.getYear(start) === year;\n }\n\n private isYearPreviewEnd(year: number): boolean {\n const end = this.previewEnd();\n if (!end) return false;\n return this.dateAdapter.getYear(end) === year;\n }\n\n private isYearPreviewMiddle(year: number): boolean {\n const start = this.previewStart();\n const end = this.previewEnd();\n if (!start || !end) return false;\n\n const startYear = this.dateAdapter.getYear(start);\n const endYear = this.dateAdapter.getYear(end);\n\n return year > startYear && year < endYear;\n }\n}\n","/**\n * Calendar view components\n */\n\nexport { CalendarViewBase } from './calendar-view-base';\nexport { ComCalendarMonthView } from './month-view';\nexport { ComCalendarYearView } from './year-view';\nexport { ComCalendarMultiYearView } from './multi-year-view';\n","import { InjectionToken } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\n\n/**\n * Result returned from a selection strategy's select method.\n */\nexport interface SelectionResult<D, S> {\n /** The new selection value */\n selection: S;\n /** Whether the selection is complete (emit to consumer) */\n isComplete: boolean;\n /** Optional: dates to highlight during incomplete selection */\n preview?: DateRange<D> | null;\n}\n\n/**\n * Abstract selection strategy that defines how dates are selected and previewed.\n * Implement this class to create custom selection behaviors.\n *\n * @typeParam D - The date type (e.g., Date, Luxon DateTime)\n * @typeParam S - The selection type (e.g., D | null, DateRange<D>, D[])\n */\nexport abstract class CalendarSelectionStrategy<D, S = unknown> {\n /**\n * Process a date selection. Called when user clicks a date cell.\n * @param date The clicked date\n * @param currentSelection The current selection state\n * @returns Object with new selection and whether selection is complete\n */\n abstract select(date: D, currentSelection: S): SelectionResult<D, S>;\n\n /**\n * Create a preview range based on current selection and hovered date.\n * Used for showing range preview while hovering.\n * @param activeDate The currently hovered date\n * @param currentSelection The current selection state\n * @returns DateRange for preview styling, or null if no preview\n */\n abstract createPreview(activeDate: D | null, currentSelection: S): DateRange<D> | null;\n\n /**\n * Check if a date is part of the current selection.\n * Used for styling cells.\n */\n abstract isSelected(date: D, currentSelection: S): boolean;\n\n /**\n * Check if a date is the start of a selected range.\n */\n abstract isRangeStart(date: D, currentSelection: S): boolean;\n\n /**\n * Check if a date is the end of a selected range.\n */\n abstract isRangeEnd(date: D, currentSelection: S): boolean;\n\n /**\n * Check if a date is in the middle of a selected range.\n */\n abstract isRangeMiddle(date: D, currentSelection: S): boolean;\n}\n\n/** Injection token for the selection strategy */\nexport const CALENDAR_SELECTION_STRATEGY: InjectionToken<\n CalendarSelectionStrategy<unknown, unknown>\n> = new InjectionToken<CalendarSelectionStrategy<unknown, unknown>>(\n 'CalendarSelectionStrategy'\n);\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for single date selection.\n *\n * Behavior:\n * - Click date → immediately selects it\n * - No preview range\n * - Output: single date D\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: SingleSelectionStrategy }\n * ],\n * template: `<com-calendar (selectedChange)=\"onSelect($event)\" />`\n * })\n * export class SinglePickerComponent {\n * onSelect(date: Date) {\n * console.log('Selected:', date);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class SingleSelectionStrategy<D> extends CalendarSelectionStrategy<D, D | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _currentSelection: D | null): SelectionResult<D, D | null> {\n return {\n selection: date,\n isComplete: true,\n };\n }\n\n createPreview(_activeDate: D | null, _currentSelection: D | null): DateRange<D> | null {\n // Single selection has no preview\n return null;\n }\n\n isSelected(date: D, currentSelection: D | null): boolean {\n if (!currentSelection) return false;\n return this.dateAdapter.isSameDay(date, currentSelection);\n }\n\n isRangeStart(_date: D, _currentSelection: D | null): boolean {\n // No range in single selection\n return false;\n }\n\n isRangeEnd(_date: D, _currentSelection: D | null): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _currentSelection: D | null): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for date range selection.\n *\n * Behavior:\n * - First click → sets range start, selection incomplete\n * - Second click → sets range end, selection complete\n * - If second date is before first, swap them\n * - Hovering after first click shows preview range\n * - Output: DateRange<D>\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: RangeSelectionStrategy }\n * ],\n * template: `\n * <com-calendar\n * [selected]=\"selectedRange()\"\n * (selectedChange)=\"onRangeSelect($event)\"\n * />\n * `\n * })\n * export class RangePickerComponent {\n * selectedRange = signal<DateRange<Date> | null>(null);\n *\n * onRangeSelect(range: DateRange<Date>) {\n * this.selectedRange.set(range);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class RangeSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, currentSelection: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n // If no selection or selection is complete, start new range\n if (!currentSelection || (currentSelection.start && currentSelection.end)) {\n return {\n selection: { start: date, end: null },\n isComplete: false,\n };\n }\n\n // We have a start but no end - complete the range\n const start = currentSelection.start!;\n let rangeStart: D;\n let rangeEnd: D;\n\n // Ensure start <= end\n if (this.dateAdapter.compareDate(date, start) < 0) {\n rangeStart = date;\n rangeEnd = start;\n } else {\n rangeStart = start;\n rangeEnd = date;\n }\n\n return {\n selection: { start: rangeStart, end: rangeEnd },\n isComplete: true,\n };\n }\n\n createPreview(activeDate: D | null, currentSelection: DateRange<D> | null): DateRange<D> | null {\n // Only show preview when we have start but no end\n if (!activeDate || !currentSelection?.start || currentSelection.end) {\n return null;\n }\n\n const start = currentSelection.start;\n // Ensure preview has correct order\n if (this.dateAdapter.compareDate(activeDate, start) < 0) {\n return { start: activeDate, end: start };\n }\n return { start, end: activeDate };\n }\n\n isSelected(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection) return false;\n const { start, end } = currentSelection;\n if (start && this.dateAdapter.isSameDay(date, start)) return true;\n if (end && this.dateAdapter.isSameDay(date, end)) return true;\n return false;\n }\n\n isRangeStart(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.start);\n }\n\n isRangeEnd(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.end) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.end);\n }\n\n isRangeMiddle(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start || !currentSelection?.end) return false;\n return (\n this.dateAdapter.isDateInRange(date, currentSelection.start, currentSelection.end) &&\n !this.isRangeStart(date, currentSelection) &&\n !this.isRangeEnd(date, currentSelection)\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for multiple date selection.\n *\n * Behavior:\n * - Click date → toggles it in/out of selection array\n * - Each click is complete (emits immediately)\n * - No preview range\n * - Output: D[]\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: MultiSelectionStrategy }\n * ],\n * template: `<com-calendar (selectedChange)=\"onMultiSelect($event)\" />`\n * })\n * export class MultiPickerComponent {\n * selectedDates = signal<Date[]>([]);\n *\n * onMultiSelect(dates: Date[]) {\n * this.selectedDates.set(dates);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class MultiSelectionStrategy<D> extends CalendarSelectionStrategy<D, D[]> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, currentSelection: D[]): SelectionResult<D, D[]> {\n const existing = currentSelection ?? [];\n const index = existing.findIndex(d => this.dateAdapter.isSameDay(d, date));\n\n let newSelection: D[];\n if (index >= 0) {\n // Date exists, remove it\n newSelection = [...existing.slice(0, index), ...existing.slice(index + 1)];\n } else {\n // Date doesn't exist, add it\n newSelection = [...existing, date];\n }\n\n return {\n selection: newSelection,\n isComplete: true, // Each toggle is a complete action\n };\n }\n\n createPreview(_activeDate: D | null, _currentSelection: D[]): DateRange<D> | null {\n // Multi-selection has no range preview\n return null;\n }\n\n isSelected(date: D, currentSelection: D[]): boolean {\n const selection = currentSelection ?? [];\n return selection.some(d => this.dateAdapter.isSameDay(d, date));\n }\n\n isRangeStart(_date: D, _currentSelection: D[]): boolean {\n // No ranges in multi-selection\n return false;\n }\n\n isRangeEnd(_date: D, _currentSelection: D[]): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _currentSelection: D[]): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for week selection.\n *\n * Behavior:\n * - Click any day → selects the entire week containing that day\n * - Week starts based on DateAdapter.getFirstDayOfWeek()\n * - Single click completes selection\n * - Output: DateRange<D> (Monday–Sunday or Sunday–Saturday)\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: WeekSelectionStrategy }\n * ],\n * template: `<com-calendar (selectedChange)=\"onWeekSelect($event)\" />`\n * })\n * export class WeekPickerComponent {\n * onWeekSelect(week: DateRange<Date>) {\n * console.log('Week:', week.start, 'to', week.end);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class WeekSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _currentSelection: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n const weekRange = this.getWeekRange(date);\n return {\n selection: weekRange,\n isComplete: true,\n };\n }\n\n createPreview(activeDate: D | null, _currentSelection: DateRange<D> | null): DateRange<D> | null {\n if (!activeDate) return null;\n return this.getWeekRange(activeDate);\n }\n\n isSelected(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start || !currentSelection?.end) return false;\n return this.dateAdapter.isDateInRange(date, currentSelection.start, currentSelection.end);\n }\n\n isRangeStart(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.start);\n }\n\n isRangeEnd(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.end) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.end);\n }\n\n isRangeMiddle(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start || !currentSelection?.end) return false;\n return (\n this.isSelected(date, currentSelection) &&\n !this.isRangeStart(date, currentSelection) &&\n !this.isRangeEnd(date, currentSelection)\n );\n }\n\n /** Compute the week range for a given date */\n private getWeekRange(date: D): DateRange<D> {\n const dayOfWeek = this.dateAdapter.getDayOfWeek(date);\n const firstDayOfWeek = this.dateAdapter.getFirstDayOfWeek();\n\n // Calculate days to subtract to get to week start\n const daysToSubtract = (dayOfWeek - firstDayOfWeek + 7) % 7;\n const weekStart = this.dateAdapter.addDays(date, -daysToSubtract);\n const weekEnd = this.dateAdapter.addDays(weekStart, 6);\n\n return { start: weekStart, end: weekEnd };\n }\n}\n","/**\n * Selection strategies for calendar component.\n * Provides pluggable selection behaviors: single, range, multiple, and week selection.\n */\n\nexport {\n CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n type SelectionResult,\n} from './selection-strategy';\n\nexport { SingleSelectionStrategy } from './single-selection-strategy';\nexport { RangeSelectionStrategy } from './range-selection-strategy';\nexport { MultiSelectionStrategy } from './multi-selection-strategy';\nexport { WeekSelectionStrategy } from './week-selection-strategy';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChildren,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n type WritableSignal,\n} from '@angular/core';\nimport { ComCalendarHeader } from './calendar-header';\nimport { calendarVariants, monthsContainerVariants } from './calendar.variants';\nimport type {\n CalendarCell,\n CalendarView,\n DateFilterFn,\n DateClassFn,\n DateRange,\n} from './calendar.types';\nimport { YEARS_PER_PAGE } from './calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from './date-adapter';\nimport {\n ComCalendarMonthView,\n ComCalendarYearView,\n ComCalendarMultiYearView,\n} from './views';\nimport { getMultiYearStartingYear, isMonthDisabled, isYearDisabled } from './calendar.utils';\nimport {\n CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n RangeSelectionStrategy,\n} from './selection';\n\n/**\n * Main calendar orchestrator component.\n * Composes the calendar header and view components (month, year, multi-year)\n * with view switching, navigation, and enhanced accessibility.\n *\n * @tokens `--color-background`, `--color-foreground`, `--color-border-subtle`,\n * `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-calendar\n * [activeDate]=\"activeDate\"\n * [selected]=\"selectedDate\"\n * [minDate]=\"minDate\"\n * [maxDate]=\"maxDate\"\n * (selectedChange)=\"onDateSelected($event)\"\n * (viewChanged)=\"onViewChanged($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'com-calendar',\n template: `\n <div\n [class]=\"calendarClasses()\"\n role=\"application\"\n aria-label=\"Calendar\"\n >\n <com-calendar-header\n [periodLabel]=\"periodLabel()\"\n [periodAriaLabel]=\"periodAriaLabel()\"\n [prevAriaLabel]=\"prevAriaLabel()\"\n [nextAriaLabel]=\"nextAriaLabel()\"\n [prevDisabled]=\"prevDisabled()\"\n [nextDisabled]=\"nextDisabled()\"\n [canSwitchView]=\"currentView() !== 'multi-year'\"\n (prevClicked)=\"onPrevClicked()\"\n (nextClicked)=\"onNextClicked()\"\n (periodClicked)=\"onPeriodClicked()\"\n />\n\n <!-- Live region for screen reader announcements -->\n <div\n class=\"sr-only\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ liveAnnouncement() }}\n </div>\n\n @switch (currentView()) {\n @case ('month') {\n <div [class]=\"monthsContainerClasses()\">\n <com-calendar-month-view\n [activeDate]=\"internalActiveDate()\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateFilter]=\"dateFilter()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [gridIndex]=\"0\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 0)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n\n @if (effectiveMonthColumns() >= 2 && secondaryActiveDate()) {\n <com-calendar-month-view\n [activeDate]=\"secondaryActiveDate()!\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateFilter]=\"dateFilter()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [gridIndex]=\"1\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 1)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n </div>\n }\n @case ('year') {\n <com-calendar-year-view\n [activeDate]=\"internalActiveDate()\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n (selectedChange)=\"onMonthSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n @case ('multi-year') {\n <com-calendar-multi-year-view\n [activeDate]=\"internalActiveDate()\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n (selectedChange)=\"onYearSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n }\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n ComCalendarHeader,\n ComCalendarMonthView,\n ComCalendarYearView,\n ComCalendarMultiYearView,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-host block',\n },\n})\nexport class ComCalendar<D> {\n /** Date adapter for date operations */\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** Optional selection strategy for custom selection behaviors */\n private readonly selectionStrategy = inject(CALENDAR_SELECTION_STRATEGY, {\n optional: true,\n }) as CalendarSelectionStrategy<D, unknown> | null;\n\n /** Query for month views for cross-grid focus management */\n private readonly monthViews: Signal<readonly ComCalendarMonthView<D>[]> = viewChildren(ComCalendarMonthView<D>);\n\n /** The date to display and navigate from */\n readonly activeDate: InputSignal<D | undefined> = input<D>();\n\n /** The currently selected date or date range */\n readonly selected: InputSignal<D | DateRange<D> | null> = input<D | DateRange<D> | null>(null);\n\n /** Minimum selectable date */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Custom function to add CSS classes to dates */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** Whether to show the card border and shadow. Set to false when used inside datepicker panel. */\n readonly bordered: InputSignal<boolean> = input<boolean>(true);\n\n /** Initial view to display */\n readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** Override first day of week (0=Sun, 1=Mon, ..., 6=Sat). Uses locale default if null. */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /** Number of months to display side-by-side (1 or 2). Defaults to 2 when RangeSelectionStrategy is used. */\n readonly monthColumns: InputSignal<number> = input<number>(1);\n\n /** Computed first day of week (input override or adapter default) */\n readonly computedFirstDayOfWeek: Signal<number> = computed(() => {\n const override = this.firstDayOfWeek();\n if (override !== null && override >= 0 && override <= 6) {\n return override;\n }\n return this.dateAdapter.getFirstDayOfWeek();\n });\n\n /** Effective number of month columns (auto-defaults to 2 for RangeSelectionStrategy) */\n readonly effectiveMonthColumns: Signal<number> = computed(() => {\n const explicit = this.monthColumns();\n if (explicit !== 1) return explicit; // User override\n\n // Auto-default to 2 when RangeSelectionStrategy is injected\n if (this.selectionStrategy instanceof RangeSelectionStrategy) return 2;\n return 1;\n });\n\n /** Secondary active date for dual-month display (+1 month from primary) */\n readonly secondaryActiveDate: Signal<D | null> = computed(() => {\n if (this.effectiveMonthColumns() < 2) return null;\n return this.dateAdapter.addMonths(this.internalActiveDate(), 1);\n });\n\n /** Custom template for cell content */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> = input<\n TemplateRef<{ $implicit: CalendarCell<D> }> | null\n >(null);\n\n /** Emitted when a date is selected */\n readonly selectedChange: OutputEmitterRef<D> = output<D>();\n\n /** Emitted when the view changes */\n readonly viewChanged: OutputEmitterRef<CalendarView> = output<CalendarView>();\n\n /** Emitted when the active date changes */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Current view state (synced from startView input, writable for view switching) */\n readonly currentView: WritableSignal<CalendarView> = linkedSignal(() => this.startView());\n\n /** Internal active date (synced from activeDate input, writable for navigation) */\n readonly internalActiveDate: WritableSignal<D> = linkedSignal(() =>\n this.activeDate() ?? this.dateAdapter.today()\n );\n\n /** Live announcement for screen readers */\n readonly liveAnnouncement: WritableSignal<string> = signal<string>('');\n\n /** Internal selection state managed by strategy (synced from selected input) */\n readonly internalSelection: WritableSignal<unknown> = linkedSignal(() => this.selected());\n\n /** Currently hovered/previewed date */\n readonly previewDate: WritableSignal<D | null> = signal<D | null>(null);\n\n /** Computed preview range from strategy */\n readonly previewRange: Signal<DateRange<D> | null> = computed(() => {\n if (!this.selectionStrategy) return null;\n return this.selectionStrategy.createPreview(\n this.previewDate(),\n this.internalSelection()\n );\n });\n\n /** Calendar container classes */\n readonly calendarClasses: Signal<string> = computed(() =>\n calendarVariants({ bordered: this.bordered() })\n );\n\n /** Months container classes for single/dual-month layout */\n readonly monthsContainerClasses: Signal<string> = computed(() =>\n monthsContainerVariants({ columns: this.effectiveMonthColumns() as 1 | 2 })\n );\n\n /** Month names for formatting */\n private readonly monthNames: Signal<string[]> = computed(() =>\n this.dateAdapter.getMonthNames('long')\n );\n\n /** Period label for the header (e.g., \"January 2024\", \"January – February 2024\", \"2024\", \"2000 – 2023\") */\n readonly periodLabel: Signal<string> = computed(() => {\n const date = this.internalActiveDate();\n const view = this.currentView();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'month': {\n const monthName = this.monthNames()[month];\n\n // Multi-month: \"January – February 2026\" or \"December 2025 – January 2026\"\n if (this.effectiveMonthColumns() >= 2) {\n const secondDate = this.secondaryActiveDate()!;\n const secondMonth = this.dateAdapter.getMonth(secondDate);\n const secondYear = this.dateAdapter.getYear(secondDate);\n const secondMonthName = this.monthNames()[secondMonth];\n\n if (year === secondYear) {\n return `${monthName} – ${secondMonthName} ${year}`;\n }\n return `${monthName} ${year} – ${secondMonthName} ${secondYear}`;\n }\n return `${monthName} ${year}`;\n }\n case 'year':\n return `${year}`;\n case 'multi-year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n const endYear = startYear + YEARS_PER_PAGE - 1;\n return `${startYear} – ${endYear}`;\n }\n }\n });\n\n /** Accessible label for the period button */\n readonly periodAriaLabel: Signal<string> = computed(() => {\n const view = this.currentView();\n const label = this.periodLabel();\n\n switch (view) {\n case 'month':\n return `${label}, click to switch to year view`;\n case 'year':\n return `${label}, click to switch to multi-year view`;\n case 'multi-year':\n return label;\n }\n });\n\n /** Accessible label for the previous button */\n readonly prevAriaLabel: Signal<string> = computed(() => {\n const view = this.currentView();\n switch (view) {\n case 'month':\n return 'Previous month';\n case 'year':\n return 'Previous year';\n case 'multi-year':\n return `Previous ${YEARS_PER_PAGE} years`;\n }\n });\n\n /** Accessible label for the next button */\n readonly nextAriaLabel: Signal<string> = computed(() => {\n const view = this.currentView();\n switch (view) {\n case 'month':\n return 'Next month';\n case 'year':\n return 'Next year';\n case 'multi-year':\n return `Next ${YEARS_PER_PAGE} years`;\n }\n });\n\n /** Whether the previous button is disabled */\n readonly prevDisabled: Signal<boolean> = computed(() => {\n const date = this.internalActiveDate();\n const minDate = this.minDate();\n if (!minDate) return false;\n\n const view = this.currentView();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'month': {\n // Disabled if previous month is entirely before min\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n return isMonthDisabled(prevYear, prevMonth, minDate, null, this.dateAdapter);\n }\n case 'year': {\n // Disabled if previous year is entirely before min\n return isYearDisabled(year - 1, minDate, null, this.dateAdapter);\n }\n case 'multi-year': {\n // Disabled if previous page's last year is before min\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n const prevPageLastYear = startYear - 1;\n return isYearDisabled(prevPageLastYear, minDate, null, this.dateAdapter);\n }\n }\n });\n\n /** Whether the next button is disabled */\n readonly nextDisabled: Signal<boolean> = computed(() => {\n const date = this.internalActiveDate();\n const maxDate = this.maxDate();\n if (!maxDate) return false;\n\n const view = this.currentView();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'month': {\n // Disabled if next month is entirely after max\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n return isMonthDisabled(nextYear, nextMonth, null, maxDate, this.dateAdapter);\n }\n case 'year': {\n // Disabled if next year is entirely after max\n return isYearDisabled(year + 1, null, maxDate, this.dateAdapter);\n }\n case 'multi-year': {\n // Disabled if next page's first year is after max\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n const nextPageFirstYear = startYear + YEARS_PER_PAGE;\n return isYearDisabled(nextPageFirstYear, null, maxDate, this.dateAdapter);\n }\n }\n });\n\n /**\n * Handles previous button click.\n * Navigates to the previous period based on current view.\n */\n onPrevClicked(): void {\n const view = this.currentView();\n const date = this.internalActiveDate();\n let newDate: D;\n\n switch (view) {\n case 'month':\n newDate = this.dateAdapter.addMonths(date, -1);\n break;\n case 'year':\n newDate = this.dateAdapter.addYears(date, -1);\n break;\n case 'multi-year':\n newDate = this.dateAdapter.addYears(date, -YEARS_PER_PAGE);\n break;\n }\n\n this.internalActiveDate.set(newDate);\n this.activeDateChange.emit(newDate);\n this.announceNavigation('previous');\n }\n\n /**\n * Handles next button click.\n * Navigates to the next period based on current view.\n */\n onNextClicked(): void {\n const view = this.currentView();\n const date = this.internalActiveDate();\n let newDate: D;\n\n switch (view) {\n case 'month':\n newDate = this.dateAdapter.addMonths(date, 1);\n break;\n case 'year':\n newDate = this.dateAdapter.addYears(date, 1);\n break;\n case 'multi-year':\n newDate = this.dateAdapter.addYears(date, YEARS_PER_PAGE);\n break;\n }\n\n this.internalActiveDate.set(newDate);\n this.activeDateChange.emit(newDate);\n this.announceNavigation('next');\n }\n\n /**\n * Handles period label click.\n * Switches to the next higher view (month → year → multi-year).\n */\n onPeriodClicked(): void {\n const current = this.currentView();\n if (current === 'month') {\n this.currentView.set('year');\n } else if (current === 'year') {\n this.currentView.set('multi-year');\n }\n // multi-year cannot switch further up\n this.viewChanged.emit(this.currentView());\n this.announceViewChange();\n }\n\n /**\n * Handles date selection from month view.\n * Uses selection strategy if available, otherwise emits directly.\n */\n onDateSelected(date: D): void {\n if (this.selectionStrategy) {\n const result = this.selectionStrategy.select(date, this.internalSelection());\n this.internalSelection.set(result.selection);\n\n if (result.isComplete) {\n // Cast to D for the output - the strategy determines the actual type\n this.selectedChange.emit(result.selection as D);\n }\n } else {\n // Fallback: default single selection behavior\n this.selectedChange.emit(date);\n }\n }\n\n /**\n * Handles preview change from views (mouse hover).\n * Updates the preview date for strategy to compute preview range.\n */\n onPreviewChange(date: D | null): void {\n this.previewDate.set(date);\n }\n\n /**\n * Handles month selection from year view.\n * Drills down to month view with the selected month.\n */\n onMonthSelected(date: D): void {\n this.internalActiveDate.set(date);\n this.currentView.set('month');\n this.viewChanged.emit('month');\n this.activeDateChange.emit(date);\n this.announceViewChange();\n }\n\n /**\n * Handles year selection from multi-year view.\n * Drills down to year view with the selected year.\n */\n onYearSelected(date: D): void {\n this.internalActiveDate.set(date);\n this.currentView.set('year');\n this.viewChanged.emit('year');\n this.activeDateChange.emit(date);\n this.announceViewChange();\n }\n\n /**\n * Handles active date change from child views (keyboard navigation).\n * In dual-month mode, handles cross-grid focus transitions.\n */\n onActiveDateChange(date: D, gridIndex?: number): void {\n const views = this.monthViews();\n\n // In dual-month mode, check if we should focus the other grid\n if (this.effectiveMonthColumns() >= 2 && views.length === 2 && gridIndex !== undefined) {\n const primaryMonth = this.dateAdapter.getMonth(this.internalActiveDate());\n const secondaryMonth = this.dateAdapter.getMonth(this.secondaryActiveDate()!);\n const targetMonth = this.dateAdapter.getMonth(date);\n\n // Determine which grid the target date belongs to\n if (gridIndex === 0 && targetMonth === secondaryMonth) {\n // Navigated from left grid into right grid - focus right grid\n const rightView = views[1];\n if (rightView) {\n const compareValue = this.computeCompareValue(date);\n rightView.focusCell(compareValue);\n return;\n }\n }\n if (gridIndex === 1 && targetMonth === primaryMonth) {\n // Navigated from right grid into left grid - focus left grid\n const leftView = views[0];\n if (leftView) {\n const compareValue = this.computeCompareValue(date);\n leftView.focusCell(compareValue);\n return;\n }\n }\n }\n\n // Default: update active date and let normal navigation occur\n this.internalActiveDate.set(date);\n this.activeDateChange.emit(date);\n }\n\n /**\n * Computes a unique compare value from a date for focus management.\n */\n private computeCompareValue(date: D): number {\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n const day = this.dateAdapter.getDate(date);\n return year * 10000 + month * 100 + day;\n }\n\n /**\n * Announces a view change to screen readers.\n */\n private announceViewChange(): void {\n const view = this.currentView();\n const label = this.periodLabel();\n const viewLabel = view === 'multi-year' ? 'multi-year' : view;\n this.liveAnnouncement.set(`${viewLabel} view, ${label}`);\n }\n\n /**\n * Announces navigation to screen readers.\n */\n private announceNavigation(direction: 'previous' | 'next'): void {\n this.liveAnnouncement.set(`Navigated to ${direction} ${this.periodLabel()}`);\n }\n}\n","import type { Provider } from '@angular/core';\nimport { DATE_ADAPTER, NativeDateAdapter } from './date-adapter';\nimport { CALENDAR_SELECTION_STRATEGY } from './selection/selection-strategy';\nimport { SingleSelectionStrategy } from './selection/single-selection-strategy';\nimport { RangeSelectionStrategy } from './selection/range-selection-strategy';\nimport { MultiSelectionStrategy } from './selection/multi-selection-strategy';\nimport { WeekSelectionStrategy } from './selection/week-selection-strategy';\n\n/**\n * Provides the native JavaScript Date adapter for the calendar.\n * This is required for the calendar component to work with native Date objects.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideNativeDateAdapter()],\n * })\n * export class MyComponent {}\n * ```\n */\nexport function provideNativeDateAdapter(): Provider {\n return { provide: DATE_ADAPTER, useClass: NativeDateAdapter };\n}\n\n/**\n * Provides the single selection strategy (default behavior).\n * Allows selecting one date at a time.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideSingleSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {}\n * ```\n */\nexport function provideSingleSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: SingleSelectionStrategy };\n}\n\n/**\n * Provides the range selection strategy.\n * Allows selecting a start and end date to create a date range.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideRangeSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {\n * range = signal<DateRange<Date> | null>(null);\n * }\n * ```\n */\nexport function provideRangeSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: RangeSelectionStrategy };\n}\n\n/**\n * Provides the multi selection strategy.\n * Allows selecting multiple individual dates.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideMultiSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {\n * dates = signal<Date[]>([]);\n * }\n * ```\n */\nexport function provideMultiSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: MultiSelectionStrategy };\n}\n\n/**\n * Provides the week selection strategy.\n * Allows selecting entire weeks at a time.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideWeekSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {\n * range = signal<DateRange<Date> | null>(null);\n * }\n * ```\n */\nexport function provideWeekSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: WeekSelectionStrategy };\n}\n","/**\n * Types and interfaces for DatePicker and DateRangePicker components.\n */\n\n/** Date format preset names */\nexport type DateFormatPreset =\n | 'short' | 'medium' | 'long' | 'full'\n | 'time' | 'timeWithSeconds'\n | 'dateTimeShort' | 'dateTimeMedium' | 'dateTimeLong';\n\n/** Panel width configuration */\nexport type DatepickerPanelWidth = 'auto' | 'trigger' | `${number}px` | `${number}rem`;\n\n/** Size variants for datepicker components */\nexport type DatepickerSize = 'sm' | 'default' | 'lg';\n\n/** Visual variant for datepicker trigger */\nexport type DatepickerVariant = 'default' | 'outline' | 'ghost' | 'filled';\n\n/** Validation state for datepicker */\nexport type DatepickerState = 'default' | 'error' | 'success';\n\n/** Configuration for datepicker footer actions */\nexport interface DatepickerFooterConfig {\n /** Show today button */\n showToday?: boolean;\n /** Show clear button */\n showClear?: boolean;\n /** Custom today button label */\n todayLabel?: string;\n /** Custom clear button label */\n clearLabel?: string;\n}\n\n/** Value type for DateRangePicker */\nexport interface DateRangeValue<D> {\n /** Start date of the range */\n start: D | null;\n /** End date of the range */\n end: D | null;\n}\n\n/** Creates a DateRangeValue */\nexport function createDateRangeValue<D>(\n start: D | null = null,\n end: D | null = null\n): DateRangeValue<D> {\n return { start, end };\n}\n\n/** Generates a unique ID for datepicker instances */\nlet datepickerIdCounter = 0;\nexport function generateDatepickerId(): string {\n return `com-datepicker-${datepickerIdCounter++}`;\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type {\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n} from './datepicker.types';\n\n/**\n * CVA variants for the datepicker trigger input.\n * Uses semantic theme tokens for consistent cross-theme styling.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-hover`,\n * `--color-warn`, `--color-success`, `--color-primary`, `--color-border`,\n * `--color-disabled`, `--color-disabled-foreground`, `--radius-input`\n */\nexport const datepickerTriggerVariants: (props?: {\n variant?: DatepickerVariant;\n size?: DatepickerSize;\n state?: DatepickerState;\n open?: boolean;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-between',\n 'w-full',\n 'rounded-input',\n 'border',\n 'bg-input-background',\n 'text-input-foreground',\n 'ring-offset-background',\n 'transition-colors',\n 'duration-150',\n 'placeholder:text-input-placeholder',\n 'focus-within:outline-none',\n 'focus-within:ring-2',\n 'focus-within:ring-offset-2',\n 'focus-within:ring-ring',\n 'cursor-pointer',\n ],\n {\n variants: {\n variant: {\n default: [\n 'border-input-border',\n 'hover:border-border',\n ],\n outline: [\n 'border-2',\n 'border-input-border',\n 'hover:border-foreground',\n ],\n ghost: [\n 'border-transparent',\n 'bg-transparent',\n 'hover:bg-muted',\n ],\n filled: [\n 'border-transparent',\n 'bg-muted',\n 'hover:bg-muted-hover',\n ],\n },\n size: {\n sm: ['h-8', 'px-2', 'text-xs', 'gap-1'],\n default: ['h-10', 'px-3', 'text-sm', 'gap-2'],\n lg: ['h-12', 'px-4', 'text-base', 'gap-3'],\n },\n state: {\n default: [],\n error: [\n 'border-warn',\n 'focus-within:ring-warn',\n ],\n success: [\n 'border-success',\n 'focus-within:ring-success',\n ],\n },\n open: {\n true: ['ring-2', 'ring-ring', 'border-primary'],\n false: [],\n },\n },\n compoundVariants: [\n {\n open: true,\n variant: 'default',\n class: ['border-primary'],\n },\n {\n open: true,\n variant: 'outline',\n class: ['border-primary'],\n },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'default',\n state: 'default',\n open: false,\n },\n }\n);\n\nexport type DatepickerTriggerVariants = VariantProps<typeof datepickerTriggerVariants>;\n\n/**\n * CVA variants for the disabled state of datepicker trigger.\n *\n * @tokens `--color-disabled`, `--color-disabled-foreground`\n */\nexport const datepickerDisabledVariants: () => string = cva([\n 'cursor-not-allowed',\n 'bg-disabled',\n 'text-disabled-foreground',\n 'hover:border-input-border',\n 'pointer-events-none',\n]);\n\nexport type DatepickerDisabledVariants = VariantProps<typeof datepickerDisabledVariants>;\n\n/**\n * CVA variants for the datepicker input field.\n *\n * @tokens `--color-input-foreground`, `--color-input-placeholder`\n */\nexport const datepickerInputVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'flex-1',\n 'bg-transparent',\n 'outline-none',\n 'placeholder:text-input-placeholder',\n 'disabled:cursor-not-allowed',\n 'min-w-0',\n 'truncate',\n ],\n {\n variants: {\n size: {\n sm: ['text-xs'],\n default: ['text-sm'],\n lg: ['text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerInputVariants = VariantProps<typeof datepickerInputVariants>;\n\n/**\n * CVA variants for the calendar icon button.\n *\n * @tokens `--color-ring`, `--color-muted-foreground`, `--radius-interactive-sm`\n */\nexport const datepickerIconVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'shrink-0',\n 'text-muted-foreground',\n 'transition-colors',\n 'hover:text-foreground',\n 'focus:outline-none',\n 'focus:ring-1',\n 'focus:ring-ring',\n 'rounded-interactive-sm',\n ],\n {\n variants: {\n size: {\n sm: ['h-4', 'w-4'],\n default: ['h-5', 'w-5'],\n lg: ['h-6', 'w-6'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerIconVariants = VariantProps<typeof datepickerIconVariants>;\n\n/**\n * CVA variants for the clear button.\n *\n * @tokens `--color-ring`, `--color-muted-foreground`, `--color-foreground`, `--radius-interactive-sm`\n */\nexport const datepickerClearVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'rounded-interactive-sm',\n 'text-muted-foreground',\n 'transition-colors',\n 'hover:text-foreground',\n 'focus:outline-none',\n 'focus:ring-1',\n 'focus:ring-ring',\n 'shrink-0',\n ],\n {\n variants: {\n size: {\n sm: ['h-4', 'w-4'],\n default: ['h-5', 'w-5'],\n lg: ['h-6', 'w-6'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerClearVariants = VariantProps<typeof datepickerClearVariants>;\n\n/**\n * CVA variants for the datepicker panel (overlay).\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`, `--radius-overlay`\n */\nexport const datepickerPanelVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'z-50',\n 'overflow-hidden',\n 'rounded-overlay',\n 'border',\n 'border-border-subtle',\n 'bg-popover',\n 'text-popover-foreground',\n 'shadow-lg',\n 'outline-none',\n ],\n {\n variants: {\n size: {\n sm: ['p-2', 'text-xs'],\n default: ['p-3', 'text-sm'],\n lg: ['p-4', 'text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerPanelVariants = VariantProps<typeof datepickerPanelVariants>;\n\n/**\n * CVA variants for the footer section of the datepicker panel.\n *\n * @tokens `--color-border-subtle`\n */\nexport const datepickerFooterVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'flex',\n 'items-center',\n 'justify-between',\n 'border-t',\n 'border-border-subtle',\n 'mt-3',\n 'pt-3',\n ],\n {\n variants: {\n size: {\n sm: ['mt-2', 'pt-2', 'gap-1'],\n default: ['mt-3', 'pt-3', 'gap-2'],\n lg: ['mt-4', 'pt-4', 'gap-3'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerFooterVariants = VariantProps<typeof datepickerFooterVariants>;\n\n/**\n * CVA variants for the footer buttons.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`, `--radius-control-sm`\n */\nexport const datepickerFooterButtonVariants: (props?: {\n size?: DatepickerSize;\n variant?: 'primary' | 'secondary';\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'rounded-control-sm',\n 'font-medium',\n 'transition-colors',\n 'focus:outline-none',\n 'focus:ring-2',\n 'focus:ring-ring',\n 'focus:ring-offset-2',\n ],\n {\n variants: {\n size: {\n sm: ['h-7', 'px-2', 'text-xs'],\n default: ['h-8', 'px-3', 'text-sm'],\n lg: ['h-9', 'px-4', 'text-base'],\n },\n variant: {\n primary: [\n 'bg-primary',\n 'text-primary-foreground',\n 'hover:bg-primary-hover',\n ],\n secondary: [\n 'bg-muted',\n 'text-muted-foreground',\n 'hover:bg-muted-hover',\n ],\n },\n },\n defaultVariants: {\n size: 'default',\n variant: 'secondary',\n },\n }\n);\n\nexport type DatepickerFooterButtonVariants = VariantProps<typeof datepickerFooterButtonVariants>;\n\n/**\n * CVA variants for the range separator.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const datepickerRangeSeparatorVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'text-muted-foreground',\n 'shrink-0',\n ],\n {\n variants: {\n size: {\n sm: ['px-1', 'text-xs'],\n default: ['px-2', 'text-sm'],\n lg: ['px-3', 'text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerRangeSeparatorVariants = VariantProps<typeof datepickerRangeSeparatorVariants>;\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type { TimePickerSize, TimePickerVariant, TimePickerState } from './timepicker.types';\n\n/**\n * CVA variants for the time picker container.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-ring`, `--color-warn`, `--color-success`, `--radius-input`\n */\nexport const timepickerContainerVariants: (props?: {\n variant?: TimePickerVariant;\n size?: TimePickerSize;\n state?: TimePickerState;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'gap-1',\n 'rounded-input',\n 'transition-colors',\n 'duration-150',\n ],\n {\n variants: {\n variant: {\n standalone: [\n 'border',\n 'border-input-border',\n 'bg-input-background',\n 'text-input-foreground',\n 'ring-offset-background',\n 'focus-within:outline-none',\n 'focus-within:ring-2',\n 'focus-within:ring-offset-2',\n 'focus-within:ring-ring',\n ],\n embedded: [\n 'border-transparent',\n 'bg-transparent',\n 'text-foreground',\n ],\n },\n size: {\n sm: ['h-8', 'px-2', 'text-xs', 'gap-0.5'],\n default: ['h-10', 'px-3', 'text-sm', 'gap-1'],\n lg: ['h-12', 'px-4', 'text-base', 'gap-1.5'],\n },\n state: {\n default: [],\n error: [\n 'border-warn',\n 'focus-within:ring-warn',\n ],\n success: [\n 'border-success',\n 'focus-within:ring-success',\n ],\n },\n },\n compoundVariants: [\n {\n variant: 'embedded',\n state: 'error',\n class: [],\n },\n {\n variant: 'embedded',\n state: 'success',\n class: [],\n },\n ],\n defaultVariants: {\n variant: 'standalone',\n size: 'default',\n state: 'default',\n },\n },\n);\n\nexport type TimepickerContainerVariants = VariantProps<typeof timepickerContainerVariants>;\n\n/**\n * CVA variants for the disabled state of time picker.\n *\n * @tokens `--color-disabled`, `--color-disabled-foreground`\n */\nexport const timepickerDisabledVariants: () => string = cva([\n 'cursor-not-allowed',\n 'bg-disabled',\n 'text-disabled-foreground',\n 'pointer-events-none',\n]);\n\nexport type TimepickerDisabledVariants = VariantProps<typeof timepickerDisabledVariants>;\n\n/**\n * CVA variants for each time segment input.\n *\n * @tokens `--color-primary-subtle`, `--color-primary-subtle-foreground`, `--radius-interactive-sm`\n */\nexport const timepickerSegmentVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'bg-transparent',\n 'outline-none',\n 'text-center',\n 'font-mono',\n 'tabular-nums',\n 'select-all',\n 'focus:bg-primary-subtle',\n 'focus:text-primary-subtle-foreground',\n 'focus:rounded-interactive-sm',\n ],\n {\n variants: {\n size: {\n sm: ['w-5', 'text-xs'],\n default: ['w-7', 'text-sm'],\n lg: ['w-9', 'text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerSegmentVariants = VariantProps<typeof timepickerSegmentVariants>;\n\n/**\n * CVA variants for the colon separator.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const timepickerSeparatorVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'text-muted-foreground',\n 'select-none',\n 'font-mono',\n ],\n {\n variants: {\n size: {\n sm: ['text-xs'],\n default: ['text-sm'],\n lg: ['text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerSeparatorVariants = VariantProps<typeof timepickerSeparatorVariants>;\n\n/**\n * CVA variants for the AM/PM toggle button.\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`, `--color-ring`,\n * `--radius-control-sm`\n */\nexport const timepickerPeriodVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'rounded-control-sm',\n 'font-medium',\n 'transition-colors',\n 'select-none',\n 'bg-muted',\n 'text-muted-foreground',\n 'hover:bg-muted-hover',\n 'focus:outline-none',\n 'focus:ring-1',\n 'focus:ring-ring',\n ],\n {\n variants: {\n size: {\n sm: ['h-5', 'px-1', 'text-xs', 'ml-0.5'],\n default: ['h-6', 'px-1.5', 'text-xs', 'ml-1'],\n lg: ['h-7', 'px-2', 'text-sm', 'ml-1.5'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerPeriodVariants = VariantProps<typeof timepickerPeriodVariants>;\n\n/**\n * CVA variants for the time section divider in datepicker panel.\n *\n * @tokens `--color-border-subtle`\n */\nexport const timepickerSectionVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'flex',\n 'items-center',\n 'justify-center',\n 'border-t',\n 'border-border-subtle',\n ],\n {\n variants: {\n size: {\n sm: ['pt-2', 'mt-2'],\n default: ['pt-3', 'mt-3'],\n lg: ['pt-4', 'mt-4'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerSectionVariants = VariantProps<typeof timepickerSectionVariants>;\n\n/**\n * CVA variants for time labels in date range picker.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const timepickerLabelVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'text-muted-foreground',\n 'font-medium',\n ],\n {\n variants: {\n size: {\n sm: ['text-xs'],\n default: ['text-xs'],\n lg: ['text-sm'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerLabelVariants = VariantProps<typeof timepickerLabelVariants>;\n","/**\n * Types and interfaces for the TimePicker component.\n */\n\n/** Value type for the standalone time picker */\nexport interface ComTimeValue {\n /** Hours (0-23, always stored in 24h format internally) */\n hours: number;\n /** Minutes (0-59) */\n minutes: number;\n /** Seconds (0-59) */\n seconds: number;\n}\n\n/** Creates a ComTimeValue */\nexport function createTimeValue(\n hours: number = 0,\n minutes: number = 0,\n seconds: number = 0,\n): ComTimeValue {\n return { hours, minutes, seconds };\n}\n\n/**\n * Compares two ComTimeValue objects.\n * @returns negative if a < b, 0 if equal, positive if a > b\n */\nexport function compareTime(a: ComTimeValue, b: ComTimeValue): number {\n const diff = a.hours * 3600 + a.minutes * 60 + a.seconds - (b.hours * 3600 + b.minutes * 60 + b.seconds);\n return diff;\n}\n\n/** Generates a unique ID for time picker instances */\nlet timePickerIdCounter = 0;\nexport function generateTimePickerId(): string {\n return `com-time-picker-${timePickerIdCounter++}`;\n}\n\n/** Size variants for time picker */\nexport type TimePickerSize = 'sm' | 'default' | 'lg';\n\n/** Visual variant */\nexport type TimePickerVariant = 'standalone' | 'embedded';\n\n/** Validation state */\nexport type TimePickerState = 'default' | 'error' | 'success';\n\n/** Period for 12-hour format */\nexport type TimePeriod = 'AM' | 'PM';\n\n/** Segment type */\nexport type TimeSegment = 'hours' | 'minutes' | 'seconds';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n LOCALE_ID,\n linkedSignal,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type {\n ElementRef,\n InputSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\n\nimport { joinClasses } from '../calendar.utils';\nimport {\n timepickerContainerVariants,\n timepickerDisabledVariants,\n timepickerSegmentVariants,\n timepickerSeparatorVariants,\n timepickerPeriodVariants,\n} from './timepicker.variants';\nimport type {\n ComTimeValue,\n TimePickerSize,\n TimePickerVariant,\n TimePickerState,\n TimePeriod,\n TimeSegment,\n} from './timepicker.types';\nimport { compareTime, generateTimePickerId } from './timepicker.types';\n\n/**\n * Time picker component with segmented numeric input fields.\n * Supports standalone usage with ControlValueAccessor and embedded usage\n * within datepicker/date-range-picker panels.\n *\n * Visual layout: `[HH] : [MM] : [SS] [AM|PM]`\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-ring`, `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-disabled`, `--color-disabled-foreground`,\n * `--color-warn`, `--color-success`, `--color-border`\n *\n * @example\n * ```html\n * <!-- Standalone with reactive forms -->\n * <com-time-picker formControlName=\"startTime\" />\n *\n * <!-- 12-hour format with seconds -->\n * <com-time-picker formControlName=\"alarm\" [use12HourFormat]=\"true\" [showSeconds]=\"true\" />\n *\n * <!-- 15-minute steps -->\n * <com-time-picker formControlName=\"meeting\" [minuteStep]=\"15\" />\n *\n * <!-- Embedded inside datepicker panel -->\n * <com-time-picker variant=\"embedded\" [value]=\"time\" (timeChange)=\"onTime($event)\" />\n * ```\n */\n@Component({\n selector: 'com-time-picker',\n exportAs: 'comTimePicker',\n template: `\n <div [class]=\"containerClasses()\">\n <!-- Hours -->\n <input\n #hoursInput\n type=\"text\"\n inputmode=\"numeric\"\n role=\"spinbutton\"\n [class]=\"segmentClasses()\"\n [attr.aria-label]=\"'Hours'\"\n [attr.aria-valuenow]=\"displayHours()\"\n [attr.aria-valuemin]=\"is12Hour() ? 1 : 0\"\n [attr.aria-valuemax]=\"is12Hour() ? 12 : 23\"\n [value]=\"formattedHours()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n maxlength=\"2\"\n (keydown)=\"onSegmentKeydown($event, 'hours')\"\n (input)=\"onSegmentInput($event, 'hours')\"\n (focus)=\"onSegmentFocus('hours')\"\n (blur)=\"onSegmentBlur('hours')\"\n />\n\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <!-- Minutes -->\n <input\n #minutesInput\n type=\"text\"\n inputmode=\"numeric\"\n role=\"spinbutton\"\n [class]=\"segmentClasses()\"\n [attr.aria-label]=\"'Minutes'\"\n [attr.aria-valuenow]=\"internalValue()?.minutes ?? null\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [value]=\"formattedMinutes()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n maxlength=\"2\"\n (keydown)=\"onSegmentKeydown($event, 'minutes')\"\n (input)=\"onSegmentInput($event, 'minutes')\"\n (focus)=\"onSegmentFocus('minutes')\"\n (blur)=\"onSegmentBlur('minutes')\"\n />\n\n @if (showSeconds()) {\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <!-- Seconds -->\n <input\n #secondsInput\n type=\"text\"\n inputmode=\"numeric\"\n role=\"spinbutton\"\n [class]=\"segmentClasses()\"\n [attr.aria-label]=\"'Seconds'\"\n [attr.aria-valuenow]=\"internalValue()?.seconds ?? null\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [value]=\"formattedSeconds()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n maxlength=\"2\"\n (keydown)=\"onSegmentKeydown($event, 'seconds')\"\n (input)=\"onSegmentInput($event, 'seconds')\"\n (focus)=\"onSegmentFocus('seconds')\"\n (blur)=\"onSegmentBlur('seconds')\"\n />\n }\n\n @if (is12Hour()) {\n <button\n #periodButton\n type=\"button\"\n [class]=\"periodClasses()\"\n [attr.aria-label]=\"'Toggle AM/PM, currently ' + period()\"\n [disabled]=\"disabled()\"\n (click)=\"togglePeriod()\"\n (keydown)=\"onPeriodKeydown($event)\"\n >\n {{ period() }}\n </button>\n }\n </div>\n\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-time-picker-host inline-block',\n '[class.com-time-picker-disabled]': 'disabled()',\n '[attr.role]': '\"group\"',\n '[attr.aria-label]': 'ariaLabel() || \"Time picker\"',\n '[attr.aria-disabled]': 'disabled() || null',\n },\n})\nexport class ComTimePicker implements ControlValueAccessor, Validator {\n private readonly localeId: string = inject(LOCALE_ID);\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly timepickerId: string = generateTimePickerId();\n\n private readonly hoursInputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('hoursInput');\n private readonly minutesInputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('minutesInput');\n private readonly secondsInputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('secondsInput');\n private readonly periodButtonRef: Signal<ElementRef<HTMLButtonElement> | undefined> =\n viewChild<ElementRef<HTMLButtonElement>>('periodButton');\n\n // ============ INPUTS ============\n\n /** Current time value. */\n readonly value: InputSignal<ComTimeValue | null> = input<ComTimeValue | null>(null);\n\n /** Whether the time picker is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether the time picker is required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether to show the seconds segment. */\n readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n /** 12h vs 24h format. `null` = auto-detect from locale. */\n readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Step interval for minutes. */\n readonly minuteStep: InputSignal<number> = input<number>(1);\n\n /** Step interval for seconds. */\n readonly secondStep: InputSignal<number> = input<number>(1);\n\n /** Minimum selectable time. */\n readonly minTime: InputSignal<ComTimeValue | null> = input<ComTimeValue | null>(null);\n\n /** Maximum selectable time. */\n readonly maxTime: InputSignal<ComTimeValue | null> = input<ComTimeValue | null>(null);\n\n /** Visual variant. */\n readonly variant: InputSignal<TimePickerVariant> = input<TimePickerVariant>('standalone');\n\n /** Size variant. */\n readonly size: InputSignal<TimePickerSize> = input<TimePickerSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<TimePickerState> = input<TimePickerState>('default');\n\n /** Accessible label for the group. */\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Additional CSS classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Placeholder text for empty segments. */\n readonly placeholder: InputSignal<string> = input<string>('--');\n\n // ============ OUTPUTS ============\n\n /** Emitted when time value changes. */\n readonly timeChange: OutputEmitterRef<ComTimeValue | null> = output<ComTimeValue | null>();\n\n // ============ INTERNAL STATE ============\n\n /** Internal value state. */\n readonly internalValue: WritableSignal<ComTimeValue | null> = linkedSignal<ComTimeValue | null>(\n () => this.value() ?? null,\n );\n\n /** Which segment is currently focused. */\n readonly activeSegment: WritableSignal<TimeSegment | 'period' | null> = signal(null);\n\n /** Pending typed digits for auto-advance. */\n readonly pendingDigits: WritableSignal<string> = signal('');\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n // ============ COMPUTED STATE ============\n\n /** Whether to use 12-hour format. */\n readonly is12Hour: Signal<boolean> = computed(() => {\n const explicit = this.use12HourFormat();\n if (explicit !== null) return explicit;\n try {\n const options = new Intl.DateTimeFormat(this.localeId, { hour: 'numeric' }).resolvedOptions();\n return options.hour12 === true;\n } catch {\n return false;\n }\n });\n\n /** Current period (AM/PM). */\n readonly period: Signal<TimePeriod> = computed(() => {\n const value = this.internalValue();\n if (!value) return 'AM';\n return value.hours >= 12 ? 'PM' : 'AM';\n });\n\n /** Display hours (converted from 24h to 12h when needed). */\n readonly displayHours: Signal<number | null> = computed(() => {\n const value = this.internalValue();\n if (!value) return null;\n if (!this.is12Hour()) return value.hours;\n const h = value.hours % 12;\n return h === 0 ? 12 : h;\n });\n\n /** Formatted hours string. */\n readonly formattedHours: Signal<string> = computed(() => {\n const h = this.displayHours();\n if (h === null) return '';\n return h.toString().padStart(2, '0');\n });\n\n /** Formatted minutes string. */\n readonly formattedMinutes: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value) return '';\n return value.minutes.toString().padStart(2, '0');\n });\n\n /** Formatted seconds string. */\n readonly formattedSeconds: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value) return '';\n return value.seconds.toString().padStart(2, '0');\n });\n\n /** Container classes. */\n readonly containerClasses: Signal<string> = computed(() => {\n const base = timepickerContainerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.state(),\n });\n const disabled = this.disabled() ? timepickerDisabledVariants() : '';\n return joinClasses(base, disabled, this.userClass());\n });\n\n /** Segment input classes. */\n readonly segmentClasses: Signal<string> = computed(() => {\n return timepickerSegmentVariants({ size: this.size() });\n });\n\n /** Separator classes. */\n readonly separatorClasses: Signal<string> = computed(() => {\n return timepickerSeparatorVariants({ size: this.size() });\n });\n\n /** Period button classes. */\n readonly periodClasses: Signal<string> = computed(() => {\n return timepickerPeriodVariants({ size: this.size() });\n });\n\n // ============ CVA CALLBACKS ============\n\n private onChange: (value: ComTimeValue | null) => void = () => {};\n private onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n // ============ CVA IMPLEMENTATION ============\n\n writeValue(value: ComTimeValue | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: ComTimeValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled state is handled via the disabled input\n }\n\n // ============ VALIDATOR IMPLEMENTATION ============\n\n validate(): ValidationErrors | null {\n const value = this.internalValue();\n\n if (this.required() && !value) {\n return { required: true };\n }\n\n if (value) {\n const minTime = this.minTime();\n if (minTime && compareTime(value, minTime) < 0) {\n return { minTime: { min: minTime, actual: value } };\n }\n\n const maxTime = this.maxTime();\n if (maxTime && compareTime(value, maxTime) > 0) {\n return { maxTime: { max: maxTime, actual: value } };\n }\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ============ EVENT HANDLERS ============\n\n protected onSegmentFocus(segment: TimeSegment): void {\n this.activeSegment.set(segment);\n this.pendingDigits.set('');\n }\n\n protected onSegmentBlur(segment: TimeSegment): void {\n this.activeSegment.set(null);\n this.pendingDigits.set('');\n this.snapToStep(segment);\n this.onTouched();\n }\n\n protected onSegmentInput(event: Event, segment: TimeSegment): void {\n // Prevent default browser input handling — we manage value via keydown\n const input = event.target as HTMLInputElement;\n const value = this.internalValue();\n // Restore the formatted value to prevent browser from changing display\n if (segment === 'hours') {\n input.value = this.formattedHours();\n } else if (segment === 'minutes') {\n input.value = this.formattedMinutes();\n } else {\n input.value = this.formattedSeconds();\n }\n }\n\n protected onSegmentKeydown(event: KeyboardEvent, segment: TimeSegment): void {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.incrementSegment(segment, 1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.incrementSegment(segment, -1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.focusNextSegment(segment);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n this.focusPrevSegment(segment);\n break;\n case 'Home':\n event.preventDefault();\n this.setSegmentToMin(segment);\n break;\n case 'End':\n event.preventDefault();\n this.setSegmentToMax(segment);\n break;\n case 'Backspace':\n case 'Delete':\n event.preventDefault();\n this.pendingDigits.set('');\n break;\n default:\n if (/^[0-9]$/.test(event.key)) {\n event.preventDefault();\n this.handleDigitInput(event.key, segment);\n }\n break;\n }\n }\n\n protected onPeriodKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n event.preventDefault();\n this.togglePeriod();\n break;\n case 'ArrowLeft':\n event.preventDefault();\n this.focusPrevSegment('period');\n break;\n case 'a':\n case 'A':\n event.preventDefault();\n this.setPeriod('AM');\n break;\n case 'p':\n case 'P':\n event.preventDefault();\n this.setPeriod('PM');\n break;\n }\n }\n\n protected togglePeriod(): void {\n const value = this.internalValue();\n if (!value) {\n this.updateValue({ hours: 12, minutes: 0, seconds: 0 });\n return;\n }\n\n const newHours = value.hours >= 12 ? value.hours - 12 : value.hours + 12;\n this.updateValue({ ...value, hours: newHours });\n }\n\n // ============ PRIVATE METHODS ============\n\n private setPeriod(period: TimePeriod): void {\n const value = this.internalValue();\n if (!value) {\n const hours = period === 'AM' ? 0 : 12;\n this.updateValue({ hours, minutes: 0, seconds: 0 });\n return;\n }\n\n const currentPeriod = this.period();\n if (currentPeriod === period) return;\n\n const newHours = period === 'AM' ? value.hours - 12 : value.hours + 12;\n this.updateValue({ ...value, hours: newHours });\n }\n\n private incrementSegment(segment: TimeSegment, direction: 1 | -1): void {\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n const step = segment === 'minutes' ? this.minuteStep() : segment === 'seconds' ? this.secondStep() : 1;\n const delta = step * direction;\n\n let newValue: ComTimeValue;\n\n switch (segment) {\n case 'hours': {\n const max = this.is12Hour() ? 12 : 23;\n const min = this.is12Hour() ? 1 : 0;\n let h = this.is12Hour() ? (this.displayHours() ?? min) : value.hours;\n h += delta;\n // Wrap\n if (this.is12Hour()) {\n if (h > max) h = min;\n if (h < min) h = max;\n // Convert back to 24h\n const isPM = this.period() === 'PM';\n let h24 = h === 12 ? 0 : h;\n if (isPM) h24 += 12;\n newValue = { ...value, hours: h24 };\n } else {\n if (h > 23) h = 0;\n if (h < 0) h = 23;\n newValue = { ...value, hours: h };\n }\n break;\n }\n case 'minutes': {\n let m = value.minutes + delta;\n if (m > 59) m = 0;\n if (m < 0) m = 59;\n newValue = { ...value, minutes: m };\n break;\n }\n case 'seconds': {\n let s = value.seconds + delta;\n if (s > 59) s = 0;\n if (s < 0) s = 59;\n newValue = { ...value, seconds: s };\n break;\n }\n }\n\n this.updateValue(newValue);\n }\n\n private handleDigitInput(digit: string, segment: TimeSegment): void {\n const pending = this.pendingDigits() + digit;\n\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n let parsed = parseInt(pending, 10);\n\n switch (segment) {\n case 'hours': {\n const max = this.is12Hour() ? 12 : 23;\n const min = this.is12Hour() ? 1 : 0;\n if (parsed > max) parsed = parseInt(digit, 10);\n if (parsed < min && pending.length >= 2) parsed = min;\n // Convert to 24h if 12h mode\n let h24 = parsed;\n if (this.is12Hour()) {\n const isPM = this.period() === 'PM';\n h24 = parsed === 12 ? 0 : parsed;\n if (isPM) h24 += 12;\n }\n this.updateValue({ ...value, hours: h24 });\n break;\n }\n case 'minutes': {\n if (parsed > 59) parsed = parseInt(digit, 10);\n this.updateValue({ ...value, minutes: parsed });\n break;\n }\n case 'seconds': {\n if (parsed > 59) parsed = parseInt(digit, 10);\n this.updateValue({ ...value, seconds: parsed });\n break;\n }\n }\n\n // Auto-advance after 2 digits\n if (pending.length >= 2) {\n this.pendingDigits.set('');\n this.focusNextSegment(segment);\n } else {\n this.pendingDigits.set(pending);\n }\n }\n\n private snapToStep(segment: TimeSegment): void {\n const value = this.internalValue();\n if (!value) return;\n\n if (segment === 'minutes' && this.minuteStep() > 1) {\n const step = this.minuteStep();\n const snapped = Math.round(value.minutes / step) * step;\n const clamped = Math.min(snapped, 59);\n if (clamped !== value.minutes) {\n this.updateValue({ ...value, minutes: clamped });\n }\n }\n\n if (segment === 'seconds' && this.secondStep() > 1) {\n const step = this.secondStep();\n const snapped = Math.round(value.seconds / step) * step;\n const clamped = Math.min(snapped, 59);\n if (clamped !== value.seconds) {\n this.updateValue({ ...value, seconds: clamped });\n }\n }\n }\n\n private setSegmentToMin(segment: TimeSegment): void {\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n switch (segment) {\n case 'hours': {\n if (this.is12Hour()) {\n // Min display is 1; convert to 24h\n const isPM = this.period() === 'PM';\n const h24 = isPM ? 13 : 1;\n this.updateValue({ ...value, hours: h24 });\n } else {\n this.updateValue({ ...value, hours: 0 });\n }\n break;\n }\n case 'minutes':\n this.updateValue({ ...value, minutes: 0 });\n break;\n case 'seconds':\n this.updateValue({ ...value, seconds: 0 });\n break;\n }\n }\n\n private setSegmentToMax(segment: TimeSegment): void {\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n switch (segment) {\n case 'hours': {\n if (this.is12Hour()) {\n // Max display is 12; 12 in 12h = 0 in 24h (for AM) or 12 (for PM)\n const isPM = this.period() === 'PM';\n const h24 = isPM ? 12 : 0;\n this.updateValue({ ...value, hours: h24 });\n } else {\n this.updateValue({ ...value, hours: 23 });\n }\n break;\n }\n case 'minutes':\n this.updateValue({ ...value, minutes: 59 });\n break;\n case 'seconds':\n this.updateValue({ ...value, seconds: 59 });\n break;\n }\n }\n\n private focusNextSegment(current: TimeSegment | 'period'): void {\n switch (current) {\n case 'hours':\n this.minutesInputRef()?.nativeElement.focus();\n break;\n case 'minutes':\n if (this.showSeconds()) {\n this.secondsInputRef()?.nativeElement.focus();\n } else if (this.is12Hour()) {\n this.periodButtonRef()?.nativeElement.focus();\n }\n break;\n case 'seconds':\n if (this.is12Hour()) {\n this.periodButtonRef()?.nativeElement.focus();\n }\n break;\n }\n }\n\n private focusPrevSegment(current: TimeSegment | 'period'): void {\n switch (current) {\n case 'minutes':\n this.hoursInputRef()?.nativeElement.focus();\n break;\n case 'seconds':\n this.minutesInputRef()?.nativeElement.focus();\n break;\n case 'period':\n if (this.showSeconds()) {\n this.secondsInputRef()?.nativeElement.focus();\n } else {\n this.minutesInputRef()?.nativeElement.focus();\n }\n break;\n }\n }\n\n private updateValue(value: ComTimeValue | null): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.timeChange.emit(value);\n this.onValidatorChange();\n\n if (value) {\n const h = this.is12Hour()\n ? `${(value.hours % 12 || 12)}:${value.minutes.toString().padStart(2, '0')}${this.showSeconds() ? ':' + value.seconds.toString().padStart(2, '0') : ''} ${value.hours >= 12 ? 'PM' : 'AM'}`\n : `${value.hours.toString().padStart(2, '0')}:${value.minutes.toString().padStart(2, '0')}${this.showSeconds() ? ':' + value.seconds.toString().padStart(2, '0') : ''}`;\n this.liveAnnouncement.set(`Time set to ${h}`);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n DOCUMENT,\n} from '@angular/core';\nimport type {\n InputSignal,\n OnDestroy,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl, Validators } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { A11yModule } from '@angular/cdk/a11y';\n\nimport { ComCalendar } from '../calendar';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n CALENDAR_SELECTION_STRATEGY,\n SingleSelectionStrategy,\n} from '../selection';\nimport type { CalendarView, DateFilterFn, DateRange } from '../calendar.types';\nimport { joinClasses } from '../calendar.utils';\nimport { ComTimePicker } from '../timepicker/timepicker.component';\nimport { timepickerSectionVariants } from '../timepicker/timepicker.variants';\nimport type { ComTimeValue } from '../timepicker/timepicker.types';\nimport { createTimeValue } from '../timepicker/timepicker.types';\nimport {\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n} from './datepicker.variants';\nimport type {\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DateFormatPreset,\n DatepickerPanelWidth,\n} from './datepicker.types';\nimport { generateDatepickerId } from './datepicker.types';\n\n/** Default position for the datepicker panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n // Below trigger, aligned start\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned start\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n // Below trigger, aligned end\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned end\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/**\n * Single date picker component with calendar popup.\n * Implements ControlValueAccessor for Reactive Forms and Template-driven Forms.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-datepicker\n * formControlName=\"birthDate\"\n * placeholder=\"Select date...\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * [showTodayButton]=\"true\"\n * [showClearButton]=\"true\"\n * />\n * ```\n */\n@Component({\n selector: 'com-datepicker',\n exportAs: 'comDatepicker',\n template: `\n <!-- Trigger container -->\n <div\n #triggerElement\n [class]=\"triggerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-owns]=\"panelId()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <!-- Date input display -->\n <input\n #inputElement\n type=\"text\"\n [class]=\"inputClasses()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"!allowManualInput()\"\n [attr.id]=\"inputId()\"\n [attr.aria-label]=\"ariaLabel() || placeholder()\"\n [attr.aria-describedby]=\"ariaDescribedBy() || null\"\n [attr.aria-invalid]=\"state() === 'error' || null\"\n [attr.aria-required]=\"required() || null\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n <!-- Clear button -->\n @if (showClearButton() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n [class]=\"clearClasses()\"\n [attr.aria-label]=\"'Clear date'\"\n (click)=\"clear($event)\"\n >\n <com-icon name=\"x\" [size]=\"iconSize()\" />\n </button>\n }\n\n <!-- Calendar icon -->\n <button\n type=\"button\"\n [class]=\"iconClasses()\"\n [attr.aria-label]=\"isOpen() ? 'Close calendar' : 'Open calendar'\"\n [disabled]=\"disabled()\"\n tabindex=\"-1\"\n >\n <com-icon name=\"calendar\" [size]=\"iconSize()\" />\n </button>\n </div>\n\n <!-- Panel template (rendered in overlay) -->\n <ng-template #panelTemplate>\n <div\n [class]=\"panelClasses()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"'Choose date'\"\n (keydown)=\"onPanelKeydown($event)\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <com-calendar\n [activeDate]=\"calendarActiveDate()\"\n [selected]=\"internalValue()\"\n [minDate]=\"min()\"\n [maxDate]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n [startView]=\"startView()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [bordered]=\"false\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n />\n\n @if (showTimePicker()) {\n <div [class]=\"timeSectionClasses()\">\n <com-time-picker\n variant=\"embedded\"\n [size]=\"size()\"\n [value]=\"timeValue()\"\n [use12HourFormat]=\"use12HourFormat()\"\n [showSeconds]=\"showSeconds()\"\n [minuteStep]=\"minuteStep()\"\n [disabled]=\"disabled()\"\n (timeChange)=\"onTimeChange($event)\"\n />\n </div>\n }\n\n @if (showTodayButton() || showFooterClearButton() || showTimePicker()) {\n <div [class]=\"footerClasses()\">\n @if (showTodayButton()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"selectToday()\"\n >\n Today\n </button>\n }\n @if (showFooterClearButton()) {\n <button\n type=\"button\"\n [class]=\"clearButtonClasses()\"\n (click)=\"clear($event)\"\n >\n Clear\n </button>\n }\n @if (showTimePicker()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"close()\"\n >\n Done\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Live announcer region -->\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n OverlayModule,\n A11yModule,\n ComCalendar,\n ComIcon,\n ComTimePicker,\n ],\n providers: [\n SingleSelectionStrategy,\n { provide: CALENDAR_SELECTION_STRATEGY, useExisting: SingleSelectionStrategy },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-datepicker-host inline-block',\n '[class.com-datepicker-disabled]': 'disabled()',\n '[class.com-datepicker-open]': 'isOpen()',\n },\n})\nexport class ComDatepicker<D> implements ControlValueAccessor, Validator, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly document = inject(DOCUMENT);\n private readonly dateAdapter = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** Optional NgControl for form integration. */\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger element. */\n private readonly triggerRef: Signal<ElementRef<HTMLDivElement>> =\n viewChild.required<ElementRef<HTMLDivElement>>('triggerElement');\n\n /** Reference to the input element. */\n private readonly inputRef: Signal<ElementRef<HTMLInputElement>> =\n viewChild.required<ElementRef<HTMLInputElement>>('inputElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Overlay reference. */\n private overlayRef: OverlayRef | null = null;\n\n /** Unique ID for the datepicker. */\n private readonly datepickerId: string = generateDatepickerId();\n\n // ============ INPUTS ============\n\n /** Current value. */\n readonly value: InputSignal<D | null> = input<D | null>(null);\n\n /** Minimum selectable date. */\n readonly min: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date. */\n readonly max: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates. */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Date the calendar opens to (defaults to selected or today). */\n readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n /** Initial calendar view. */\n readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** First day of week override (0=Sun, 1=Mon, ..., 6=Sat). */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /** Placeholder text. */\n readonly placeholder: InputSignal<string> = input<string>('Select date...');\n\n /** Whether the datepicker is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether the datepicker is required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Display format for the date. */\n readonly dateFormat: InputSignal<DateFormatPreset> = input<DateFormatPreset>('medium');\n\n /** Show a clear button in the trigger. */\n readonly showClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a today button in the footer. */\n readonly showTodayButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a clear button in the footer. */\n readonly showFooterClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Don't auto-close on selection. */\n readonly keepOpen: InputSignal<boolean> = input<boolean>(false);\n\n /** Allow manual text input. */\n readonly allowManualInput: InputSignal<boolean> = input<boolean>(true);\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Panel width strategy. */\n readonly panelWidth: InputSignal<DatepickerPanelWidth> = input<DatepickerPanelWidth>('auto');\n\n /** CVA variant for trigger styling. */\n readonly variant: InputSignal<DatepickerVariant> = input<DatepickerVariant>('default');\n\n /** Size variant. */\n readonly size: InputSignal<DatepickerSize> = input<DatepickerSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<DatepickerState> = input<DatepickerState>('default');\n\n /** Additional CSS classes for the trigger. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Accessible label for the input. */\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** ID of element describing the input. */\n readonly ariaDescribedBy: InputSignal<string | null> = input<string | null>(null);\n\n /** Whether to show the time picker below the calendar. */\n readonly showTimePicker: InputSignal<boolean> = input<boolean>(false);\n\n /** 12h vs 24h format for the time picker. `null` = auto-detect. */\n readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Whether the time picker shows seconds. */\n readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n /** Step interval for minutes in the time picker. */\n readonly minuteStep: InputSignal<number> = input<number>(1);\n\n // ============ OUTPUTS ============\n\n /** Emitted when a date is selected. */\n readonly dateChange: OutputEmitterRef<D | null> = output<D | null>();\n\n /** Emitted when the panel opens. */\n readonly opened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when the panel closes. */\n readonly closed: OutputEmitterRef<void> = output<void>();\n\n // ============ INTERNAL STATE ============\n\n /** Whether the panel is open. */\n readonly isOpen: WritableSignal<boolean> = signal(false);\n\n /** Internal value state (managed by CVA or input). */\n readonly internalValue: WritableSignal<D | null> = linkedSignal<D | null>(\n () => this.value() ?? null\n );\n\n /** Calendar active date for navigation. */\n readonly calendarActiveDate: WritableSignal<D> = signal<D>(this.dateAdapter.today());\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n // ============ COMPUTED STATE ============\n\n /** Input element ID. */\n readonly inputId: Signal<string> = computed(() => `${this.datepickerId}-input`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.datepickerId}-panel`);\n\n /** Whether the datepicker has a value. */\n readonly hasValue: Signal<boolean> = computed(() => this.internalValue() !== null);\n\n /** Icon size based on datepicker size. */\n readonly iconSize: Signal<IconSize> = computed(() => {\n const sizeMap: Record<DatepickerSize, IconSize> = {\n sm: 'sm',\n default: 'md',\n lg: 'lg',\n };\n return sizeMap[this.size()];\n });\n\n /** Formatted display value. */\n readonly displayValue: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value) return '';\n return this.dateAdapter.format(value, this.effectiveDateFormat());\n });\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.state(),\n open: this.isOpen(),\n });\n\n const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';\n\n return joinClasses(baseClasses, disabledClasses, this.userClass());\n });\n\n /** Computed input classes. */\n readonly inputClasses: Signal<string> = computed(() => {\n return datepickerInputVariants({ size: this.size() });\n });\n\n /** Computed icon classes. */\n readonly iconClasses: Signal<string> = computed(() => {\n return datepickerIconVariants({ size: this.size() });\n });\n\n /** Computed clear button classes. */\n readonly clearClasses: Signal<string> = computed(() => {\n return datepickerClearVariants({ size: this.size() });\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerPanelVariants({ size: this.size() });\n return joinClasses(baseClasses, this.panelClass());\n });\n\n /** Computed footer classes. */\n readonly footerClasses: Signal<string> = computed(() => {\n return datepickerFooterVariants({ size: this.size() });\n });\n\n /** Computed today button classes. */\n readonly todayButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'primary' });\n });\n\n /** Computed clear button classes (footer). */\n readonly clearButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'secondary' });\n });\n\n /** Time section divider classes. */\n readonly timeSectionClasses: Signal<string> = computed(() => {\n return timepickerSectionVariants({ size: this.size() });\n });\n\n /** Time value derived from the current date value. */\n readonly timeValue: Signal<ComTimeValue | null> = computed(() => {\n const date = this.internalValue();\n if (!date) return null;\n return createTimeValue(\n this.dateAdapter.getHours(date),\n this.dateAdapter.getMinutes(date),\n this.dateAdapter.getSeconds(date),\n );\n });\n\n /** Effective display format — switches to dateTime when time picker is shown. */\n readonly effectiveDateFormat: Signal<DateFormatPreset> = computed(() => {\n if (this.showTimePicker()) {\n return this.showSeconds() ? 'dateTimeLong' : 'dateTimeMedium';\n }\n return this.dateFormat();\n });\n\n /** Whether the panel should stay open (keepOpen or time picker shown). */\n readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n return this.keepOpen() || this.showTimePicker();\n });\n\n // ============ CVA CALLBACKS ============\n\n private onChange: (value: D | null) => void = () => {};\n private onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n constructor() {\n // Wire up NgControl if present\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Sync calendar active date with internal value or startAt\n effect(() => {\n const value = this.internalValue();\n const startAt = this.startAt();\n\n if (value) {\n this.calendarActiveDate.set(value);\n } else if (startAt) {\n this.calendarActiveDate.set(startAt);\n } else {\n this.calendarActiveDate.set(this.dateAdapter.today());\n }\n }, {});\n }\n\n ngOnDestroy(): void {\n this.destroyOverlay();\n }\n\n // ============ CVA IMPLEMENTATION ============\n\n writeValue(value: D | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: D | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled state is handled via the disabled input\n }\n\n // ============ VALIDATOR IMPLEMENTATION ============\n\n validate(): ValidationErrors | null {\n const value = this.internalValue();\n\n // Required validation\n if (this.required() && !value) {\n return { required: true };\n }\n\n if (value) {\n // Min validation\n const min = this.min();\n if (min && this.dateAdapter.compareDate(value, min) < 0) {\n return { minDate: { min, actual: value } };\n }\n\n // Max validation\n const max = this.max();\n if (max && this.dateAdapter.compareDate(value, max) > 0) {\n return { maxDate: { max, actual: value } };\n }\n\n // Date filter validation\n const dateFilter = this.dateFilter();\n if (dateFilter && !dateFilter(value)) {\n return { dateFilter: true };\n }\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ============ PUBLIC METHODS ============\n\n /** Opens the datepicker panel. */\n open(): void {\n if (this.disabled() || this.isOpen()) {\n return;\n }\n\n this.createOverlay();\n this.isOpen.set(true);\n this.opened.emit();\n this.announce('Calendar opened');\n }\n\n /** Closes the datepicker panel. */\n close(): void {\n if (!this.isOpen()) {\n return;\n }\n\n this.destroyOverlay();\n this.isOpen.set(false);\n this.closed.emit();\n this.onTouched();\n\n // Return focus to trigger\n this.inputRef().nativeElement.focus();\n }\n\n /** Toggles the datepicker panel. */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Clears the selected date. */\n clear(event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this.updateValue(null);\n this.announce('Date cleared');\n }\n\n /** Selects today's date. */\n selectToday(): void {\n const today = this.dateAdapter.today();\n this.updateValue(today);\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n }\n\n // ============ EVENT HANDLERS ============\n\n protected onTriggerClick(): void {\n if (!this.disabled()) {\n this.toggle();\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n this.open();\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n // Commit manual input\n this.parseAndSetValue(this.inputRef().nativeElement.value);\n } else {\n this.open();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n case 'ArrowDown':\n if (!this.isOpen()) {\n event.preventDefault();\n this.open();\n }\n break;\n }\n }\n\n protected onInputChange(event: Event): void {\n if (!this.allowManualInput()) {\n return;\n }\n\n const input = event.target as HTMLInputElement;\n // Debounce or wait for blur/enter to actually parse\n // For now, we just allow typing without immediate parsing\n }\n\n protected onInputBlur(): void {\n if (this.allowManualInput()) {\n this.parseAndSetValue(this.inputRef().nativeElement.value);\n }\n this.onTouched();\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n\n protected onDateSelected(date: D): void {\n // Preserve time when selecting a new date if time picker is shown\n if (this.showTimePicker()) {\n const currentValue = this.internalValue();\n if (currentValue) {\n const withTime = this.dateAdapter.setTime(\n date,\n this.dateAdapter.getHours(currentValue),\n this.dateAdapter.getMinutes(currentValue),\n this.dateAdapter.getSeconds(currentValue),\n );\n this.updateValue(withTime);\n } else {\n this.updateValue(date);\n }\n } else {\n this.updateValue(date);\n }\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n\n this.announce(`Selected ${this.dateAdapter.format(date, 'long')}`);\n }\n\n protected onTimeChange(time: ComTimeValue | null): void {\n if (!time) return;\n const current = this.internalValue() ?? this.dateAdapter.today();\n const updated = this.dateAdapter.setTime(current, time.hours, time.minutes, time.seconds);\n this.updateValue(updated);\n }\n\n protected onActiveDateChange(date: D): void {\n this.calendarActiveDate.set(date);\n }\n\n // ============ PRIVATE METHODS ============\n\n private createOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(hostEl)\n .withPositions(DEFAULT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private updateValue(value: D | null): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.dateChange.emit(value);\n this.onValidatorChange();\n }\n\n private parseAndSetValue(inputValue: string): void {\n if (!inputValue.trim()) {\n // Empty input - clear if allowed\n if (this.hasValue()) {\n this.updateValue(null);\n }\n return;\n }\n\n const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n if (parsed && this.dateAdapter.isValid(parsed)) {\n // Validate against min/max/filter\n if (this.isDateValid(parsed)) {\n this.updateValue(parsed);\n } else {\n // Invalid date - revert to current value\n this.inputRef().nativeElement.value = this.displayValue();\n }\n } else {\n // Parse failed - revert to current value\n this.inputRef().nativeElement.value = this.displayValue();\n }\n }\n\n private isDateValid(date: D): boolean {\n const min = this.min();\n const max = this.max();\n const filter = this.dateFilter();\n\n if (min && this.dateAdapter.compareDate(date, min) < 0) {\n return false;\n }\n if (max && this.dateAdapter.compareDate(date, max) > 0) {\n return false;\n }\n if (filter && !filter(date)) {\n return false;\n }\n return true;\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set(message);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n DOCUMENT,\n} from '@angular/core';\nimport type {\n InputSignal,\n OnDestroy,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { A11yModule } from '@angular/cdk/a11y';\n\nimport { ComCalendar } from '../calendar';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n CALENDAR_SELECTION_STRATEGY,\n RangeSelectionStrategy,\n} from '../selection';\nimport type { CalendarView, DateFilterFn, DateRange } from '../calendar.types';\nimport { joinClasses } from '../calendar.utils';\nimport { ComTimePicker } from '../timepicker/timepicker.component';\nimport {\n timepickerSectionVariants,\n timepickerLabelVariants,\n} from '../timepicker/timepicker.variants';\nimport type { ComTimeValue } from '../timepicker/timepicker.types';\nimport { createTimeValue } from '../timepicker/timepicker.types';\nimport {\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n datepickerRangeSeparatorVariants,\n} from './datepicker.variants';\nimport type {\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DateFormatPreset,\n DatepickerPanelWidth,\n DateRangeValue,\n} from './datepicker.types';\nimport { generateDatepickerId, createDateRangeValue } from './datepicker.types';\n\n/** Default position for the datepicker panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n // Below trigger, aligned start\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned start\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n // Below trigger, aligned end\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned end\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/**\n * Date range picker component with calendar popup.\n * Allows selecting a start and end date via a two-click interaction.\n * Implements ControlValueAccessor for Reactive Forms and Template-driven Forms.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-date-range-picker\n * formControlName=\"dateRange\"\n * startPlaceholder=\"Start date\"\n * endPlaceholder=\"End date\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * [showTodayButton]=\"true\"\n * />\n * ```\n */\n@Component({\n selector: 'com-date-range-picker',\n exportAs: 'comDateRangePicker',\n template: `\n <!-- Trigger container -->\n <div\n #triggerElement\n [class]=\"triggerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-owns]=\"panelId()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <!-- Start date input -->\n <input\n #startInputElement\n type=\"text\"\n [class]=\"inputClasses()\"\n [value]=\"startDisplayValue()\"\n [placeholder]=\"startPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"!allowManualInput()\"\n [attr.id]=\"startInputId()\"\n [attr.aria-label]=\"startAriaLabel() || startPlaceholder()\"\n [attr.aria-invalid]=\"state() === 'error' || null\"\n [attr.aria-required]=\"required() || null\"\n (focus)=\"onStartInputFocus()\"\n (input)=\"onStartInputChange($event)\"\n (blur)=\"onStartInputBlur()\"\n (keydown)=\"onInputKeydown($event, 'start')\"\n />\n\n <!-- Range separator -->\n <span [class]=\"separatorClasses()\">\n <com-icon name=\"arrow-right\" [size]=\"iconSize()\" />\n </span>\n\n <!-- End date input -->\n <input\n #endInputElement\n type=\"text\"\n [class]=\"inputClasses()\"\n [value]=\"endDisplayValue()\"\n [placeholder]=\"endPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"!allowManualInput()\"\n [attr.id]=\"endInputId()\"\n [attr.aria-label]=\"endAriaLabel() || endPlaceholder()\"\n [attr.aria-invalid]=\"state() === 'error' || null\"\n (focus)=\"onEndInputFocus()\"\n (input)=\"onEndInputChange($event)\"\n (blur)=\"onEndInputBlur()\"\n (keydown)=\"onInputKeydown($event, 'end')\"\n />\n\n <!-- Clear button -->\n @if (showClearButton() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n [class]=\"clearClasses()\"\n [attr.aria-label]=\"'Clear date range'\"\n (click)=\"clear($event)\"\n >\n <com-icon name=\"x\" [size]=\"iconSize()\" />\n </button>\n }\n\n <!-- Calendar icon -->\n <button\n type=\"button\"\n [class]=\"iconClasses()\"\n [attr.aria-label]=\"isOpen() ? 'Close calendar' : 'Open calendar'\"\n [disabled]=\"disabled()\"\n tabindex=\"-1\"\n >\n <com-icon name=\"calendar\" [size]=\"iconSize()\" />\n </button>\n </div>\n\n <!-- Panel template (rendered in overlay) -->\n <ng-template #panelTemplate>\n <div\n [class]=\"panelClasses()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"'Choose date range'\"\n (keydown)=\"onPanelKeydown($event)\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <com-calendar\n [activeDate]=\"calendarActiveDate()\"\n [selected]=\"calendarSelection()\"\n [minDate]=\"min()\"\n [maxDate]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n [startView]=\"startView()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [monthColumns]=\"2\"\n [bordered]=\"false\"\n (selectedChange)=\"onCalendarSelectionChange($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n />\n\n @if (showTimePicker()) {\n <div [class]=\"timeSectionClasses()\">\n <div class=\"flex items-center gap-3\">\n <div class=\"flex flex-col gap-1\">\n <span [class]=\"timeLabelClasses()\">Start time</span>\n <com-time-picker\n variant=\"embedded\"\n [size]=\"size()\"\n [value]=\"startTimeValue()\"\n [use12HourFormat]=\"use12HourFormat()\"\n [showSeconds]=\"showSeconds()\"\n [minuteStep]=\"minuteStep()\"\n [disabled]=\"disabled()\"\n ariaLabel=\"Start time\"\n (timeChange)=\"onStartTimeChange($event)\"\n />\n </div>\n <span class=\"text-muted-foreground mt-5\">\n <com-icon name=\"arrow-right\" [size]=\"iconSize()\" />\n </span>\n <div class=\"flex flex-col gap-1\">\n <span [class]=\"timeLabelClasses()\">End time</span>\n <com-time-picker\n variant=\"embedded\"\n [size]=\"size()\"\n [value]=\"endTimeValue()\"\n [use12HourFormat]=\"use12HourFormat()\"\n [showSeconds]=\"showSeconds()\"\n [minuteStep]=\"minuteStep()\"\n [disabled]=\"disabled()\"\n ariaLabel=\"End time\"\n (timeChange)=\"onEndTimeChange($event)\"\n />\n </div>\n </div>\n </div>\n }\n\n @if (showTodayButton() || showFooterClearButton() || showTimePicker()) {\n <div [class]=\"footerClasses()\">\n @if (showTodayButton()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"selectToday()\"\n >\n Today\n </button>\n }\n @if (showFooterClearButton()) {\n <button\n type=\"button\"\n [class]=\"clearButtonClasses()\"\n (click)=\"clear($event)\"\n >\n Clear\n </button>\n }\n @if (showTimePicker()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"close()\"\n >\n Done\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Live announcer region -->\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n OverlayModule,\n A11yModule,\n ComCalendar,\n ComIcon,\n ComTimePicker,\n ],\n providers: [\n RangeSelectionStrategy,\n { provide: CALENDAR_SELECTION_STRATEGY, useExisting: RangeSelectionStrategy },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-date-range-picker-host inline-block',\n '[class.com-date-range-picker-disabled]': 'disabled()',\n '[class.com-date-range-picker-open]': 'isOpen()',\n },\n})\nexport class ComDateRangePicker<D> implements ControlValueAccessor, Validator, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly document = inject(DOCUMENT);\n private readonly dateAdapter = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** Optional NgControl for form integration. */\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger element. */\n private readonly triggerRef: Signal<ElementRef<HTMLDivElement>> =\n viewChild.required<ElementRef<HTMLDivElement>>('triggerElement');\n\n /** Reference to the start input element. */\n private readonly startInputRef: Signal<ElementRef<HTMLInputElement>> =\n viewChild.required<ElementRef<HTMLInputElement>>('startInputElement');\n\n /** Reference to the end input element. */\n private readonly endInputRef: Signal<ElementRef<HTMLInputElement>> =\n viewChild.required<ElementRef<HTMLInputElement>>('endInputElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Overlay reference. */\n private overlayRef: OverlayRef | null = null;\n\n /** Unique ID for the datepicker. */\n private readonly datepickerId: string = generateDatepickerId();\n\n // ============ INPUTS ============\n\n /** Current value. */\n readonly value: InputSignal<DateRangeValue<D> | null> = input<DateRangeValue<D> | null>(null);\n\n /** Minimum selectable date. */\n readonly min: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date. */\n readonly max: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates. */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Date the calendar opens to (defaults to start date or today). */\n readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n /** Initial calendar view. */\n readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** First day of week override (0=Sun, 1=Mon, ..., 6=Sat). */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /** Placeholder text for start date. */\n readonly startPlaceholder: InputSignal<string> = input<string>('Start date');\n\n /** Placeholder text for end date. */\n readonly endPlaceholder: InputSignal<string> = input<string>('End date');\n\n /** Whether the datepicker is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether the datepicker is required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Display format for the date. */\n readonly dateFormat: InputSignal<DateFormatPreset> = input<DateFormatPreset>('medium');\n\n /** Show a clear button in the trigger. */\n readonly showClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a today button in the footer. */\n readonly showTodayButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a clear button in the footer. */\n readonly showFooterClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Don't auto-close on complete range selection. */\n readonly keepOpen: InputSignal<boolean> = input<boolean>(false);\n\n /** Allow manual text input. */\n readonly allowManualInput: InputSignal<boolean> = input<boolean>(true);\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Panel width strategy. */\n readonly panelWidth: InputSignal<DatepickerPanelWidth> = input<DatepickerPanelWidth>('auto');\n\n /** CVA variant for trigger styling. */\n readonly variant: InputSignal<DatepickerVariant> = input<DatepickerVariant>('default');\n\n /** Size variant. */\n readonly size: InputSignal<DatepickerSize> = input<DatepickerSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<DatepickerState> = input<DatepickerState>('default');\n\n /** Additional CSS classes for the trigger. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Accessible label for the start input. */\n readonly startAriaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Accessible label for the end input. */\n readonly endAriaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Whether to show time pickers below the calendar. */\n readonly showTimePicker: InputSignal<boolean> = input<boolean>(false);\n\n /** 12h vs 24h format for the time pickers. `null` = auto-detect. */\n readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Whether the time pickers show seconds. */\n readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n /** Step interval for minutes in the time pickers. */\n readonly minuteStep: InputSignal<number> = input<number>(1);\n\n // ============ OUTPUTS ============\n\n /** Emitted when a complete range is selected. */\n readonly rangeChange: OutputEmitterRef<DateRangeValue<D> | null> = output<DateRangeValue<D> | null>();\n\n /** Emitted when the panel opens. */\n readonly opened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when the panel closes. */\n readonly closed: OutputEmitterRef<void> = output<void>();\n\n // ============ INTERNAL STATE ============\n\n /** Whether the panel is open. */\n readonly isOpen: WritableSignal<boolean> = signal(false);\n\n /** Which input is currently focused. */\n readonly activeInput: WritableSignal<'start' | 'end' | null> = signal(null);\n\n /** Internal value state (managed by CVA or input). */\n readonly internalValue: WritableSignal<DateRangeValue<D> | null> = linkedSignal<DateRangeValue<D> | null>(\n () => this.value() ?? null\n );\n\n /** Calendar active date for navigation. */\n readonly calendarActiveDate: WritableSignal<D> = signal<D>(this.dateAdapter.today());\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n // ============ COMPUTED STATE ============\n\n /** Start input element ID. */\n readonly startInputId: Signal<string> = computed(() => `${this.datepickerId}-start`);\n\n /** End input element ID. */\n readonly endInputId: Signal<string> = computed(() => `${this.datepickerId}-end`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.datepickerId}-panel`);\n\n /** Whether the datepicker has a value. */\n readonly hasValue: Signal<boolean> = computed(() => {\n const value = this.internalValue();\n return value !== null && (value.start !== null || value.end !== null);\n });\n\n /** Icon size based on datepicker size. */\n readonly iconSize: Signal<IconSize> = computed(() => {\n const sizeMap: Record<DatepickerSize, IconSize> = {\n sm: 'sm',\n default: 'md',\n lg: 'lg',\n };\n return sizeMap[this.size()];\n });\n\n /** Calendar selection (converts DateRangeValue to DateRange for calendar). */\n readonly calendarSelection: Signal<DateRange<D> | null> = computed(() => {\n const value = this.internalValue();\n if (!value) return null;\n return { start: value.start, end: value.end };\n });\n\n /** Formatted start display value. */\n readonly startDisplayValue: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value?.start) return '';\n return this.dateAdapter.format(value.start, this.effectiveDateFormat());\n });\n\n /** Formatted end display value. */\n readonly endDisplayValue: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value?.end) return '';\n return this.dateAdapter.format(value.end, this.effectiveDateFormat());\n });\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.state(),\n open: this.isOpen(),\n });\n\n const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';\n\n return joinClasses(baseClasses, disabledClasses, this.userClass());\n });\n\n /** Computed input classes. */\n readonly inputClasses: Signal<string> = computed(() => {\n return datepickerInputVariants({ size: this.size() });\n });\n\n /** Computed separator classes. */\n readonly separatorClasses: Signal<string> = computed(() => {\n return datepickerRangeSeparatorVariants({ size: this.size() });\n });\n\n /** Computed icon classes. */\n readonly iconClasses: Signal<string> = computed(() => {\n return datepickerIconVariants({ size: this.size() });\n });\n\n /** Computed clear button classes. */\n readonly clearClasses: Signal<string> = computed(() => {\n return datepickerClearVariants({ size: this.size() });\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerPanelVariants({ size: this.size() });\n return joinClasses(baseClasses, this.panelClass());\n });\n\n /** Computed footer classes. */\n readonly footerClasses: Signal<string> = computed(() => {\n return datepickerFooterVariants({ size: this.size() });\n });\n\n /** Computed today button classes. */\n readonly todayButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'primary' });\n });\n\n /** Computed clear button classes (footer). */\n readonly clearButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'secondary' });\n });\n\n /** Time section divider classes. */\n readonly timeSectionClasses: Signal<string> = computed(() => {\n return timepickerSectionVariants({ size: this.size() });\n });\n\n /** Time label classes. */\n readonly timeLabelClasses: Signal<string> = computed(() => {\n return timepickerLabelVariants({ size: this.size() });\n });\n\n /** Start time value derived from the start date. */\n readonly startTimeValue: Signal<ComTimeValue | null> = computed(() => {\n const value = this.internalValue();\n if (!value?.start) return null;\n return createTimeValue(\n this.dateAdapter.getHours(value.start),\n this.dateAdapter.getMinutes(value.start),\n this.dateAdapter.getSeconds(value.start),\n );\n });\n\n /** End time value derived from the end date. */\n readonly endTimeValue: Signal<ComTimeValue | null> = computed(() => {\n const value = this.internalValue();\n if (!value?.end) return null;\n return createTimeValue(\n this.dateAdapter.getHours(value.end),\n this.dateAdapter.getMinutes(value.end),\n this.dateAdapter.getSeconds(value.end),\n );\n });\n\n /** Effective display format — switches to dateTime when time picker is shown. */\n readonly effectiveDateFormat: Signal<DateFormatPreset> = computed(() => {\n if (this.showTimePicker()) {\n return this.showSeconds() ? 'dateTimeLong' : 'dateTimeMedium';\n }\n return this.dateFormat();\n });\n\n /** Whether the panel should stay open (keepOpen or time picker shown). */\n readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n return this.keepOpen() || this.showTimePicker();\n });\n\n // ============ CVA CALLBACKS ============\n\n private onChange: (value: DateRangeValue<D> | null) => void = () => {};\n private onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n constructor() {\n // Wire up NgControl if present\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Sync calendar active date with internal value or startAt\n effect(() => {\n const value = this.internalValue();\n const startAt = this.startAt();\n\n if (value?.start) {\n this.calendarActiveDate.set(value.start);\n } else if (startAt) {\n this.calendarActiveDate.set(startAt);\n } else {\n this.calendarActiveDate.set(this.dateAdapter.today());\n }\n }, {});\n }\n\n ngOnDestroy(): void {\n this.destroyOverlay();\n }\n\n // ============ CVA IMPLEMENTATION ============\n\n writeValue(value: DateRangeValue<D> | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: DateRangeValue<D> | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled state is handled via the disabled input\n }\n\n // ============ VALIDATOR IMPLEMENTATION ============\n\n validate(): ValidationErrors | null {\n const value = this.internalValue();\n\n // Required validation\n if (this.required() && (!value || (!value.start && !value.end))) {\n return { required: true };\n }\n\n if (value) {\n const { start, end } = value;\n const min = this.min();\n const max = this.max();\n const dateFilter = this.dateFilter();\n\n // Min validation for start\n if (start && min && this.dateAdapter.compareDate(start, min) < 0) {\n return { minDate: { min, actual: start } };\n }\n\n // Max validation for end\n if (end && max && this.dateAdapter.compareDate(end, max) > 0) {\n return { maxDate: { max, actual: end } };\n }\n\n // Date filter validation\n if (start && dateFilter && !dateFilter(start)) {\n return { dateFilter: { date: start } };\n }\n if (end && dateFilter && !dateFilter(end)) {\n return { dateFilter: { date: end } };\n }\n\n // Range validation (start must be before or equal to end)\n if (start && end && this.dateAdapter.compareDate(start, end) > 0) {\n return { rangeInvalid: { start, end } };\n }\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ============ PUBLIC METHODS ============\n\n /** Opens the datepicker panel. */\n open(): void {\n if (this.disabled() || this.isOpen()) {\n return;\n }\n\n this.createOverlay();\n this.isOpen.set(true);\n this.opened.emit();\n this.announce('Calendar opened. Select a start date.');\n }\n\n /** Closes the datepicker panel. */\n close(): void {\n if (!this.isOpen()) {\n return;\n }\n\n this.destroyOverlay();\n this.isOpen.set(false);\n this.closed.emit();\n this.onTouched();\n\n // Return focus to appropriate input\n const activeInput = this.activeInput();\n if (activeInput === 'end') {\n this.endInputRef().nativeElement.focus();\n } else {\n this.startInputRef().nativeElement.focus();\n }\n }\n\n /** Toggles the datepicker panel. */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Clears the selected date range. */\n clear(event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this.updateValue(null);\n this.announce('Date range cleared');\n }\n\n /** Selects today's date as the start date. */\n selectToday(): void {\n const today = this.dateAdapter.today();\n const currentValue = this.internalValue();\n\n // Set today as start if no start, or as end if we have a start\n if (!currentValue?.start) {\n this.updateValue(createDateRangeValue(today, null));\n this.announce('Start date set to today');\n } else if (!currentValue.end) {\n // Ensure proper ordering\n const newRange = this.dateAdapter.compareDate(today, currentValue.start) < 0\n ? createDateRangeValue(today, currentValue.start)\n : createDateRangeValue(currentValue.start, today);\n this.updateValue(newRange);\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n }\n }\n\n // ============ EVENT HANDLERS ============\n\n protected onTriggerClick(): void {\n if (!this.disabled() && !this.isOpen()) {\n this.open();\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected onStartInputFocus(): void {\n this.activeInput.set('start');\n }\n\n protected onEndInputFocus(): void {\n this.activeInput.set('end');\n }\n\n protected onInputKeydown(event: KeyboardEvent, inputType: 'start' | 'end'): void {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n // Commit manual input\n if (inputType === 'start') {\n this.parseAndSetStart(this.startInputRef().nativeElement.value);\n } else {\n this.parseAndSetEnd(this.endInputRef().nativeElement.value);\n }\n } else {\n this.open();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n case 'ArrowDown':\n if (!this.isOpen()) {\n event.preventDefault();\n this.open();\n }\n break;\n case 'Tab':\n // Allow natural tab navigation between inputs\n break;\n }\n }\n\n protected onStartInputChange(_event: Event): void {\n // Debounced in blur handler\n }\n\n protected onEndInputChange(_event: Event): void {\n // Debounced in blur handler\n }\n\n protected onStartInputBlur(): void {\n if (this.allowManualInput()) {\n this.parseAndSetStart(this.startInputRef().nativeElement.value);\n }\n this.onTouched();\n }\n\n protected onEndInputBlur(): void {\n if (this.allowManualInput()) {\n this.parseAndSetEnd(this.endInputRef().nativeElement.value);\n }\n this.onTouched();\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n\n protected onCalendarSelectionChange(selection: unknown): void {\n // The calendar emits the selection from the strategy\n const range = selection as DateRange<D>;\n\n if (range) {\n const newValue = createDateRangeValue(range.start, range.end);\n this.updateValue(newValue);\n\n if (range.start && range.end) {\n // Complete range selected\n this.announce(`Range selected: ${this.formatDate(range.start)} to ${this.formatDate(range.end)}`);\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n } else if (range.start) {\n this.announce(`Start date selected: ${this.formatDate(range.start)}. Now select end date.`);\n }\n }\n }\n\n protected onActiveDateChange(date: D): void {\n this.calendarActiveDate.set(date);\n }\n\n protected onStartTimeChange(time: ComTimeValue | null): void {\n if (!time) return;\n const value = this.internalValue();\n const startDate = value?.start ?? this.dateAdapter.today();\n const updated = this.dateAdapter.setTime(startDate, time.hours, time.minutes, time.seconds);\n this.updateValue(createDateRangeValue(updated, value?.end ?? null));\n }\n\n protected onEndTimeChange(time: ComTimeValue | null): void {\n if (!time) return;\n const value = this.internalValue();\n const endDate = value?.end ?? this.dateAdapter.today();\n const updated = this.dateAdapter.setTime(endDate, time.hours, time.minutes, time.seconds);\n this.updateValue(createDateRangeValue(value?.start ?? null, updated));\n }\n\n // ============ PRIVATE METHODS ============\n\n private createOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(hostEl)\n .withPositions(DEFAULT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private updateValue(value: DateRangeValue<D> | null): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.rangeChange.emit(value);\n this.onValidatorChange();\n }\n\n private parseAndSetStart(inputValue: string): void {\n const currentValue = this.internalValue();\n\n if (!inputValue.trim()) {\n // Clear start date\n if (currentValue?.start) {\n this.updateValue(createDateRangeValue(null, currentValue.end));\n }\n return;\n }\n\n const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n if (parsed && this.dateAdapter.isValid(parsed) && this.isDateValid(parsed)) {\n // Ensure start <= end\n if (currentValue?.end && this.dateAdapter.compareDate(parsed, currentValue.end) > 0) {\n // Swap dates\n this.updateValue(createDateRangeValue(currentValue.end, parsed));\n } else {\n this.updateValue(createDateRangeValue(parsed, currentValue?.end ?? null));\n }\n } else {\n // Revert to current value\n this.startInputRef().nativeElement.value = this.startDisplayValue();\n }\n }\n\n private parseAndSetEnd(inputValue: string): void {\n const currentValue = this.internalValue();\n\n if (!inputValue.trim()) {\n // Clear end date\n if (currentValue?.end) {\n this.updateValue(createDateRangeValue(currentValue.start, null));\n }\n return;\n }\n\n const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n if (parsed && this.dateAdapter.isValid(parsed) && this.isDateValid(parsed)) {\n // Ensure start <= end\n if (currentValue?.start && this.dateAdapter.compareDate(parsed, currentValue.start) < 0) {\n // Swap dates\n this.updateValue(createDateRangeValue(parsed, currentValue.start));\n } else {\n this.updateValue(createDateRangeValue(currentValue?.start ?? null, parsed));\n }\n } else {\n // Revert to current value\n this.endInputRef().nativeElement.value = this.endDisplayValue();\n }\n }\n\n private isDateValid(date: D): boolean {\n const min = this.min();\n const max = this.max();\n const filter = this.dateFilter();\n\n if (min && this.dateAdapter.compareDate(date, min) < 0) {\n return false;\n }\n if (max && this.dateAdapter.compareDate(date, max) > 0) {\n return false;\n }\n if (filter && !filter(date)) {\n return false;\n }\n return true;\n }\n\n private formatDate(date: D): string {\n return this.dateAdapter.format(date, 'long');\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set(message);\n }\n}\n","/**\n * Datepicker components public API.\n */\n\n// Types\nexport type {\n DateFormatPreset,\n DatepickerPanelWidth,\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DatepickerFooterConfig,\n DateRangeValue,\n} from './datepicker.types';\n\nexport {\n createDateRangeValue,\n generateDatepickerId,\n} from './datepicker.types';\n\n// Variants\nexport {\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n datepickerRangeSeparatorVariants,\n} from './datepicker.variants';\n\nexport type {\n DatepickerTriggerVariants,\n DatepickerDisabledVariants,\n DatepickerInputVariants,\n DatepickerIconVariants,\n DatepickerClearVariants,\n DatepickerPanelVariants,\n DatepickerFooterVariants,\n DatepickerFooterButtonVariants,\n DatepickerRangeSeparatorVariants,\n} from './datepicker.variants';\n\n// Components\nexport { ComDatepicker } from './datepicker.component';\nexport { ComDateRangePicker } from './date-range-picker.component';\n","/**\n * TimePicker component public API.\n */\n\n// Types\nexport type {\n ComTimeValue,\n TimePickerSize,\n TimePickerVariant,\n TimePickerState,\n TimePeriod,\n TimeSegment,\n} from './timepicker.types';\n\nexport {\n createTimeValue,\n compareTime,\n generateTimePickerId,\n} from './timepicker.types';\n\n// Variants\nexport {\n timepickerContainerVariants,\n timepickerDisabledVariants,\n timepickerSegmentVariants,\n timepickerSeparatorVariants,\n timepickerPeriodVariants,\n timepickerSectionVariants,\n timepickerLabelVariants,\n} from './timepicker.variants';\n\nexport type {\n TimepickerContainerVariants,\n TimepickerDisabledVariants,\n TimepickerSegmentVariants,\n TimepickerSeparatorVariants,\n TimepickerPeriodVariants,\n TimepickerSectionVariants,\n TimepickerLabelVariants,\n} from './timepicker.variants';\n\n// Component\nexport { ComTimePicker } from './timepicker.component';\n","/**\n * ngx-com/components/calendar\n * Calendar component public API\n */\n\n// Types\nexport type {\n DateRange,\n CalendarView,\n CalendarCellState,\n CalendarCell,\n CalendarCellConfig,\n NameStyle,\n DateFilterFn,\n DateClassFn,\n} from './calendar.types';\n\nexport {\n createDateRange,\n createCalendarCell,\n DAYS_PER_WEEK,\n WEEKS_PER_MONTH,\n YEARS_PER_PAGE,\n YEARS_PER_ROW,\n MONTHS_PER_ROW,\n} from './calendar.types';\n\n// Date Adapter\nexport { DateAdapter, DATE_ADAPTER, NativeDateAdapter } from './date-adapter';\n\n// Variants\nexport { calendarCellVariants, calendarCellWrapperVariants } from './calendar-cell.variants';\nexport type { CalendarCellVariants, CalendarCellWrapperVariants } from './calendar-cell.variants';\n\nexport { calendarHeaderVariants, calendarHeaderButtonVariants } from './calendar-header.variants';\nexport type { CalendarHeaderVariants, CalendarHeaderButtonVariants } from './calendar-header.variants';\n\nexport { calendarVariants } from './calendar.variants';\nexport type { CalendarVariants } from './calendar.variants';\n\n// Utilities\nexport {\n createGrid,\n navigateGrid,\n getWeekdayHeaders,\n isDateDisabled,\n isMonthDisabled,\n isYearDisabled,\n getMultiYearStartingYear,\n} from './calendar.utils';\nexport type { WeekdayHeader } from './calendar.utils';\n\n// Components\nexport { ComCalendarCell } from './calendar-cell';\nexport type { CalendarCellKeyNavEvent } from './calendar-cell';\n\n// Header Component\nexport { ComCalendarHeader } from './calendar-header';\n\n// Calendar Orchestrator\nexport { ComCalendar } from './calendar';\n\n// View Components\nexport {\n CalendarViewBase,\n ComCalendarMonthView,\n ComCalendarYearView,\n ComCalendarMultiYearView,\n} from './views';\n\n// Selection Strategies\nexport {\n CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n SingleSelectionStrategy,\n RangeSelectionStrategy,\n MultiSelectionStrategy,\n WeekSelectionStrategy,\n} from './selection';\nexport type { SelectionResult } from './selection';\n\n// Provider Functions\nexport {\n provideNativeDateAdapter,\n provideSingleSelectionStrategy,\n provideRangeSelectionStrategy,\n provideMultiSelectionStrategy,\n provideWeekSelectionStrategy,\n} from './providers';\n\n// Datepicker Components\nexport {\n ComDatepicker,\n ComDateRangePicker,\n createDateRangeValue,\n generateDatepickerId,\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n datepickerRangeSeparatorVariants,\n} from './datepicker';\n\nexport type {\n DateFormatPreset,\n DatepickerPanelWidth,\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DatepickerFooterConfig,\n DateRangeValue,\n DatepickerTriggerVariants,\n DatepickerDisabledVariants,\n DatepickerInputVariants,\n DatepickerIconVariants,\n DatepickerClearVariants,\n DatepickerPanelVariants,\n DatepickerFooterVariants,\n DatepickerFooterButtonVariants,\n DatepickerRangeSeparatorVariants,\n} from './datepicker';\n\n// Timepicker\nexport {\n ComTimePicker,\n createTimeValue,\n compareTime,\n generateTimePickerId,\n timepickerContainerVariants,\n timepickerDisabledVariants,\n timepickerSegmentVariants,\n timepickerSeparatorVariants,\n timepickerPeriodVariants,\n timepickerSectionVariants,\n timepickerLabelVariants,\n} from './timepicker';\n\nexport type {\n ComTimeValue,\n TimePickerSize,\n TimePickerVariant,\n TimePickerState,\n TimePeriod,\n TimeSegment,\n TimepickerContainerVariants,\n TimepickerDisabledVariants,\n TimepickerSegmentVariants,\n TimepickerSeparatorVariants,\n TimepickerPeriodVariants,\n TimepickerSectionVariants,\n TimepickerLabelVariants,\n} from './timepicker';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DEFAULT_POSITIONS"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-com-components-calendar.mjs","sources":["../../../projects/com/components/calendar/calendar.types.ts","../../../projects/com/components/calendar/date-adapter/date-adapter.ts","../../../projects/com/components/calendar/date-adapter/native-date-adapter.ts","../../../projects/com/components/calendar/calendar-cell.variants.ts","../../../projects/com/components/calendar/calendar-header.variants.ts","../../../projects/com/components/calendar/calendar.variants.ts","../../../projects/com/components/calendar/calendar.utils.ts","../../../projects/com/components/calendar/calendar-cell.ts","../../../projects/com/components/calendar/calendar-header.ts","../../../projects/com/components/calendar/views/calendar-view-base.ts","../../../projects/com/components/calendar/views/month-view.ts","../../../projects/com/components/calendar/views/year-view.ts","../../../projects/com/components/calendar/views/multi-year-view.ts","../../../projects/com/components/calendar/views/index.ts","../../../projects/com/components/calendar/selection/selection-strategy.ts","../../../projects/com/components/calendar/selection/single-selection-strategy.ts","../../../projects/com/components/calendar/selection/range-selection-strategy.ts","../../../projects/com/components/calendar/selection/multi-selection-strategy.ts","../../../projects/com/components/calendar/selection/week-selection-strategy.ts","../../../projects/com/components/calendar/selection/index.ts","../../../projects/com/components/calendar/calendar.ts","../../../projects/com/components/calendar/providers.ts","../../../projects/com/components/calendar/datepicker/datepicker.types.ts","../../../projects/com/components/calendar/datepicker/datepicker.variants.ts","../../../projects/com/components/calendar/timepicker/timepicker.variants.ts","../../../projects/com/components/calendar/timepicker/timepicker.types.ts","../../../projects/com/components/calendar/timepicker/timepicker.component.ts","../../../projects/com/components/calendar/datepicker/datepicker.component.ts","../../../projects/com/components/calendar/datepicker/date-range-picker.component.ts","../../../projects/com/components/calendar/datepicker/index.ts","../../../projects/com/components/calendar/timepicker/index.ts","../../../projects/com/components/calendar/index.ts","../../../projects/com/components/calendar/ngx-com-components-calendar.ts"],"sourcesContent":["/**\n * Calendar shared types and interfaces\n */\n\n/** Represents a date range with a start and end date */\nexport interface DateRange<D> {\n /** Start of the date range */\n start: D | null;\n /** End of the date range */\n end: D | null;\n}\n\n/** Factory function to create a DateRange */\nexport function createDateRange<D>(start: D | null, end: D | null): DateRange<D> {\n return { start, end };\n}\n\n/** Available calendar views */\nexport type CalendarView = 'month' | 'year' | 'multi-year';\n\n/** Cell states for styling */\nexport type CalendarCellState =\n | 'default'\n | 'today'\n | 'selected'\n | 'range-start'\n | 'range-middle'\n | 'range-end'\n | 'disabled'\n | 'preview-start'\n | 'preview-middle'\n | 'preview-end';\n\n/** Data structure representing a calendar cell */\nexport interface CalendarCell<D> {\n /** The date value this cell represents */\n value: D;\n /** Display text for the cell */\n displayValue: string;\n /** Accessible label for screen readers */\n ariaLabel: string;\n /** Whether this cell is enabled/selectable */\n enabled: boolean;\n /** CSS classes to apply (from dateClass input) */\n cssClasses: string;\n /** Whether this cell represents today */\n isToday: boolean;\n /** Whether this cell is currently selected */\n isSelected: boolean;\n /** Whether this cell is the start of a range */\n isRangeStart: boolean;\n /** Whether this cell is in the middle of a range */\n isRangeMiddle: boolean;\n /** Whether this cell is the end of a range */\n isRangeEnd: boolean;\n /** Whether this cell is the start of a preview range */\n isPreviewStart: boolean;\n /** Whether this cell is in the middle of a preview range */\n isPreviewMiddle: boolean;\n /** Whether this cell is the end of a preview range */\n isPreviewEnd: boolean;\n /** Comparison value for keyboard navigation and selection */\n compareValue: number;\n}\n\n/** Configuration for creating a calendar cell */\nexport interface CalendarCellConfig<D> {\n value: D;\n displayValue: string;\n ariaLabel: string;\n enabled?: boolean;\n cssClasses?: string;\n compareValue: number;\n}\n\n/** Factory function to create a CalendarCell with defaults */\nexport function createCalendarCell<D>(config: CalendarCellConfig<D>): CalendarCell<D> {\n return {\n value: config.value,\n displayValue: config.displayValue,\n ariaLabel: config.ariaLabel,\n enabled: config.enabled ?? true,\n cssClasses: config.cssClasses ?? '',\n compareValue: config.compareValue,\n isToday: false,\n isSelected: false,\n isRangeStart: false,\n isRangeMiddle: false,\n isRangeEnd: false,\n isPreviewStart: false,\n isPreviewMiddle: false,\n isPreviewEnd: false,\n };\n}\n\n/** Style format for month and day names */\nexport type NameStyle = 'long' | 'short' | 'narrow';\n\n/** Number of days in a week */\nexport const DAYS_PER_WEEK = 7;\n\n/** Number of weeks displayed in month view */\nexport const WEEKS_PER_MONTH = 6;\n\n/** Number of years displayed in multi-year view */\nexport const YEARS_PER_PAGE = 24;\n\n/** Number of rows in multi-year view */\nexport const YEARS_PER_ROW = 4;\n\n/** Number of months per row in year view */\nexport const MONTHS_PER_ROW = 4;\n\n/** Function type for custom date filtering */\nexport type DateFilterFn<D> = (date: D) => boolean;\n\n/** Function type for applying custom CSS classes to dates */\nexport type DateClassFn<D> = (date: D, view: CalendarView) => string;\n","import { InjectionToken } from '@angular/core';\nimport type { NameStyle } from '../calendar.types';\n\n/**\n * Abstract date adapter class that provides date manipulation operations.\n * Implement this class to support different date libraries (date-fns, Luxon, Temporal, etc.)\n */\nexport abstract class DateAdapter<D> {\n /** The locale to use for formatting. Can be overridden. */\n locale: string = 'en-US';\n\n /** Gets today's date */\n abstract today(): D;\n\n /** Gets the year component of the given date */\n abstract getYear(date: D): number;\n\n /** Gets the month component of the given date (0-indexed, 0 = January) */\n abstract getMonth(date: D): number;\n\n /** Gets the day of month component of the given date */\n abstract getDate(date: D): number;\n\n /** Gets the day of the week (0 = Sunday, 6 = Saturday) */\n abstract getDayOfWeek(date: D): number;\n\n /** Adds the given number of days to the date */\n abstract addDays(date: D, days: number): D;\n\n /** Adds the given number of months to the date */\n abstract addMonths(date: D, months: number): D;\n\n /** Adds the given number of years to the date */\n abstract addYears(date: D, years: number): D;\n\n /** Creates a new date with the given year, month (0-indexed), and day */\n abstract createDate(year: number, month: number, date: number): D;\n\n /** Gets the number of days in the month of the given date */\n abstract getNumDaysInMonth(date: D): number;\n\n /** Gets the first day of the week (0 = Sunday, 1 = Monday, etc.) */\n abstract getFirstDayOfWeek(): number;\n\n /** Gets the names of the months */\n abstract getMonthNames(style: NameStyle): string[];\n\n /** Gets the names of the days of the week */\n abstract getDayOfWeekNames(style: NameStyle): string[];\n\n /** Gets the display name for a year */\n abstract getYearName(date: D): string;\n\n /** Formats the date according to the given format string */\n abstract format(date: D, displayFormat: string): string;\n\n /** Parses a date string into a date object */\n abstract parse(value: string, parseFormat: string): D | null;\n\n /** Checks whether the given date is valid */\n abstract isValid(date: D): boolean;\n\n /** Checks whether two dates are the same day */\n abstract isSameDay(first: D, second: D): boolean;\n\n /** Compares two dates. Returns -1 if first < second, 0 if equal, 1 if first > second */\n abstract compareDate(first: D, second: D): number;\n\n /** Clamps the given date to the specified min/max range */\n abstract clampDate(date: D, min: D | null, max: D | null): D;\n\n /**\n * Gets the first day of the month for the given date\n */\n getFirstDayOfMonth(date: D): D {\n return this.createDate(this.getYear(date), this.getMonth(date), 1);\n }\n\n /**\n * Checks whether two dates are in the same month and year\n */\n isSameMonthAndYear(first: D, second: D): boolean {\n return (\n this.getYear(first) === this.getYear(second) &&\n this.getMonth(first) === this.getMonth(second)\n );\n }\n\n /**\n * Checks whether the given date is within the specified range\n */\n isDateInRange(date: D, start: D | null, end: D | null): boolean {\n if (!start || !end) return false;\n const compareToStart = this.compareDate(date, start);\n const compareToEnd = this.compareDate(date, end);\n return compareToStart >= 0 && compareToEnd <= 0;\n }\n\n /** Gets the hour component of the given date (0-23) */\n abstract getHours(date: D): number;\n\n /** Gets the minute component of the given date (0-59) */\n abstract getMinutes(date: D): number;\n\n /** Gets the second component of the given date (0-59) */\n abstract getSeconds(date: D): number;\n\n /** Returns a new date with the given hour, minute, second set */\n abstract setTime(date: D, hours: number, minutes: number, seconds: number): D;\n\n /** Creates a date with the given year, month (0-indexed), day, hours, minutes, seconds */\n abstract createDateTime(\n year: number,\n month: number,\n day: number,\n hours: number,\n minutes: number,\n seconds: number,\n ): D;\n\n /**\n * Gets a unique identifier for the date (useful for trackBy)\n */\n getId(date: D): string {\n return `${this.getYear(date)}-${this.getMonth(date)}-${this.getDate(date)}`;\n }\n\n /**\n * Sets the locale for the adapter\n */\n setLocale(locale: string): void {\n this.locale = locale;\n }\n}\n\n/** Injection token for the DateAdapter */\nexport const DATE_ADAPTER: InjectionToken<DateAdapter<unknown>> = new InjectionToken<DateAdapter<unknown>>('DATE_ADAPTER');\n","import { inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { DateAdapter } from './date-adapter';\nimport type { NameStyle } from '../calendar.types';\n\n/**\n * DateAdapter implementation using the native JavaScript Date object.\n * This is the default adapter shipped with the library.\n */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n private readonly localeId: string = inject(LOCALE_ID);\n\n constructor() {\n super();\n this.locale = this.localeId;\n }\n\n override today(): Date {\n return this.stripTime(new Date());\n }\n\n override getYear(date: Date): number {\n return date.getFullYear();\n }\n\n override getMonth(date: Date): number {\n return date.getMonth();\n }\n\n override getDate(date: Date): number {\n return date.getDate();\n }\n\n override getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n override addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return this.stripTime(result);\n }\n\n override addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n const targetMonth = result.getMonth() + months;\n const targetYear = result.getFullYear() + Math.floor(targetMonth / 12);\n const normalizedMonth = ((targetMonth % 12) + 12) % 12;\n\n // Handle month overflow (e.g., Jan 31 + 1 month = Feb 28/29)\n const daysInTargetMonth = this.getDaysInMonth(targetYear, normalizedMonth);\n const targetDay = Math.min(result.getDate(), daysInTargetMonth);\n\n result.setFullYear(targetYear, normalizedMonth, targetDay);\n return this.stripTime(result);\n }\n\n override addYears(date: Date, years: number): Date {\n return this.addMonths(date, years * 12);\n }\n\n override createDate(year: number, month: number, day: number): Date {\n // Validate inputs\n if (month < 0 || month > 11) {\n throw new Error(`Invalid month index \"${month}\". Month index must be between 0 and 11.`);\n }\n\n if (day < 1) {\n throw new Error(`Invalid date \"${day}\". Date must be greater than 0.`);\n }\n\n const result = new Date(year, month, day);\n\n // Check for date overflow (e.g., Feb 30)\n if (result.getMonth() !== month) {\n throw new Error(`Invalid date \"${day}\" for month index \"${month}\".`);\n }\n\n return this.stripTime(result);\n }\n\n override getNumDaysInMonth(date: Date): number {\n return this.getDaysInMonth(this.getYear(date), this.getMonth(date));\n }\n\n override getFirstDayOfWeek(): number {\n try {\n // Modern browsers: use Intl.Locale API (Chrome 99+, Firefox 104+, Safari 17+)\n const locale = new Intl.Locale(this.locale);\n if ('weekInfo' in locale && locale.weekInfo) {\n // weekInfo.firstDay is 1=Mon, 7=Sun; convert to 0=Sun, 1=Mon...\n const firstDay = (locale.weekInfo as { firstDay: number }).firstDay;\n return firstDay === 7 ? 0 : firstDay;\n }\n } catch {\n // Fallback silently for older browsers\n }\n\n // Legacy fallback for browsers without weekInfo support\n const sundayLocales = ['en', 'ja', 'ko', 'zh'];\n const localePrefix = this.locale.split('-')[0] ?? this.locale;\n return sundayLocales.includes(localePrefix) ? 0 : 1;\n }\n\n override setLocale(locale: string): void {\n try {\n // Validate locale string using Intl.DateTimeFormat\n new Intl.DateTimeFormat(locale);\n this.locale = locale;\n } catch {\n console.warn(`Invalid locale: ${locale}. Falling back to en-US.`);\n this.locale = 'en-US';\n }\n }\n\n override getMonthNames(style: NameStyle): string[] {\n const formatter = new Intl.DateTimeFormat(this.locale, { month: style });\n return Array.from({ length: 12 }, (_, i) => {\n const date = new Date(2020, i, 1);\n return formatter.format(date);\n });\n }\n\n override getDayOfWeekNames(style: NameStyle): string[] {\n const formatter = new Intl.DateTimeFormat(this.locale, { weekday: style });\n // Start from a known Sunday (Jan 4, 2020 is a Saturday, Jan 5 is Sunday)\n return Array.from({ length: 7 }, (_, i) => {\n const date = new Date(2020, 0, 5 + i); // Jan 5, 2020 is a Sunday\n return formatter.format(date);\n });\n }\n\n override getYearName(date: Date): string {\n const formatter = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\n return formatter.format(date);\n }\n\n override format(date: Date, displayFormat: string): string {\n if (!this.isValid(date)) {\n throw new Error('Cannot format invalid date.');\n }\n\n // Support common format patterns\n const formatOptions = this.parseFormatString(displayFormat);\n const formatter = new Intl.DateTimeFormat(this.locale, formatOptions);\n return formatter.format(date);\n }\n\n override parse(value: string, _parseFormat: string): Date | null {\n if (!value) return null;\n\n // Attempt to parse using Date.parse\n const timestamp = Date.parse(value);\n if (isNaN(timestamp)) {\n return null;\n }\n\n return this.stripTime(new Date(timestamp));\n }\n\n override isValid(date: Date): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n override isSameDay(first: Date, second: Date): boolean {\n return (\n this.getYear(first) === this.getYear(second) &&\n this.getMonth(first) === this.getMonth(second) &&\n this.getDate(first) === this.getDate(second)\n );\n }\n\n override compareDate(first: Date, second: Date): number {\n const yearDiff = this.getYear(first) - this.getYear(second);\n if (yearDiff !== 0) return yearDiff > 0 ? 1 : -1;\n\n const monthDiff = this.getMonth(first) - this.getMonth(second);\n if (monthDiff !== 0) return monthDiff > 0 ? 1 : -1;\n\n const dateDiff = this.getDate(first) - this.getDate(second);\n if (dateDiff !== 0) return dateDiff > 0 ? 1 : -1;\n\n return 0;\n }\n\n override getHours(date: Date): number {\n return date.getHours();\n }\n\n override getMinutes(date: Date): number {\n return date.getMinutes();\n }\n\n override getSeconds(date: Date): number {\n return date.getSeconds();\n }\n\n override setTime(date: Date, hours: number, minutes: number, seconds: number): Date {\n const result = new Date(date);\n result.setHours(hours, minutes, seconds, 0);\n return result;\n }\n\n override createDateTime(\n year: number,\n month: number,\n day: number,\n hours: number,\n minutes: number,\n seconds: number,\n ): Date {\n if (month < 0 || month > 11) {\n throw new Error(`Invalid month index \"${month}\". Month index must be between 0 and 11.`);\n }\n\n if (day < 1) {\n throw new Error(`Invalid date \"${day}\". Date must be greater than 0.`);\n }\n\n const result = new Date(year, month, day, hours, minutes, seconds);\n\n if (result.getMonth() !== month) {\n throw new Error(`Invalid date \"${day}\" for month index \"${month}\".`);\n }\n\n return result;\n }\n\n override clampDate(date: Date, min: Date | null, max: Date | null): Date {\n if (min && this.compareDate(date, min) < 0) {\n return min;\n }\n if (max && this.compareDate(date, max) > 0) {\n return max;\n }\n return date;\n }\n\n /**\n * Strips the time component from a date, returning midnight\n */\n private stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n /**\n * Gets the number of days in a specific month\n */\n private getDaysInMonth(year: number, month: number): number {\n // Day 0 of next month gives us the last day of current month\n return new Date(year, month + 1, 0).getDate();\n }\n\n /**\n * Parses a format string into Intl.DateTimeFormat options\n */\n private parseFormatString(format: string): Intl.DateTimeFormatOptions {\n // Simple format mapping - can be extended as needed\n const formatMap: Record<string, Intl.DateTimeFormatOptions> = {\n short: { dateStyle: 'short' },\n medium: { dateStyle: 'medium' },\n long: { dateStyle: 'long' },\n full: { dateStyle: 'full' },\n monthYear: { year: 'numeric', month: 'long' },\n monthYearShort: { year: 'numeric', month: 'short' },\n dayMonth: { day: 'numeric', month: 'long' },\n dayMonthYear: { day: 'numeric', month: 'long', year: 'numeric' },\n time: { hour: 'numeric', minute: '2-digit' },\n timeWithSeconds: { hour: 'numeric', minute: '2-digit', second: '2-digit' },\n dateTimeShort: { dateStyle: 'short', timeStyle: 'short' },\n dateTimeMedium: { dateStyle: 'medium', timeStyle: 'short' },\n dateTimeLong: { dateStyle: 'long', timeStyle: 'medium' },\n };\n\n return formatMap[format] ?? { dateStyle: 'medium' };\n }\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\ntype CellView = 'month' | 'year' | 'multi-year';\ntype CellState =\n | 'default'\n | 'today'\n | 'selected'\n | 'range-start'\n | 'range-middle'\n | 'range-end'\n | 'preview-start'\n | 'preview-middle'\n | 'preview-end'\n | 'disabled';\ntype WrapperRange = 'none' | 'start' | 'middle' | 'end' | 'single';\n\n/**\n * CVA variants for calendar cell styling.\n * Uses semantic theme tokens for consistent cross-theme styling.\n *\n * @tokens `--color-ring`, `--color-foreground`, `--color-muted`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\nexport const calendarCellVariants: (props?: {\n view?: CellView;\n state?: CellState;\n outside?: boolean;\n}) => string = cva(\n // Base styles applied to all cells\n [\n 'relative',\n 'flex',\n 'items-center',\n 'justify-center',\n 'cursor-pointer',\n 'select-none',\n 'transition-colors',\n 'duration-150',\n 'focus-visible:outline-[1px]',\n 'focus-visible:outline-offset-2',\n 'focus-visible:outline-ring',\n ],\n {\n variants: {\n view: {\n month: ['h-9', 'w-9', 'text-sm', 'rounded-full'],\n year: ['h-10', 'w-16', 'text-sm', 'rounded-calendar-cell'],\n 'multi-year': ['h-10', 'w-14', 'text-sm', 'rounded-calendar-cell'],\n },\n state: {\n default: ['text-foreground', 'hover:bg-muted'],\n today: [\n 'text-primary',\n 'font-semibold',\n 'ring-1',\n 'ring-ring',\n 'hover:bg-primary-subtle',\n ],\n selected: [\n 'bg-primary',\n 'text-primary-foreground',\n 'font-semibold',\n 'hover:bg-primary-hover',\n ],\n 'range-start': [\n 'bg-primary',\n 'text-primary-foreground',\n 'font-semibold',\n 'rounded-l-full',\n 'rounded-r-none',\n 'hover:bg-primary-hover',\n ],\n 'range-middle': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-none',\n 'hover:brightness-95',\n ],\n 'range-end': [\n 'bg-primary',\n 'text-primary-foreground',\n 'font-semibold',\n 'rounded-r-full',\n 'rounded-l-none',\n 'hover:bg-primary-hover',\n ],\n 'preview-start': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-l-full',\n 'rounded-r-none',\n 'ring-1',\n 'ring-ring',\n 'opacity-70',\n ],\n 'preview-middle': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-none',\n 'opacity-70',\n ],\n 'preview-end': [\n 'bg-primary-subtle',\n 'text-primary-subtle-foreground',\n 'rounded-r-full',\n 'rounded-l-none',\n 'ring-1',\n 'ring-ring',\n 'opacity-70',\n ],\n disabled: ['text-disabled-foreground', 'cursor-not-allowed', 'hover:bg-transparent'],\n },\n outside: {\n true: ['text-muted-foreground'],\n false: [],\n },\n },\n compoundVariants: [\n {\n state: 'disabled',\n outside: true,\n class: ['text-disabled-foreground'],\n },\n {\n state: 'selected',\n class: ['ring-0'],\n },\n ],\n defaultVariants: {\n view: 'month',\n state: 'default',\n outside: false,\n },\n }\n);\n\nexport type CalendarCellVariants = {\n view?: CellView;\n state?: CellState;\n outside?: boolean;\n};\n\n/**\n * CVA variants for the calendar cell wrapper (used for range backgrounds)\n *\n * @tokens `--color-primary-subtle`\n */\nexport const calendarCellWrapperVariants: (props?: { range?: WrapperRange | undefined }) => string = cva(\n ['relative', 'flex', 'items-center', 'justify-center'],\n {\n variants: {\n range: {\n none: [],\n start: ['bg-primary-subtle', 'rounded-l-full'],\n middle: ['bg-primary-subtle'],\n end: ['bg-primary-subtle', 'rounded-r-full'],\n single: [],\n },\n },\n defaultVariants: {\n range: 'none',\n },\n }\n);\n\nexport type CalendarCellWrapperVariants = {\n range?: WrapperRange | undefined;\n};\n","import { cva } from 'class-variance-authority';\n\ntype ButtonType = 'navigation' | 'period';\n\n/**\n * CVA variants for the calendar header container.\n */\nexport const calendarHeaderVariants: () => string = cva(\n [\n 'flex',\n 'items-center',\n 'justify-between',\n 'px-2',\n 'py-1',\n 'mb-2',\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\nexport type CalendarHeaderVariants = Record<string, never>;\n\n/**\n * CVA variants for the calendar header buttons.\n *\n * @tokens `--color-foreground`, `--color-ring`, `--color-muted`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\nexport const calendarHeaderButtonVariants: (props?: { type?: ButtonType }) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'select-none',\n 'transition-colors',\n 'duration-150',\n 'text-foreground',\n 'focus-visible:outline-[1px]',\n 'focus-visible:outline-offset-2',\n 'focus-visible:outline-ring',\n 'disabled:cursor-not-allowed',\n 'disabled:text-disabled-foreground',\n ],\n {\n variants: {\n type: {\n navigation: [\n 'h-9',\n 'w-9',\n 'rounded-full',\n 'hover:bg-muted',\n ],\n period: [\n 'px-3',\n 'py-1.5',\n 'text-sm',\n 'font-semibold',\n 'rounded-calendar-cell',\n 'hover:bg-muted',\n ],\n },\n },\n defaultVariants: {\n type: 'navigation',\n },\n }\n);\n\nexport type CalendarHeaderButtonVariants = {\n type?: ButtonType;\n};\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * CVA variants for the main calendar container.\n *\n * @tokens `--color-background`, `--color-border-subtle`, `--radius-calendar`\n */\nexport const calendarVariants: (props?: { bordered?: boolean }) => string = cva(\n [\n 'com-calendar',\n 'inline-block',\n 'p-2',\n 'bg-background',\n ],\n {\n variants: {\n bordered: {\n true: ['rounded-calendar', 'shadow-sm', 'border', 'border-border-subtle'],\n false: [],\n },\n },\n defaultVariants: {\n bordered: true,\n },\n }\n);\n\nexport type CalendarVariants = VariantProps<typeof calendarVariants>;\n\n/**\n * CVA variants for the months container in month view.\n * Handles single vs dual-month layouts.\n */\nexport const monthsContainerVariants: (props?: { columns?: 1 | 2 }) => string = cva('', {\n variants: {\n columns: {\n 1: '',\n 2: 'flex gap-4',\n },\n },\n defaultVariants: {\n columns: 1,\n },\n});\n\nexport type MonthsContainerVariants = VariantProps<typeof monthsContainerVariants>;\n","import type { DateAdapter } from './date-adapter';\nimport type { NameStyle } from './calendar.types';\n\n/**\n * Creates a 2D grid from a flat array of items.\n *\n * @param items The flat array of items to arrange into a grid\n * @param columns Number of columns per row\n * @returns 2D array where each inner array is a row\n */\nexport function createGrid<T>(items: T[], columns: number): T[][] {\n const grid: T[][] = [];\n for (let i = 0; i < items.length; i += columns) {\n grid.push(items.slice(i, i + columns));\n }\n return grid;\n}\n\n/**\n * Calculates the new index when navigating a grid with arrow keys.\n *\n * @param currentIndex Current position in the flat array\n * @param direction Navigation direction ('left' | 'right' | 'up' | 'down')\n * @param totalItems Total number of items in the grid\n * @param columns Number of columns per row\n * @returns New index or null if navigation would go out of bounds\n */\nexport function navigateGrid(\n currentIndex: number,\n direction: 'left' | 'right' | 'up' | 'down',\n totalItems: number,\n columns: number\n): number | null {\n let newIndex: number;\n\n switch (direction) {\n case 'left':\n newIndex = currentIndex - 1;\n break;\n case 'right':\n newIndex = currentIndex + 1;\n break;\n case 'up':\n newIndex = currentIndex - columns;\n break;\n case 'down':\n newIndex = currentIndex + columns;\n break;\n default:\n return null;\n }\n\n if (newIndex < 0 || newIndex >= totalItems) {\n return null;\n }\n\n return newIndex;\n}\n\n/**\n * Weekday header information for the month view.\n */\nexport interface WeekdayHeader {\n /** Full label for the weekday (used in aria-label) */\n label: string;\n /** Narrow/abbreviated label (displayed in the header cell) */\n narrow: string;\n}\n\n/**\n * Gets weekday headers for the calendar month view.\n * The headers are ordered starting from the first day of the week.\n *\n * @param adapter Date adapter to use for getting weekday names\n * @param style Style for the full label ('long' | 'short' | 'narrow')\n * @param firstDayOfWeek Optional override for first day of week (0=Sun, 1=Mon, ..., 6=Sat)\n * @returns Array of weekday headers starting from first day of week\n */\nexport function getWeekdayHeaders<D>(\n adapter: DateAdapter<D>,\n style: NameStyle = 'long',\n firstDayOfWeek?: number\n): WeekdayHeader[] {\n const startDay = firstDayOfWeek ?? adapter.getFirstDayOfWeek();\n const longNames = adapter.getDayOfWeekNames(style);\n const narrowNames = adapter.getDayOfWeekNames('narrow');\n\n const headers: WeekdayHeader[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDay + i) % 7;\n headers.push({\n label: longNames[dayIndex] ?? '',\n narrow: narrowNames[dayIndex] ?? '',\n });\n }\n return headers;\n}\n\n/**\n * Checks whether a date should be disabled based on constraints.\n *\n * @param date The date to check\n * @param minDate Minimum allowed date (inclusive)\n * @param maxDate Maximum allowed date (inclusive)\n * @param dateFilter Custom filter function\n * @param adapter Date adapter for comparisons\n * @returns true if the date should be disabled\n */\nexport function isDateDisabled<D>(\n date: D,\n minDate: D | null,\n maxDate: D | null,\n dateFilter: ((d: D) => boolean) | null,\n adapter: DateAdapter<D>\n): boolean {\n if (minDate && adapter.compareDate(date, minDate) < 0) {\n return true;\n }\n if (maxDate && adapter.compareDate(date, maxDate) > 0) {\n return true;\n }\n if (dateFilter && !dateFilter(date)) {\n return true;\n }\n return false;\n}\n\n/**\n * Checks whether a month should be disabled based on constraints.\n * A month is disabled if ALL days in that month are disabled.\n *\n * @param year The year of the month to check\n * @param month The month to check (0-indexed)\n * @param minDate Minimum allowed date\n * @param maxDate Maximum allowed date\n * @param adapter Date adapter for date operations\n * @returns true if the entire month should be disabled\n */\nexport function isMonthDisabled<D>(\n year: number,\n month: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>\n): boolean {\n const firstOfMonth = adapter.createDate(year, month, 1);\n const lastOfMonth = adapter.createDate(year, month, adapter.getNumDaysInMonth(firstOfMonth));\n\n // Month is disabled if it's entirely before min or entirely after max\n if (minDate && adapter.compareDate(lastOfMonth, minDate) < 0) {\n return true;\n }\n if (maxDate && adapter.compareDate(firstOfMonth, maxDate) > 0) {\n return true;\n }\n return false;\n}\n\n/**\n * Checks whether a year should be disabled based on constraints.\n * A year is disabled if ALL months in that year are disabled.\n *\n * @param year The year to check\n * @param minDate Minimum allowed date\n * @param maxDate Maximum allowed date\n * @param adapter Date adapter for date operations\n * @returns true if the entire year should be disabled\n */\nexport function isYearDisabled<D>(\n year: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>\n): boolean {\n const firstOfYear = adapter.createDate(year, 0, 1);\n const lastOfYear = adapter.createDate(year, 11, 31);\n\n // Year is disabled if it's entirely before min or entirely after max\n if (minDate && adapter.compareDate(lastOfYear, minDate) < 0) {\n return true;\n }\n if (maxDate && adapter.compareDate(firstOfYear, maxDate) > 0) {\n return true;\n }\n return false;\n}\n\n/**\n * Gets the starting year for the multi-year view grid.\n * Aligns the year to be at the start of a YEARS_PER_PAGE block.\n *\n * @param activeYear The currently active year\n * @param yearsPerPage Number of years shown per page (default 24)\n * @returns The first year of the multi-year page\n */\nexport function getMultiYearStartingYear(activeYear: number, yearsPerPage: number = 24): number {\n return Math.floor(activeYear / yearsPerPage) * yearsPerPage;\n}\n\n/**\n * Joins CSS class strings, filtering out null/undefined values.\n * Unlike `mergeClasses` from utils, this does NOT resolve Tailwind conflicts -\n * it simply concatenates class strings. Use when classes are guaranteed not to conflict.\n *\n * @param classes - Class strings (may include null/undefined)\n * @returns Space-separated class string\n */\nexport function joinClasses(...classes: (string | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n calendarCellVariants,\n calendarCellWrapperVariants,\n} from './calendar-cell.variants';\nimport type { CalendarCellVariants } from './calendar-cell.variants';\nimport type { CalendarCell, CalendarCellState, CalendarView } from './calendar.types';\n\n/** Event emitted when a navigation key is pressed */\nexport interface CalendarCellKeyNavEvent<D> {\n direction: string;\n cell: CalendarCell<D>;\n}\n\n/**\n * A single cell in the calendar grid.\n * This is a shared, stateless component used across all calendar views.\n *\n * @example\n * ```html\n * <com-calendar-cell\n * [cell]=\"dayCell\"\n * [view]=\"'month'\"\n * (selected)=\"onSelect($event)\"\n * />\n * ```\n *\n * @tokens `--color-ring`, `--color-foreground`, `--color-muted`, `--color-muted-foreground`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\n@Component({\n selector: 'com-calendar-cell',\n template: `\n <div [class]=\"wrapperClasses()\">\n <button\n #cellButton\n type=\"button\"\n [class]=\"cellClasses()\"\n [attr.aria-label]=\"cell().ariaLabel\"\n [attr.aria-selected]=\"cell().isSelected || null\"\n [attr.aria-disabled]=\"!cell().enabled || null\"\n [attr.aria-current]=\"cell().isToday ? 'date' : null\"\n [attr.tabindex]=\"tabindex()\"\n [disabled]=\"!cell().enabled\"\n (click)=\"onCellClick()\"\n (keydown)=\"onKeydown($event)\"\n (mouseenter)=\"onMouseEnter()\"\n (focus)=\"onFocus()\"\n >\n @if (cellTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"cellTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: cell() }\"\n />\n } @else {\n {{ cell().displayValue }}\n }\n </button>\n </div>\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'gridcell',\n },\n})\nexport class ComCalendarCell<D> {\n /** Reference to the button element for focus management */\n private readonly buttonRef: Signal<ElementRef<HTMLButtonElement> | undefined> = viewChild<ElementRef<HTMLButtonElement>>('cellButton');\n\n /** The cell data to render */\n readonly cell: InputSignal<CalendarCell<D>> = input.required<CalendarCell<D>>();\n\n /** The current calendar view */\n readonly view: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** Whether this cell is outside the current month (for month view) */\n readonly outside: InputSignal<boolean> = input<boolean>(false);\n\n /** Tab index for keyboard navigation (-1 for not focusable, 0 for focusable) */\n readonly tabindex: InputSignal<number> = input<number>(-1);\n\n /** Custom template for cell content */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> = input<TemplateRef<{\n $implicit: CalendarCell<D>;\n }> | null>(null);\n\n /** Emitted when the cell is selected */\n readonly selected: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when the cell is focused */\n readonly focused: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when the mouse enters the cell (for range preview) */\n readonly previewed: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when a navigation key is pressed */\n readonly keyNav: OutputEmitterRef<CalendarCellKeyNavEvent<D>> = output<CalendarCellKeyNavEvent<D>>();\n\n /** Computed cell state for styling */\n protected readonly cellState: Signal<CalendarCellState> = computed<CalendarCellState>(() => {\n const c = this.cell();\n\n if (!c.enabled) return 'disabled';\n if (c.isRangeStart) return 'range-start';\n if (c.isRangeEnd) return 'range-end';\n if (c.isRangeMiddle) return 'range-middle';\n if (c.isPreviewStart) return 'preview-start';\n if (c.isPreviewEnd) return 'preview-end';\n if (c.isPreviewMiddle) return 'preview-middle';\n if (c.isSelected) return 'selected';\n if (c.isToday) return 'today';\n return 'default';\n });\n\n /** Computed wrapper range state */\n protected readonly wrapperRange: Signal<'none' | 'start' | 'middle' | 'end' | 'single'> = computed(() => {\n const c = this.cell();\n if (c.isRangeStart && c.isRangeEnd) return 'single';\n if (c.isRangeStart) return 'start';\n if (c.isRangeEnd) return 'end';\n if (c.isRangeMiddle) return 'middle';\n return 'none';\n });\n\n /** Computed CSS classes for the cell button */\n protected readonly cellClasses: Signal<string> = computed(() => {\n const c = this.cell();\n const variants: CalendarCellVariants = {\n view: this.view(),\n state: this.cellState(),\n outside: this.outside(),\n };\n const baseClasses = calendarCellVariants(variants);\n return c.cssClasses ? `${baseClasses} ${c.cssClasses}` : baseClasses;\n });\n\n /** Computed CSS classes for the wrapper div */\n protected readonly wrapperClasses: Signal<string> = computed(() => {\n return calendarCellWrapperVariants({ range: this.wrapperRange() });\n });\n\n protected onCellClick(): void {\n const c = this.cell();\n if (c.enabled) {\n this.selected.emit(c);\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const c = this.cell();\n const navKeys: Record<string, string> = {\n ArrowLeft: 'left',\n ArrowRight: 'right',\n ArrowUp: 'up',\n ArrowDown: 'down',\n Home: 'home',\n End: 'end',\n PageUp: 'pageUp',\n PageDown: 'pageDown',\n };\n\n const direction = navKeys[event.key];\n if (direction) {\n event.preventDefault();\n this.keyNav.emit({ direction, cell: c });\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (c.enabled) {\n this.selected.emit(c);\n }\n }\n }\n\n protected onMouseEnter(): void {\n this.previewed.emit(this.cell());\n }\n\n protected onFocus(): void {\n this.focused.emit(this.cell());\n }\n\n /** Focuses the button element within this cell */\n focusButton(): void {\n this.buttonRef()?.nativeElement.focus();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n} from '@angular/core';\nimport {\n calendarHeaderVariants,\n calendarHeaderButtonVariants,\n} from './calendar-header.variants';\n\n/**\n * Navigation header component for the calendar.\n * Provides prev/next buttons and a clickable period label for view switching.\n *\n * @example\n * ```html\n * <com-calendar-header\n * [periodLabel]=\"'January 2024'\"\n * [periodAriaLabel]=\"'January 2024, click to switch view'\"\n * [prevDisabled]=\"false\"\n * [nextDisabled]=\"false\"\n * [canSwitchView]=\"true\"\n * (prevClicked)=\"onPrev()\"\n * (nextClicked)=\"onNext()\"\n * (periodClicked)=\"onPeriodClick()\"\n * />\n * ```\n *\n * @tokens `--color-foreground`, `--color-ring`, `--color-muted`,\n * `--color-disabled-foreground`, `--radius-calendar-cell`\n */\n@Component({\n selector: 'com-calendar-header',\n template: `\n <div [class]=\"headerClasses()\">\n <button\n type=\"button\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"prevDisabled()\"\n [attr.aria-label]=\"prevAriaLabel()\"\n (click)=\"prevClicked.emit()\"\n >\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M15 18l-6-6 6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <button\n type=\"button\"\n [class]=\"periodButtonClasses()\"\n [attr.aria-label]=\"periodAriaLabel()\"\n [disabled]=\"!canSwitchView()\"\n (click)=\"onPeriodClick()\"\n >\n {{ periodLabel() }}\n </button>\n\n <button\n type=\"button\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"nextDisabled()\"\n [attr.aria-label]=\"nextAriaLabel()\"\n (click)=\"nextClicked.emit()\"\n >\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M9 18l6-6-6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-header-host block',\n },\n})\nexport class ComCalendarHeader {\n /** Display text (e.g., \"January 2024\", \"2024\", \"2000 – 2023\") */\n readonly periodLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for period button */\n readonly periodAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for previous button */\n readonly prevAriaLabel: InputSignal<string> = input<string>('Previous');\n\n /** Accessible label for next button */\n readonly nextAriaLabel: InputSignal<string> = input<string>('Next');\n\n /** Disable previous button */\n readonly prevDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Disable next button */\n readonly nextDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether clicking period label switches view */\n readonly canSwitchView: InputSignal<boolean> = input<boolean>(true);\n\n /** Emitted when previous button is clicked */\n readonly prevClicked: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when next button is clicked */\n readonly nextClicked: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when period label is clicked (switch view) */\n readonly periodClicked: OutputEmitterRef<void> = output<void>();\n\n /** Computed header container classes */\n protected readonly headerClasses: Signal<string> = computed(() =>\n calendarHeaderVariants()\n );\n\n /** Computed navigation button classes */\n protected readonly navButtonClasses: Signal<string> = computed(() =>\n calendarHeaderButtonVariants({ type: 'navigation' })\n );\n\n /** Computed period button classes */\n protected readonly periodButtonClasses: Signal<string> = computed(() =>\n calendarHeaderButtonVariants({ type: 'period' })\n );\n\n /**\n * Handles period button click.\n * Only emits if view switching is allowed.\n */\n protected onPeriodClick(): void {\n if (this.canSwitchView()) {\n this.periodClicked.emit();\n }\n }\n}\n","import {\n Directive,\n afterEveryRender,\n inject,\n input,\n output,\n computed,\n signal,\n type Signal,\n type InputSignal,\n type OutputEmitterRef,\n type WritableSignal,\n type TemplateRef,\n} from '@angular/core';\nimport type { ComCalendarCell } from '../calendar-cell';\nimport type {\n CalendarCell,\n CalendarView,\n DateFilterFn,\n DateClassFn,\n DateRange,\n} from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\n\n/**\n * Abstract base class for calendar view components.\n * Provides shared inputs, outputs, and utility methods for month, year, and multi-year views.\n *\n * @tokens None - abstract base class, tokens are defined in concrete view components\n */\n@Directive()\nexport abstract class CalendarViewBase<D> {\n /** Date adapter for date operations */\n protected readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** The date to display and navigate from */\n readonly activeDate: InputSignal<D> = input.required<D>();\n\n /** The currently selected date or date range */\n readonly selected: InputSignal<D | DateRange<D> | null> = input<D | DateRange<D> | null>(null);\n\n /** Minimum selectable date */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Custom function to add CSS classes to dates */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** Start date for range preview (hover state) */\n readonly previewStart: InputSignal<D | null> = input<D | null>(null);\n\n /** End date for range preview (hover state) */\n readonly previewEnd: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom template for cell content */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> = input<\n TemplateRef<{ $implicit: CalendarCell<D> }> | null\n >(null);\n\n /** Emitted when a date is selected */\n readonly selectedChange: OutputEmitterRef<D> = output<D>();\n\n /** Emitted when the active date changes (keyboard navigation) */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Emitted when the preview range changes (mouse hover) */\n readonly previewChange: OutputEmitterRef<D | null> = output<D | null>();\n\n /** The calendar view type for this component */\n protected abstract readonly view: CalendarView;\n\n /** Cell components for focus management. Must be implemented by each view using viewChildren. */\n protected abstract readonly cellComponents: Signal<readonly ComCalendarCell<D>[]>;\n\n /** Internal signal for tracking the focused cell's compare value */\n protected readonly focusedCellValue: WritableSignal<number | null> = signal<number | null>(null);\n\n /** Signal for pending focus operation (set by focusCell, consumed by afterRender) */\n protected readonly focusPending: WritableSignal<number | null> = signal<number | null>(null);\n\n constructor() {\n // Handle focus after render to ensure DOM is updated\n afterEveryRender(() => {\n const pending = this.focusPending();\n if (pending !== null) {\n const cellComponent = this.cellComponents().find(\n c => c.cell().compareValue === pending\n );\n cellComponent?.focusButton();\n this.focusPending.set(null);\n }\n });\n }\n\n /**\n * The grid of cells to display.\n * Must be implemented by each view to generate the appropriate cells.\n */\n abstract readonly cells: Signal<CalendarCell<D>[][]>;\n\n /**\n * Accessible label for the grid (e.g., \"January 2024\").\n * Must be implemented by each view.\n */\n abstract readonly gridLabel: Signal<string>;\n\n /** Today's date for comparison */\n protected readonly today: Signal<D> = computed(() => this.dateAdapter.today());\n\n /**\n * Checks if a date is the currently selected date.\n */\n protected isSelected(date: D): boolean {\n const sel = this.selected();\n if (!sel) return false;\n\n // Single date selection\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.isSameDay(date, sel);\n }\n\n // Range selection - check start or end\n const range = sel as DateRange<D>;\n if (range.start && this.dateAdapter.isSameDay(date, range.start)) return true;\n if (range.end && this.dateAdapter.isSameDay(date, range.end)) return true;\n return false;\n }\n\n /**\n * Checks if a date is the start of a selected range.\n */\n protected isRangeStart(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.start !== null && this.dateAdapter.isSameDay(date, sel.start);\n }\n\n /**\n * Checks if a date is the end of a selected range.\n */\n protected isRangeEnd(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.end !== null && this.dateAdapter.isSameDay(date, sel.end);\n }\n\n /**\n * Checks if a date is in the middle of a selected range.\n */\n protected isRangeMiddle(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n if (!sel.start || !sel.end) return false;\n return this.dateAdapter.isDateInRange(date, sel.start, sel.end) && !this.isRangeStart(date) && !this.isRangeEnd(date);\n }\n\n /**\n * Checks if a date is the start of the preview range.\n */\n protected isPreviewStart(date: D): boolean {\n const start = this.previewStart();\n return start !== null && this.dateAdapter.isSameDay(date, start);\n }\n\n /**\n * Checks if a date is the end of the preview range.\n */\n protected isPreviewEnd(date: D): boolean {\n const end = this.previewEnd();\n return end !== null && this.dateAdapter.isSameDay(date, end);\n }\n\n /**\n * Checks if a date is in the middle of the preview range.\n */\n protected isPreviewMiddle(date: D): boolean {\n const start = this.previewStart();\n const end = this.previewEnd();\n if (!start || !end) return false;\n return (\n this.dateAdapter.isDateInRange(date, start, end) && !this.isPreviewStart(date) && !this.isPreviewEnd(date)\n );\n }\n\n /**\n * Type guard to check if a value is a DateRange.\n */\n protected isDateRange(value: D | DateRange<D>): value is DateRange<D> {\n return value !== null && typeof value === 'object' && 'start' in value && 'end' in value;\n }\n\n /**\n * Handles cell selection events.\n */\n onCellSelected(cell: CalendarCell<D>): void {\n if (cell.enabled) {\n this.selectedChange.emit(cell.value);\n }\n }\n\n /**\n * Handles cell preview events (mouse hover).\n */\n onCellPreviewed(cell: CalendarCell<D>): void {\n this.previewChange.emit(cell.value);\n }\n\n /**\n * Clears the preview when mouse leaves the grid.\n */\n onGridMouseLeave(): void {\n this.previewChange.emit(null);\n }\n\n /**\n * Handles keyboard navigation within the grid.\n * Must be implemented by each view to handle view-specific navigation.\n */\n abstract onKeyNav(event: { direction: string; cell: CalendarCell<D> }): void;\n\n /**\n * Checks if a cell should have tabindex=\"0\" (be the focusable cell).\n */\n isActiveCell(cell: CalendarCell<D>): boolean {\n const focused = this.focusedCellValue();\n if (focused !== null) {\n return cell.compareValue === focused;\n }\n // Default to the active date's cell\n return this.getActiveCompareValue() === cell.compareValue;\n }\n\n /**\n * Gets the compare value for the active date.\n * Must be implemented by each view.\n */\n protected abstract getActiveCompareValue(): number;\n\n /**\n * Focuses the cell with the given compare value.\n * Uses afterRender to ensure DOM is updated before focusing.\n * Public to allow parent components to manage cross-grid focus in dual-month mode.\n */\n focusCell(compareValue: number): void {\n this.focusedCellValue.set(compareValue);\n this.focusPending.set(compareValue);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n viewChildren,\n type InputSignal,\n type Signal,\n} from '@angular/core';\nimport { ComCalendarCell, type CalendarCellKeyNavEvent } from '../calendar-cell';\nimport type { CalendarCell, CalendarView } from '../calendar.types';\nimport {\n DAYS_PER_WEEK,\n WEEKS_PER_MONTH,\n createCalendarCell,\n} from '../calendar.types';\nimport { createGrid, getWeekdayHeaders, isDateDisabled, type WeekdayHeader } from '../calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst TOTAL_CELLS = DAYS_PER_WEEK * WEEKS_PER_MONTH;\n\n/**\n * Month view component displaying a 7x6 grid of days.\n * Shows the days of the current month with leading/trailing days from adjacent months.\n *\n * @example\n * ```html\n * <com-calendar-month-view\n * [activeDate]=\"activeDate()\"\n * [selected]=\"selected()\"\n * (selectedChange)=\"onDateSelected($event)\"\n * (activeDateChange)=\"onActiveDateChange($event)\"\n * />\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Component({\n selector: 'com-calendar-month-view',\n template: `\n <div\n role=\"grid\"\n class=\"com-calendar-month-view\"\n [attr.aria-label]=\"gridLabel()\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n <!-- Weekday headers -->\n <div role=\"row\" class=\"com-calendar-month-view__header grid grid-cols-7 gap-0\">\n @for (header of weekdayHeaders(); track $index) {\n <div\n role=\"columnheader\"\n class=\"com-calendar-month-view__header-cell flex items-center justify-center h-9 text-xs font-medium text-muted-foreground\"\n [attr.aria-label]=\"header.label\"\n >\n {{ header.narrow }}\n </div>\n }\n </div>\n\n <!-- Day cells -->\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"com-calendar-month-view__row grid grid-cols-7 gap-0\">\n @for (cell of row; track cell.compareValue) {\n <com-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [outside]=\"isOutsideMonth(cell)\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n imports: [ComCalendarCell],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-month-view-host',\n },\n})\nexport class ComCalendarMonthView<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarView = 'month';\n\n /** Cell components for focus management */\n protected readonly cellComponents: Signal<readonly ComCalendarCell<D>[]> = viewChildren(ComCalendarCell<D>);\n\n /** Override first day of week (0=Sun, 1=Mon, ..., 6=Sat) */\n readonly firstDayOfWeek: InputSignal<number> = input<number>(0);\n\n /** Grid index for dual-month display (0=left, 1=right) */\n readonly gridIndex: InputSignal<number> = input<number>(0);\n\n /** Weekday header labels */\n readonly weekdayHeaders: Signal<WeekdayHeader[]> = computed(() => {\n return getWeekdayHeaders(this.dateAdapter, 'long', this.firstDayOfWeek());\n });\n\n /** The month being displayed (0-indexed) */\n readonly displayMonth: Signal<number> = computed(() => {\n return this.dateAdapter.getMonth(this.activeDate());\n });\n\n /** The year being displayed */\n readonly displayYear: Signal<number> = computed(() => {\n return this.dateAdapter.getYear(this.activeDate());\n });\n\n /** Grid of day cells (7 columns x 6 rows = 42 cells) */\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const activeDate = this.activeDate();\n const year = this.dateAdapter.getYear(activeDate);\n const month = this.dateAdapter.getMonth(activeDate);\n const firstOfMonth = this.dateAdapter.getFirstDayOfMonth(activeDate);\n const firstDayOfWeek = this.firstDayOfWeek();\n\n // Calculate the offset to start the grid\n // How many days from the previous month should we show?\n const firstDayOfMonthWeekday = this.dateAdapter.getDayOfWeek(firstOfMonth);\n const offset = (firstDayOfMonthWeekday - firstDayOfWeek + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n\n // Start date is the first cell (may be in previous month)\n const startDate = this.dateAdapter.addDays(firstOfMonth, -offset);\n\n const today = this.today();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n const dateClass = this.dateClass();\n\n const days: CalendarCell<D>[] = [];\n\n for (let i = 0; i < TOTAL_CELLS; i++) {\n const date = this.dateAdapter.addDays(startDate, i);\n const dayOfMonth = this.dateAdapter.getDate(date);\n const cellMonth = this.dateAdapter.getMonth(date);\n const isDisabled = isDateDisabled(date, minDate, maxDate, dateFilter, this.dateAdapter);\n const isToday = this.dateAdapter.isSameDay(date, today);\n const cssClasses = dateClass ? dateClass(date, this.view) : '';\n\n // Create a unique compare value using year, month, day\n const cellYear = this.dateAdapter.getYear(date);\n const compareValue = cellYear * 10000 + cellMonth * 100 + dayOfMonth;\n\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: String(dayOfMonth),\n ariaLabel: this.dateAdapter.format(date, 'fullDate'),\n enabled: !isDisabled,\n cssClasses,\n compareValue,\n });\n\n // Update computed properties\n cell.isToday = isToday;\n cell.isSelected = this.isSelected(date);\n cell.isRangeStart = this.isRangeStart(date);\n cell.isRangeEnd = this.isRangeEnd(date);\n cell.isRangeMiddle = this.isRangeMiddle(date);\n cell.isPreviewStart = this.isPreviewStart(date);\n cell.isPreviewEnd = this.isPreviewEnd(date);\n cell.isPreviewMiddle = this.isPreviewMiddle(date);\n\n days.push(cell);\n }\n\n return createGrid(days, DAYS_PER_WEEK);\n });\n\n /** Accessible label for the grid showing month and year */\n readonly gridLabel: Signal<string> = computed(() => {\n const monthNames = this.dateAdapter.getMonthNames('long');\n return `${monthNames[this.displayMonth()]} ${this.displayYear()}`;\n });\n\n /** First date of the displayed month */\n private readonly firstOfMonth: Signal<D> = computed(() => {\n return this.dateAdapter.getFirstDayOfMonth(this.activeDate());\n });\n\n protected getActiveCompareValue(): number {\n const date = this.activeDate();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n const day = this.dateAdapter.getDate(date);\n return year * 10000 + month * 100 + day;\n }\n\n /**\n * Checks if a cell is outside the current displayed month.\n */\n isOutsideMonth(cell: CalendarCell<D>): boolean {\n const cellMonth = this.dateAdapter.getMonth(cell.value);\n return cellMonth !== this.displayMonth();\n }\n\n /**\n * Handles keyboard navigation for the month view.\n * - Arrow left/right: ±1 day\n * - Arrow up/down: ±7 days (one week)\n * - Home: First day of week\n * - End: Last day of week\n * - PageUp: Previous month\n * - PageDown: Next month\n */\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentDate = event.cell.value;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n newDate = this.dateAdapter.addDays(currentDate, -1);\n break;\n\n case 'right':\n newDate = this.dateAdapter.addDays(currentDate, 1);\n break;\n\n case 'up':\n newDate = this.dateAdapter.addDays(currentDate, -DAYS_PER_WEEK);\n break;\n\n case 'down':\n newDate = this.dateAdapter.addDays(currentDate, DAYS_PER_WEEK);\n break;\n\n case 'home': {\n // Go to first day of the week\n const dayOfWeek = this.dateAdapter.getDayOfWeek(currentDate);\n const firstDay = this.firstDayOfWeek();\n const diff = (dayOfWeek - firstDay + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, -diff);\n break;\n }\n\n case 'end': {\n // Go to last day of the week\n const dayOfWeek = this.dateAdapter.getDayOfWeek(currentDate);\n const firstDay = this.firstDayOfWeek();\n const daysUntilEnd = (6 - dayOfWeek + firstDay + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, daysUntilEnd);\n break;\n }\n\n case 'pageUp':\n newDate = this.dateAdapter.addMonths(currentDate, -1);\n break;\n\n case 'pageDown':\n newDate = this.dateAdapter.addMonths(currentDate, 1);\n break;\n }\n\n if (newDate) {\n // Update focus cell compare value\n const year = this.dateAdapter.getYear(newDate);\n const month = this.dateAdapter.getMonth(newDate);\n const day = this.dateAdapter.getDate(newDate);\n const compareValue = year * 10000 + month * 100 + day;\n this.focusCell(compareValue);\n this.activeDateChange.emit(newDate);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { ComCalendarCell, type CalendarCellKeyNavEvent } from '../calendar-cell';\nimport type { CalendarCell, CalendarView } from '../calendar.types';\nimport { MONTHS_PER_ROW, createCalendarCell } from '../calendar.types';\nimport { createGrid, isMonthDisabled } from '../calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst MONTHS_PER_YEAR = 12;\n\n/**\n * Year view component displaying a 4x3 grid of months.\n * Allows the user to select a month within the currently active year.\n *\n * @example\n * ```html\n * <com-calendar-year-view\n * [activeDate]=\"activeDate()\"\n * [selected]=\"selected()\"\n * (selectedChange)=\"onMonthSelected($event)\"\n * (activeDateChange)=\"onActiveMonthChange($event)\"\n * />\n * ```\n *\n * @tokens None - uses ComCalendarCell which provides all token styling\n */\n@Component({\n selector: 'com-calendar-year-view',\n template: `\n <div\n role=\"grid\"\n class=\"com-calendar-year-view\"\n [attr.aria-label]=\"gridLabel()\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"com-calendar-year-view__row grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <com-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n imports: [ComCalendarCell],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-year-view-host',\n },\n})\nexport class ComCalendarYearView<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarView = 'year';\n\n /** Cell components for focus management */\n protected readonly cellComponents: Signal<readonly ComCalendarCell<D>[]> = viewChildren(ComCalendarCell<D>);\n\n /** The year being displayed */\n readonly displayYear: Signal<number> = computed(() => {\n return this.dateAdapter.getYear(this.activeDate());\n });\n\n /** Grid of month cells (4 columns x 3 rows = 12 months) */\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const year = this.displayYear();\n const monthNames = this.dateAdapter.getMonthNames('short');\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const todayMonth = this.dateAdapter.getMonth(today);\n const activeMonth = this.dateAdapter.getMonth(this.activeDate());\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n\n const months: CalendarCell<D>[] = [];\n\n for (let month = 0; month < MONTHS_PER_YEAR; month++) {\n const date = this.dateAdapter.createDate(year, month, 1);\n const isDisabled = isMonthDisabled(year, month, minDate, maxDate, this.dateAdapter);\n const isToday = year === todayYear && month === todayMonth;\n const isSelectedMonth = this.isMonthSelected(year, month);\n const cssClasses = dateClass ? dateClass(date, this.view) : '';\n\n const monthName = monthNames[month] ?? '';\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: monthName,\n ariaLabel: `${monthName} ${year}`,\n enabled: !isDisabled,\n cssClasses,\n compareValue: month,\n });\n\n // Update computed properties\n cell.isToday = isToday;\n cell.isSelected = isSelectedMonth;\n cell.isRangeStart = this.isMonthRangeStart(year, month);\n cell.isRangeEnd = this.isMonthRangeEnd(year, month);\n cell.isRangeMiddle = this.isMonthRangeMiddle(year, month);\n cell.isPreviewStart = this.isMonthPreviewStart(year, month);\n cell.isPreviewEnd = this.isMonthPreviewEnd(year, month);\n cell.isPreviewMiddle = this.isMonthPreviewMiddle(year, month);\n\n months.push(cell);\n }\n\n return createGrid(months, MONTHS_PER_ROW);\n });\n\n /** Accessible label for the grid */\n readonly gridLabel: Signal<string> = computed(() => {\n return `${this.displayYear()}`;\n });\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getMonth(this.activeDate());\n }\n\n /**\n * Handles keyboard navigation for the year view.\n * - Arrow left/right: ±1 month\n * - Arrow up/down: ±4 months (one row)\n * - Home: January\n * - End: December\n * - PageUp: Previous year\n * - PageDown: Next year\n */\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentMonth = this.dateAdapter.getMonth(event.cell.value);\n const year = this.displayYear();\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentMonth > 0) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -1);\n this.focusCell(currentMonth - 1);\n }\n break;\n\n case 'right':\n if (currentMonth < 11) {\n newDate = this.dateAdapter.addMonths(event.cell.value, 1);\n this.focusCell(currentMonth + 1);\n }\n break;\n\n case 'up':\n if (currentMonth >= MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -MONTHS_PER_ROW);\n this.focusCell(currentMonth - MONTHS_PER_ROW);\n }\n break;\n\n case 'down':\n if (currentMonth < MONTHS_PER_YEAR - MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, MONTHS_PER_ROW);\n this.focusCell(currentMonth + MONTHS_PER_ROW);\n }\n break;\n\n case 'home':\n newDate = this.dateAdapter.createDate(year, 0, 1);\n this.focusCell(0);\n break;\n\n case 'end':\n newDate = this.dateAdapter.createDate(year, 11, 1);\n this.focusCell(11);\n break;\n\n case 'pageUp':\n newDate = this.dateAdapter.addYears(event.cell.value, -1);\n break;\n\n case 'pageDown':\n newDate = this.dateAdapter.addYears(event.cell.value, 1);\n break;\n }\n\n if (newDate) {\n this.activeDateChange.emit(newDate);\n }\n }\n\n private isMonthSelected(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n\n if (!this.isDateRange(sel)) {\n return (\n this.dateAdapter.getYear(sel) === year && this.dateAdapter.getMonth(sel) === month\n );\n }\n\n const range = sel;\n if (\n range.start &&\n this.dateAdapter.getYear(range.start) === year &&\n this.dateAdapter.getMonth(range.start) === month\n ) {\n return true;\n }\n if (\n range.end &&\n this.dateAdapter.getYear(range.end) === year &&\n this.dateAdapter.getMonth(range.end) === month\n ) {\n return true;\n }\n return false;\n }\n\n private isMonthRangeStart(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return (\n this.dateAdapter.getYear(sel.start) === year &&\n this.dateAdapter.getMonth(sel.start) === month\n );\n }\n\n private isMonthRangeEnd(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return (\n this.dateAdapter.getYear(sel.end) === year && this.dateAdapter.getMonth(sel.end) === month\n );\n }\n\n private isMonthRangeMiddle(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n\n const monthDate = this.dateAdapter.createDate(year, month, 1);\n const startMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(sel.start),\n this.dateAdapter.getMonth(sel.start),\n 1\n );\n const endMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(sel.end),\n this.dateAdapter.getMonth(sel.end),\n 1\n );\n\n return (\n this.dateAdapter.compareDate(monthDate, startMonth) > 0 &&\n this.dateAdapter.compareDate(monthDate, endMonth) < 0\n );\n }\n\n private isMonthPreviewStart(year: number, month: number): boolean {\n const start = this.previewStart();\n if (!start) return false;\n return (\n this.dateAdapter.getYear(start) === year && this.dateAdapter.getMonth(start) === month\n );\n }\n\n private isMonthPreviewEnd(year: number, month: number): boolean {\n const end = this.previewEnd();\n if (!end) return false;\n return this.dateAdapter.getYear(end) === year && this.dateAdapter.getMonth(end) === month;\n }\n\n private isMonthPreviewMiddle(year: number, month: number): boolean {\n const start = this.previewStart();\n const end = this.previewEnd();\n if (!start || !end) return false;\n\n const monthDate = this.dateAdapter.createDate(year, month, 1);\n const startMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(start),\n this.dateAdapter.getMonth(start),\n 1\n );\n const endMonth = this.dateAdapter.createDate(\n this.dateAdapter.getYear(end),\n this.dateAdapter.getMonth(end),\n 1\n );\n\n return (\n this.dateAdapter.compareDate(monthDate, startMonth) > 0 &&\n this.dateAdapter.compareDate(monthDate, endMonth) < 0\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { ComCalendarCell, type CalendarCellKeyNavEvent } from '../calendar-cell';\nimport type { CalendarCell, CalendarView } from '../calendar.types';\nimport { YEARS_PER_PAGE, YEARS_PER_ROW, createCalendarCell } from '../calendar.types';\nimport { createGrid, getMultiYearStartingYear, isYearDisabled } from '../calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\n/**\n * Multi-year view component displaying a 4x6 grid of years (24 years total).\n * Allows the user to select a year within the displayed range.\n *\n * @example\n * ```html\n * <com-calendar-multi-year-view\n * [activeDate]=\"activeDate()\"\n * [selected]=\"selected()\"\n * (selectedChange)=\"onYearSelected($event)\"\n * (activeDateChange)=\"onActiveYearChange($event)\"\n * />\n * ```\n *\n * @tokens None - uses ComCalendarCell which provides all token styling\n */\n@Component({\n selector: 'com-calendar-multi-year-view',\n template: `\n <div\n role=\"grid\"\n class=\"com-calendar-multi-year-view\"\n [attr.aria-label]=\"gridLabel()\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"com-calendar-multi-year-view__row grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <com-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n imports: [ComCalendarCell],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-multi-year-view-host',\n },\n})\nexport class ComCalendarMultiYearView<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarView = 'multi-year';\n\n /** Cell components for focus management */\n protected readonly cellComponents: Signal<readonly ComCalendarCell<D>[]> = viewChildren(ComCalendarCell<D>);\n\n /** The first year in the displayed range */\n readonly startYear: Signal<number> = computed(() => {\n const activeYear = this.dateAdapter.getYear(this.activeDate());\n return getMultiYearStartingYear(activeYear, YEARS_PER_PAGE);\n });\n\n /** The last year in the displayed range */\n readonly endYear: Signal<number> = computed(() => {\n return this.startYear() + YEARS_PER_PAGE - 1;\n });\n\n /** Grid of year cells (4 columns x 6 rows = 24 years) */\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const start = this.startYear();\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const activeYear = this.dateAdapter.getYear(this.activeDate());\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n\n const years: CalendarCell<D>[] = [];\n\n for (let i = 0; i < YEARS_PER_PAGE; i++) {\n const year = start + i;\n const date = this.dateAdapter.createDate(year, 0, 1);\n const isDisabled = isYearDisabled(year, minDate, maxDate, this.dateAdapter);\n const isToday = year === todayYear;\n const isSelectedYear = this.isYearSelected(year);\n const cssClasses = dateClass ? dateClass(date, this.view) : '';\n\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: this.dateAdapter.getYearName(date),\n ariaLabel: this.dateAdapter.getYearName(date),\n enabled: !isDisabled,\n cssClasses,\n compareValue: year,\n });\n\n // Update computed properties\n cell.isToday = isToday;\n cell.isSelected = isSelectedYear;\n cell.isRangeStart = this.isYearRangeStart(year);\n cell.isRangeEnd = this.isYearRangeEnd(year);\n cell.isRangeMiddle = this.isYearRangeMiddle(year);\n cell.isPreviewStart = this.isYearPreviewStart(year);\n cell.isPreviewEnd = this.isYearPreviewEnd(year);\n cell.isPreviewMiddle = this.isYearPreviewMiddle(year);\n\n years.push(cell);\n }\n\n return createGrid(years, YEARS_PER_ROW);\n });\n\n /** Accessible label for the grid showing the year range */\n readonly gridLabel: Signal<string> = computed(() => {\n return `${this.startYear()} – ${this.endYear()}`;\n });\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getYear(this.activeDate());\n }\n\n /**\n * Handles keyboard navigation for the multi-year view.\n * - Arrow left/right: ±1 year\n * - Arrow up/down: ±4 years (one row)\n * - Home: First year in range\n * - End: Last year in range\n * - PageUp: Previous 24 years\n * - PageDown: Next 24 years\n */\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentYear = this.dateAdapter.getYear(event.cell.value);\n const start = this.startYear();\n const end = this.endYear();\n const indexInPage = currentYear - start;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentYear > start) {\n newDate = this.dateAdapter.addYears(event.cell.value, -1);\n this.focusCell(currentYear - 1);\n }\n break;\n\n case 'right':\n if (currentYear < end) {\n newDate = this.dateAdapter.addYears(event.cell.value, 1);\n this.focusCell(currentYear + 1);\n }\n break;\n\n case 'up':\n if (indexInPage >= YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, -YEARS_PER_ROW);\n this.focusCell(currentYear - YEARS_PER_ROW);\n }\n break;\n\n case 'down':\n if (indexInPage < YEARS_PER_PAGE - YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, YEARS_PER_ROW);\n this.focusCell(currentYear + YEARS_PER_ROW);\n }\n break;\n\n case 'home':\n newDate = this.dateAdapter.createDate(start, 0, 1);\n this.focusCell(start);\n break;\n\n case 'end':\n newDate = this.dateAdapter.createDate(end, 0, 1);\n this.focusCell(end);\n break;\n\n case 'pageUp':\n newDate = this.dateAdapter.addYears(event.cell.value, -YEARS_PER_PAGE);\n break;\n\n case 'pageDown':\n newDate = this.dateAdapter.addYears(event.cell.value, YEARS_PER_PAGE);\n break;\n }\n\n if (newDate) {\n this.activeDateChange.emit(newDate);\n }\n }\n\n private isYearSelected(year: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.getYear(sel) === year;\n }\n\n const range = sel;\n if (range.start && this.dateAdapter.getYear(range.start) === year) {\n return true;\n }\n if (range.end && this.dateAdapter.getYear(range.end) === year) {\n return true;\n }\n return false;\n }\n\n private isYearRangeStart(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return this.dateAdapter.getYear(sel.start) === year;\n }\n\n private isYearRangeEnd(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return this.dateAdapter.getYear(sel.end) === year;\n }\n\n private isYearRangeMiddle(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n\n const startYear = this.dateAdapter.getYear(sel.start);\n const endYear = this.dateAdapter.getYear(sel.end);\n\n return year > startYear && year < endYear;\n }\n\n private isYearPreviewStart(year: number): boolean {\n const start = this.previewStart();\n if (!start) return false;\n return this.dateAdapter.getYear(start) === year;\n }\n\n private isYearPreviewEnd(year: number): boolean {\n const end = this.previewEnd();\n if (!end) return false;\n return this.dateAdapter.getYear(end) === year;\n }\n\n private isYearPreviewMiddle(year: number): boolean {\n const start = this.previewStart();\n const end = this.previewEnd();\n if (!start || !end) return false;\n\n const startYear = this.dateAdapter.getYear(start);\n const endYear = this.dateAdapter.getYear(end);\n\n return year > startYear && year < endYear;\n }\n}\n","/**\n * Calendar view components\n */\n\nexport { CalendarViewBase } from './calendar-view-base';\nexport { ComCalendarMonthView } from './month-view';\nexport { ComCalendarYearView } from './year-view';\nexport { ComCalendarMultiYearView } from './multi-year-view';\n","import { InjectionToken } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\n\n/**\n * Result returned from a selection strategy's select method.\n */\nexport interface SelectionResult<D, S> {\n /** The new selection value */\n selection: S;\n /** Whether the selection is complete (emit to consumer) */\n isComplete: boolean;\n /** Optional: dates to highlight during incomplete selection */\n preview?: DateRange<D> | null;\n}\n\n/**\n * Abstract selection strategy that defines how dates are selected and previewed.\n * Implement this class to create custom selection behaviors.\n *\n * @typeParam D - The date type (e.g., Date, Luxon DateTime)\n * @typeParam S - The selection type (e.g., D | null, DateRange<D>, D[])\n */\nexport abstract class CalendarSelectionStrategy<D, S = unknown> {\n /**\n * Process a date selection. Called when user clicks a date cell.\n * @param date The clicked date\n * @param currentSelection The current selection state\n * @returns Object with new selection and whether selection is complete\n */\n abstract select(date: D, currentSelection: S): SelectionResult<D, S>;\n\n /**\n * Create a preview range based on current selection and hovered date.\n * Used for showing range preview while hovering.\n * @param activeDate The currently hovered date\n * @param currentSelection The current selection state\n * @returns DateRange for preview styling, or null if no preview\n */\n abstract createPreview(activeDate: D | null, currentSelection: S): DateRange<D> | null;\n\n /**\n * Check if a date is part of the current selection.\n * Used for styling cells.\n */\n abstract isSelected(date: D, currentSelection: S): boolean;\n\n /**\n * Check if a date is the start of a selected range.\n */\n abstract isRangeStart(date: D, currentSelection: S): boolean;\n\n /**\n * Check if a date is the end of a selected range.\n */\n abstract isRangeEnd(date: D, currentSelection: S): boolean;\n\n /**\n * Check if a date is in the middle of a selected range.\n */\n abstract isRangeMiddle(date: D, currentSelection: S): boolean;\n}\n\n/** Injection token for the selection strategy */\nexport const CALENDAR_SELECTION_STRATEGY: InjectionToken<\n CalendarSelectionStrategy<unknown, unknown>\n> = new InjectionToken<CalendarSelectionStrategy<unknown, unknown>>(\n 'CalendarSelectionStrategy'\n);\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for single date selection.\n *\n * Behavior:\n * - Click date → immediately selects it\n * - No preview range\n * - Output: single date D\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: SingleSelectionStrategy }\n * ],\n * template: `<com-calendar (selectedChange)=\"onSelect($event)\" />`\n * })\n * export class SinglePickerComponent {\n * onSelect(date: Date) {\n * console.log('Selected:', date);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class SingleSelectionStrategy<D> extends CalendarSelectionStrategy<D, D | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _currentSelection: D | null): SelectionResult<D, D | null> {\n return {\n selection: date,\n isComplete: true,\n };\n }\n\n createPreview(_activeDate: D | null, _currentSelection: D | null): DateRange<D> | null {\n // Single selection has no preview\n return null;\n }\n\n isSelected(date: D, currentSelection: D | null): boolean {\n if (!currentSelection) return false;\n return this.dateAdapter.isSameDay(date, currentSelection);\n }\n\n isRangeStart(_date: D, _currentSelection: D | null): boolean {\n // No range in single selection\n return false;\n }\n\n isRangeEnd(_date: D, _currentSelection: D | null): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _currentSelection: D | null): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for date range selection.\n *\n * Behavior:\n * - First click → sets range start, selection incomplete\n * - Second click → sets range end, selection complete\n * - If second date is before first, swap them\n * - Hovering after first click shows preview range\n * - Output: DateRange<D>\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: RangeSelectionStrategy }\n * ],\n * template: `\n * <com-calendar\n * [selected]=\"selectedRange()\"\n * (selectedChange)=\"onRangeSelect($event)\"\n * />\n * `\n * })\n * export class RangePickerComponent {\n * selectedRange = signal<DateRange<Date> | null>(null);\n *\n * onRangeSelect(range: DateRange<Date>) {\n * this.selectedRange.set(range);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class RangeSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, currentSelection: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n // If no selection or selection is complete, start new range\n if (!currentSelection || (currentSelection.start && currentSelection.end)) {\n return {\n selection: { start: date, end: null },\n isComplete: false,\n };\n }\n\n // We have a start but no end - complete the range\n const start = currentSelection.start!;\n let rangeStart: D;\n let rangeEnd: D;\n\n // Ensure start <= end\n if (this.dateAdapter.compareDate(date, start) < 0) {\n rangeStart = date;\n rangeEnd = start;\n } else {\n rangeStart = start;\n rangeEnd = date;\n }\n\n return {\n selection: { start: rangeStart, end: rangeEnd },\n isComplete: true,\n };\n }\n\n createPreview(activeDate: D | null, currentSelection: DateRange<D> | null): DateRange<D> | null {\n // Only show preview when we have start but no end\n if (!activeDate || !currentSelection?.start || currentSelection.end) {\n return null;\n }\n\n const start = currentSelection.start;\n // Ensure preview has correct order\n if (this.dateAdapter.compareDate(activeDate, start) < 0) {\n return { start: activeDate, end: start };\n }\n return { start, end: activeDate };\n }\n\n isSelected(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection) return false;\n const { start, end } = currentSelection;\n if (start && this.dateAdapter.isSameDay(date, start)) return true;\n if (end && this.dateAdapter.isSameDay(date, end)) return true;\n return false;\n }\n\n isRangeStart(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.start);\n }\n\n isRangeEnd(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.end) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.end);\n }\n\n isRangeMiddle(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start || !currentSelection?.end) return false;\n return (\n this.dateAdapter.isDateInRange(date, currentSelection.start, currentSelection.end) &&\n !this.isRangeStart(date, currentSelection) &&\n !this.isRangeEnd(date, currentSelection)\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for multiple date selection.\n *\n * Behavior:\n * - Click date → toggles it in/out of selection array\n * - Each click is complete (emits immediately)\n * - No preview range\n * - Output: D[]\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: MultiSelectionStrategy }\n * ],\n * template: `<com-calendar (selectedChange)=\"onMultiSelect($event)\" />`\n * })\n * export class MultiPickerComponent {\n * selectedDates = signal<Date[]>([]);\n *\n * onMultiSelect(dates: Date[]) {\n * this.selectedDates.set(dates);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class MultiSelectionStrategy<D> extends CalendarSelectionStrategy<D, D[]> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, currentSelection: D[]): SelectionResult<D, D[]> {\n const existing = currentSelection ?? [];\n const index = existing.findIndex(d => this.dateAdapter.isSameDay(d, date));\n\n let newSelection: D[];\n if (index >= 0) {\n // Date exists, remove it\n newSelection = [...existing.slice(0, index), ...existing.slice(index + 1)];\n } else {\n // Date doesn't exist, add it\n newSelection = [...existing, date];\n }\n\n return {\n selection: newSelection,\n isComplete: true, // Each toggle is a complete action\n };\n }\n\n createPreview(_activeDate: D | null, _currentSelection: D[]): DateRange<D> | null {\n // Multi-selection has no range preview\n return null;\n }\n\n isSelected(date: D, currentSelection: D[]): boolean {\n const selection = currentSelection ?? [];\n return selection.some(d => this.dateAdapter.isSameDay(d, date));\n }\n\n isRangeStart(_date: D, _currentSelection: D[]): boolean {\n // No ranges in multi-selection\n return false;\n }\n\n isRangeEnd(_date: D, _currentSelection: D[]): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _currentSelection: D[]): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Selection strategy for week selection.\n *\n * Behavior:\n * - Click any day → selects the entire week containing that day\n * - Week starts based on DateAdapter.getFirstDayOfWeek()\n * - Single click completes selection\n * - Output: DateRange<D> (Monday–Sunday or Sunday–Saturday)\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * { provide: CALENDAR_SELECTION_STRATEGY, useClass: WeekSelectionStrategy }\n * ],\n * template: `<com-calendar (selectedChange)=\"onWeekSelect($event)\" />`\n * })\n * export class WeekPickerComponent {\n * onWeekSelect(week: DateRange<Date>) {\n * console.log('Week:', week.start, 'to', week.end);\n * }\n * }\n * ```\n */\n@Injectable()\nexport class WeekSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _currentSelection: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n const weekRange = this.getWeekRange(date);\n return {\n selection: weekRange,\n isComplete: true,\n };\n }\n\n createPreview(activeDate: D | null, _currentSelection: DateRange<D> | null): DateRange<D> | null {\n if (!activeDate) return null;\n return this.getWeekRange(activeDate);\n }\n\n isSelected(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start || !currentSelection?.end) return false;\n return this.dateAdapter.isDateInRange(date, currentSelection.start, currentSelection.end);\n }\n\n isRangeStart(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.start);\n }\n\n isRangeEnd(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.end) return false;\n return this.dateAdapter.isSameDay(date, currentSelection.end);\n }\n\n isRangeMiddle(date: D, currentSelection: DateRange<D> | null): boolean {\n if (!currentSelection?.start || !currentSelection?.end) return false;\n return (\n this.isSelected(date, currentSelection) &&\n !this.isRangeStart(date, currentSelection) &&\n !this.isRangeEnd(date, currentSelection)\n );\n }\n\n /** Compute the week range for a given date */\n private getWeekRange(date: D): DateRange<D> {\n const dayOfWeek = this.dateAdapter.getDayOfWeek(date);\n const firstDayOfWeek = this.dateAdapter.getFirstDayOfWeek();\n\n // Calculate days to subtract to get to week start\n const daysToSubtract = (dayOfWeek - firstDayOfWeek + 7) % 7;\n const weekStart = this.dateAdapter.addDays(date, -daysToSubtract);\n const weekEnd = this.dateAdapter.addDays(weekStart, 6);\n\n return { start: weekStart, end: weekEnd };\n }\n}\n","/**\n * Selection strategies for calendar component.\n * Provides pluggable selection behaviors: single, range, multiple, and week selection.\n */\n\nexport {\n CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n type SelectionResult,\n} from './selection-strategy';\n\nexport { SingleSelectionStrategy } from './single-selection-strategy';\nexport { RangeSelectionStrategy } from './range-selection-strategy';\nexport { MultiSelectionStrategy } from './multi-selection-strategy';\nexport { WeekSelectionStrategy } from './week-selection-strategy';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChildren,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n type WritableSignal,\n} from '@angular/core';\nimport { ComCalendarHeader } from './calendar-header';\nimport { calendarVariants, monthsContainerVariants } from './calendar.variants';\nimport type {\n CalendarCell,\n CalendarView,\n DateFilterFn,\n DateClassFn,\n DateRange,\n} from './calendar.types';\nimport { YEARS_PER_PAGE } from './calendar.types';\nimport { DateAdapter, DATE_ADAPTER } from './date-adapter';\nimport {\n ComCalendarMonthView,\n ComCalendarYearView,\n ComCalendarMultiYearView,\n} from './views';\nimport { getMultiYearStartingYear, isMonthDisabled, isYearDisabled } from './calendar.utils';\nimport {\n CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n RangeSelectionStrategy,\n} from './selection';\n\n/**\n * Main calendar orchestrator component.\n * Composes the calendar header and view components (month, year, multi-year)\n * with view switching, navigation, and enhanced accessibility.\n *\n * @tokens `--color-background`, `--color-foreground`, `--color-border-subtle`,\n * `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-calendar\n * [activeDate]=\"activeDate\"\n * [selected]=\"selectedDate\"\n * [minDate]=\"minDate\"\n * [maxDate]=\"maxDate\"\n * (selectedChange)=\"onDateSelected($event)\"\n * (viewChanged)=\"onViewChanged($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'com-calendar',\n template: `\n <div\n [class]=\"calendarClasses()\"\n role=\"application\"\n aria-label=\"Calendar\"\n >\n <com-calendar-header\n [periodLabel]=\"periodLabel()\"\n [periodAriaLabel]=\"periodAriaLabel()\"\n [prevAriaLabel]=\"prevAriaLabel()\"\n [nextAriaLabel]=\"nextAriaLabel()\"\n [prevDisabled]=\"prevDisabled()\"\n [nextDisabled]=\"nextDisabled()\"\n [canSwitchView]=\"currentView() !== 'multi-year'\"\n (prevClicked)=\"onPrevClicked()\"\n (nextClicked)=\"onNextClicked()\"\n (periodClicked)=\"onPeriodClicked()\"\n />\n\n <!-- Live region for screen reader announcements -->\n <div\n class=\"sr-only\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ liveAnnouncement() }}\n </div>\n\n @switch (currentView()) {\n @case ('month') {\n <div [class]=\"monthsContainerClasses()\">\n <com-calendar-month-view\n [activeDate]=\"internalActiveDate()\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateFilter]=\"dateFilter()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [gridIndex]=\"0\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 0)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n\n @if (effectiveMonthColumns() >= 2 && secondaryActiveDate()) {\n <com-calendar-month-view\n [activeDate]=\"secondaryActiveDate()!\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateFilter]=\"dateFilter()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [gridIndex]=\"1\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 1)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n </div>\n }\n @case ('year') {\n <com-calendar-year-view\n [activeDate]=\"internalActiveDate()\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n (selectedChange)=\"onMonthSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n @case ('multi-year') {\n <com-calendar-multi-year-view\n [activeDate]=\"internalActiveDate()\"\n [selected]=\"selected()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n (selectedChange)=\"onYearSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n }\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n ComCalendarHeader,\n ComCalendarMonthView,\n ComCalendarYearView,\n ComCalendarMultiYearView,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-calendar-host block',\n },\n})\nexport class ComCalendar<D> {\n /** Date adapter for date operations */\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** Optional selection strategy for custom selection behaviors */\n private readonly selectionStrategy = inject(CALENDAR_SELECTION_STRATEGY, {\n optional: true,\n }) as CalendarSelectionStrategy<D, unknown> | null;\n\n /** Query for month views for cross-grid focus management */\n private readonly monthViews: Signal<readonly ComCalendarMonthView<D>[]> = viewChildren(ComCalendarMonthView<D>);\n\n /** The date to display and navigate from */\n readonly activeDate: InputSignal<D | undefined> = input<D>();\n\n /** The currently selected date or date range */\n readonly selected: InputSignal<D | DateRange<D> | null> = input<D | DateRange<D> | null>(null);\n\n /** Minimum selectable date */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Custom function to add CSS classes to dates */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** Whether to show the card border and shadow. Set to false when used inside datepicker panel. */\n readonly bordered: InputSignal<boolean> = input<boolean>(true);\n\n /** Initial view to display */\n readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** Override first day of week (0=Sun, 1=Mon, ..., 6=Sat). Uses locale default if null. */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /** Number of months to display side-by-side (1 or 2). Defaults to 2 when RangeSelectionStrategy is used. */\n readonly monthColumns: InputSignal<number> = input<number>(1);\n\n /** Computed first day of week (input override or adapter default) */\n readonly computedFirstDayOfWeek: Signal<number> = computed(() => {\n const override = this.firstDayOfWeek();\n if (override !== null && override >= 0 && override <= 6) {\n return override;\n }\n return this.dateAdapter.getFirstDayOfWeek();\n });\n\n /** Effective number of month columns (auto-defaults to 2 for RangeSelectionStrategy) */\n readonly effectiveMonthColumns: Signal<number> = computed(() => {\n const explicit = this.monthColumns();\n if (explicit !== 1) return explicit; // User override\n\n // Auto-default to 2 when RangeSelectionStrategy is injected\n if (this.selectionStrategy instanceof RangeSelectionStrategy) return 2;\n return 1;\n });\n\n /** Secondary active date for dual-month display (+1 month from primary) */\n readonly secondaryActiveDate: Signal<D | null> = computed(() => {\n if (this.effectiveMonthColumns() < 2) return null;\n return this.dateAdapter.addMonths(this.internalActiveDate(), 1);\n });\n\n /** Custom template for cell content */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> = input<\n TemplateRef<{ $implicit: CalendarCell<D> }> | null\n >(null);\n\n /** Emitted when a date is selected */\n readonly selectedChange: OutputEmitterRef<D> = output<D>();\n\n /** Emitted when the view changes */\n readonly viewChanged: OutputEmitterRef<CalendarView> = output<CalendarView>();\n\n /** Emitted when the active date changes */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Current view state (synced from startView input, writable for view switching) */\n readonly currentView: WritableSignal<CalendarView> = linkedSignal(() => this.startView());\n\n /** Internal active date (synced from activeDate input, writable for navigation) */\n readonly internalActiveDate: WritableSignal<D> = linkedSignal(() =>\n this.activeDate() ?? this.dateAdapter.today()\n );\n\n /** Live announcement for screen readers */\n readonly liveAnnouncement: WritableSignal<string> = signal<string>('');\n\n /** Internal selection state managed by strategy (synced from selected input) */\n readonly internalSelection: WritableSignal<unknown> = linkedSignal(() => this.selected());\n\n /** Currently hovered/previewed date */\n readonly previewDate: WritableSignal<D | null> = signal<D | null>(null);\n\n /** Computed preview range from strategy */\n readonly previewRange: Signal<DateRange<D> | null> = computed(() => {\n if (!this.selectionStrategy) return null;\n return this.selectionStrategy.createPreview(\n this.previewDate(),\n this.internalSelection()\n );\n });\n\n /** Calendar container classes */\n readonly calendarClasses: Signal<string> = computed(() =>\n calendarVariants({ bordered: this.bordered() })\n );\n\n /** Months container classes for single/dual-month layout */\n readonly monthsContainerClasses: Signal<string> = computed(() =>\n monthsContainerVariants({ columns: this.effectiveMonthColumns() as 1 | 2 })\n );\n\n /** Month names for formatting */\n private readonly monthNames: Signal<string[]> = computed(() =>\n this.dateAdapter.getMonthNames('long')\n );\n\n /** Period label for the header (e.g., \"January 2024\", \"January – February 2024\", \"2024\", \"2000 – 2023\") */\n readonly periodLabel: Signal<string> = computed(() => {\n const date = this.internalActiveDate();\n const view = this.currentView();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'month': {\n const monthName = this.monthNames()[month];\n\n // Multi-month: \"January – February 2026\" or \"December 2025 – January 2026\"\n if (this.effectiveMonthColumns() >= 2) {\n const secondDate = this.secondaryActiveDate()!;\n const secondMonth = this.dateAdapter.getMonth(secondDate);\n const secondYear = this.dateAdapter.getYear(secondDate);\n const secondMonthName = this.monthNames()[secondMonth];\n\n if (year === secondYear) {\n return `${monthName} – ${secondMonthName} ${year}`;\n }\n return `${monthName} ${year} – ${secondMonthName} ${secondYear}`;\n }\n return `${monthName} ${year}`;\n }\n case 'year':\n return `${year}`;\n case 'multi-year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n const endYear = startYear + YEARS_PER_PAGE - 1;\n return `${startYear} – ${endYear}`;\n }\n }\n });\n\n /** Accessible label for the period button */\n readonly periodAriaLabel: Signal<string> = computed(() => {\n const view = this.currentView();\n const label = this.periodLabel();\n\n switch (view) {\n case 'month':\n return `${label}, click to switch to year view`;\n case 'year':\n return `${label}, click to switch to multi-year view`;\n case 'multi-year':\n return label;\n }\n });\n\n /** Accessible label for the previous button */\n readonly prevAriaLabel: Signal<string> = computed(() => {\n const view = this.currentView();\n switch (view) {\n case 'month':\n return 'Previous month';\n case 'year':\n return 'Previous year';\n case 'multi-year':\n return `Previous ${YEARS_PER_PAGE} years`;\n }\n });\n\n /** Accessible label for the next button */\n readonly nextAriaLabel: Signal<string> = computed(() => {\n const view = this.currentView();\n switch (view) {\n case 'month':\n return 'Next month';\n case 'year':\n return 'Next year';\n case 'multi-year':\n return `Next ${YEARS_PER_PAGE} years`;\n }\n });\n\n /** Whether the previous button is disabled */\n readonly prevDisabled: Signal<boolean> = computed(() => {\n const date = this.internalActiveDate();\n const minDate = this.minDate();\n if (!minDate) return false;\n\n const view = this.currentView();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'month': {\n // Disabled if previous month is entirely before min\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n return isMonthDisabled(prevYear, prevMonth, minDate, null, this.dateAdapter);\n }\n case 'year': {\n // Disabled if previous year is entirely before min\n return isYearDisabled(year - 1, minDate, null, this.dateAdapter);\n }\n case 'multi-year': {\n // Disabled if previous page's last year is before min\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n const prevPageLastYear = startYear - 1;\n return isYearDisabled(prevPageLastYear, minDate, null, this.dateAdapter);\n }\n }\n });\n\n /** Whether the next button is disabled */\n readonly nextDisabled: Signal<boolean> = computed(() => {\n const date = this.internalActiveDate();\n const maxDate = this.maxDate();\n if (!maxDate) return false;\n\n const view = this.currentView();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'month': {\n // Disabled if next month is entirely after max\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n return isMonthDisabled(nextYear, nextMonth, null, maxDate, this.dateAdapter);\n }\n case 'year': {\n // Disabled if next year is entirely after max\n return isYearDisabled(year + 1, null, maxDate, this.dateAdapter);\n }\n case 'multi-year': {\n // Disabled if next page's first year is after max\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n const nextPageFirstYear = startYear + YEARS_PER_PAGE;\n return isYearDisabled(nextPageFirstYear, null, maxDate, this.dateAdapter);\n }\n }\n });\n\n /**\n * Handles previous button click.\n * Navigates to the previous period based on current view.\n */\n onPrevClicked(): void {\n const view = this.currentView();\n const date = this.internalActiveDate();\n let newDate: D;\n\n switch (view) {\n case 'month':\n newDate = this.dateAdapter.addMonths(date, -1);\n break;\n case 'year':\n newDate = this.dateAdapter.addYears(date, -1);\n break;\n case 'multi-year':\n newDate = this.dateAdapter.addYears(date, -YEARS_PER_PAGE);\n break;\n }\n\n this.internalActiveDate.set(newDate);\n this.activeDateChange.emit(newDate);\n this.announceNavigation('previous');\n }\n\n /**\n * Handles next button click.\n * Navigates to the next period based on current view.\n */\n onNextClicked(): void {\n const view = this.currentView();\n const date = this.internalActiveDate();\n let newDate: D;\n\n switch (view) {\n case 'month':\n newDate = this.dateAdapter.addMonths(date, 1);\n break;\n case 'year':\n newDate = this.dateAdapter.addYears(date, 1);\n break;\n case 'multi-year':\n newDate = this.dateAdapter.addYears(date, YEARS_PER_PAGE);\n break;\n }\n\n this.internalActiveDate.set(newDate);\n this.activeDateChange.emit(newDate);\n this.announceNavigation('next');\n }\n\n /**\n * Handles period label click.\n * Switches to the next higher view (month → year → multi-year).\n */\n onPeriodClicked(): void {\n const current = this.currentView();\n if (current === 'month') {\n this.currentView.set('year');\n } else if (current === 'year') {\n this.currentView.set('multi-year');\n }\n // multi-year cannot switch further up\n this.viewChanged.emit(this.currentView());\n this.announceViewChange();\n }\n\n /**\n * Handles date selection from month view.\n * Uses selection strategy if available, otherwise emits directly.\n */\n onDateSelected(date: D): void {\n if (this.selectionStrategy) {\n const result = this.selectionStrategy.select(date, this.internalSelection());\n this.internalSelection.set(result.selection);\n\n if (result.isComplete) {\n // Cast to D for the output - the strategy determines the actual type\n this.selectedChange.emit(result.selection as D);\n }\n } else {\n // Fallback: default single selection behavior\n this.selectedChange.emit(date);\n }\n }\n\n /**\n * Handles preview change from views (mouse hover).\n * Updates the preview date for strategy to compute preview range.\n */\n onPreviewChange(date: D | null): void {\n this.previewDate.set(date);\n }\n\n /**\n * Handles month selection from year view.\n * Drills down to month view with the selected month.\n */\n onMonthSelected(date: D): void {\n this.internalActiveDate.set(date);\n this.currentView.set('month');\n this.viewChanged.emit('month');\n this.activeDateChange.emit(date);\n this.announceViewChange();\n }\n\n /**\n * Handles year selection from multi-year view.\n * Drills down to year view with the selected year.\n */\n onYearSelected(date: D): void {\n this.internalActiveDate.set(date);\n this.currentView.set('year');\n this.viewChanged.emit('year');\n this.activeDateChange.emit(date);\n this.announceViewChange();\n }\n\n /**\n * Handles active date change from child views (keyboard navigation).\n * In dual-month mode, handles cross-grid focus transitions.\n */\n onActiveDateChange(date: D, gridIndex?: number): void {\n const views = this.monthViews();\n\n // In dual-month mode, check if we should focus the other grid\n if (this.effectiveMonthColumns() >= 2 && views.length === 2 && gridIndex !== undefined) {\n const primaryMonth = this.dateAdapter.getMonth(this.internalActiveDate());\n const secondaryMonth = this.dateAdapter.getMonth(this.secondaryActiveDate()!);\n const targetMonth = this.dateAdapter.getMonth(date);\n\n // Determine which grid the target date belongs to\n if (gridIndex === 0 && targetMonth === secondaryMonth) {\n // Navigated from left grid into right grid - focus right grid\n const rightView = views[1];\n if (rightView) {\n const compareValue = this.computeCompareValue(date);\n rightView.focusCell(compareValue);\n return;\n }\n }\n if (gridIndex === 1 && targetMonth === primaryMonth) {\n // Navigated from right grid into left grid - focus left grid\n const leftView = views[0];\n if (leftView) {\n const compareValue = this.computeCompareValue(date);\n leftView.focusCell(compareValue);\n return;\n }\n }\n }\n\n // Default: update active date and let normal navigation occur\n this.internalActiveDate.set(date);\n this.activeDateChange.emit(date);\n }\n\n /**\n * Computes a unique compare value from a date for focus management.\n */\n private computeCompareValue(date: D): number {\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n const day = this.dateAdapter.getDate(date);\n return year * 10000 + month * 100 + day;\n }\n\n /**\n * Announces a view change to screen readers.\n */\n private announceViewChange(): void {\n const view = this.currentView();\n const label = this.periodLabel();\n const viewLabel = view === 'multi-year' ? 'multi-year' : view;\n this.liveAnnouncement.set(`${viewLabel} view, ${label}`);\n }\n\n /**\n * Announces navigation to screen readers.\n */\n private announceNavigation(direction: 'previous' | 'next'): void {\n this.liveAnnouncement.set(`Navigated to ${direction} ${this.periodLabel()}`);\n }\n}\n","import type { Provider } from '@angular/core';\nimport { DATE_ADAPTER, NativeDateAdapter } from './date-adapter';\nimport { CALENDAR_SELECTION_STRATEGY } from './selection/selection-strategy';\nimport { SingleSelectionStrategy } from './selection/single-selection-strategy';\nimport { RangeSelectionStrategy } from './selection/range-selection-strategy';\nimport { MultiSelectionStrategy } from './selection/multi-selection-strategy';\nimport { WeekSelectionStrategy } from './selection/week-selection-strategy';\n\n/**\n * Provides the native JavaScript Date adapter for the calendar.\n * This is required for the calendar component to work with native Date objects.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideNativeDateAdapter()],\n * })\n * export class MyComponent {}\n * ```\n */\nexport function provideNativeDateAdapter(): Provider {\n return { provide: DATE_ADAPTER, useClass: NativeDateAdapter };\n}\n\n/**\n * Provides the single selection strategy (default behavior).\n * Allows selecting one date at a time.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideSingleSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {}\n * ```\n */\nexport function provideSingleSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: SingleSelectionStrategy };\n}\n\n/**\n * Provides the range selection strategy.\n * Allows selecting a start and end date to create a date range.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideRangeSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {\n * range = signal<DateRange<Date> | null>(null);\n * }\n * ```\n */\nexport function provideRangeSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: RangeSelectionStrategy };\n}\n\n/**\n * Provides the multi selection strategy.\n * Allows selecting multiple individual dates.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideMultiSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {\n * dates = signal<Date[]>([]);\n * }\n * ```\n */\nexport function provideMultiSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: MultiSelectionStrategy };\n}\n\n/**\n * Provides the week selection strategy.\n * Allows selecting entire weeks at a time.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [\n * provideNativeDateAdapter(),\n * provideWeekSelectionStrategy(),\n * ],\n * })\n * export class MyComponent {\n * range = signal<DateRange<Date> | null>(null);\n * }\n * ```\n */\nexport function provideWeekSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: WeekSelectionStrategy };\n}\n","/**\n * Types and interfaces for DatePicker and DateRangePicker components.\n */\n\n/** Date format preset names */\nexport type DateFormatPreset =\n | 'short' | 'medium' | 'long' | 'full'\n | 'time' | 'timeWithSeconds'\n | 'dateTimeShort' | 'dateTimeMedium' | 'dateTimeLong';\n\n/** Panel width configuration */\nexport type DatepickerPanelWidth = 'auto' | 'trigger' | `${number}px` | `${number}rem`;\n\n/** Size variants for datepicker components */\nexport type DatepickerSize = 'sm' | 'default' | 'lg';\n\n/** Visual variant for datepicker trigger */\nexport type DatepickerVariant = 'default' | 'outline' | 'ghost' | 'filled';\n\n/** Validation state for datepicker */\nexport type DatepickerState = 'default' | 'error' | 'success';\n\n/** Configuration for datepicker footer actions */\nexport interface DatepickerFooterConfig {\n /** Show today button */\n showToday?: boolean;\n /** Show clear button */\n showClear?: boolean;\n /** Custom today button label */\n todayLabel?: string;\n /** Custom clear button label */\n clearLabel?: string;\n}\n\n/** Value type for DateRangePicker */\nexport interface DateRangeValue<D> {\n /** Start date of the range */\n start: D | null;\n /** End date of the range */\n end: D | null;\n}\n\n/** Creates a DateRangeValue */\nexport function createDateRangeValue<D>(\n start: D | null = null,\n end: D | null = null\n): DateRangeValue<D> {\n return { start, end };\n}\n\n/** Generates a unique ID for datepicker instances */\nlet datepickerIdCounter = 0;\nexport function generateDatepickerId(): string {\n return `com-datepicker-${datepickerIdCounter++}`;\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type {\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n} from './datepicker.types';\n\n/**\n * CVA variants for the datepicker trigger input.\n * Uses semantic theme tokens for consistent cross-theme styling.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-hover`,\n * `--color-warn`, `--color-success`, `--color-primary`, `--color-border`,\n * `--color-disabled`, `--color-disabled-foreground`, `--radius-input`\n */\nexport const datepickerTriggerVariants: (props?: {\n variant?: DatepickerVariant;\n size?: DatepickerSize;\n state?: DatepickerState;\n open?: boolean;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-between',\n 'w-full',\n 'rounded-input',\n 'border',\n 'bg-input-background',\n 'text-input-foreground',\n 'transition-colors',\n 'duration-150',\n 'placeholder:text-input-placeholder',\n 'focus-within:outline-[1px]',\n 'focus-within:outline-offset-2',\n 'focus-within:outline-ring',\n 'cursor-pointer',\n ],\n {\n variants: {\n variant: {\n default: [\n 'border-input-border',\n 'hover:border-border',\n ],\n outline: [\n 'border-2',\n 'border-input-border',\n 'hover:border-foreground',\n ],\n ghost: [\n 'border-transparent',\n 'bg-transparent',\n 'hover:bg-muted',\n ],\n filled: [\n 'border-transparent',\n 'bg-muted',\n 'hover:bg-muted-hover',\n ],\n },\n size: {\n sm: ['h-8', 'px-2', 'text-xs', 'gap-1'],\n default: ['h-10', 'px-3', 'text-sm', 'gap-2'],\n lg: ['h-12', 'px-4', 'text-base', 'gap-3'],\n },\n state: {\n default: [],\n error: [\n 'border-warn',\n 'focus-within:outline-warn',\n ],\n success: [\n 'border-success',\n 'focus-within:outline-success',\n ],\n },\n open: {\n true: ['outline-[1px]', 'outline-ring', 'border-primary'],\n false: [],\n },\n },\n compoundVariants: [\n {\n open: true,\n variant: 'default',\n class: ['border-primary'],\n },\n {\n open: true,\n variant: 'outline',\n class: ['border-primary'],\n },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'default',\n state: 'default',\n open: false,\n },\n }\n);\n\nexport type DatepickerTriggerVariants = VariantProps<typeof datepickerTriggerVariants>;\n\n/**\n * CVA variants for the disabled state of datepicker trigger.\n *\n * @tokens `--color-disabled`, `--color-disabled-foreground`\n */\nexport const datepickerDisabledVariants: () => string = cva([\n 'cursor-not-allowed',\n 'bg-disabled',\n 'text-disabled-foreground',\n 'hover:border-input-border',\n 'pointer-events-none',\n]);\n\nexport type DatepickerDisabledVariants = VariantProps<typeof datepickerDisabledVariants>;\n\n/**\n * CVA variants for the datepicker input field.\n *\n * @tokens `--color-input-foreground`, `--color-input-placeholder`\n */\nexport const datepickerInputVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'flex-1',\n 'bg-transparent',\n 'outline-none',\n 'placeholder:text-input-placeholder',\n 'disabled:cursor-not-allowed',\n 'min-w-0',\n 'truncate',\n ],\n {\n variants: {\n size: {\n sm: ['text-xs'],\n default: ['text-sm'],\n lg: ['text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerInputVariants = VariantProps<typeof datepickerInputVariants>;\n\n/**\n * CVA variants for the calendar icon button.\n *\n * @tokens `--color-ring`, `--color-muted-foreground`, `--radius-interactive-sm`\n */\nexport const datepickerIconVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'shrink-0',\n 'text-muted-foreground',\n 'transition-colors',\n 'hover:text-foreground',\n 'focus-visible:outline-[1px]',\n 'focus-visible:outline-offset-2',\n 'focus-visible:outline-ring',\n 'rounded-interactive-sm',\n ],\n {\n variants: {\n size: {\n sm: ['h-4', 'w-4'],\n default: ['h-5', 'w-5'],\n lg: ['h-6', 'w-6'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerIconVariants = VariantProps<typeof datepickerIconVariants>;\n\n/**\n * CVA variants for the clear button.\n *\n * @tokens `--color-ring`, `--color-muted-foreground`, `--color-foreground`, `--radius-interactive-sm`\n */\nexport const datepickerClearVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'rounded-interactive-sm',\n 'text-muted-foreground',\n 'transition-colors',\n 'hover:text-foreground',\n 'focus-visible:outline-[1px]',\n 'focus-visible:outline-offset-2',\n 'focus-visible:outline-ring',\n 'shrink-0',\n ],\n {\n variants: {\n size: {\n sm: ['h-4', 'w-4'],\n default: ['h-5', 'w-5'],\n lg: ['h-6', 'w-6'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerClearVariants = VariantProps<typeof datepickerClearVariants>;\n\n/**\n * CVA variants for the datepicker panel (overlay).\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`, `--radius-overlay`\n */\nexport const datepickerPanelVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'z-50',\n 'overflow-hidden',\n 'rounded-overlay',\n 'border',\n 'border-border-subtle',\n 'bg-popover',\n 'text-popover-foreground',\n 'shadow-lg',\n 'outline-none',\n ],\n {\n variants: {\n size: {\n sm: ['p-2', 'text-xs'],\n default: ['p-3', 'text-sm'],\n lg: ['p-4', 'text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerPanelVariants = VariantProps<typeof datepickerPanelVariants>;\n\n/**\n * CVA variants for the footer section of the datepicker panel.\n *\n * @tokens `--color-border-subtle`\n */\nexport const datepickerFooterVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'flex',\n 'items-center',\n 'justify-between',\n 'border-t',\n 'border-border-subtle',\n 'mt-3',\n 'pt-3',\n ],\n {\n variants: {\n size: {\n sm: ['mt-2', 'pt-2', 'gap-1'],\n default: ['mt-3', 'pt-3', 'gap-2'],\n lg: ['mt-4', 'pt-4', 'gap-3'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerFooterVariants = VariantProps<typeof datepickerFooterVariants>;\n\n/**\n * CVA variants for the footer buttons.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`, `--radius-control-sm`\n */\nexport const datepickerFooterButtonVariants: (props?: {\n size?: DatepickerSize;\n variant?: 'primary' | 'secondary';\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'rounded-control-sm',\n 'font-medium',\n 'transition-colors',\n 'focus-visible:outline-[1px]',\n 'focus-visible:outline-offset-2',\n 'focus-visible:outline-ring',\n ],\n {\n variants: {\n size: {\n sm: ['h-7', 'px-2', 'text-xs'],\n default: ['h-8', 'px-3', 'text-sm'],\n lg: ['h-9', 'px-4', 'text-base'],\n },\n variant: {\n primary: [\n 'bg-primary',\n 'text-primary-foreground',\n 'hover:bg-primary-hover',\n ],\n secondary: [\n 'bg-muted',\n 'text-muted-foreground',\n 'hover:bg-muted-hover',\n ],\n },\n },\n defaultVariants: {\n size: 'default',\n variant: 'secondary',\n },\n }\n);\n\nexport type DatepickerFooterButtonVariants = VariantProps<typeof datepickerFooterButtonVariants>;\n\n/**\n * CVA variants for the range separator.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const datepickerRangeSeparatorVariants: (props?: {\n size?: DatepickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'text-muted-foreground',\n 'shrink-0',\n ],\n {\n variants: {\n size: {\n sm: ['px-1', 'text-xs'],\n default: ['px-2', 'text-sm'],\n lg: ['px-3', 'text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport type DatepickerRangeSeparatorVariants = VariantProps<typeof datepickerRangeSeparatorVariants>;\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type { TimePickerSize, TimePickerVariant, TimePickerState } from './timepicker.types';\n\n/**\n * CVA variants for the time picker container.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-ring`, `--color-warn`, `--color-success`, `--radius-input`\n */\nexport const timepickerContainerVariants: (props?: {\n variant?: TimePickerVariant;\n size?: TimePickerSize;\n state?: TimePickerState;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'gap-1',\n 'rounded-input',\n 'transition-colors',\n 'duration-150',\n ],\n {\n variants: {\n variant: {\n standalone: [\n 'border',\n 'border-input-border',\n 'bg-input-background',\n 'text-input-foreground',\n 'focus-within:outline-[1px]',\n 'focus-within:outline-offset-2',\n 'focus-within:outline-ring',\n ],\n embedded: [\n 'border-transparent',\n 'bg-transparent',\n 'text-foreground',\n ],\n },\n size: {\n sm: ['h-8', 'px-2', 'text-xs', 'gap-0.5'],\n default: ['h-10', 'px-3', 'text-sm', 'gap-1'],\n lg: ['h-12', 'px-4', 'text-base', 'gap-1.5'],\n },\n state: {\n default: [],\n error: [\n 'border-warn',\n 'focus-within:outline-warn',\n ],\n success: [\n 'border-success',\n 'focus-within:outline-success',\n ],\n },\n },\n compoundVariants: [\n {\n variant: 'embedded',\n state: 'error',\n class: [],\n },\n {\n variant: 'embedded',\n state: 'success',\n class: [],\n },\n ],\n defaultVariants: {\n variant: 'standalone',\n size: 'default',\n state: 'default',\n },\n },\n);\n\nexport type TimepickerContainerVariants = VariantProps<typeof timepickerContainerVariants>;\n\n/**\n * CVA variants for the disabled state of time picker.\n *\n * @tokens `--color-disabled`, `--color-disabled-foreground`\n */\nexport const timepickerDisabledVariants: () => string = cva([\n 'cursor-not-allowed',\n 'bg-disabled',\n 'text-disabled-foreground',\n 'pointer-events-none',\n]);\n\nexport type TimepickerDisabledVariants = VariantProps<typeof timepickerDisabledVariants>;\n\n/**\n * CVA variants for each time segment input.\n *\n * @tokens `--color-primary-subtle`, `--color-primary-subtle-foreground`, `--radius-interactive-sm`\n */\nexport const timepickerSegmentVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'bg-transparent',\n 'outline-none',\n 'text-center',\n 'font-mono',\n 'tabular-nums',\n 'select-all',\n 'focus:bg-primary-subtle',\n 'focus:text-primary-subtle-foreground',\n 'focus:rounded-interactive-sm',\n ],\n {\n variants: {\n size: {\n sm: ['w-5', 'text-xs'],\n default: ['w-7', 'text-sm'],\n lg: ['w-9', 'text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerSegmentVariants = VariantProps<typeof timepickerSegmentVariants>;\n\n/**\n * CVA variants for the colon separator.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const timepickerSeparatorVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'text-muted-foreground',\n 'select-none',\n 'font-mono',\n ],\n {\n variants: {\n size: {\n sm: ['text-xs'],\n default: ['text-sm'],\n lg: ['text-base'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerSeparatorVariants = VariantProps<typeof timepickerSeparatorVariants>;\n\n/**\n * CVA variants for the AM/PM toggle button.\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`, `--color-ring`,\n * `--radius-control-sm`\n */\nexport const timepickerPeriodVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'rounded-control-sm',\n 'font-medium',\n 'transition-colors',\n 'select-none',\n 'bg-muted',\n 'text-muted-foreground',\n 'hover:bg-muted-hover',\n 'focus-visible:outline-[1px]',\n 'focus-visible:outline-offset-2',\n 'focus-visible:outline-ring',\n ],\n {\n variants: {\n size: {\n sm: ['h-5', 'px-1', 'text-xs', 'ml-0.5'],\n default: ['h-6', 'px-1.5', 'text-xs', 'ml-1'],\n lg: ['h-7', 'px-2', 'text-sm', 'ml-1.5'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerPeriodVariants = VariantProps<typeof timepickerPeriodVariants>;\n\n/**\n * CVA variants for the time section divider in datepicker panel.\n *\n * @tokens `--color-border-subtle`\n */\nexport const timepickerSectionVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'flex',\n 'items-center',\n 'justify-center',\n 'border-t',\n 'border-border-subtle',\n ],\n {\n variants: {\n size: {\n sm: ['pt-2', 'mt-2'],\n default: ['pt-3', 'mt-3'],\n lg: ['pt-4', 'mt-4'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerSectionVariants = VariantProps<typeof timepickerSectionVariants>;\n\n/**\n * CVA variants for time labels in date range picker.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const timepickerLabelVariants: (props?: {\n size?: TimePickerSize;\n}) => string = cva(\n [\n 'text-muted-foreground',\n 'font-medium',\n ],\n {\n variants: {\n size: {\n sm: ['text-xs'],\n default: ['text-xs'],\n lg: ['text-sm'],\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n);\n\nexport type TimepickerLabelVariants = VariantProps<typeof timepickerLabelVariants>;\n","/**\n * Types and interfaces for the TimePicker component.\n */\n\n/** Value type for the standalone time picker */\nexport interface ComTimeValue {\n /** Hours (0-23, always stored in 24h format internally) */\n hours: number;\n /** Minutes (0-59) */\n minutes: number;\n /** Seconds (0-59) */\n seconds: number;\n}\n\n/** Creates a ComTimeValue */\nexport function createTimeValue(\n hours: number = 0,\n minutes: number = 0,\n seconds: number = 0,\n): ComTimeValue {\n return { hours, minutes, seconds };\n}\n\n/**\n * Compares two ComTimeValue objects.\n * @returns negative if a < b, 0 if equal, positive if a > b\n */\nexport function compareTime(a: ComTimeValue, b: ComTimeValue): number {\n const diff = a.hours * 3600 + a.minutes * 60 + a.seconds - (b.hours * 3600 + b.minutes * 60 + b.seconds);\n return diff;\n}\n\n/** Generates a unique ID for time picker instances */\nlet timePickerIdCounter = 0;\nexport function generateTimePickerId(): string {\n return `com-time-picker-${timePickerIdCounter++}`;\n}\n\n/** Size variants for time picker */\nexport type TimePickerSize = 'sm' | 'default' | 'lg';\n\n/** Visual variant */\nexport type TimePickerVariant = 'standalone' | 'embedded';\n\n/** Validation state */\nexport type TimePickerState = 'default' | 'error' | 'success';\n\n/** Period for 12-hour format */\nexport type TimePeriod = 'AM' | 'PM';\n\n/** Segment type */\nexport type TimeSegment = 'hours' | 'minutes' | 'seconds';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n LOCALE_ID,\n linkedSignal,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type {\n ElementRef,\n InputSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\n\nimport { joinClasses } from '../calendar.utils';\nimport {\n timepickerContainerVariants,\n timepickerDisabledVariants,\n timepickerSegmentVariants,\n timepickerSeparatorVariants,\n timepickerPeriodVariants,\n} from './timepicker.variants';\nimport type {\n ComTimeValue,\n TimePickerSize,\n TimePickerVariant,\n TimePickerState,\n TimePeriod,\n TimeSegment,\n} from './timepicker.types';\nimport { compareTime, generateTimePickerId } from './timepicker.types';\n\n/**\n * Time picker component with segmented numeric input fields.\n * Supports standalone usage with ControlValueAccessor and embedded usage\n * within datepicker/date-range-picker panels.\n *\n * Visual layout: `[HH] : [MM] : [SS] [AM|PM]`\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-ring`, `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-disabled`, `--color-disabled-foreground`,\n * `--color-warn`, `--color-success`, `--color-border`\n *\n * @example\n * ```html\n * <!-- Standalone with reactive forms -->\n * <com-time-picker formControlName=\"startTime\" />\n *\n * <!-- 12-hour format with seconds -->\n * <com-time-picker formControlName=\"alarm\" [use12HourFormat]=\"true\" [showSeconds]=\"true\" />\n *\n * <!-- 15-minute steps -->\n * <com-time-picker formControlName=\"meeting\" [minuteStep]=\"15\" />\n *\n * <!-- Embedded inside datepicker panel -->\n * <com-time-picker variant=\"embedded\" [value]=\"time\" (timeChange)=\"onTime($event)\" />\n * ```\n */\n@Component({\n selector: 'com-time-picker',\n exportAs: 'comTimePicker',\n template: `\n <div [class]=\"containerClasses()\">\n <!-- Hours -->\n <input\n #hoursInput\n type=\"text\"\n inputmode=\"numeric\"\n role=\"spinbutton\"\n [class]=\"segmentClasses()\"\n [attr.aria-label]=\"'Hours'\"\n [attr.aria-valuenow]=\"displayHours()\"\n [attr.aria-valuemin]=\"is12Hour() ? 1 : 0\"\n [attr.aria-valuemax]=\"is12Hour() ? 12 : 23\"\n [value]=\"formattedHours()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n maxlength=\"2\"\n (keydown)=\"onSegmentKeydown($event, 'hours')\"\n (input)=\"onSegmentInput($event, 'hours')\"\n (focus)=\"onSegmentFocus('hours')\"\n (blur)=\"onSegmentBlur('hours')\"\n />\n\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <!-- Minutes -->\n <input\n #minutesInput\n type=\"text\"\n inputmode=\"numeric\"\n role=\"spinbutton\"\n [class]=\"segmentClasses()\"\n [attr.aria-label]=\"'Minutes'\"\n [attr.aria-valuenow]=\"internalValue()?.minutes ?? null\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [value]=\"formattedMinutes()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n maxlength=\"2\"\n (keydown)=\"onSegmentKeydown($event, 'minutes')\"\n (input)=\"onSegmentInput($event, 'minutes')\"\n (focus)=\"onSegmentFocus('minutes')\"\n (blur)=\"onSegmentBlur('minutes')\"\n />\n\n @if (showSeconds()) {\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <!-- Seconds -->\n <input\n #secondsInput\n type=\"text\"\n inputmode=\"numeric\"\n role=\"spinbutton\"\n [class]=\"segmentClasses()\"\n [attr.aria-label]=\"'Seconds'\"\n [attr.aria-valuenow]=\"internalValue()?.seconds ?? null\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [value]=\"formattedSeconds()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n maxlength=\"2\"\n (keydown)=\"onSegmentKeydown($event, 'seconds')\"\n (input)=\"onSegmentInput($event, 'seconds')\"\n (focus)=\"onSegmentFocus('seconds')\"\n (blur)=\"onSegmentBlur('seconds')\"\n />\n }\n\n @if (is12Hour()) {\n <button\n #periodButton\n type=\"button\"\n [class]=\"periodClasses()\"\n [attr.aria-label]=\"'Toggle AM/PM, currently ' + period()\"\n [disabled]=\"disabled()\"\n (click)=\"togglePeriod()\"\n (keydown)=\"onPeriodKeydown($event)\"\n >\n {{ period() }}\n </button>\n }\n </div>\n\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-time-picker-host inline-block',\n '[class.com-time-picker-disabled]': 'disabled()',\n '[attr.role]': '\"group\"',\n '[attr.aria-label]': 'ariaLabel() || \"Time picker\"',\n '[attr.aria-disabled]': 'disabled() || null',\n },\n})\nexport class ComTimePicker implements ControlValueAccessor, Validator {\n private readonly localeId: string = inject(LOCALE_ID);\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly timepickerId: string = generateTimePickerId();\n\n private readonly hoursInputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('hoursInput');\n private readonly minutesInputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('minutesInput');\n private readonly secondsInputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('secondsInput');\n private readonly periodButtonRef: Signal<ElementRef<HTMLButtonElement> | undefined> =\n viewChild<ElementRef<HTMLButtonElement>>('periodButton');\n\n // ============ INPUTS ============\n\n /** Current time value. */\n readonly value: InputSignal<ComTimeValue | null> = input<ComTimeValue | null>(null);\n\n /** Whether the time picker is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether the time picker is required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether to show the seconds segment. */\n readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n /** 12h vs 24h format. `null` = auto-detect from locale. */\n readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Step interval for minutes. */\n readonly minuteStep: InputSignal<number> = input<number>(1);\n\n /** Step interval for seconds. */\n readonly secondStep: InputSignal<number> = input<number>(1);\n\n /** Minimum selectable time. */\n readonly minTime: InputSignal<ComTimeValue | null> = input<ComTimeValue | null>(null);\n\n /** Maximum selectable time. */\n readonly maxTime: InputSignal<ComTimeValue | null> = input<ComTimeValue | null>(null);\n\n /** Visual variant. */\n readonly variant: InputSignal<TimePickerVariant> = input<TimePickerVariant>('standalone');\n\n /** Size variant. */\n readonly size: InputSignal<TimePickerSize> = input<TimePickerSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<TimePickerState> = input<TimePickerState>('default');\n\n /** Accessible label for the group. */\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Additional CSS classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Placeholder text for empty segments. */\n readonly placeholder: InputSignal<string> = input<string>('--');\n\n // ============ OUTPUTS ============\n\n /** Emitted when time value changes. */\n readonly timeChange: OutputEmitterRef<ComTimeValue | null> = output<ComTimeValue | null>();\n\n // ============ INTERNAL STATE ============\n\n /** Internal value state. */\n readonly internalValue: WritableSignal<ComTimeValue | null> = linkedSignal<ComTimeValue | null>(\n () => this.value() ?? null,\n );\n\n /** Which segment is currently focused. */\n readonly activeSegment: WritableSignal<TimeSegment | 'period' | null> = signal(null);\n\n /** Pending typed digits for auto-advance. */\n readonly pendingDigits: WritableSignal<string> = signal('');\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n // ============ COMPUTED STATE ============\n\n /** Whether to use 12-hour format. */\n readonly is12Hour: Signal<boolean> = computed(() => {\n const explicit = this.use12HourFormat();\n if (explicit !== null) return explicit;\n try {\n const options = new Intl.DateTimeFormat(this.localeId, { hour: 'numeric' }).resolvedOptions();\n return options.hour12 === true;\n } catch {\n return false;\n }\n });\n\n /** Current period (AM/PM). */\n readonly period: Signal<TimePeriod> = computed(() => {\n const value = this.internalValue();\n if (!value) return 'AM';\n return value.hours >= 12 ? 'PM' : 'AM';\n });\n\n /** Display hours (converted from 24h to 12h when needed). */\n readonly displayHours: Signal<number | null> = computed(() => {\n const value = this.internalValue();\n if (!value) return null;\n if (!this.is12Hour()) return value.hours;\n const h = value.hours % 12;\n return h === 0 ? 12 : h;\n });\n\n /** Formatted hours string. */\n readonly formattedHours: Signal<string> = computed(() => {\n const h = this.displayHours();\n if (h === null) return '';\n return h.toString().padStart(2, '0');\n });\n\n /** Formatted minutes string. */\n readonly formattedMinutes: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value) return '';\n return value.minutes.toString().padStart(2, '0');\n });\n\n /** Formatted seconds string. */\n readonly formattedSeconds: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value) return '';\n return value.seconds.toString().padStart(2, '0');\n });\n\n /** Container classes. */\n readonly containerClasses: Signal<string> = computed(() => {\n const base = timepickerContainerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.state(),\n });\n const disabled = this.disabled() ? timepickerDisabledVariants() : '';\n return joinClasses(base, disabled, this.userClass());\n });\n\n /** Segment input classes. */\n readonly segmentClasses: Signal<string> = computed(() => {\n return timepickerSegmentVariants({ size: this.size() });\n });\n\n /** Separator classes. */\n readonly separatorClasses: Signal<string> = computed(() => {\n return timepickerSeparatorVariants({ size: this.size() });\n });\n\n /** Period button classes. */\n readonly periodClasses: Signal<string> = computed(() => {\n return timepickerPeriodVariants({ size: this.size() });\n });\n\n // ============ CVA CALLBACKS ============\n\n private onChange: (value: ComTimeValue | null) => void = () => {};\n private onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n // ============ CVA IMPLEMENTATION ============\n\n writeValue(value: ComTimeValue | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: ComTimeValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled state is handled via the disabled input\n }\n\n // ============ VALIDATOR IMPLEMENTATION ============\n\n validate(): ValidationErrors | null {\n const value = this.internalValue();\n\n if (this.required() && !value) {\n return { required: true };\n }\n\n if (value) {\n const minTime = this.minTime();\n if (minTime && compareTime(value, minTime) < 0) {\n return { minTime: { min: minTime, actual: value } };\n }\n\n const maxTime = this.maxTime();\n if (maxTime && compareTime(value, maxTime) > 0) {\n return { maxTime: { max: maxTime, actual: value } };\n }\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ============ EVENT HANDLERS ============\n\n protected onSegmentFocus(segment: TimeSegment): void {\n this.activeSegment.set(segment);\n this.pendingDigits.set('');\n }\n\n protected onSegmentBlur(segment: TimeSegment): void {\n this.activeSegment.set(null);\n this.pendingDigits.set('');\n this.snapToStep(segment);\n this.onTouched();\n }\n\n protected onSegmentInput(event: Event, segment: TimeSegment): void {\n // Prevent default browser input handling — we manage value via keydown\n const input = event.target as HTMLInputElement;\n const value = this.internalValue();\n // Restore the formatted value to prevent browser from changing display\n if (segment === 'hours') {\n input.value = this.formattedHours();\n } else if (segment === 'minutes') {\n input.value = this.formattedMinutes();\n } else {\n input.value = this.formattedSeconds();\n }\n }\n\n protected onSegmentKeydown(event: KeyboardEvent, segment: TimeSegment): void {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.incrementSegment(segment, 1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.incrementSegment(segment, -1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.focusNextSegment(segment);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n this.focusPrevSegment(segment);\n break;\n case 'Home':\n event.preventDefault();\n this.setSegmentToMin(segment);\n break;\n case 'End':\n event.preventDefault();\n this.setSegmentToMax(segment);\n break;\n case 'Backspace':\n case 'Delete':\n event.preventDefault();\n this.pendingDigits.set('');\n break;\n default:\n if (/^[0-9]$/.test(event.key)) {\n event.preventDefault();\n this.handleDigitInput(event.key, segment);\n }\n break;\n }\n }\n\n protected onPeriodKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n event.preventDefault();\n this.togglePeriod();\n break;\n case 'ArrowLeft':\n event.preventDefault();\n this.focusPrevSegment('period');\n break;\n case 'a':\n case 'A':\n event.preventDefault();\n this.setPeriod('AM');\n break;\n case 'p':\n case 'P':\n event.preventDefault();\n this.setPeriod('PM');\n break;\n }\n }\n\n protected togglePeriod(): void {\n const value = this.internalValue();\n if (!value) {\n this.updateValue({ hours: 12, minutes: 0, seconds: 0 });\n return;\n }\n\n const newHours = value.hours >= 12 ? value.hours - 12 : value.hours + 12;\n this.updateValue({ ...value, hours: newHours });\n }\n\n // ============ PRIVATE METHODS ============\n\n private setPeriod(period: TimePeriod): void {\n const value = this.internalValue();\n if (!value) {\n const hours = period === 'AM' ? 0 : 12;\n this.updateValue({ hours, minutes: 0, seconds: 0 });\n return;\n }\n\n const currentPeriod = this.period();\n if (currentPeriod === period) return;\n\n const newHours = period === 'AM' ? value.hours - 12 : value.hours + 12;\n this.updateValue({ ...value, hours: newHours });\n }\n\n private incrementSegment(segment: TimeSegment, direction: 1 | -1): void {\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n const step = segment === 'minutes' ? this.minuteStep() : segment === 'seconds' ? this.secondStep() : 1;\n const delta = step * direction;\n\n let newValue: ComTimeValue;\n\n switch (segment) {\n case 'hours': {\n const max = this.is12Hour() ? 12 : 23;\n const min = this.is12Hour() ? 1 : 0;\n let h = this.is12Hour() ? (this.displayHours() ?? min) : value.hours;\n h += delta;\n // Wrap\n if (this.is12Hour()) {\n if (h > max) h = min;\n if (h < min) h = max;\n // Convert back to 24h\n const isPM = this.period() === 'PM';\n let h24 = h === 12 ? 0 : h;\n if (isPM) h24 += 12;\n newValue = { ...value, hours: h24 };\n } else {\n if (h > 23) h = 0;\n if (h < 0) h = 23;\n newValue = { ...value, hours: h };\n }\n break;\n }\n case 'minutes': {\n let m = value.minutes + delta;\n if (m > 59) m = 0;\n if (m < 0) m = 59;\n newValue = { ...value, minutes: m };\n break;\n }\n case 'seconds': {\n let s = value.seconds + delta;\n if (s > 59) s = 0;\n if (s < 0) s = 59;\n newValue = { ...value, seconds: s };\n break;\n }\n }\n\n this.updateValue(newValue);\n }\n\n private handleDigitInput(digit: string, segment: TimeSegment): void {\n const pending = this.pendingDigits() + digit;\n\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n let parsed = parseInt(pending, 10);\n\n switch (segment) {\n case 'hours': {\n const max = this.is12Hour() ? 12 : 23;\n const min = this.is12Hour() ? 1 : 0;\n if (parsed > max) parsed = parseInt(digit, 10);\n if (parsed < min && pending.length >= 2) parsed = min;\n // Convert to 24h if 12h mode\n let h24 = parsed;\n if (this.is12Hour()) {\n const isPM = this.period() === 'PM';\n h24 = parsed === 12 ? 0 : parsed;\n if (isPM) h24 += 12;\n }\n this.updateValue({ ...value, hours: h24 });\n break;\n }\n case 'minutes': {\n if (parsed > 59) parsed = parseInt(digit, 10);\n this.updateValue({ ...value, minutes: parsed });\n break;\n }\n case 'seconds': {\n if (parsed > 59) parsed = parseInt(digit, 10);\n this.updateValue({ ...value, seconds: parsed });\n break;\n }\n }\n\n // Auto-advance after 2 digits\n if (pending.length >= 2) {\n this.pendingDigits.set('');\n this.focusNextSegment(segment);\n } else {\n this.pendingDigits.set(pending);\n }\n }\n\n private snapToStep(segment: TimeSegment): void {\n const value = this.internalValue();\n if (!value) return;\n\n if (segment === 'minutes' && this.minuteStep() > 1) {\n const step = this.minuteStep();\n const snapped = Math.round(value.minutes / step) * step;\n const clamped = Math.min(snapped, 59);\n if (clamped !== value.minutes) {\n this.updateValue({ ...value, minutes: clamped });\n }\n }\n\n if (segment === 'seconds' && this.secondStep() > 1) {\n const step = this.secondStep();\n const snapped = Math.round(value.seconds / step) * step;\n const clamped = Math.min(snapped, 59);\n if (clamped !== value.seconds) {\n this.updateValue({ ...value, seconds: clamped });\n }\n }\n }\n\n private setSegmentToMin(segment: TimeSegment): void {\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n switch (segment) {\n case 'hours': {\n if (this.is12Hour()) {\n // Min display is 1; convert to 24h\n const isPM = this.period() === 'PM';\n const h24 = isPM ? 13 : 1;\n this.updateValue({ ...value, hours: h24 });\n } else {\n this.updateValue({ ...value, hours: 0 });\n }\n break;\n }\n case 'minutes':\n this.updateValue({ ...value, minutes: 0 });\n break;\n case 'seconds':\n this.updateValue({ ...value, seconds: 0 });\n break;\n }\n }\n\n private setSegmentToMax(segment: TimeSegment): void {\n const value = this.internalValue() ?? { hours: 0, minutes: 0, seconds: 0 };\n switch (segment) {\n case 'hours': {\n if (this.is12Hour()) {\n // Max display is 12; 12 in 12h = 0 in 24h (for AM) or 12 (for PM)\n const isPM = this.period() === 'PM';\n const h24 = isPM ? 12 : 0;\n this.updateValue({ ...value, hours: h24 });\n } else {\n this.updateValue({ ...value, hours: 23 });\n }\n break;\n }\n case 'minutes':\n this.updateValue({ ...value, minutes: 59 });\n break;\n case 'seconds':\n this.updateValue({ ...value, seconds: 59 });\n break;\n }\n }\n\n private focusNextSegment(current: TimeSegment | 'period'): void {\n switch (current) {\n case 'hours':\n this.minutesInputRef()?.nativeElement.focus();\n break;\n case 'minutes':\n if (this.showSeconds()) {\n this.secondsInputRef()?.nativeElement.focus();\n } else if (this.is12Hour()) {\n this.periodButtonRef()?.nativeElement.focus();\n }\n break;\n case 'seconds':\n if (this.is12Hour()) {\n this.periodButtonRef()?.nativeElement.focus();\n }\n break;\n }\n }\n\n private focusPrevSegment(current: TimeSegment | 'period'): void {\n switch (current) {\n case 'minutes':\n this.hoursInputRef()?.nativeElement.focus();\n break;\n case 'seconds':\n this.minutesInputRef()?.nativeElement.focus();\n break;\n case 'period':\n if (this.showSeconds()) {\n this.secondsInputRef()?.nativeElement.focus();\n } else {\n this.minutesInputRef()?.nativeElement.focus();\n }\n break;\n }\n }\n\n private updateValue(value: ComTimeValue | null): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.timeChange.emit(value);\n this.onValidatorChange();\n\n if (value) {\n const h = this.is12Hour()\n ? `${(value.hours % 12 || 12)}:${value.minutes.toString().padStart(2, '0')}${this.showSeconds() ? ':' + value.seconds.toString().padStart(2, '0') : ''} ${value.hours >= 12 ? 'PM' : 'AM'}`\n : `${value.hours.toString().padStart(2, '0')}:${value.minutes.toString().padStart(2, '0')}${this.showSeconds() ? ':' + value.seconds.toString().padStart(2, '0') : ''}`;\n this.liveAnnouncement.set(`Time set to ${h}`);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n DOCUMENT,\n} from '@angular/core';\nimport type {\n InputSignal,\n OnDestroy,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl, Validators } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { A11yModule } from '@angular/cdk/a11y';\n\nimport { ComCalendar } from '../calendar';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n CALENDAR_SELECTION_STRATEGY,\n SingleSelectionStrategy,\n} from '../selection';\nimport type { CalendarView, DateFilterFn, DateRange } from '../calendar.types';\nimport { joinClasses } from '../calendar.utils';\nimport { ComTimePicker } from '../timepicker/timepicker.component';\nimport { timepickerSectionVariants } from '../timepicker/timepicker.variants';\nimport type { ComTimeValue } from '../timepicker/timepicker.types';\nimport { createTimeValue } from '../timepicker/timepicker.types';\nimport {\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n} from './datepicker.variants';\nimport type {\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DateFormatPreset,\n DatepickerPanelWidth,\n} from './datepicker.types';\nimport { generateDatepickerId } from './datepicker.types';\n\n/** Default position for the datepicker panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n // Below trigger, aligned start\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned start\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n // Below trigger, aligned end\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned end\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/**\n * Single date picker component with calendar popup.\n * Implements ControlValueAccessor for Reactive Forms and Template-driven Forms.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-datepicker\n * formControlName=\"birthDate\"\n * placeholder=\"Select date...\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * [showTodayButton]=\"true\"\n * [showClearButton]=\"true\"\n * />\n * ```\n */\n@Component({\n selector: 'com-datepicker',\n exportAs: 'comDatepicker',\n template: `\n <!-- Trigger container -->\n <div\n #triggerElement\n [class]=\"triggerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-owns]=\"panelId()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <!-- Date input display -->\n <input\n #inputElement\n type=\"text\"\n [class]=\"inputClasses()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"!allowManualInput()\"\n [attr.id]=\"inputId()\"\n [attr.aria-label]=\"ariaLabel() || placeholder()\"\n [attr.aria-describedby]=\"ariaDescribedBy() || null\"\n [attr.aria-invalid]=\"state() === 'error' || null\"\n [attr.aria-required]=\"required() || null\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n <!-- Clear button -->\n @if (showClearButton() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n [class]=\"clearClasses()\"\n [attr.aria-label]=\"'Clear date'\"\n (click)=\"clear($event)\"\n >\n <com-icon name=\"x\" [size]=\"iconSize()\" />\n </button>\n }\n\n <!-- Calendar icon -->\n <button\n type=\"button\"\n [class]=\"iconClasses()\"\n [attr.aria-label]=\"isOpen() ? 'Close calendar' : 'Open calendar'\"\n [disabled]=\"disabled()\"\n tabindex=\"-1\"\n >\n <com-icon name=\"calendar\" [size]=\"iconSize()\" />\n </button>\n </div>\n\n <!-- Panel template (rendered in overlay) -->\n <ng-template #panelTemplate>\n <div\n [class]=\"panelClasses()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"'Choose date'\"\n (keydown)=\"onPanelKeydown($event)\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <com-calendar\n [activeDate]=\"calendarActiveDate()\"\n [selected]=\"internalValue()\"\n [minDate]=\"min()\"\n [maxDate]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n [startView]=\"startView()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [bordered]=\"false\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n />\n\n @if (showTimePicker()) {\n <div [class]=\"timeSectionClasses()\">\n <com-time-picker\n variant=\"embedded\"\n [size]=\"size()\"\n [value]=\"timeValue()\"\n [use12HourFormat]=\"use12HourFormat()\"\n [showSeconds]=\"showSeconds()\"\n [minuteStep]=\"minuteStep()\"\n [disabled]=\"disabled()\"\n (timeChange)=\"onTimeChange($event)\"\n />\n </div>\n }\n\n @if (showTodayButton() || showFooterClearButton() || showTimePicker()) {\n <div [class]=\"footerClasses()\">\n @if (showTodayButton()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"selectToday()\"\n >\n Today\n </button>\n }\n @if (showFooterClearButton()) {\n <button\n type=\"button\"\n [class]=\"clearButtonClasses()\"\n (click)=\"clear($event)\"\n >\n Clear\n </button>\n }\n @if (showTimePicker()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"close()\"\n >\n Done\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Live announcer region -->\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n OverlayModule,\n A11yModule,\n ComCalendar,\n ComIcon,\n ComTimePicker,\n ],\n providers: [\n SingleSelectionStrategy,\n { provide: CALENDAR_SELECTION_STRATEGY, useExisting: SingleSelectionStrategy },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-datepicker-host inline-block',\n '[class.com-datepicker-disabled]': 'disabled()',\n '[class.com-datepicker-open]': 'isOpen()',\n },\n})\nexport class ComDatepicker<D> implements ControlValueAccessor, Validator, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly document = inject(DOCUMENT);\n private readonly dateAdapter = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** Optional NgControl for form integration. */\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger element. */\n private readonly triggerRef: Signal<ElementRef<HTMLDivElement>> =\n viewChild.required<ElementRef<HTMLDivElement>>('triggerElement');\n\n /** Reference to the input element. */\n private readonly inputRef: Signal<ElementRef<HTMLInputElement>> =\n viewChild.required<ElementRef<HTMLInputElement>>('inputElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Overlay reference. */\n private overlayRef: OverlayRef | null = null;\n\n /** Unique ID for the datepicker. */\n private readonly datepickerId: string = generateDatepickerId();\n\n // ============ INPUTS ============\n\n /** Current value. */\n readonly value: InputSignal<D | null> = input<D | null>(null);\n\n /** Minimum selectable date. */\n readonly min: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date. */\n readonly max: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates. */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Date the calendar opens to (defaults to selected or today). */\n readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n /** Initial calendar view. */\n readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** First day of week override (0=Sun, 1=Mon, ..., 6=Sat). */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /** Placeholder text. */\n readonly placeholder: InputSignal<string> = input<string>('Select date...');\n\n /** Whether the datepicker is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether the datepicker is required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Display format for the date. */\n readonly dateFormat: InputSignal<DateFormatPreset> = input<DateFormatPreset>('medium');\n\n /** Show a clear button in the trigger. */\n readonly showClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a today button in the footer. */\n readonly showTodayButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a clear button in the footer. */\n readonly showFooterClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Don't auto-close on selection. */\n readonly keepOpen: InputSignal<boolean> = input<boolean>(false);\n\n /** Allow manual text input. */\n readonly allowManualInput: InputSignal<boolean> = input<boolean>(true);\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Panel width strategy. */\n readonly panelWidth: InputSignal<DatepickerPanelWidth> = input<DatepickerPanelWidth>('auto');\n\n /** CVA variant for trigger styling. */\n readonly variant: InputSignal<DatepickerVariant> = input<DatepickerVariant>('default');\n\n /** Size variant. */\n readonly size: InputSignal<DatepickerSize> = input<DatepickerSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<DatepickerState> = input<DatepickerState>('default');\n\n /** Additional CSS classes for the trigger. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Accessible label for the input. */\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** ID of element describing the input. */\n readonly ariaDescribedBy: InputSignal<string | null> = input<string | null>(null);\n\n /** Whether to show the time picker below the calendar. */\n readonly showTimePicker: InputSignal<boolean> = input<boolean>(false);\n\n /** 12h vs 24h format for the time picker. `null` = auto-detect. */\n readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Whether the time picker shows seconds. */\n readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n /** Step interval for minutes in the time picker. */\n readonly minuteStep: InputSignal<number> = input<number>(1);\n\n // ============ OUTPUTS ============\n\n /** Emitted when a date is selected. */\n readonly dateChange: OutputEmitterRef<D | null> = output<D | null>();\n\n /** Emitted when the panel opens. */\n readonly opened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when the panel closes. */\n readonly closed: OutputEmitterRef<void> = output<void>();\n\n // ============ INTERNAL STATE ============\n\n /** Whether the panel is open. */\n readonly isOpen: WritableSignal<boolean> = signal(false);\n\n /** Internal value state (managed by CVA or input). */\n readonly internalValue: WritableSignal<D | null> = linkedSignal<D | null>(\n () => this.value() ?? null\n );\n\n /** Calendar active date for navigation. */\n readonly calendarActiveDate: WritableSignal<D> = signal<D>(this.dateAdapter.today());\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n // ============ COMPUTED STATE ============\n\n /** Input element ID. */\n readonly inputId: Signal<string> = computed(() => `${this.datepickerId}-input`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.datepickerId}-panel`);\n\n /** Whether the datepicker has a value. */\n readonly hasValue: Signal<boolean> = computed(() => this.internalValue() !== null);\n\n /** Icon size based on datepicker size. */\n readonly iconSize: Signal<IconSize> = computed(() => {\n const sizeMap: Record<DatepickerSize, IconSize> = {\n sm: 'sm',\n default: 'md',\n lg: 'lg',\n };\n return sizeMap[this.size()];\n });\n\n /** Formatted display value. */\n readonly displayValue: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value) return '';\n return this.dateAdapter.format(value, this.effectiveDateFormat());\n });\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.state(),\n open: this.isOpen(),\n });\n\n const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';\n\n return joinClasses(baseClasses, disabledClasses, this.userClass());\n });\n\n /** Computed input classes. */\n readonly inputClasses: Signal<string> = computed(() => {\n return datepickerInputVariants({ size: this.size() });\n });\n\n /** Computed icon classes. */\n readonly iconClasses: Signal<string> = computed(() => {\n return datepickerIconVariants({ size: this.size() });\n });\n\n /** Computed clear button classes. */\n readonly clearClasses: Signal<string> = computed(() => {\n return datepickerClearVariants({ size: this.size() });\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerPanelVariants({ size: this.size() });\n return joinClasses(baseClasses, this.panelClass());\n });\n\n /** Computed footer classes. */\n readonly footerClasses: Signal<string> = computed(() => {\n return datepickerFooterVariants({ size: this.size() });\n });\n\n /** Computed today button classes. */\n readonly todayButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'primary' });\n });\n\n /** Computed clear button classes (footer). */\n readonly clearButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'secondary' });\n });\n\n /** Time section divider classes. */\n readonly timeSectionClasses: Signal<string> = computed(() => {\n return timepickerSectionVariants({ size: this.size() });\n });\n\n /** Time value derived from the current date value. */\n readonly timeValue: Signal<ComTimeValue | null> = computed(() => {\n const date = this.internalValue();\n if (!date) return null;\n return createTimeValue(\n this.dateAdapter.getHours(date),\n this.dateAdapter.getMinutes(date),\n this.dateAdapter.getSeconds(date),\n );\n });\n\n /** Effective display format — switches to dateTime when time picker is shown. */\n readonly effectiveDateFormat: Signal<DateFormatPreset> = computed(() => {\n if (this.showTimePicker()) {\n return this.showSeconds() ? 'dateTimeLong' : 'dateTimeMedium';\n }\n return this.dateFormat();\n });\n\n /** Whether the panel should stay open (keepOpen or time picker shown). */\n readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n return this.keepOpen() || this.showTimePicker();\n });\n\n // ============ CVA CALLBACKS ============\n\n private onChange: (value: D | null) => void = () => {};\n private onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n constructor() {\n // Wire up NgControl if present\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Sync calendar active date with internal value or startAt\n effect(() => {\n const value = this.internalValue();\n const startAt = this.startAt();\n\n if (value) {\n this.calendarActiveDate.set(value);\n } else if (startAt) {\n this.calendarActiveDate.set(startAt);\n } else {\n this.calendarActiveDate.set(this.dateAdapter.today());\n }\n }, {});\n }\n\n ngOnDestroy(): void {\n this.destroyOverlay();\n }\n\n // ============ CVA IMPLEMENTATION ============\n\n writeValue(value: D | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: D | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled state is handled via the disabled input\n }\n\n // ============ VALIDATOR IMPLEMENTATION ============\n\n validate(): ValidationErrors | null {\n const value = this.internalValue();\n\n // Required validation\n if (this.required() && !value) {\n return { required: true };\n }\n\n if (value) {\n // Min validation\n const min = this.min();\n if (min && this.dateAdapter.compareDate(value, min) < 0) {\n return { minDate: { min, actual: value } };\n }\n\n // Max validation\n const max = this.max();\n if (max && this.dateAdapter.compareDate(value, max) > 0) {\n return { maxDate: { max, actual: value } };\n }\n\n // Date filter validation\n const dateFilter = this.dateFilter();\n if (dateFilter && !dateFilter(value)) {\n return { dateFilter: true };\n }\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ============ PUBLIC METHODS ============\n\n /** Opens the datepicker panel. */\n open(): void {\n if (this.disabled() || this.isOpen()) {\n return;\n }\n\n this.createOverlay();\n this.isOpen.set(true);\n this.opened.emit();\n this.announce('Calendar opened');\n }\n\n /** Closes the datepicker panel. */\n close(): void {\n if (!this.isOpen()) {\n return;\n }\n\n this.destroyOverlay();\n this.isOpen.set(false);\n this.closed.emit();\n this.onTouched();\n\n // Return focus to trigger\n this.inputRef().nativeElement.focus();\n }\n\n /** Toggles the datepicker panel. */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Clears the selected date. */\n clear(event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this.updateValue(null);\n this.announce('Date cleared');\n }\n\n /** Selects today's date. */\n selectToday(): void {\n const today = this.dateAdapter.today();\n this.updateValue(today);\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n }\n\n // ============ EVENT HANDLERS ============\n\n protected onTriggerClick(): void {\n if (!this.disabled()) {\n this.toggle();\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n this.open();\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n // Commit manual input\n this.parseAndSetValue(this.inputRef().nativeElement.value);\n } else {\n this.open();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n case 'ArrowDown':\n if (!this.isOpen()) {\n event.preventDefault();\n this.open();\n }\n break;\n }\n }\n\n protected onInputChange(event: Event): void {\n if (!this.allowManualInput()) {\n return;\n }\n\n const input = event.target as HTMLInputElement;\n // Debounce or wait for blur/enter to actually parse\n // For now, we just allow typing without immediate parsing\n }\n\n protected onInputBlur(): void {\n if (this.allowManualInput()) {\n this.parseAndSetValue(this.inputRef().nativeElement.value);\n }\n this.onTouched();\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n\n protected onDateSelected(date: D): void {\n // Preserve time when selecting a new date if time picker is shown\n if (this.showTimePicker()) {\n const currentValue = this.internalValue();\n if (currentValue) {\n const withTime = this.dateAdapter.setTime(\n date,\n this.dateAdapter.getHours(currentValue),\n this.dateAdapter.getMinutes(currentValue),\n this.dateAdapter.getSeconds(currentValue),\n );\n this.updateValue(withTime);\n } else {\n this.updateValue(date);\n }\n } else {\n this.updateValue(date);\n }\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n\n this.announce(`Selected ${this.dateAdapter.format(date, 'long')}`);\n }\n\n protected onTimeChange(time: ComTimeValue | null): void {\n if (!time) return;\n const current = this.internalValue() ?? this.dateAdapter.today();\n const updated = this.dateAdapter.setTime(current, time.hours, time.minutes, time.seconds);\n this.updateValue(updated);\n }\n\n protected onActiveDateChange(date: D): void {\n this.calendarActiveDate.set(date);\n }\n\n // ============ PRIVATE METHODS ============\n\n private createOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(hostEl)\n .withPositions(DEFAULT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private updateValue(value: D | null): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.dateChange.emit(value);\n this.onValidatorChange();\n }\n\n private parseAndSetValue(inputValue: string): void {\n if (!inputValue.trim()) {\n // Empty input - clear if allowed\n if (this.hasValue()) {\n this.updateValue(null);\n }\n return;\n }\n\n const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n if (parsed && this.dateAdapter.isValid(parsed)) {\n // Validate against min/max/filter\n if (this.isDateValid(parsed)) {\n this.updateValue(parsed);\n } else {\n // Invalid date - revert to current value\n this.inputRef().nativeElement.value = this.displayValue();\n }\n } else {\n // Parse failed - revert to current value\n this.inputRef().nativeElement.value = this.displayValue();\n }\n }\n\n private isDateValid(date: D): boolean {\n const min = this.min();\n const max = this.max();\n const filter = this.dateFilter();\n\n if (min && this.dateAdapter.compareDate(date, min) < 0) {\n return false;\n }\n if (max && this.dateAdapter.compareDate(date, max) > 0) {\n return false;\n }\n if (filter && !filter(date)) {\n return false;\n }\n return true;\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set(message);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n DOCUMENT,\n} from '@angular/core';\nimport type {\n InputSignal,\n OnDestroy,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { A11yModule } from '@angular/cdk/a11y';\n\nimport { ComCalendar } from '../calendar';\nimport { DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n CALENDAR_SELECTION_STRATEGY,\n RangeSelectionStrategy,\n} from '../selection';\nimport type { CalendarView, DateFilterFn, DateRange } from '../calendar.types';\nimport { joinClasses } from '../calendar.utils';\nimport { ComTimePicker } from '../timepicker/timepicker.component';\nimport {\n timepickerSectionVariants,\n timepickerLabelVariants,\n} from '../timepicker/timepicker.variants';\nimport type { ComTimeValue } from '../timepicker/timepicker.types';\nimport { createTimeValue } from '../timepicker/timepicker.types';\nimport {\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n datepickerRangeSeparatorVariants,\n} from './datepicker.variants';\nimport type {\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DateFormatPreset,\n DatepickerPanelWidth,\n DateRangeValue,\n} from './datepicker.types';\nimport { generateDatepickerId, createDateRangeValue } from './datepicker.types';\n\n/** Default position for the datepicker panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n // Below trigger, aligned start\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned start\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n // Below trigger, aligned end\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned end\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/**\n * Date range picker component with calendar popup.\n * Allows selecting a start and end date via a two-click interaction.\n * Implements ControlValueAccessor for Reactive Forms and Template-driven Forms.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-date-range-picker\n * formControlName=\"dateRange\"\n * startPlaceholder=\"Start date\"\n * endPlaceholder=\"End date\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * [showTodayButton]=\"true\"\n * />\n * ```\n */\n@Component({\n selector: 'com-date-range-picker',\n exportAs: 'comDateRangePicker',\n template: `\n <!-- Trigger container -->\n <div\n #triggerElement\n [class]=\"triggerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-owns]=\"panelId()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <!-- Start date input -->\n <input\n #startInputElement\n type=\"text\"\n [class]=\"inputClasses()\"\n [value]=\"startDisplayValue()\"\n [placeholder]=\"startPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"!allowManualInput()\"\n [attr.id]=\"startInputId()\"\n [attr.aria-label]=\"startAriaLabel() || startPlaceholder()\"\n [attr.aria-invalid]=\"state() === 'error' || null\"\n [attr.aria-required]=\"required() || null\"\n (focus)=\"onStartInputFocus()\"\n (input)=\"onStartInputChange($event)\"\n (blur)=\"onStartInputBlur()\"\n (keydown)=\"onInputKeydown($event, 'start')\"\n />\n\n <!-- Range separator -->\n <span [class]=\"separatorClasses()\">\n <com-icon name=\"arrow-right\" [size]=\"iconSize()\" />\n </span>\n\n <!-- End date input -->\n <input\n #endInputElement\n type=\"text\"\n [class]=\"inputClasses()\"\n [value]=\"endDisplayValue()\"\n [placeholder]=\"endPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"!allowManualInput()\"\n [attr.id]=\"endInputId()\"\n [attr.aria-label]=\"endAriaLabel() || endPlaceholder()\"\n [attr.aria-invalid]=\"state() === 'error' || null\"\n (focus)=\"onEndInputFocus()\"\n (input)=\"onEndInputChange($event)\"\n (blur)=\"onEndInputBlur()\"\n (keydown)=\"onInputKeydown($event, 'end')\"\n />\n\n <!-- Clear button -->\n @if (showClearButton() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n [class]=\"clearClasses()\"\n [attr.aria-label]=\"'Clear date range'\"\n (click)=\"clear($event)\"\n >\n <com-icon name=\"x\" [size]=\"iconSize()\" />\n </button>\n }\n\n <!-- Calendar icon -->\n <button\n type=\"button\"\n [class]=\"iconClasses()\"\n [attr.aria-label]=\"isOpen() ? 'Close calendar' : 'Open calendar'\"\n [disabled]=\"disabled()\"\n tabindex=\"-1\"\n >\n <com-icon name=\"calendar\" [size]=\"iconSize()\" />\n </button>\n </div>\n\n <!-- Panel template (rendered in overlay) -->\n <ng-template #panelTemplate>\n <div\n [class]=\"panelClasses()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"'Choose date range'\"\n (keydown)=\"onPanelKeydown($event)\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <com-calendar\n [activeDate]=\"calendarActiveDate()\"\n [selected]=\"calendarSelection()\"\n [minDate]=\"min()\"\n [maxDate]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n [startView]=\"startView()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [monthColumns]=\"2\"\n [bordered]=\"false\"\n (selectedChange)=\"onCalendarSelectionChange($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n />\n\n @if (showTimePicker()) {\n <div [class]=\"timeSectionClasses()\">\n <div class=\"flex items-center gap-3\">\n <div class=\"flex flex-col gap-1\">\n <span [class]=\"timeLabelClasses()\">Start time</span>\n <com-time-picker\n variant=\"embedded\"\n [size]=\"size()\"\n [value]=\"startTimeValue()\"\n [use12HourFormat]=\"use12HourFormat()\"\n [showSeconds]=\"showSeconds()\"\n [minuteStep]=\"minuteStep()\"\n [disabled]=\"disabled()\"\n ariaLabel=\"Start time\"\n (timeChange)=\"onStartTimeChange($event)\"\n />\n </div>\n <span class=\"text-muted-foreground mt-5\">\n <com-icon name=\"arrow-right\" [size]=\"iconSize()\" />\n </span>\n <div class=\"flex flex-col gap-1\">\n <span [class]=\"timeLabelClasses()\">End time</span>\n <com-time-picker\n variant=\"embedded\"\n [size]=\"size()\"\n [value]=\"endTimeValue()\"\n [use12HourFormat]=\"use12HourFormat()\"\n [showSeconds]=\"showSeconds()\"\n [minuteStep]=\"minuteStep()\"\n [disabled]=\"disabled()\"\n ariaLabel=\"End time\"\n (timeChange)=\"onEndTimeChange($event)\"\n />\n </div>\n </div>\n </div>\n }\n\n @if (showTodayButton() || showFooterClearButton() || showTimePicker()) {\n <div [class]=\"footerClasses()\">\n @if (showTodayButton()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"selectToday()\"\n >\n Today\n </button>\n }\n @if (showFooterClearButton()) {\n <button\n type=\"button\"\n [class]=\"clearButtonClasses()\"\n (click)=\"clear($event)\"\n >\n Clear\n </button>\n }\n @if (showTimePicker()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"close()\"\n >\n Done\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Live announcer region -->\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n OverlayModule,\n A11yModule,\n ComCalendar,\n ComIcon,\n ComTimePicker,\n ],\n providers: [\n RangeSelectionStrategy,\n { provide: CALENDAR_SELECTION_STRATEGY, useExisting: RangeSelectionStrategy },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-date-range-picker-host inline-block',\n '[class.com-date-range-picker-disabled]': 'disabled()',\n '[class.com-date-range-picker-open]': 'isOpen()',\n },\n})\nexport class ComDateRangePicker<D> implements ControlValueAccessor, Validator, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly document = inject(DOCUMENT);\n private readonly dateAdapter = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n /** Optional NgControl for form integration. */\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger element. */\n private readonly triggerRef: Signal<ElementRef<HTMLDivElement>> =\n viewChild.required<ElementRef<HTMLDivElement>>('triggerElement');\n\n /** Reference to the start input element. */\n private readonly startInputRef: Signal<ElementRef<HTMLInputElement>> =\n viewChild.required<ElementRef<HTMLInputElement>>('startInputElement');\n\n /** Reference to the end input element. */\n private readonly endInputRef: Signal<ElementRef<HTMLInputElement>> =\n viewChild.required<ElementRef<HTMLInputElement>>('endInputElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Overlay reference. */\n private overlayRef: OverlayRef | null = null;\n\n /** Unique ID for the datepicker. */\n private readonly datepickerId: string = generateDatepickerId();\n\n // ============ INPUTS ============\n\n /** Current value. */\n readonly value: InputSignal<DateRangeValue<D> | null> = input<DateRangeValue<D> | null>(null);\n\n /** Minimum selectable date. */\n readonly min: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date. */\n readonly max: InputSignal<D | null> = input<D | null>(null);\n\n /** Custom filter function to disable specific dates. */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Date the calendar opens to (defaults to start date or today). */\n readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n /** Initial calendar view. */\n readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n /** First day of week override (0=Sun, 1=Mon, ..., 6=Sat). */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /** Placeholder text for start date. */\n readonly startPlaceholder: InputSignal<string> = input<string>('Start date');\n\n /** Placeholder text for end date. */\n readonly endPlaceholder: InputSignal<string> = input<string>('End date');\n\n /** Whether the datepicker is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether the datepicker is required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Display format for the date. */\n readonly dateFormat: InputSignal<DateFormatPreset> = input<DateFormatPreset>('medium');\n\n /** Show a clear button in the trigger. */\n readonly showClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a today button in the footer. */\n readonly showTodayButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Show a clear button in the footer. */\n readonly showFooterClearButton: InputSignal<boolean> = input<boolean>(false);\n\n /** Don't auto-close on complete range selection. */\n readonly keepOpen: InputSignal<boolean> = input<boolean>(false);\n\n /** Allow manual text input. */\n readonly allowManualInput: InputSignal<boolean> = input<boolean>(true);\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Panel width strategy. */\n readonly panelWidth: InputSignal<DatepickerPanelWidth> = input<DatepickerPanelWidth>('auto');\n\n /** CVA variant for trigger styling. */\n readonly variant: InputSignal<DatepickerVariant> = input<DatepickerVariant>('default');\n\n /** Size variant. */\n readonly size: InputSignal<DatepickerSize> = input<DatepickerSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<DatepickerState> = input<DatepickerState>('default');\n\n /** Additional CSS classes for the trigger. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Accessible label for the start input. */\n readonly startAriaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Accessible label for the end input. */\n readonly endAriaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Whether to show time pickers below the calendar. */\n readonly showTimePicker: InputSignal<boolean> = input<boolean>(false);\n\n /** 12h vs 24h format for the time pickers. `null` = auto-detect. */\n readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Whether the time pickers show seconds. */\n readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n /** Step interval for minutes in the time pickers. */\n readonly minuteStep: InputSignal<number> = input<number>(1);\n\n // ============ OUTPUTS ============\n\n /** Emitted when a complete range is selected. */\n readonly rangeChange: OutputEmitterRef<DateRangeValue<D> | null> = output<DateRangeValue<D> | null>();\n\n /** Emitted when the panel opens. */\n readonly opened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when the panel closes. */\n readonly closed: OutputEmitterRef<void> = output<void>();\n\n // ============ INTERNAL STATE ============\n\n /** Whether the panel is open. */\n readonly isOpen: WritableSignal<boolean> = signal(false);\n\n /** Which input is currently focused. */\n readonly activeInput: WritableSignal<'start' | 'end' | null> = signal(null);\n\n /** Internal value state (managed by CVA or input). */\n readonly internalValue: WritableSignal<DateRangeValue<D> | null> = linkedSignal<DateRangeValue<D> | null>(\n () => this.value() ?? null\n );\n\n /** Calendar active date for navigation. */\n readonly calendarActiveDate: WritableSignal<D> = signal<D>(this.dateAdapter.today());\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n // ============ COMPUTED STATE ============\n\n /** Start input element ID. */\n readonly startInputId: Signal<string> = computed(() => `${this.datepickerId}-start`);\n\n /** End input element ID. */\n readonly endInputId: Signal<string> = computed(() => `${this.datepickerId}-end`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.datepickerId}-panel`);\n\n /** Whether the datepicker has a value. */\n readonly hasValue: Signal<boolean> = computed(() => {\n const value = this.internalValue();\n return value !== null && (value.start !== null || value.end !== null);\n });\n\n /** Icon size based on datepicker size. */\n readonly iconSize: Signal<IconSize> = computed(() => {\n const sizeMap: Record<DatepickerSize, IconSize> = {\n sm: 'sm',\n default: 'md',\n lg: 'lg',\n };\n return sizeMap[this.size()];\n });\n\n /** Calendar selection (converts DateRangeValue to DateRange for calendar). */\n readonly calendarSelection: Signal<DateRange<D> | null> = computed(() => {\n const value = this.internalValue();\n if (!value) return null;\n return { start: value.start, end: value.end };\n });\n\n /** Formatted start display value. */\n readonly startDisplayValue: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value?.start) return '';\n return this.dateAdapter.format(value.start, this.effectiveDateFormat());\n });\n\n /** Formatted end display value. */\n readonly endDisplayValue: Signal<string> = computed(() => {\n const value = this.internalValue();\n if (!value?.end) return '';\n return this.dateAdapter.format(value.end, this.effectiveDateFormat());\n });\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.state(),\n open: this.isOpen(),\n });\n\n const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';\n\n return joinClasses(baseClasses, disabledClasses, this.userClass());\n });\n\n /** Computed input classes. */\n readonly inputClasses: Signal<string> = computed(() => {\n return datepickerInputVariants({ size: this.size() });\n });\n\n /** Computed separator classes. */\n readonly separatorClasses: Signal<string> = computed(() => {\n return datepickerRangeSeparatorVariants({ size: this.size() });\n });\n\n /** Computed icon classes. */\n readonly iconClasses: Signal<string> = computed(() => {\n return datepickerIconVariants({ size: this.size() });\n });\n\n /** Computed clear button classes. */\n readonly clearClasses: Signal<string> = computed(() => {\n return datepickerClearVariants({ size: this.size() });\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n const baseClasses = datepickerPanelVariants({ size: this.size() });\n return joinClasses(baseClasses, this.panelClass());\n });\n\n /** Computed footer classes. */\n readonly footerClasses: Signal<string> = computed(() => {\n return datepickerFooterVariants({ size: this.size() });\n });\n\n /** Computed today button classes. */\n readonly todayButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'primary' });\n });\n\n /** Computed clear button classes (footer). */\n readonly clearButtonClasses: Signal<string> = computed(() => {\n return datepickerFooterButtonVariants({ size: this.size(), variant: 'secondary' });\n });\n\n /** Time section divider classes. */\n readonly timeSectionClasses: Signal<string> = computed(() => {\n return timepickerSectionVariants({ size: this.size() });\n });\n\n /** Time label classes. */\n readonly timeLabelClasses: Signal<string> = computed(() => {\n return timepickerLabelVariants({ size: this.size() });\n });\n\n /** Start time value derived from the start date. */\n readonly startTimeValue: Signal<ComTimeValue | null> = computed(() => {\n const value = this.internalValue();\n if (!value?.start) return null;\n return createTimeValue(\n this.dateAdapter.getHours(value.start),\n this.dateAdapter.getMinutes(value.start),\n this.dateAdapter.getSeconds(value.start),\n );\n });\n\n /** End time value derived from the end date. */\n readonly endTimeValue: Signal<ComTimeValue | null> = computed(() => {\n const value = this.internalValue();\n if (!value?.end) return null;\n return createTimeValue(\n this.dateAdapter.getHours(value.end),\n this.dateAdapter.getMinutes(value.end),\n this.dateAdapter.getSeconds(value.end),\n );\n });\n\n /** Effective display format — switches to dateTime when time picker is shown. */\n readonly effectiveDateFormat: Signal<DateFormatPreset> = computed(() => {\n if (this.showTimePicker()) {\n return this.showSeconds() ? 'dateTimeLong' : 'dateTimeMedium';\n }\n return this.dateFormat();\n });\n\n /** Whether the panel should stay open (keepOpen or time picker shown). */\n readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n return this.keepOpen() || this.showTimePicker();\n });\n\n // ============ CVA CALLBACKS ============\n\n private onChange: (value: DateRangeValue<D> | null) => void = () => {};\n private onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n constructor() {\n // Wire up NgControl if present\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Sync calendar active date with internal value or startAt\n effect(() => {\n const value = this.internalValue();\n const startAt = this.startAt();\n\n if (value?.start) {\n this.calendarActiveDate.set(value.start);\n } else if (startAt) {\n this.calendarActiveDate.set(startAt);\n } else {\n this.calendarActiveDate.set(this.dateAdapter.today());\n }\n }, {});\n }\n\n ngOnDestroy(): void {\n this.destroyOverlay();\n }\n\n // ============ CVA IMPLEMENTATION ============\n\n writeValue(value: DateRangeValue<D> | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: DateRangeValue<D> | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled state is handled via the disabled input\n }\n\n // ============ VALIDATOR IMPLEMENTATION ============\n\n validate(): ValidationErrors | null {\n const value = this.internalValue();\n\n // Required validation\n if (this.required() && (!value || (!value.start && !value.end))) {\n return { required: true };\n }\n\n if (value) {\n const { start, end } = value;\n const min = this.min();\n const max = this.max();\n const dateFilter = this.dateFilter();\n\n // Min validation for start\n if (start && min && this.dateAdapter.compareDate(start, min) < 0) {\n return { minDate: { min, actual: start } };\n }\n\n // Max validation for end\n if (end && max && this.dateAdapter.compareDate(end, max) > 0) {\n return { maxDate: { max, actual: end } };\n }\n\n // Date filter validation\n if (start && dateFilter && !dateFilter(start)) {\n return { dateFilter: { date: start } };\n }\n if (end && dateFilter && !dateFilter(end)) {\n return { dateFilter: { date: end } };\n }\n\n // Range validation (start must be before or equal to end)\n if (start && end && this.dateAdapter.compareDate(start, end) > 0) {\n return { rangeInvalid: { start, end } };\n }\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ============ PUBLIC METHODS ============\n\n /** Opens the datepicker panel. */\n open(): void {\n if (this.disabled() || this.isOpen()) {\n return;\n }\n\n this.createOverlay();\n this.isOpen.set(true);\n this.opened.emit();\n this.announce('Calendar opened. Select a start date.');\n }\n\n /** Closes the datepicker panel. */\n close(): void {\n if (!this.isOpen()) {\n return;\n }\n\n this.destroyOverlay();\n this.isOpen.set(false);\n this.closed.emit();\n this.onTouched();\n\n // Return focus to appropriate input\n const activeInput = this.activeInput();\n if (activeInput === 'end') {\n this.endInputRef().nativeElement.focus();\n } else {\n this.startInputRef().nativeElement.focus();\n }\n }\n\n /** Toggles the datepicker panel. */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Clears the selected date range. */\n clear(event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this.updateValue(null);\n this.announce('Date range cleared');\n }\n\n /** Selects today's date as the start date. */\n selectToday(): void {\n const today = this.dateAdapter.today();\n const currentValue = this.internalValue();\n\n // Set today as start if no start, or as end if we have a start\n if (!currentValue?.start) {\n this.updateValue(createDateRangeValue(today, null));\n this.announce('Start date set to today');\n } else if (!currentValue.end) {\n // Ensure proper ordering\n const newRange = this.dateAdapter.compareDate(today, currentValue.start) < 0\n ? createDateRangeValue(today, currentValue.start)\n : createDateRangeValue(currentValue.start, today);\n this.updateValue(newRange);\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n }\n }\n\n // ============ EVENT HANDLERS ============\n\n protected onTriggerClick(): void {\n if (!this.disabled() && !this.isOpen()) {\n this.open();\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected onStartInputFocus(): void {\n this.activeInput.set('start');\n }\n\n protected onEndInputFocus(): void {\n this.activeInput.set('end');\n }\n\n protected onInputKeydown(event: KeyboardEvent, inputType: 'start' | 'end'): void {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n // Commit manual input\n if (inputType === 'start') {\n this.parseAndSetStart(this.startInputRef().nativeElement.value);\n } else {\n this.parseAndSetEnd(this.endInputRef().nativeElement.value);\n }\n } else {\n this.open();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n case 'ArrowDown':\n if (!this.isOpen()) {\n event.preventDefault();\n this.open();\n }\n break;\n case 'Tab':\n // Allow natural tab navigation between inputs\n break;\n }\n }\n\n protected onStartInputChange(_event: Event): void {\n // Debounced in blur handler\n }\n\n protected onEndInputChange(_event: Event): void {\n // Debounced in blur handler\n }\n\n protected onStartInputBlur(): void {\n if (this.allowManualInput()) {\n this.parseAndSetStart(this.startInputRef().nativeElement.value);\n }\n this.onTouched();\n }\n\n protected onEndInputBlur(): void {\n if (this.allowManualInput()) {\n this.parseAndSetEnd(this.endInputRef().nativeElement.value);\n }\n this.onTouched();\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n\n protected onCalendarSelectionChange(selection: unknown): void {\n // The calendar emits the selection from the strategy\n const range = selection as DateRange<D>;\n\n if (range) {\n const newValue = createDateRangeValue(range.start, range.end);\n this.updateValue(newValue);\n\n if (range.start && range.end) {\n // Complete range selected\n this.announce(`Range selected: ${this.formatDate(range.start)} to ${this.formatDate(range.end)}`);\n\n if (!this.effectiveKeepOpen()) {\n this.close();\n }\n } else if (range.start) {\n this.announce(`Start date selected: ${this.formatDate(range.start)}. Now select end date.`);\n }\n }\n }\n\n protected onActiveDateChange(date: D): void {\n this.calendarActiveDate.set(date);\n }\n\n protected onStartTimeChange(time: ComTimeValue | null): void {\n if (!time) return;\n const value = this.internalValue();\n const startDate = value?.start ?? this.dateAdapter.today();\n const updated = this.dateAdapter.setTime(startDate, time.hours, time.minutes, time.seconds);\n this.updateValue(createDateRangeValue(updated, value?.end ?? null));\n }\n\n protected onEndTimeChange(time: ComTimeValue | null): void {\n if (!time) return;\n const value = this.internalValue();\n const endDate = value?.end ?? this.dateAdapter.today();\n const updated = this.dateAdapter.setTime(endDate, time.hours, time.minutes, time.seconds);\n this.updateValue(createDateRangeValue(value?.start ?? null, updated));\n }\n\n // ============ PRIVATE METHODS ============\n\n private createOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(hostEl)\n .withPositions(DEFAULT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private updateValue(value: DateRangeValue<D> | null): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.rangeChange.emit(value);\n this.onValidatorChange();\n }\n\n private parseAndSetStart(inputValue: string): void {\n const currentValue = this.internalValue();\n\n if (!inputValue.trim()) {\n // Clear start date\n if (currentValue?.start) {\n this.updateValue(createDateRangeValue(null, currentValue.end));\n }\n return;\n }\n\n const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n if (parsed && this.dateAdapter.isValid(parsed) && this.isDateValid(parsed)) {\n // Ensure start <= end\n if (currentValue?.end && this.dateAdapter.compareDate(parsed, currentValue.end) > 0) {\n // Swap dates\n this.updateValue(createDateRangeValue(currentValue.end, parsed));\n } else {\n this.updateValue(createDateRangeValue(parsed, currentValue?.end ?? null));\n }\n } else {\n // Revert to current value\n this.startInputRef().nativeElement.value = this.startDisplayValue();\n }\n }\n\n private parseAndSetEnd(inputValue: string): void {\n const currentValue = this.internalValue();\n\n if (!inputValue.trim()) {\n // Clear end date\n if (currentValue?.end) {\n this.updateValue(createDateRangeValue(currentValue.start, null));\n }\n return;\n }\n\n const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n if (parsed && this.dateAdapter.isValid(parsed) && this.isDateValid(parsed)) {\n // Ensure start <= end\n if (currentValue?.start && this.dateAdapter.compareDate(parsed, currentValue.start) < 0) {\n // Swap dates\n this.updateValue(createDateRangeValue(parsed, currentValue.start));\n } else {\n this.updateValue(createDateRangeValue(currentValue?.start ?? null, parsed));\n }\n } else {\n // Revert to current value\n this.endInputRef().nativeElement.value = this.endDisplayValue();\n }\n }\n\n private isDateValid(date: D): boolean {\n const min = this.min();\n const max = this.max();\n const filter = this.dateFilter();\n\n if (min && this.dateAdapter.compareDate(date, min) < 0) {\n return false;\n }\n if (max && this.dateAdapter.compareDate(date, max) > 0) {\n return false;\n }\n if (filter && !filter(date)) {\n return false;\n }\n return true;\n }\n\n private formatDate(date: D): string {\n return this.dateAdapter.format(date, 'long');\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set(message);\n }\n}\n","/**\n * Datepicker components public API.\n */\n\n// Types\nexport type {\n DateFormatPreset,\n DatepickerPanelWidth,\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DatepickerFooterConfig,\n DateRangeValue,\n} from './datepicker.types';\n\nexport {\n createDateRangeValue,\n generateDatepickerId,\n} from './datepicker.types';\n\n// Variants\nexport {\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n datepickerRangeSeparatorVariants,\n} from './datepicker.variants';\n\nexport type {\n DatepickerTriggerVariants,\n DatepickerDisabledVariants,\n DatepickerInputVariants,\n DatepickerIconVariants,\n DatepickerClearVariants,\n DatepickerPanelVariants,\n DatepickerFooterVariants,\n DatepickerFooterButtonVariants,\n DatepickerRangeSeparatorVariants,\n} from './datepicker.variants';\n\n// Components\nexport { ComDatepicker } from './datepicker.component';\nexport { ComDateRangePicker } from './date-range-picker.component';\n","/**\n * TimePicker component public API.\n */\n\n// Types\nexport type {\n ComTimeValue,\n TimePickerSize,\n TimePickerVariant,\n TimePickerState,\n TimePeriod,\n TimeSegment,\n} from './timepicker.types';\n\nexport {\n createTimeValue,\n compareTime,\n generateTimePickerId,\n} from './timepicker.types';\n\n// Variants\nexport {\n timepickerContainerVariants,\n timepickerDisabledVariants,\n timepickerSegmentVariants,\n timepickerSeparatorVariants,\n timepickerPeriodVariants,\n timepickerSectionVariants,\n timepickerLabelVariants,\n} from './timepicker.variants';\n\nexport type {\n TimepickerContainerVariants,\n TimepickerDisabledVariants,\n TimepickerSegmentVariants,\n TimepickerSeparatorVariants,\n TimepickerPeriodVariants,\n TimepickerSectionVariants,\n TimepickerLabelVariants,\n} from './timepicker.variants';\n\n// Component\nexport { ComTimePicker } from './timepicker.component';\n","/**\n * ngx-com/components/calendar\n * Calendar component public API\n */\n\n// Types\nexport type {\n DateRange,\n CalendarView,\n CalendarCellState,\n CalendarCell,\n CalendarCellConfig,\n NameStyle,\n DateFilterFn,\n DateClassFn,\n} from './calendar.types';\n\nexport {\n createDateRange,\n createCalendarCell,\n DAYS_PER_WEEK,\n WEEKS_PER_MONTH,\n YEARS_PER_PAGE,\n YEARS_PER_ROW,\n MONTHS_PER_ROW,\n} from './calendar.types';\n\n// Date Adapter\nexport { DateAdapter, DATE_ADAPTER, NativeDateAdapter } from './date-adapter';\n\n// Variants\nexport { calendarCellVariants, calendarCellWrapperVariants } from './calendar-cell.variants';\nexport type { CalendarCellVariants, CalendarCellWrapperVariants } from './calendar-cell.variants';\n\nexport { calendarHeaderVariants, calendarHeaderButtonVariants } from './calendar-header.variants';\nexport type { CalendarHeaderVariants, CalendarHeaderButtonVariants } from './calendar-header.variants';\n\nexport { calendarVariants } from './calendar.variants';\nexport type { CalendarVariants } from './calendar.variants';\n\n// Utilities\nexport {\n createGrid,\n navigateGrid,\n getWeekdayHeaders,\n isDateDisabled,\n isMonthDisabled,\n isYearDisabled,\n getMultiYearStartingYear,\n} from './calendar.utils';\nexport type { WeekdayHeader } from './calendar.utils';\n\n// Components\nexport { ComCalendarCell } from './calendar-cell';\nexport type { CalendarCellKeyNavEvent } from './calendar-cell';\n\n// Header Component\nexport { ComCalendarHeader } from './calendar-header';\n\n// Calendar Orchestrator\nexport { ComCalendar } from './calendar';\n\n// View Components\nexport {\n CalendarViewBase,\n ComCalendarMonthView,\n ComCalendarYearView,\n ComCalendarMultiYearView,\n} from './views';\n\n// Selection Strategies\nexport {\n CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n SingleSelectionStrategy,\n RangeSelectionStrategy,\n MultiSelectionStrategy,\n WeekSelectionStrategy,\n} from './selection';\nexport type { SelectionResult } from './selection';\n\n// Provider Functions\nexport {\n provideNativeDateAdapter,\n provideSingleSelectionStrategy,\n provideRangeSelectionStrategy,\n provideMultiSelectionStrategy,\n provideWeekSelectionStrategy,\n} from './providers';\n\n// Datepicker Components\nexport {\n ComDatepicker,\n ComDateRangePicker,\n createDateRangeValue,\n generateDatepickerId,\n datepickerTriggerVariants,\n datepickerDisabledVariants,\n datepickerInputVariants,\n datepickerIconVariants,\n datepickerClearVariants,\n datepickerPanelVariants,\n datepickerFooterVariants,\n datepickerFooterButtonVariants,\n datepickerRangeSeparatorVariants,\n} from './datepicker';\n\nexport type {\n DateFormatPreset,\n DatepickerPanelWidth,\n DatepickerSize,\n DatepickerVariant,\n DatepickerState,\n DatepickerFooterConfig,\n DateRangeValue,\n DatepickerTriggerVariants,\n DatepickerDisabledVariants,\n DatepickerInputVariants,\n DatepickerIconVariants,\n DatepickerClearVariants,\n DatepickerPanelVariants,\n DatepickerFooterVariants,\n DatepickerFooterButtonVariants,\n DatepickerRangeSeparatorVariants,\n} from './datepicker';\n\n// Timepicker\nexport {\n ComTimePicker,\n createTimeValue,\n compareTime,\n generateTimePickerId,\n timepickerContainerVariants,\n timepickerDisabledVariants,\n timepickerSegmentVariants,\n timepickerSeparatorVariants,\n timepickerPeriodVariants,\n timepickerSectionVariants,\n timepickerLabelVariants,\n} from './timepicker';\n\nexport type {\n ComTimeValue,\n TimePickerSize,\n TimePickerVariant,\n TimePickerState,\n TimePeriod,\n TimeSegment,\n TimepickerContainerVariants,\n TimepickerDisabledVariants,\n TimepickerSegmentVariants,\n TimepickerSeparatorVariants,\n TimepickerPeriodVariants,\n TimepickerSectionVariants,\n TimepickerLabelVariants,\n} from './timepicker';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DEFAULT_POSITIONS"],"mappings":"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"}