@lucca-front/ng 21.0.0-rc.5 → 21.0.0-rc.7

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 (66) hide show
  1. package/data-table/index.d.ts +1 -1
  2. package/dialog/index.d.ts +60 -59
  3. package/fesm2022/lucca-front-ng-chip.mjs +1 -1
  4. package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
  5. package/fesm2022/lucca-front-ng-core-select.mjs +1 -1
  6. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  7. package/fesm2022/lucca-front-ng-data-table.mjs +15 -15
  8. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  9. package/fesm2022/lucca-front-ng-date2.mjs +1 -1
  10. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  11. package/fesm2022/lucca-front-ng-dialog.mjs +96 -92
  12. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  13. package/fesm2022/lucca-front-ng-establishment.mjs +2 -2
  14. package/fesm2022/lucca-front-ng-establishment.mjs.map +1 -1
  15. package/fesm2022/lucca-front-ng-file-upload.mjs +1 -1
  16. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  17. package/fesm2022/lucca-front-ng-filter-pills.mjs +4 -4
  18. package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
  19. package/fesm2022/lucca-front-ng-form-field.mjs +2 -2
  20. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  21. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +5 -5
  22. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  23. package/fesm2022/lucca-front-ng-forms.mjs +2 -2
  24. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-index-table.mjs +1 -1
  26. package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-inline-message.mjs +1 -1
  28. package/fesm2022/lucca-front-ng-inline-message.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-link.mjs +29 -55
  30. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-modal.mjs +3 -3
  32. package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-numeric-badge.mjs +1 -1
  34. package/fesm2022/lucca-front-ng-numeric-badge.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-option.mjs +1 -1
  36. package/fesm2022/lucca-front-ng-option.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-popover2.mjs +2 -2
  38. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  39. package/fesm2022/lucca-front-ng-scroll-box.mjs +26 -24
  40. package/fesm2022/lucca-front-ng-scroll-box.mjs.map +1 -1
  41. package/fesm2022/lucca-front-ng-status-badge.mjs +1 -1
  42. package/fesm2022/lucca-front-ng-status-badge.mjs.map +1 -1
  43. package/fesm2022/lucca-front-ng-tag.mjs +1 -1
  44. package/fesm2022/lucca-front-ng-tag.mjs.map +1 -1
  45. package/fesm2022/lucca-front-ng-tooltip.mjs +2 -4
  46. package/fesm2022/lucca-front-ng-tooltip.mjs.map +1 -1
  47. package/fesm2022/lucca-front-ng-user-popover.mjs +2 -2
  48. package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
  49. package/index-table/index.d.ts +1 -1
  50. package/link/index.d.ts +3 -6
  51. package/package.json +33 -37
  52. package/schematics/collection.json +10 -0
  53. package/schematics/color-text/index.js +55 -0
  54. package/schematics/color-text/migration.spec.js +50 -0
  55. package/schematics/color-text/schema.json +23 -0
  56. package/schematics/lib/angular-component-ast.js +29 -0
  57. package/schematics/lu-text-input/index.js +24 -0
  58. package/schematics/lu-text-input/migration.js +116 -0
  59. package/schematics/lu-text-input/migration.spec.js +23 -0
  60. package/schematics/lu-text-input/schema.json +23 -0
  61. package/scroll-box/index.d.ts +6 -5
  62. package/src/components/cdk/_global.scss +22 -1
  63. package/tooltip/index.d.ts +2 -2
  64. package/fesm2022/lucca-front-ng-scrollBox.mjs +0 -6
  65. package/fesm2022/lucca-front-ng-scrollBox.mjs.map +0 -1
  66. package/scrollBox/index.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-date2.mjs","sources":["../../../packages/ng/date2/calendar.token.ts","../../../packages/ng/date2/translations.ts","../../../packages/ng/date2/date2.translate.ts","../../../packages/ng/date2/repeat-times.directive.ts","../../../packages/ng/date2/date.const.ts","../../../packages/ng/date2/utils.ts","../../../packages/ng/date2/calendar2/calendar2.tokens.ts","../../../packages/ng/date2/calendar2/calendar2-cell.directive.ts","../../../packages/ng/date2/calendar2/calendar2.component.ts","../../../packages/ng/date2/calendar2/calendar2.component.html","../../../packages/ng/date2/date-format.ts","../../../packages/ng/date2/abstract-date-component.ts","../../../packages/ng/date2/date-input/date-input.component.ts","../../../packages/ng/date2/date-input/date-input.component.html","../../../packages/ng/date2/date-range-input/calendar-shortcut.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.html","../../../packages/ng/date2/lucca-front-ng-date2.ts"],"sourcesContent":["import { getLocaleFirstDayOfWeek, getLocaleWeekEndRange } from '@angular/common';\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\n\nexport type CalendarWeekDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\nexport interface CalendarWeekInfo {\n\tfirstDay: CalendarWeekDay;\n\tweekend: CalendarWeekDay[];\n}\n\nexport const WEEK_INFO = new InjectionToken<CalendarWeekInfo>('Calendar2:WeekInfo', {\n\tfactory: () => {\n\t\tconst locale = inject(LOCALE_ID);\n\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\tconst [weekendStart, weekendEnd] = getLocaleWeekEndRange(locale);\n\t\tconst weekend: number[] = [];\n\t\tlet weekDay: number = weekendStart;\n\t\twhile (weekDay != weekendEnd) {\n\t\t\t// Sunday is 0 in Angular but 7 in Intl\n\t\t\tweekend.push(weekDay || 7);\n\t\t\tweekDay = (weekDay + 1) % 7;\n\t\t}\n\t\tweekend.push(weekDay || 7);\n\t\treturn {\n\t\t\tfirstDay: (getLocaleFirstDayOfWeek(locale) + 7) % 7,\n\t\t\tweekend,\n\t\t} as CalendarWeekInfo;\n\t},\n});\n","export const Translations = {\n\tfr: {\n\t\tfrom: 'Du',\n\t\tto: 'au',\n\t\tdirectionKeysTip: 'Les touches directionnelles servent à parcourir les dates.',\n\t\tpickDate: 'Choisir une date dans le calendrier',\n\t\tprevious: 'Précédent',\n\t\tnext: 'Suivant',\n\t\tclear: 'Vider ce champ',\n\t},\n\ten: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through dates.',\n\t\tpickDate: 'Pick a date in calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_DATE2_TRANSLATIONS = new InjectionToken('LuDate2Translations', {\n\tfactory: () => luDate2Translations,\n});\n\nexport interface Date2Translate {\n\tfrom: string;\n\tto: string;\n\tdirectionKeysTip: string;\n\tpickDate: string;\n\tprevious: string;\n\tnext: string;\n\tclear: string;\n}\n\nexport const luDate2Translations: LuTranslation<Date2Translate> = Translations;\n","import { Directive, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n\tselector: '[luRepeatTimes]',\n})\nexport class RepeatTimesDirective {\n\tprivate templateRef = inject<TemplateRef<void>>(TemplateRef);\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\t@Input('luRepeatTimes')\n\tpublic set repeatTimes(times: number) {\n\t\tthis.viewContainerRef.clear();\n\n\t\tfor (let i = 0; i < times; i++) {\n\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t}\n\t}\n\n\tpublic static ngTemplateContextGuard(_dir: RepeatTimesDirective, ctx: unknown): ctx is void {\n\t\treturn true;\n\t}\n}\n","export const DATE_FORMAT = {\n\tDATE: 'date',\n\tDATE_ISO: 'date-iso',\n} as const;\n\nexport type DateFormat = (typeof DATE_FORMAT)[keyof typeof DATE_FORMAT];\n\nexport const DATE_ISO_FORMAT = 'yyyy-MM-dd';\n","import { isNil } from '@lucca-front/ng/core';\nimport { Day, format, isSameDay, isSameMonth, isSameYear, parse, startOfDecade, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarWeekDay, CalendarWeekInfo } from './calendar.token';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { DATE_ISO_FORMAT } from './date.const';\n\nexport function getIntlWeekDay(date: Date): CalendarWeekDay {\n\treturn (date.getDay() || 7) as CalendarWeekDay;\n}\n\nexport function getJSFirstDayOfWeek(weekInfo: CalendarWeekInfo): Day {\n\treturn (weekInfo.firstDay % 7) as Day;\n}\n\nconst modeToComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameDay,\n\tmonth: isSameMonth,\n\tyear: isSameYear,\n};\n\nconst modeToCalendarComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameMonth,\n\tmonth: isSameYear,\n\tyear: (a, b) => Math.floor(a.getFullYear() / 10) === Math.floor(b.getFullYear() / 10),\n};\n\nconst modeToPeriodStart: Record<CalendarMode, (date: Date) => Date> = {\n\tday: startOfMonth,\n\tmonth: startOfYear,\n\tyear: startOfDecade,\n};\n\nexport function comparePeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToComparator[mode](a, b);\n}\n\nexport function compareCalendarPeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToCalendarComparator[mode](a, b);\n}\n\nexport function startOfPeriod(mode: CalendarMode, date: Date): Date {\n\treturn modeToPeriodStart[mode](date);\n}\n\nfunction stringToDateISO(value: string): Date {\n\tconst res = parse(value, DATE_ISO_FORMAT, new Date());\n\tif (isNaN(+res)) {\n\t\tthrow new Error('Invalid date: your input should be a valid iso date string (yyyy-MM-dd), received: ' + value);\n\t}\n\treturn res;\n}\n\nexport function transformDateInputToDate(value: Date | null | undefined | string): Date | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\treturn stringToDateISO(value);\n}\n\nexport function transformDateToDateISO(value: Date | null): string | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\treturn format(value, DATE_ISO_FORMAT);\n}\n\nfunction isDateRangeInput(value: DateRangeInput | DateRange): value is DateRangeInput {\n\treturn !(value.start instanceof Date);\n}\n\nexport function transformDateRangeInputToDateRange(value: DateRange | null | undefined | DateRangeInput): DateRange | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\tif (!isDateRangeInput(value)) {\n\t\treturn value;\n\t}\n\n\treturn {\n\t\t...value,\n\t\tstart: transformDateInputToDate(value.start),\n\t\tend: transformDateInputToDate(value.end),\n\t};\n}\n\nexport function transformDateRangeToDateRangeInput(value: DateRange): DateRangeInput {\n\treturn {\n\t\t...value,\n\t\tstart: transformDateToDateISO(value.start),\n\t\tend: transformDateToDateISO(value.end),\n\t};\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\n\nexport const CALENDAR_CELLS = new InjectionToken<Signal<Calendar2CellDirective[]>>('Calendar2:Calendar2Cells');\nexport const CALENDAR_TABBABLE_DATE = new InjectionToken<WritableSignal<Date>>('Calendar2:TabbableDate');\n","import { computed, Directive, ElementRef, HostBinding, HostListener, inject, input } from '@angular/core';\nimport { add, addMonths, addYears, endOfWeek, startOfWeek, sub, subMonths, subYears } from 'date-fns';\nimport type { Duration } from 'date-fns/types';\nimport { WEEK_INFO } from '../calendar.token';\nimport { comparePeriods, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarMode } from './calendar-mode';\nimport { CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\n\nconst modeToDurationKey: Record<CalendarMode, keyof Duration> = {\n\tday: 'days',\n\tmonth: 'months',\n\tyear: 'years',\n};\n\n@Directive({\n\tselector: '[luCalendar2Cell]',\n})\nexport class Calendar2CellDirective {\n\t#host = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t#tabbableDate = inject(CALENDAR_TABBABLE_DATE);\n\t#weekInfo = inject(WEEK_INFO);\n\n\t// Index of this day in the current week display row, not depending on locale, 0 is first day of week and 6 is last\n\tluCalendar2Cell = input.required<number>();\n\n\tluCalendar2Mode = input.required<CalendarMode>();\n\n\tluCalendar2Date = input.required<Date>();\n\n\t@HostBinding('tabindex')\n\tget tabindex(): 0 | -1 {\n\t\treturn this.isTabbableDate() ? 0 : -1;\n\t}\n\n\tisTabbableDate = computed(() => {\n\t\treturn comparePeriods(this.luCalendar2Mode(), this.luCalendar2Date(), this.#tabbableDate());\n\t});\n\n\t@HostListener('keydown', ['$event'])\n\tkeydown($event: KeyboardEvent): void {\n\t\t// See https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/#ex_label for keyboard\n\t\t// navigation standards on date pickers\n\t\tconst cellsPerRow = this.luCalendar2Mode() === 'day' ? 7 : 3;\n\t\tconst datePropertyToEdit = modeToDurationKey[this.luCalendar2Mode()];\n\t\tswitch ($event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(startOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(endOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif ($event.shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(subYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(subMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif ($event.shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(addYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(addMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tthis.#host.nativeElement.focus();\n\t}\n\n\tblur(): void {\n\t\tthis.#host.nativeElement.blur();\n\t}\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, LOCALE_ID, model, OnInit, output, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { getIntl } from '@lucca-front/ng/core';\nimport { LuTooltipTriggerDirective } from '@lucca-front/ng/tooltip';\nimport {\n\taddHours,\n\taddMonths,\n\taddYears,\n\teachDayOfInterval,\n\teachMonthOfInterval,\n\teachYearOfInterval,\n\tendOfDay,\n\tendOfDecade,\n\tendOfMonth,\n\tendOfWeek,\n\tendOfYear,\n\tisAfter,\n\tisSameDay,\n\tisSameMonth,\n\tisSameYear,\n\tisWithinInterval,\n\tlastDayOfMonth,\n\tstartOfDay,\n\tstartOfDecade,\n\tstartOfMonth,\n\tstartOfWeek,\n\tstartOfYear,\n\tsubMonths,\n\tsubYears,\n\tWeekOptions,\n} from 'date-fns';\nimport type { Interval } from 'date-fns/types';\nimport { WEEK_INFO } from '../calendar.token';\nimport { LU_DATE2_TRANSLATIONS } from '../date2.translate';\nimport { RepeatTimesDirective } from '../repeat-times.directive';\nimport { comparePeriods, getIntlWeekDay, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarCellInfo, CalendarMonthInfo, CalendarYearInfo } from './calendar-cell-info';\nimport { CalendarMode } from './calendar-mode';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\nimport { CALENDAR_CELLS, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\nimport { CellStatus } from './cell-status';\nimport { DateRange } from './date-range';\n\nconst MODE_HIERARCHY: CalendarMode[] = ['day', 'month', 'year'];\n\n@Component({\n\tselector: 'lu-calendar2',\n\timports: [RepeatTimesDirective, Calendar2CellDirective, LuTooltipTriggerDirective],\n\ttemplateUrl: './calendar2.component.html',\n\tstyleUrl: './calendar2.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: CALENDAR_CELLS,\n\t\t\tuseFactory: () => inject(Calendar2Component).calendar2CellInstances,\n\t\t},\n\t\t{\n\t\t\tprovide: CALENDAR_TABBABLE_DATE,\n\t\t\tuseFactory: () => inject(Calendar2Component).tabbableDate,\n\t\t},\n\t],\n})\nexport class Calendar2Component implements OnInit {\n\t#locale = inject(LOCALE_ID);\n\t#weekInfo = inject(WEEK_INFO);\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t#intlDateFormat = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlDateYear = new Intl.DateTimeFormat(this.#locale, { year: 'numeric' });\n\n\t#intlDaysLong = new Intl.DateTimeFormat(this.#locale, { weekday: 'long' });\n\t#intlDaysShort = new Intl.DateTimeFormat(this.#locale, { weekday: 'short' });\n\t#intlRelativeDay = new Intl.RelativeTimeFormat(this.#locale, { numeric: 'auto' });\n\n\t#intlMonthsLong = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlMonthsShort = new Intl.DateTimeFormat(this.#locale, { month: 'short' });\n\n\t#weekOptions: WeekOptions = { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) };\n\n\tintl = getIntl(LU_DATE2_TRANSLATIONS);\n\n\tshowOverflow = input(false, { transform: booleanAttribute });\n\n\tenableOverflow = input(false, { transform: booleanAttribute });\n\n\tremoveYearOverflow = input(false, { transform: booleanAttribute });\n\n\thideToday = input(false, { transform: booleanAttribute });\n\n\thasTodayButton = input(false, { transform: booleanAttribute });\n\n\thideWeekend = input(false, { transform: booleanAttribute });\n\n\tdisableModeChange = input(false, { transform: booleanAttribute });\n\n\t// Date used to init the component and as internal focus model\n\tdate = model.required<Date>();\n\n\ttabbableDate = model<Date | null>(null);\n\n\tmode = model<CalendarMode>('day');\n\n\tdisplayMode = model<CalendarMode | null>(null);\n\n\tranges = input<readonly DateRange[]>([]);\n\n\tgetCellInfo = input<(date: Date, displayMode: CalendarMode) => CellStatus>((_date: Date) => ({\n\t\tclasses: [],\n\t\tdisabled: false,\n\t}));\n\n\tmonth = computed(() => startOfMonth(this.date()));\n\n\tyear = computed(() => startOfYear(this.date()));\n\n\tdecade = computed(() => startOfDecade(this.date()));\n\n\tpreviousMonth = computed(() => subMonths(this.month(), 1));\n\n\tnextMonth = computed(() => addMonths(this.month(), 1));\n\n\tnextPage = output();\n\n\tpreviousPage = output();\n\n\tdateClicked = output<Date>();\n\n\tdateHovered = model<Date | null>(null);\n\n\ttodayLabel = this.#intlRelativeDay.format(0, 'day');\n\tthisMonthLabel = this.#intlRelativeDay.format(0, 'month');\n\tthisYearLabel = this.#intlRelativeDay.format(0, 'year');\n\n\tcalendar2CellInstances = viewChildren(Calendar2CellDirective);\n\n\tdaysOfWeek = eachDayOfInterval({\n\t\tstart: startOfWeek(new Date(), this.#weekOptions),\n\t\tend: endOfWeek(new Date(), this.#weekOptions),\n\t}).map((day) => ({\n\t\tlong: this.#intlDaysLong.format(day),\n\t\tshort: this.#intlDaysShort.format(day),\n\t}));\n\n\tmonthGridDisplay = computed(() => {\n\t\tconst daysOfMonth: CalendarCellInfo[] = eachDayOfInterval({\n\t\t\tstart: this.month(),\n\t\t\tend: endOfMonth(this.month()),\n\t\t}).map((date) => this.dateToCellInfo(date));\n\t\tconst daysByWeek = daysOfMonth.reduce<Record<number, CalendarCellInfo[]>>((acc, day) => {\n\t\t\tconst key = startOfWeek(day.date, this.#weekOptions).getTime();\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[key]: [...(acc[key] || []), day],\n\t\t\t};\n\t\t}, {});\n\t\t// If we want to show days before and after this month\n\t\t// Use last week of previous month\n\t\tconst startOfPreviousOverflow = startOfWeek(lastDayOfMonth(this.previousMonth()), this.#weekOptions);\n\t\tconst previousOverflow = eachDayOfInterval({\n\t\t\tstart: startOfPreviousOverflow,\n\t\t\tend: endOfMonth(this.previousMonth()),\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(endOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfPreviousOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfPreviousOverflow.getTime()] = [...previousOverflow, ...daysByWeek[startOfPreviousOverflow.getTime()]];\n\t\t}\n\t\t// Use first week of next month\n\t\tconst startOfNextMonthOverflow = startOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst endOfNextMonthOverflow = endOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst nextOverflow = eachDayOfInterval({\n\t\t\tstart: startOfMonth(this.nextMonth()),\n\t\t\tend: endOfNextMonthOverflow,\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(startOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfNextMonthOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfNextMonthOverflow.getTime()] = [...daysByWeek[startOfNextMonthOverflow.getTime()], ...nextOverflow];\n\t\t}\n\t\treturn Object.keys(daysByWeek)\n\t\t\t.sort()\n\t\t\t.map((weekStart) => daysByWeek[+weekStart]);\n\t});\n\n\tyearGridDisplay = computed(() => {\n\t\tconst monthsOfYear: Date[] = eachMonthOfInterval({\n\t\t\tstart: this.year(),\n\t\t\tend: endOfYear(this.year()),\n\t\t});\n\t\treturn monthsOfYear\n\t\t\t.map((month) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: month,\n\t\t\t\t\tshort: this.#intlMonthsShort.format(month),\n\t\t\t\t\tlong: this.#intlMonthsLong.format(month),\n\t\t\t\t\t...this.dateToCellInfo(month),\n\t\t\t\t\tisCurrent: isSameMonth(new Date(), month),\n\t\t\t\t} as CalendarMonthInfo;\n\t\t\t})\n\t\t\t.reduce<CalendarMonthInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tdecadeGridDisplay = computed(() => {\n\t\tconst yearsOfDecade: Date[] = eachYearOfInterval({\n\t\t\tstart: this.removeYearOverflow() ? this.decade() : subYears(this.decade(), 1),\n\t\t\tend: this.removeYearOverflow() ? endOfDecade(this.decade()) : addYears(endOfDecade(this.decade()), 1),\n\t\t});\n\t\treturn yearsOfDecade\n\t\t\t.map((year) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: year,\n\t\t\t\t\t...this.dateToCellInfo(year),\n\t\t\t\t\tname: this.#intlDateYear.format(year),\n\t\t\t\t\tisCurrent: isSameYear(new Date(), year),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.reduce<CalendarYearInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tcurrentMonthLabel = computed(() => {\n\t\treturn this.#intlDateFormat.format(this.date());\n\t});\n\n\tcurrentYearLabel = computed(() => {\n\t\treturn this.#intlDateYear.format(this.date());\n\t});\n\n\tcurrentDecadeLabel = computed(() => {\n\t\treturn `${this.#intlDateYear.format(startOfDecade(this.decade()))} – ${this.#intlDateYear.format(endOfDecade(this.decade()))}`;\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (this.tabbableDate() === null) {\n\t\t\t\tthis.tabbableDate.set(this.date());\n\t\t\t}\n\t\t});\n\t}\n\n\tfocusTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.focus();\n\t}\n\n\tblurTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.blur();\n\t}\n\n\tclickToday() {\n\t\tthis.onCellClicked(startOfDay(new Date()));\n\t}\n\n\tngOnInit(): void {\n\t\t// On init, set display mode to the mode specified by component consumer\n\t\tif (this.displayMode() === null) {\n\t\t\tthis.displayMode.set(this.mode());\n\t\t}\n\t}\n\n\tonCellClicked(date: Date): void {\n\t\t// On cell clicked, if display mode is same as mode, emit value\n\t\t// Else, zoom in to new mode\n\t\tif (this.displayMode() === this.mode()) {\n\t\t\tthis.dateClicked.emit(date);\n\t\t} else {\n\t\t\t// Check that we are able to zoom in\n\t\t\tconst maxZoomLevel = MODE_HIERARCHY.indexOf(this.mode());\n\t\t\tconst currentZoomLevel = MODE_HIERARCHY.indexOf(this.displayMode());\n\t\t\tconst targetZoomLevel = currentZoomLevel - 1;\n\t\t\tif (targetZoomLevel >= 0 && targetZoomLevel >= maxZoomLevel) {\n\t\t\t\tconst newZoomLevel = MODE_HIERARCHY[targetZoomLevel];\n\t\t\t\tswitch (newZoomLevel) {\n\t\t\t\t\tcase 'year':\n\t\t\t\t\t\tthis.date.set(startOfDecade(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'month':\n\t\t\t\t\t\tthis.date.set(startOfYear(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'day':\n\t\t\t\t\t\tthis.date.set(startOfMonth(date));\n\t\t\t\t}\n\t\t\t\tthis.displayMode.set(newZoomLevel);\n\t\t\t}\n\t\t}\n\t}\n\n\tdateToCellInfo(date: Date, isOverflow = false): CalendarCellInfo {\n\t\t// This method is quite complex and packs a lot of logic, let's try to decompose and explain it.\n\n\t\t// First of all get cell status from the input, if the consumer needs to apply specific statuses to it\n\t\tconst status = this.getCellInfo()(date, this.displayMode());\n\n\t\t// We need to store a boolean for day mode, because some logic is specific to day display (like weekends for instance)\n\t\tconst isDayMode = this.displayMode() === 'day';\n\n\t\t// Keeping consumer's classes aside\n\t\tconst classes: string[] = status?.classes || [];\n\n\t\t// Let's grab the ranges in which this date is in, which includes the \"in progress\" one if it exists, using the current hovered date\n\t\tconst rangeInfo = this.getRangeInfo(date, this.displayMode(), isOverflow);\n\n\t\t// If the range includes classes, add them to our display classes\n\t\tif (rangeInfo?.class) {\n\t\t\tclasses.push(rangeInfo.class);\n\t\t}\n\n\t\t// Day specific logic\n\t\t// Is it weekend day? for is-dayOff class toggle\n\t\tconst isWeekend = isDayMode && this.#weekInfo.weekend.includes(getIntlWeekDay(date)) && !this.hideWeekend();\n\t\t// Is it first day of month? Mostly used for overflow display logic\n\t\tconst isFirstDayOfMonth = isDayMode && isSameDay(startOfMonth(date), rangeInfo?.range.start);\n\n\t\t// Is this the current period? Will match if same day as today, or same month in month display, or same year if year display\n\t\tconst isCurrent = comparePeriods(this.displayMode(), new Date(), date) && !this.hideToday();\n\n\t\t// Are we currently in a range that's being created (start date selected, end date is being hovered)\n\t\tconst isInProgress = rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() !== null;\n\n\t\t// Progress flags\n\t\tlet isProgressBody = false;\n\t\tlet isProgressStart = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\tlet isProgressEnd = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\t// Specific case for when start is == end and we're hovering it\n\t\tlet isSingleDayInProgress = false;\n\n\t\tif (isInProgress) {\n\t\t\tlet start = rangeInfo?.range.start;\n\t\t\t// If we're in day mode, depending on if first day of month or not, we want to consider the start or the end of the day,\n\t\t\t// To make sure we don't conflict with overflow\n\t\t\tif (isDayMode) {\n\t\t\t\tstart = isFirstDayOfMonth ? endOfDay(rangeInfo.range.start) : startOfDay(rangeInfo.range.start);\n\t\t\t}\n\t\t\tconst hoveredRange: Interval = {\n\t\t\t\tstart,\n\t\t\t\tend: startOfDay(this.dateHovered()),\n\t\t\t};\n\n\t\t\t// If start is after end, fix this by inverting the two, we always want to work with start before end\n\t\t\tif (isAfter(hoveredRange.start, hoveredRange.end)) {\n\t\t\t\tlet newStart = hoveredRange.end;\n\t\t\t\tconst newStartIsFirstDayOfMonth = isSameDay(startOfMonth(hoveredRange.end), hoveredRange.end);\n\t\t\t\tif (isDayMode) {\n\t\t\t\t\tnewStart = newStartIsFirstDayOfMonth ? endOfDay(hoveredRange.end) : startOfDay(hoveredRange.end);\n\t\t\t\t}\n\t\t\t\thoveredRange.end = rangeInfo.range.start;\n\t\t\t\thoveredRange.start = newStart;\n\t\t\t}\n\n\t\t\t// if we're working on overflow for after the last day of a month, we want to use end of day as comparison date\n\t\t\tconst isEndOfMonthOverflow = isOverflow && isSameDay(date, startOfMonth(date));\n\n\t\t\tif (isEndOfMonthOverflow) {\n\t\t\t\thoveredRange.end = endOfDay(hoveredRange.end);\n\t\t\t}\n\t\t\t// We're progress body if middle of day is in the current range\n\t\t\tisProgressBody = isWithinInterval(addHours(startOfDay(date), 12), hoveredRange);\n\t\t\t// Overflow cannot be start status for CSS, same for end\n\t\t\tisProgressStart = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.start as Date);\n\t\t\tisProgressEnd = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.end as Date);\n\n\t\t\t// This is the case where you clicked a first date and then are hovering it, which requires a specific case for CSS\n\t\t\tif (isSameDay(rangeInfo.range.start, this.dateHovered())) {\n\t\t\t\tisSingleDayInProgress = !isOverflow && isSameDay(hoveredRange.start, hoveredRange.end) && isSameDay(hoveredRange.start, this.dateHovered());\n\t\t\t}\n\t\t}\n\n\t\tconst isSelected = status.selected || (!!rangeInfo?.range && !isInProgress);\n\n\t\treturn {\n\t\t\tday: date.getDate(),\n\t\t\tstatus,\n\t\t\tlabel: status.label || rangeInfo?.label,\n\t\t\tdate,\n\t\t\trangeInfo,\n\t\t\tisWeekend,\n\t\t\tisCurrent,\n\t\t\tisOverflow,\n\t\t\tisSelected,\n\t\t\tnoButton: isOverflow && !this.showOverflow(),\n\t\t\tdisabled: status?.disabled || (isOverflow && !this.enableOverflow()),\n\t\t\t// Compile everything into a list of classes for CSS\n\t\t\tclasses: {\n\t\t\t\t'is-daysOff': isWeekend,\n\t\t\t\t'is-overflow': isOverflow,\n\t\t\t\t'is-current': isCurrent,\n\t\t\t\t'is-start': !isOverflow && (rangeInfo?.isStart || status.selected) && !isInProgress,\n\t\t\t\t'is-end': !isOverflow && (rangeInfo?.isEnd || status.selected) && !isInProgress,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t// Range in progress statuses\n\t\t\t\t'is-selectionInProgress': isProgressBody,\n\t\t\t\t'is-startInProgress': isProgressStart,\n\t\t\t\t'is-endInProgress': isProgressEnd,\n\t\t\t\t'is-singleDayInProgress': isSingleDayInProgress,\n\n\t\t\t\t...classes.reduce((acc, key) => ({ ...acc, [key]: true }), {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tgetRangeInfo(date: Date, scope: CalendarMode, isOverflow = false) {\n\t\tconst range: DateRange | undefined = this.ranges().find((range: DateRange) => {\n\t\t\tconst isSameScope = (range.scope || 'day') === scope;\n\t\t\tif (isSameScope) {\n\t\t\t\tif (range.end) {\n\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\tstart: isOverflow ? endOfDay(range.start) : startOfDay(range.start),\n\t\t\t\t\t\tend: isOverflow ? startOfDay(range.end) : range.end,\n\t\t\t\t\t});\n\t\t\t\t} else if (this.dateHovered() !== null) {\n\t\t\t\t\t// Nominal case: end is after start\n\t\t\t\t\tif (isAfter(this.dateHovered(), startOfDay(range.start))) {\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(range.start),\n\t\t\t\t\t\t\tend: endOfDay(this.dateHovered()),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// When user clicked end date first and now wants to select a start date\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(this.dateHovered()),\n\t\t\t\t\t\t\tend: endOfDay(range.start),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\treturn isSameDay(date, range.start);\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\treturn isSameMonth(date, range.start);\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\treturn isSameYear(date, range.start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isStart: boolean = range && isSameDay(date, range.start);\n\t\tconst isEnd: boolean = range && range.end && isSameDay(date, range.end);\n\n\t\treturn {\n\t\t\trange,\n\t\t\tisStart,\n\t\t\tisEnd,\n\t\t\tlabel: range?.label,\n\t\t\tclass: range?.class,\n\t\t};\n\t}\n}\n","<div class=\"calendar\">\n\t@switch (displayMode()) {\n\t\t@case (\"day\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-name\" aria-live=\"polite\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentMonthLabel() }}&ngsp; {{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('month')\">{{ currentMonthLabel() }}</button>&ngsp;\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-name\">\n\t\t\t\t<thead class=\"calendar-table-head\">\n\t\t\t\t\t<tr class=\"calendar-table-head-row\">\n\t\t\t\t\t\t@for (day of daysOfWeek; track day.long) {\n\t\t\t\t\t\t\t<th class=\"calendar-table-head-row-cell\" scope=\"col\">\n\t\t\t\t\t\t\t\t<span [attr.data-content-after]=\"day.short.substring(0, 1)\" aria-hidden=\"true\"></span>\n\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ day.long }}</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (week of monthGridDisplay(); track $index; let isLastWeek = $last) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (day of week; track dayIndex; let dayIndex = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"day.isSelected && !day.isOverflow\"\n\t\t\t\t\t\t\t\t\t[class]=\"day.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@if (!day.noButton) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"dayIndex\"\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"day.date\"\n\t\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"day\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"day.disabled ? 'true' : null\"\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(focus)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(blur)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t\t[luTooltip]=\"day.label\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{{ day.day }}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ todayLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isWeekend) {\n\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"calendar-table-body-row-cell-action-stripes\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<use href=\"#calendar-stripes-symbol\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"isLastWeek ? 7 - week.length : 0\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t\t<tr class=\"calendar-table-body-row\" *luRepeatTimes=\"6 - monthGridDisplay().length\">\n\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"7\"></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t@if (hasTodayButton()) {\n\t\t\t\t<div class=\"calendar-divider divider\"></div>\n\t\t\t\t<button class=\"calendar-todayLink link\" type=\"button\" (click)=\"clickToday()\">{{ todayLabel }}</button>\n\t\t\t}\n\t\t\t<svg class=\"calendar-stripes\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" aria-hidden=\"true\">\n\t\t\t\t<symbol id=\"calendar-stripes-symbol\" viewBox=\"0 0 60 60\">\n\t\t\t\t\t<path\n\t\t\t\t\t\tclass=\"calendar-stripes-symbol-path\"\n\t\t\t\t\t\td=\"m-41.82 43.03 84.85-84.85.53.53-84.85 84.85zm2.12 2.12L45.15-39.7l.53.53-84.85 84.85zm2.12 2.12\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.13L49.4-35.47l.53.53-84.85 84.85zm2.12 2.11\n\t\t\t84.85-84.85.54.53-84.86 84.86zm2.12 2.13 84.86-84.86.53.53-84.86 84.86zm2.12\n\t\t\t2.12L55.76-29.1l.53.53-84.86 84.86zm2.13 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L60-24.85l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L64.24-20.6l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.13L68.5-16.37l.53.53-84.86 84.86zm2.12 2.11 84.86-84.85.53.53-84.86 84.86zm2.13 2.13\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.12L74.85-10l.53.53-84.85 84.85zm2.12\n\t\t\t2.12L76.97-7.88l.53.53L-7.35 77.5zm2.12 2.13L79.09-5.77l.53.53-84.85 84.85zm2.12\n\t\t\t2.11L81.21-3.64l.53.53L-3.1 81.74zm2.12 2.12L83.33-1.52l.53.53L-.99\n\t\t\t83.86zM.6 85.46 85.46.6l.53.53L1.13 86zm2.12 2.12L87.58 2.72l.53.53L3.25 88.11zm2.13 2.12L89.7\n\t\t\t4.85l.53.53L5.38 90.23zm2.12 2.12L91.82 6.97l.53.53L7.5 92.35zm2.12 2.12L93.94 9.1l.53.53L9.62\n\t\t\t94.47zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12 84.86-84.85.53.53-84.86 84.86z\"\n\t\t\t\t\t/>\n\t\t\t\t</symbol>\n\t\t\t</svg>\n\t\t}\n\t\t@case (\"month\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-year-name\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-year-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (quarter of yearGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (month of quarter; track month.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"month.status.selected || !!month.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"month.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[attr.data-content-after]=\"month.short\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"month.date\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"month.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"month\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ month.long }}</span>\n\t\t\t\t\t\t\t\t\t\t@if (month.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisMonthLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t\t@case (\"year\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-decade-name\">\n\t\t\t\t{{ currentDecadeLabel() }}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-decade-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (row of decadeGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (year of row; track year.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"year.status.selected || !!year.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"year.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"year.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"year.date\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"year\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ year.name }}\n\t\t\t\t\t\t\t\t\t\t@if (year.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisYearLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t}\n</div>\n","export function getDateFormat(locale: string): string {\n\treturn new Intl.DateTimeFormat(locale).formatToParts(new Date('01/01/2024')).reduce((acc, part) => {\n\t\tswitch (part.type) {\n\t\t\tcase 'day':\n\t\t\t\treturn `${acc}${'d'.repeat(part.value.length)}`;\n\t\t\tcase 'month':\n\t\t\t\treturn `${acc}${'M'.repeat(part.value.length)}`;\n\t\t\tcase 'year':\n\t\t\t\treturn `${acc}${'y'.repeat(part.value.length)}`;\n\t\t\tcase 'literal':\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n}\n\nexport function getSeparator(locale: string): string {\n\treturn new Intl.DateTimeFormat(locale).formatToParts(new Date('01/01/2024')).find((part) => part.type === 'literal')?.value || '/';\n}\n\n// Warning: it works on Latin languages, but deserves to be tested on non-Latin languages\nexport function getLocalizedDateFormat(locale: string, period: 'year' | 'month' | 'day' = 'day'): string {\n\tconst letterLocalizedForDay = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'day')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForMonth = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'month')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForYear = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'year')[2]['value'].charAt(1).toUpperCase();\n\n\tconst intlConfig: Intl.DateTimeFormatOptions = {\n\t\tyear: 'numeric',\n\t};\n\n\tif (period === 'month' || period === 'day') {\n\t\tintlConfig.month = 'numeric';\n\t}\n\n\tif (period === 'day') {\n\t\tintlConfig.day = 'numeric';\n\t}\n\n\treturn new Intl.DateTimeFormat(locale, intlConfig).formatToParts(new Date('01/01/2024')).reduce((acc, part) => {\n\t\tswitch (part.type) {\n\t\t\tcase 'day':\n\t\t\t\treturn `${acc}${letterLocalizedForDay.repeat(part.value.length)}`;\n\t\t\tcase 'month':\n\t\t\t\treturn `${acc}${letterLocalizedForMonth.repeat(part.value.length)}`;\n\t\t\tcase 'year':\n\t\t\t\treturn `${acc}${letterLocalizedForYear.repeat(part.value.length)}`;\n\t\t\tcase 'literal':\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, inject, input, LOCALE_ID, model, output, signal } from '@angular/core';\nimport { getIntl } from '@lucca-front/ng/core';\nimport { addMonths, addYears, isAfter, isBefore, isSameMonth, startOfDay, startOfMonth } from 'date-fns';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { CellStatus } from './calendar2/cell-status';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { getDateFormat, getLocalizedDateFormat, getSeparator } from './date-format';\nimport { DATE_FORMAT, DateFormat } from './date.const';\nimport { LU_DATE2_TRANSLATIONS } from './date2.translate';\nimport { transformDateInputToDate, transformDateRangeInputToDateRange } from './utils';\n\n@Component({\n\t// eslint-disable-next-line @angular-eslint/component-selector\n\tselector: '',\n\ttemplate: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AbstractDateComponent {\n\tprotected locale = inject(LOCALE_ID);\n\t// Contains the current date format (like dd/mm/yy etc) based on current locale\n\tprotected dateFormat = getDateFormat(this.locale);\n\tprotected separator = getSeparator(this.locale);\n\tintlDateTimeFormat = new Intl.DateTimeFormat(this.locale);\n\n\tintlDateTimeFormatMonth = new Intl.DateTimeFormat(this.locale, { month: 'numeric', year: 'numeric' });\n\tintlDateTimeFormatYear = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\n\n\tintl = getIntl(LU_DATE2_TRANSLATIONS);\n\n\tonTouched?: () => void;\n\tdisabled = signal<boolean>(false);\n\n\treadonly format = input<DateFormat>(DATE_FORMAT.DATE);\n\tprotected inDateISOFormat = computed(() => this.format() === DATE_FORMAT.DATE_ISO);\n\n\treadonly ranges = input([], { transform: (v: readonly DateRange[] | readonly DateRangeInput[]) => v.map(transformDateRangeInputToDateRange) });\n\treadonly hideToday = input(false, { transform: booleanAttribute });\n\treadonly hasTodayButton = input(false, { transform: booleanAttribute });\n\treadonly clearable = input(null, { transform: booleanAttribute });\n\treadonly clearBehavior = input<'clear' | 'reset'>('clear');\n\n\treadonly mode = input<CalendarMode>('day');\n\treadonly hideWeekend = input(false, { transform: booleanAttribute });\n\n\treadonly getCellInfo = input<((day: Date, mode: CalendarMode) => CellStatus) | null>();\n\n\treadonly min = input(new Date('1/1/1000'), {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly max = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly focusedDate = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\n\tcalendarMode = model<CalendarMode>();\n\n\treadonly panelOpened = output<void>();\n\n\treadonly panelClosed = output<void>();\n\n\treadonly dateFormatLocalized = computed(() => getLocalizedDateFormat(this.locale, this.mode()));\n\n\tprotected currentDate = signal(new Date());\n\n\tprotected tabbableDate = signal<Date | null>(null);\n\n\tprotected constructor() {\n\t\teffect(() => {\n\t\t\tconst focusedDate = this.focusedDate();\n\t\t\tif (focusedDate) {\n\t\t\t\tthis.currentDate.set(startOfDay(focusedDate));\n\t\t\t}\n\t\t});\n\t}\n\n\tisInMinMax(date: Date, mode: CalendarMode): boolean {\n\t\treturn this.isAfterMin(date, mode) && this.isBeforeMax(date, mode);\n\t}\n\n\tisAfterMin(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.min()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.min().getTime() <= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isBefore(startOfMonth(this.min()), startOfMonth(date)) || isSameMonth(this.min(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.min().getFullYear() <= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisBeforeMax(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.max()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.max().getTime() >= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isAfter(startOfMonth(this.max()), startOfMonth(date)) || isSameMonth(this.max(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.max().getFullYear() >= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisValidDate(date: Date): boolean {\n\t\treturn !!date && !isNaN(date.getTime());\n\t}\n\n\tprev(mode: CalendarMode) {\n\t\tthis.move(-1, mode);\n\t}\n\n\tnext(mode: CalendarMode) {\n\t\tthis.move(1, mode);\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tmove(direction: 1 | -1, mode: CalendarMode): void {\n\t\tswitch (mode) {\n\t\t\tcase 'year':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction * 10));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction * 10));\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\tthis.currentDate.set(addMonths(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addMonths(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tuntracked,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { InputDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { isSameDay, parse, startOfDay } from 'date-fns';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { comparePeriods, startOfPeriod, transformDateInputToDate, transformDateToDateISO } from '../utils';\n\nexport type DateInputValidatorErrorType = {\n\tmin: true;\n\tmax: true;\n\tdate: true;\n};\n\n@Component({\n\tselector: 'lu-date-input',\n\timports: [PopoverDirective, Calendar2Component, IconComponent, InputDirective, NgTemplateOutlet, FilterPillDisplayerDirective, ClearComponent],\n\ttemplateUrl: './date-input.component.html',\n\tstyleUrl: './date-input.component.scss',\n\thost: {\n\t\tclass: 'dateField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\t#ngControl: NgControl; // Initialized in ngOnInit\n\n\t// CVA stuff\n\t#onChange?: (value: Date | null) => void;\n\n\t#luClass = inject(LuClass);\n\n\tautocomplete = input<AutoFill>('off');\n\n\tplaceholder = input<string>();\n\n\tdisableOverflow = input(false, { transform: booleanAttribute });\n\thideOverflow = input(false, { transform: booleanAttribute });\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tfilterPillDisabled = signal(false);\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\tselectedDate = signal<Date | null>(null);\n\n\tinitialValue = signal<Date | null>(undefined);\n\tdateFromWriteValue = signal<Date | null>(null);\n\n\tcalendar = viewChild(Calendar2Component);\n\n\tinputRef = viewChild<ElementRef<HTMLInputElement>>('date');\n\n\tdisplayValue = computed(() => {\n\t\tconst textInput = this.userTextInput();\n\t\tif (textInput !== 'ɵ') {\n\t\t\tconst parsedInput = parse(textInput, this.dateFormat, startOfDay(new Date()));\n\t\t\tif (this.isValidDate(parsedInput) && this.inputFocused()) {\n\t\t\t\treturn textInput;\n\t\t\t}\n\t\t}\n\t\tif (this.selectedDate() && this.isValidDate(this.selectedDate())) {\n\t\t\tlet formatter: Intl.DateTimeFormat;\n\t\t\tswitch (this.mode()) {\n\t\t\t\tcase 'day':\n\t\t\t\t\tformatter = this.intlDateTimeFormat;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tformatter = this.intlDateTimeFormatMonth;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'year':\n\t\t\t\t\tformatter = this.intlDateTimeFormatYear;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn formatter.format(this.selectedDate());\n\t\t}\n\t\t// If we are initializing the component, we don't want to display the value\n\t\tif (textInput === 'ɵ') {\n\t\t\treturn '';\n\t\t}\n\t\treturn textInput;\n\t});\n\n\t// We need to use a \"magic key\" here to avoid sending a null value change on initialization\n\tuserTextInput = signal<string>('ɵ');\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: this.selectedDate() && this.calendarMode() === mode && comparePeriods(mode, date, this.selectedDate()),\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => !this.selectedDate());\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\teffect(() => {\n\t\t\tconst nativeElement = this.inputRef().nativeElement;\n\t\t\tconst cursorPositionBefore = nativeElement.selectionStart;\n\t\t\tconst displayValue = this.displayValue();\n\t\t\tnativeElement.value = this.displayValue();\n\t\t\tif (displayValue.endsWith(this.separator)) {\n\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore + 1, cursorPositionBefore + 1);\n\t\t\t} else {\n\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore, cursorPositionBefore);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst inputValue = this.userTextInput();\n\t\t\t// If we are initializing the component, we don't want to parse the value\n\t\t\tif (inputValue === 'ɵ') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (inputValue.length > 0) {\n\t\t\t\tlet parsed: Date;\n\t\t\t\ttry {\n\t\t\t\t\tparsed = parse(inputValue, this.dateFormat, startOfDay(new Date()));\n\t\t\t\t} catch {\n\t\t\t\t\t/* not a correct date */\n\t\t\t\t}\n\t\t\t\tif (parsed instanceof Date && parsed.getFullYear() > 999) {\n\t\t\t\t\tthis.selectedDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t\t} else if (!this.isFilterPill) {\n\t\t\t\t\tthis.onTouched?.();\n\t\t\t\t\tthis.selectedDate.set(parsed);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.selectedDate.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (!this.#safeCompareDate(untracked(this.dateFromWriteValue), this.selectedDate())) {\n\t\t\t\tthis.#onChange?.(this.selectedDate());\n\t\t\t\tthis.dateFromWriteValue.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.mode, this.calendarMode], (mode, calendarMode) => {\n\t\t\tif (mode && isNil(calendarMode)) {\n\t\t\t\tthis.calendarMode.set(mode);\n\t\t\t}\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate && !comparePeriods(calendarMode, tabbableDate, this.currentDate())) {\n\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.calendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.#ngControl = this.#injector.get(NgControl);\n\t}\n\n\t#safeCompareDate(a: Date, b: Date): boolean {\n\t\treturn a === b || (!!a && !!b && isSameDay(a, b));\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarDate';\n\t}\n\n\topenPopover(ref: PopoverDirective): void {\n\t\tif (!this.isFilterPill) {\n\t\t\tref.openPopover(true, true);\n\t\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t});\n\t\t}\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective) {\n\t\tif (this.isFilterPill) {\n\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t} else {\n\t\t\tif (popoverRef.opened()) {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t} else {\n\t\t\t\tthis.openPopover(popoverRef);\n\t\t\t}\n\t\t}\n\t}\n\n\tspaceDown(event: Event, popoverRef: PopoverDirective) {\n\t\tif (this.userTextInput()?.length === 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.openPopover(popoverRef);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<Date | string | null>): Partial<DateInputValidatorErrorType> | null {\n\t\t// null is not an error but means we'll skip everything else, we'll let the presence of a\n\t\t// Validators.required (or not) decide if it's an error.\n\t\tif (control.value === null || control.value === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\tconst date = transformDateInputToDate(control.value);\n\t\t// try to parse the display value cause formControl.value is undefined if date is not parsable\n\t\ttry {\n\t\t\tparse(this.displayValue(), this.dateFormat, startOfDay(new Date()));\n\t\t} catch {\n\t\t\t/* not a correct date */\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check date validity\n\t\tif (!this.isValidDate(date)) {\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check min and max\n\t\tif (this.min() && !this.isAfterMin(date, this.mode())) {\n\t\t\treturn { min: true };\n\t\t} else if (this.max() && !this.isBeforeMax(date, this.mode())) {\n\t\t\treturn { max: true };\n\t\t}\n\t\t// Everything is valid\n\t\treturn null;\n\t}\n\n\twriteValue(date: Date | string | null): void {\n\t\tif (this.#ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\n\t\tconst _date = transformDateInputToDate(date);\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(_date);\n\t\t}\n\n\t\tif (date != null) {\n\t\t\tconst start = startOfDay(_date);\n\t\t\tthis.dateFromWriteValue.set(start);\n\t\t\tthis.selectedDate.set(start);\n\t\t\tthis.currentDate.set(start);\n\t\t} else {\n\t\t\tthis.reset();\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: Date | string | null) => void): void {\n\t\tthis.#onChange = (date: Date | null) => {\n\t\t\tfn(date && this.inDateISOFormat() && this.isValidDate(date) ? transformDateToDateISO(date) : date);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\treset(): Date | null {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.dateFromWriteValue.set(newValue);\n\t\tthis.selectedDate.set(newValue);\n\t\treturn newValue;\n\t}\n\n\tclear() {\n\t\tconst newValue = this.reset();\n\t\tthis.#onChange?.(newValue);\n\t\tthis.onTouched?.();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tthis.selectedDate.set(date);\n\t\tthis.currentDate.set(date);\n\t\tthis.tabbableDate.set(date);\n\t\tif (!this.isFilterPill) {\n\t\t\tpopoverRef.close();\n\t\t\tthis.inputRef().nativeElement.focus();\n\t\t}\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tinputBlurred(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.userTextInput.set('ɵ');\n\t}\n}\n","@if (isFilterPill) {\n\t<label for=\"dateInput\" class=\"pr-u-mask\">{{ intl.pickDate }}</label>\n}\n<div class=\"textField dateField-textField\" #popoverAnchor>\n\t<div class=\"textField-input\">\n\t\t<input\n\t\t\ttype=\"text\"\n\t\t\tid=\"dateInput\"\n\t\t\t#date\n\t\t\tluInput\n\t\t\tclass=\"textField-input-value\"\n\t\t\t(input)=\"userTextInput.set(date.value)\"\n\t\t\t(blur)=\"inputBlurred()\"\n\t\t\t(focus)=\"inputFocused.set(true)\"\n\t\t\taria-haspopup=\"true\"\n\t\t\trole=\"combobox\"\n\t\t\t(click)=\"popoverRef.openPopover(true, true)\"\n\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef)\"\n\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t(keydown.space)=\"spaceDown($event, popoverRef)\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[attr.placeholder]=\"placeholder() || dateFormatLocalized()\"\n\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t/>\n\n\t\t<div class=\"textField-input-affix\">\n\t\t\t@if (clearable() && !disabled() && (clearBehavior() === \"clear\" ? date.value !== \"\" : selectedDate() !== initialValue())) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl.clear }}</lu-clear>\n\t\t\t}\n\t\t\t@if (isFilterPill && !isFilterPillEmpty()) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl.clear }}</lu-clear>\n\t\t\t}\n\t\t\t<button\n\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t[luPopoverDisabled]=\"isFilterPill\"\n\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t(luPopoverClosed)=\"panelClosed.emit()\"\n\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t>\n\t\t\t\t<lu-icon [icon]=\"'calendarDate'\" [alt]=\"intl.pickDate\" />\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<div *luFilterPillDisplayer>{{ displayValue() }}</div>\n\n<ng-template #calendar>\n\t<div class=\"calendarWrapper\">\n\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(calendarMode())\" #previousButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl.previous }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(calendarMode())\" #nextButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl.next }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t<lu-calendar2\n\t\t\t\t[enableOverflow]=\"!disableOverflow()\"\n\t\t\t\t[showOverflow]=\"!hideOverflow()\"\n\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t[hasTodayButton]=\"hasTodayButton()\"\n\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t[(tabbableDate)]=\"tabbableDate\"\n\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t[ranges]=\"ranges()\"\n\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t(nextPage)=\"move(1, calendarMode())\"\n\t\t\t\t(previousPage)=\"move(-1, calendarMode())\"\n\t\t\t\t[(displayMode)]=\"calendarMode\"\n\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</ng-template>\n","import { DateRange } from '../calendar2/date-range';\nimport { endOfDay, endOfMonth, endOfQuarter, endOfWeek, endOfYear, startOfDay, startOfMonth, startOfQuarter, startOfWeek, startOfYear, subMonths, subQuarters, subWeeks, subYears } from 'date-fns';\nimport { getLocaleFirstDayOfWeek } from '@angular/common';\n\nexport interface CalendarShortcut {\n\tlabel: string;\n\trange: DateRange;\n}\n\nexport const PremadeShortcuts: Record<string, (locale: string) => DateRange> = {\n\tSinceStartOfWeek: (locale: string) => {\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfWeek(new Date(), { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t\tend: startOfDay(new Date()),\n\t\t};\n\t},\n\tLastWeek: (locale: string) => {\n\t\tconst startOfLastWeek = startOfWeek(subWeeks(new Date(), 1), { weekStartsOn: getLocaleFirstDayOfWeek(locale) });\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfLastWeek,\n\t\t\tend: endOfWeek(startOfLastWeek, { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t};\n\t},\n\tSinceStartOfMonth: () => {\n\t\treturn {\n\t\t\tstart: startOfMonth(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastMonth: () => {\n\t\tconst startOfLastMonth = startOfMonth(subMonths(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastMonth,\n\t\t\tend: endOfMonth(startOfLastMonth),\n\t\t};\n\t},\n\tSinceStartOfQuarter: () => {\n\t\treturn {\n\t\t\tstart: startOfQuarter(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastQuarter: () => {\n\t\tconst startOfLastQuarter = startOfQuarter(subQuarters(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastQuarter,\n\t\t\tend: endOfQuarter(startOfLastQuarter),\n\t\t};\n\t},\n\tSinceStartOfYear: () => {\n\t\treturn {\n\t\t\tstart: startOfYear(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastYear: () => {\n\t\tconst startOfLastYear = startOfYear(subYears(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastYear,\n\t\t\tend: endOfYear(startOfLastYear),\n\t\t};\n\t},\n\tLastTwelveMonths: () => {\n\t\treturn {\n\t\t\tstart: subMonths(new Date(), 12),\n\t\t\tend: new Date(),\n\t\t};\n\t},\n};\n","import { BreakpointObserver, LayoutModule } from '@angular/cdk/layout';\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, ValidationErrors, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, PortalContent, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { FORM_FIELD_INSTANCE, InputDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { addMonths, addYears, endOfDecade, endOfMonth, endOfYear, isAfter, isBefore, isSameDay, parse, startOfDay, startOfDecade, startOfMonth, startOfYear, subMonths, subYears } from 'date-fns';\nimport { map } from 'rxjs';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { DateRange, DateRangeInput } from '../calendar2/date-range';\nimport { compareCalendarPeriods, startOfPeriod, transformDateRangeInputToDateRange, transformDateRangeToDateRangeInput } from '../utils';\nimport { CalendarShortcut } from './calendar-shortcut';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-date-range-input',\n\timports: [PopoverDirective, Calendar2Component, IconComponent, InputDirective, LayoutModule, PortalDirective, NgTemplateOutlet, FilterPillDisplayerDirective, ClearComponent],\n\ttemplateUrl: './date-range-input.component.html',\n\tstyleUrl: './date-range-input.component.scss',\n\thost: {\n\t\tclass: 'dateRangeField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateRangeInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\t#ngControl: NgControl; // Initialized in ngOnInit\n\t#luClass = inject(LuClass);\n\n\t#formFieldRef = inject(FORM_FIELD_INSTANCE, { optional: true });\n\n\t#breakpointObserver = inject(BreakpointObserver);\n\n\thasTwoCalendars = toSignal(this.#breakpointObserver.observe('(min-width: 40em)').pipe(map((state) => state.matches)));\n\n\tidSuffix = nextId++;\n\n\tstartTextInputRef = viewChild<ElementRef<HTMLInputElement>>('start');\n\n\tendTextInputRef = viewChild<ElementRef<HTMLInputElement>>('end');\n\n\t// CVA stuff\n\t#onChange?: (value: DateRange) => void;\n\n\tinitialValue = signal<DateRange | null>(undefined);\n\tselectedRange = signal<DateRange | null>(null);\n\n\tdateHovered = signal<Date | null>(null);\n\n\tplaceholder = input<string>();\n\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tlabel: PortalContent;\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\teditedField = signal<-1 | 0 | 1>(-1);\n\n\thighlightedField = signal<-1 | 0 | 1>(-1);\n\n\tshortcuts = input<readonly CalendarShortcut[]>();\n\n\tautocomplete = input<AutoFill>('off');\n\n\tprotected currentRightDate = computed(() => {\n\t\treturn this.hasTwoCalendars() ? this.getNextCalendarDate(this.currentDate()) : this.currentDate();\n\t});\n\n\tprotected currentStartDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(this.currentDate());\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(this.currentDate());\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(this.currentDate());\n\t\t}\n\t});\n\n\tprotected currentEndDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn endOfMonth(this.currentRightDate());\n\t\t\tcase 'month':\n\t\t\t\treturn endOfYear(this.currentRightDate());\n\t\t\tcase 'year':\n\t\t\t\treturn endOfDecade(this.currentRightDate());\n\t\t}\n\t});\n\n\tcalendars = viewChildren(Calendar2Component);\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: false,\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tcalendarRanges = computed(() => {\n\t\tif (this.selectedRange()) {\n\t\t\treturn [this.selectedRange(), ...this.ranges()];\n\t\t}\n\t\treturn this.ranges();\n\t});\n\n\tstartLabel = computed(() => {\n\t\tif (this.selectedRange()?.start && this.isValidDate(this.selectedRange()?.start)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.start);\n\t\t}\n\t\treturn '';\n\t});\n\n\tendLabel = computed(() => {\n\t\tif (this.selectedRange()?.end && this.isValidDate(this.selectedRange()?.end)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.end);\n\t\t}\n\t\treturn '';\n\t});\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t// Which calendar is currently being focused in, used for tabbable date logic\n\tfocusedCalendarIndex = signal(0);\n\n\tfocusedCalendar = computed(() => this.calendars()[this.focusedCalendarIndex()]);\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => this.selectedRange() === null);\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tfilterPillDisabled = signal(false);\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this.#formFieldRef) {\n\t\t\tthis.#formFieldRef.rolePresentationLabel.set(true);\n\t\t\tthis.label = this.#formFieldRef.label();\n\t\t}\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate) {\n\t\t\t\tif (isAfter(tabbableDate, this.currentEndDisplayDate())) {\n\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t} else if (isBefore(tabbableDate, this.currentStartDisplayDate())) {\n\t\t\t\t\tif (this.hasTwoCalendars()) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subMonths(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 10) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.hasTwoCalendars()) {\n\t\t\t\t\tif (this.focusedCalendarIndex() === 1 && isBefore(tabbableDate, this.currentRightDate())) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\t} else if (this.focusedCalendarIndex() === 0 && (isAfter(tabbableDate, this.currentRightDate()) || isSameDay(tabbableDate, this.currentRightDate()))) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.focusedCalendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.#ngControl = this.#injector.get(NgControl);\n\t}\n\n\tgetNextCalendarDate(date: Date): Date {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(addMonths(date, 1));\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(addYears(date, 1));\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(addYears(date, 10));\n\t\t}\n\t}\n\n\tpopoverClosed(): void {\n\t\tthis.panelClosed.emit();\n\t\tif (this.editedField() === 1) {\n\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t} else if (this.editedField() === 0) {\n\t\t\tthis.startTextInputRef().nativeElement.focus();\n\t\t}\n\t}\n\n\tinputBlur(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.highlightedField.set(-1);\n\t}\n\n\tfixOrderIfNeeded(): void {\n\t\tif (this.selectedRange() && isAfter(this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\tconst range = this.selectedRange();\n\t\t\tthis.selectedRange.set({\n\t\t\t\t...range,\n\t\t\t\tend: range.start,\n\t\t\t\tstart: range.end,\n\t\t\t});\n\t\t\tthis.#onChange?.(this.selectedRange());\n\t\t}\n\t}\n\n\ttabbableDateChange(date: Date, calendarIndex: number) {\n\t\tif (calendarIndex == this.focusedCalendarIndex()) {\n\t\t\tthis.tabbableDate.set(date);\n\t\t}\n\t}\n\n\topenPopover(ref: PopoverDirective, propertyToFocus?: 'start' | 'end', focusTabbableDate = false): void {\n\t\tif (this.isFilterPill) {\n\t\t\treturn;\n\t\t}\n\t\tif (!ref.opened()) {\n\t\t\tref.openPopover(true, true);\n\t\t}\n\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\t\tsetTimeout(() => {\n\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\tif (propertyToFocus && this.selectedRange()?.[propertyToFocus]) {\n\t\t\t\t// Specific case: if range is on a single month, focus on it on left calendar\n\t\t\t\t// Same goes for focus on start date, we want it on left panel\n\t\t\t\tif (propertyToFocus === 'start' || compareCalendarPeriods(this.mode(), this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\t\t\tthis.currentDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t\tthis.tabbableDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t} else {\n\t\t\t\t\t// Compute the date to use for proper focus on left panel, minus one calendar on focus date basically\n\t\t\t\t\tconst leftPanelFocus = this.selectedRange()?.end;\n\t\t\t\t\tthis.currentDate.set(leftPanelFocus);\n\t\t\t\t\tthis.tabbableDate.set(leftPanelFocus);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (focusTabbableDate) {\n\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t}\n\t\t});\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tif (this.selectedRange() === null) {\n\t\t\tthis.selectedRange.set({\n\t\t\t\tstart: date,\n\t\t\t\tscope: this.mode(),\n\t\t\t});\n\t\t\tthis.editedField.set(1);\n\t\t\tthis.highlightedField.set(1);\n\t\t} else {\n\t\t\t// If we're editing end field\n\t\t\tif (this.editedField() === 1) {\n\t\t\t\t// If end is before start, invert them\n\t\t\t\tif (isBefore(date, this.selectedRange().start)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: this.selectedRange().start,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: date,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpopoverRef?.close();\n\t\t\t\tthis.filterPillPopoverCloseFn?.();\n\t\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t\t\tthis.editedField.set(-1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t} else {\n\t\t\t\t// Else, we're editing start field\n\t\t\t\t// If start is after end, invert them\n\t\t\t\tif (isAfter(date, this.selectedRange().end)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.editedField.set(1);\n\t\t\t\tthis.highlightedField.set(1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t}\n\t\t}\n\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective, fieldToFocus: 'start' | 'end'): void {\n\t\tthis.openPopover(popoverRef, fieldToFocus, true);\n\t\tif (this.isFilterPill) {\n\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t} else if (this.editedField() === -1) {\n\t\t\tthis.editedField.set(fieldToFocus === 'start' ? 0 : 1);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<DateRange | DateRangeInput | null>): ValidationErrors | null {\n\t\tif (!control.value) {\n\t\t\treturn null;\n\t\t}\n\t\tconst dateRange = transformDateRangeInputToDateRange(control.value);\n\n\t\treturn this.isValidDate(dateRange.start) ? null : { date: true };\n\t}\n\n\twriteValue(dateRange: DateRange | DateRangeInput | null): void {\n\t\tif (this.#ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\t\tconst _dateRange = transformDateRangeInputToDateRange(dateRange);\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(_dateRange);\n\t\t}\n\n\t\tif (dateRange != null) {\n\t\t\tthis.selectedRange.set(_dateRange);\n\t\t\tthis.currentDate.set(startOfDay(dateRange.start));\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: DateRange | DateRangeInput | null) => void): void {\n\t\tthis.#onChange = (dateRange: DateRange | null) => {\n\t\t\tfn(dateRange && this.inDateISOFormat() ? transformDateRangeToDateRangeInput(dateRange) : dateRange);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\tclear() {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.selectedRange.set(newValue);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tthis.onTouched?.();\n\t\tthis.startTextInputRef().nativeElement.focus();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tgetDateLabelForInput(date: Date): string {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.intlDateTimeFormat.format(date);\n\t\t\tcase 'month':\n\t\t\t\treturn this.intlDateTimeFormatMonth.format(date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.intlDateTimeFormatYear.format(date);\n\t\t}\n\t}\n\n\tselectShortcut(shortcut: CalendarShortcut, popover: PopoverDirective): void {\n\t\tthis.selectedRange.set(shortcut.range);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tpopover?.close();\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarPlanning';\n\t}\n\n\ttextInputChange(inputValue: string, rangeProperty: 'start' | 'end'): void {\n\t\tlet currentRange: DateRange = this.selectedRange() || ({} as DateRange);\n\t\tif (inputValue?.length > 0) {\n\t\t\tconst parsed = parse(inputValue, this.dateFormat, startOfDay(new Date()));\n\t\t\tif (parsed.getFullYear() > 999) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t} else if (this.isValidDate(parsed)) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (inputValue !== null) {\n\t\t\tcurrentRange = {\n\t\t\t\t...currentRange,\n\t\t\t\tscope: this.mode(),\n\t\t\t\t[rangeProperty]: undefined,\n\t\t\t};\n\t\t}\n\t\tif (!currentRange.start && !currentRange.end) {\n\t\t\tthis.selectedRange.set(null);\n\t\t} else {\n\t\t\tthis.selectedRange.set(currentRange);\n\t\t}\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n}\n","<fieldset class=\"dateRangeField-fieldset\">\n\t<legend>\n\t\t<span class=\"pr-u-mask\">\n\t\t\t<ng-container *luPortal=\"label\" />\n\t\t</span>\n\t</legend>\n\t<div class=\"dateRangeField-fieldset-textField textField\" #popoverAnchor>\n\t\t<div class=\"textField-input\">\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-start\" [class.is-highlighted]=\"highlightedField() === 0\">\n\t\t\t\t<label for=\"range-input-start-{{ idSuffix }}\" class=\"pr-u-mask\">Start</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#start\n\t\t\t\t\tid=\"range-input-start-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"startLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'start')\"\n\t\t\t\t\t(blur)=\"inputBlur()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(0); highlightedField.set(0)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(0); openPopover(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-end\" [class.is-highlighted]=\"highlightedField() === 1\">\n\t\t\t\t<label for=\"range-input-end-{{ idSuffix }}\" class=\"pr-u-mask\">End</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#end\n\t\t\t\t\tid=\"range-input-end-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"endLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'end')\"\n\t\t\t\t\t(blur)=\"inputBlur(); fixOrderIfNeeded()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(1); highlightedField.set(1)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(1); openPopover(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<lu-icon [icon]=\"'arrowRight'\" [alt]=\"''\" class=\"dateRangeField-fieldset-arrow\" />\n\t\t\t<div class=\"textField-input-affix\">\n\t\t\t\t@if (!isFilterPill) {\n\t\t\t\t\t@if (clearable() && (start.value !== \"\" || end.value !== \"\")) {\n\t\t\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); start.focus()\">{{ intl.clear }}</lu-clear>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t\t(luPopoverClosed)=\"popoverClosed()\"\n\t\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t\t\t(click)=\"editedField.set(0)\"\n\t\t\t\t>\n\t\t\t\t\t<lu-icon [icon]=\"'calendarPlanning'\" [alt]=\"intl.pickDate\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</fieldset>\n\n<ng-template #calendar>\n\t<div class=\"calendarShortcutsOptional\">\n\t\t@if (shortcuts()?.length > 0) {\n\t\t\t<ul\n\t\t\t\tclass=\"calendarShortcuts\"\n\t\t\t\t[class.mod-day]=\"mode() === 'day'\"\n\t\t\t\t[class.mod-month]=\"mode() === 'month'\"\n\t\t\t\t[class.mod-year]=\"mode() === 'year'\"\n\t\t\t>\n\t\t\t\t@for (shortcut of shortcuts(); track $index) {\n\t\t\t\t\t<li class=\"calendarShortcutsButton-item\">\n\t\t\t\t\t\t<button type=\"button\" class=\"calendarShortcutsButton-item-button button\" (click)=\"selectShortcut(shortcut, popoverRef)\">\n\t\t\t\t\t\t\t{{ shortcut.label }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t}\n\t\t<div class=\"calendarWrapper\">\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(mode())\" #previousButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl.previous }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(mode())\" #nextButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl.next }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t\t<lu-calendar2\n\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 0)\"\n\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t/>\n\t\t\t\t@if (hasTwoCalendars()) {\n\t\t\t\t\t<lu-calendar2\n\t\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t\t[date]=\"currentRightDate()\"\n\t\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 1)\"\n\t\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</ng-template>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<ng-container *luFilterPillDisplayer=\"let empty = isEmpty\">\n\t@if (!empty) {\n\t\t<span class=\"pr-u-mask\">{{ intl.from }}</span>\n\t\t{{ startLabel() }}\n\t\t<lu-icon [icon]=\"'arrowRight'\" size=\"XS\" [alt]=\"intl.to\" />\n\t\t{{ endLabel() }}\n\t}\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-date2.mjs","sources":["../../../packages/ng/date2/calendar.token.ts","../../../packages/ng/date2/translations.ts","../../../packages/ng/date2/date2.translate.ts","../../../packages/ng/date2/repeat-times.directive.ts","../../../packages/ng/date2/date.const.ts","../../../packages/ng/date2/utils.ts","../../../packages/ng/date2/calendar2/calendar2.tokens.ts","../../../packages/ng/date2/calendar2/calendar2-cell.directive.ts","../../../packages/ng/date2/calendar2/calendar2.component.ts","../../../packages/ng/date2/calendar2/calendar2.component.html","../../../packages/ng/date2/date-format.ts","../../../packages/ng/date2/abstract-date-component.ts","../../../packages/ng/date2/date-input/date-input.component.ts","../../../packages/ng/date2/date-input/date-input.component.html","../../../packages/ng/date2/date-range-input/calendar-shortcut.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.html","../../../packages/ng/date2/lucca-front-ng-date2.ts"],"sourcesContent":["import { getLocaleFirstDayOfWeek, getLocaleWeekEndRange } from '@angular/common';\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\n\nexport type CalendarWeekDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\nexport interface CalendarWeekInfo {\n\tfirstDay: CalendarWeekDay;\n\tweekend: CalendarWeekDay[];\n}\n\nexport const WEEK_INFO = new InjectionToken<CalendarWeekInfo>('Calendar2:WeekInfo', {\n\tfactory: () => {\n\t\tconst locale = inject(LOCALE_ID);\n\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\tconst [weekendStart, weekendEnd] = getLocaleWeekEndRange(locale);\n\t\tconst weekend: number[] = [];\n\t\tlet weekDay: number = weekendStart;\n\t\twhile (weekDay != weekendEnd) {\n\t\t\t// Sunday is 0 in Angular but 7 in Intl\n\t\t\tweekend.push(weekDay || 7);\n\t\t\tweekDay = (weekDay + 1) % 7;\n\t\t}\n\t\tweekend.push(weekDay || 7);\n\t\treturn {\n\t\t\tfirstDay: (getLocaleFirstDayOfWeek(locale) + 7) % 7,\n\t\t\tweekend,\n\t\t} as CalendarWeekInfo;\n\t},\n});\n","export const Translations = {\n\tfr: {\n\t\tfrom: 'Du',\n\t\tto: 'au',\n\t\tdirectionKeysTip: 'Les touches directionnelles servent à parcourir les dates.',\n\t\tpickDate: 'Choisir une date dans le calendrier',\n\t\tprevious: 'Précédent',\n\t\tnext: 'Suivant',\n\t\tclear: 'Vider ce champ',\n\t},\n\ten: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through dates.',\n\t\tpickDate: 'Pick a date in calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_DATE2_TRANSLATIONS = new InjectionToken('LuDate2Translations', {\n\tfactory: () => luDate2Translations,\n});\n\nexport interface Date2Translate {\n\tfrom: string;\n\tto: string;\n\tdirectionKeysTip: string;\n\tpickDate: string;\n\tprevious: string;\n\tnext: string;\n\tclear: string;\n}\n\nexport const luDate2Translations: LuTranslation<Date2Translate> = Translations;\n","import { Directive, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n\tselector: '[luRepeatTimes]',\n})\nexport class RepeatTimesDirective {\n\tprivate templateRef = inject<TemplateRef<void>>(TemplateRef);\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\t@Input('luRepeatTimes')\n\tpublic set repeatTimes(times: number) {\n\t\tthis.viewContainerRef.clear();\n\n\t\tfor (let i = 0; i < times; i++) {\n\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t}\n\t}\n\n\tpublic static ngTemplateContextGuard(_dir: RepeatTimesDirective, ctx: unknown): ctx is void {\n\t\treturn true;\n\t}\n}\n","export const DATE_FORMAT = {\n\tDATE: 'date',\n\tDATE_ISO: 'date-iso',\n} as const;\n\nexport type DateFormat = (typeof DATE_FORMAT)[keyof typeof DATE_FORMAT];\n\nexport const DATE_ISO_FORMAT = 'yyyy-MM-dd';\n","import { isNil } from '@lucca-front/ng/core';\nimport { Day, format, isSameDay, isSameMonth, isSameYear, parse, startOfDecade, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarWeekDay, CalendarWeekInfo } from './calendar.token';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { DATE_ISO_FORMAT } from './date.const';\n\nexport function getIntlWeekDay(date: Date): CalendarWeekDay {\n\treturn (date.getDay() || 7) as CalendarWeekDay;\n}\n\nexport function getJSFirstDayOfWeek(weekInfo: CalendarWeekInfo): Day {\n\treturn (weekInfo.firstDay % 7) as Day;\n}\n\nconst modeToComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameDay,\n\tmonth: isSameMonth,\n\tyear: isSameYear,\n};\n\nconst modeToCalendarComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameMonth,\n\tmonth: isSameYear,\n\tyear: (a, b) => Math.floor(a.getFullYear() / 10) === Math.floor(b.getFullYear() / 10),\n};\n\nconst modeToPeriodStart: Record<CalendarMode, (date: Date) => Date> = {\n\tday: startOfMonth,\n\tmonth: startOfYear,\n\tyear: startOfDecade,\n};\n\nexport function comparePeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToComparator[mode](a, b);\n}\n\nexport function compareCalendarPeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToCalendarComparator[mode](a, b);\n}\n\nexport function startOfPeriod(mode: CalendarMode, date: Date): Date {\n\treturn modeToPeriodStart[mode](date);\n}\n\nfunction stringToDateISO(value: string): Date {\n\tconst res = parse(value, DATE_ISO_FORMAT, new Date());\n\tif (isNaN(+res)) {\n\t\tthrow new Error('Invalid date: your input should be a valid iso date string (yyyy-MM-dd), received: ' + value);\n\t}\n\treturn res;\n}\n\nexport function transformDateInputToDate(value: Date | null | undefined | string): Date | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\treturn stringToDateISO(value);\n}\n\nexport function transformDateToDateISO(value: Date | null): string | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\treturn format(value, DATE_ISO_FORMAT);\n}\n\nfunction isDateRangeInput(value: DateRangeInput | DateRange): value is DateRangeInput {\n\treturn !(value.start instanceof Date);\n}\n\nexport function transformDateRangeInputToDateRange(value: DateRange | null | undefined | DateRangeInput): DateRange | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\tif (!isDateRangeInput(value)) {\n\t\treturn value;\n\t}\n\n\treturn {\n\t\t...value,\n\t\tstart: transformDateInputToDate(value.start),\n\t\tend: transformDateInputToDate(value.end),\n\t};\n}\n\nexport function transformDateRangeToDateRangeInput(value: DateRange): DateRangeInput {\n\treturn {\n\t\t...value,\n\t\tstart: transformDateToDateISO(value.start),\n\t\tend: transformDateToDateISO(value.end),\n\t};\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\n\nexport const CALENDAR_CELLS = new InjectionToken<Signal<Calendar2CellDirective[]>>('Calendar2:Calendar2Cells');\nexport const CALENDAR_TABBABLE_DATE = new InjectionToken<WritableSignal<Date>>('Calendar2:TabbableDate');\n","import { computed, Directive, ElementRef, HostBinding, HostListener, inject, input } from '@angular/core';\nimport { add, addMonths, addYears, endOfWeek, startOfWeek, sub, subMonths, subYears } from 'date-fns';\nimport type { Duration } from 'date-fns/types';\nimport { WEEK_INFO } from '../calendar.token';\nimport { comparePeriods, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarMode } from './calendar-mode';\nimport { CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\n\nconst modeToDurationKey: Record<CalendarMode, keyof Duration> = {\n\tday: 'days',\n\tmonth: 'months',\n\tyear: 'years',\n};\n\n@Directive({\n\tselector: '[luCalendar2Cell]',\n})\nexport class Calendar2CellDirective {\n\t#host = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t#tabbableDate = inject(CALENDAR_TABBABLE_DATE);\n\t#weekInfo = inject(WEEK_INFO);\n\n\t// Index of this day in the current week display row, not depending on locale, 0 is first day of week and 6 is last\n\tluCalendar2Cell = input.required<number>();\n\n\tluCalendar2Mode = input.required<CalendarMode>();\n\n\tluCalendar2Date = input.required<Date>();\n\n\t@HostBinding('tabindex')\n\tget tabindex(): 0 | -1 {\n\t\treturn this.isTabbableDate() ? 0 : -1;\n\t}\n\n\tisTabbableDate = computed(() => {\n\t\treturn comparePeriods(this.luCalendar2Mode(), this.luCalendar2Date(), this.#tabbableDate());\n\t});\n\n\t@HostListener('keydown', ['$event'])\n\tkeydown($event: KeyboardEvent): void {\n\t\t// See https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/#ex_label for keyboard\n\t\t// navigation standards on date pickers\n\t\tconst cellsPerRow = this.luCalendar2Mode() === 'day' ? 7 : 3;\n\t\tconst datePropertyToEdit = modeToDurationKey[this.luCalendar2Mode()];\n\t\tswitch ($event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(startOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(endOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif ($event.shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(subYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(subMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif ($event.shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(addYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(addMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tthis.#host.nativeElement.focus();\n\t}\n\n\tblur(): void {\n\t\tthis.#host.nativeElement.blur();\n\t}\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, LOCALE_ID, model, OnInit, output, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { getIntl } from '@lucca-front/ng/core';\nimport { LuTooltipTriggerDirective } from '@lucca-front/ng/tooltip';\nimport {\n\taddHours,\n\taddMonths,\n\taddYears,\n\teachDayOfInterval,\n\teachMonthOfInterval,\n\teachYearOfInterval,\n\tendOfDay,\n\tendOfDecade,\n\tendOfMonth,\n\tendOfWeek,\n\tendOfYear,\n\tisAfter,\n\tisSameDay,\n\tisSameMonth,\n\tisSameYear,\n\tisWithinInterval,\n\tlastDayOfMonth,\n\tstartOfDay,\n\tstartOfDecade,\n\tstartOfMonth,\n\tstartOfWeek,\n\tstartOfYear,\n\tsubMonths,\n\tsubYears,\n\tWeekOptions,\n} from 'date-fns';\nimport type { Interval } from 'date-fns/types';\nimport { WEEK_INFO } from '../calendar.token';\nimport { LU_DATE2_TRANSLATIONS } from '../date2.translate';\nimport { RepeatTimesDirective } from '../repeat-times.directive';\nimport { comparePeriods, getIntlWeekDay, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarCellInfo, CalendarMonthInfo, CalendarYearInfo } from './calendar-cell-info';\nimport { CalendarMode } from './calendar-mode';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\nimport { CALENDAR_CELLS, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\nimport { CellStatus } from './cell-status';\nimport { DateRange } from './date-range';\n\nconst MODE_HIERARCHY: CalendarMode[] = ['day', 'month', 'year'];\n\n@Component({\n\tselector: 'lu-calendar2',\n\timports: [RepeatTimesDirective, Calendar2CellDirective, LuTooltipTriggerDirective],\n\ttemplateUrl: './calendar2.component.html',\n\tstyleUrl: './calendar2.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: CALENDAR_CELLS,\n\t\t\tuseFactory: () => inject(Calendar2Component).calendar2CellInstances,\n\t\t},\n\t\t{\n\t\t\tprovide: CALENDAR_TABBABLE_DATE,\n\t\t\tuseFactory: () => inject(Calendar2Component).tabbableDate,\n\t\t},\n\t],\n})\nexport class Calendar2Component implements OnInit {\n\t#locale = inject(LOCALE_ID);\n\t#weekInfo = inject(WEEK_INFO);\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t#intlDateFormat = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlDateYear = new Intl.DateTimeFormat(this.#locale, { year: 'numeric' });\n\n\t#intlDaysLong = new Intl.DateTimeFormat(this.#locale, { weekday: 'long' });\n\t#intlDaysShort = new Intl.DateTimeFormat(this.#locale, { weekday: 'short' });\n\t#intlRelativeDay = new Intl.RelativeTimeFormat(this.#locale, { numeric: 'auto' });\n\n\t#intlMonthsLong = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlMonthsShort = new Intl.DateTimeFormat(this.#locale, { month: 'short' });\n\n\t#weekOptions: WeekOptions = { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) };\n\n\tintl = getIntl(LU_DATE2_TRANSLATIONS);\n\n\tshowOverflow = input(false, { transform: booleanAttribute });\n\n\tenableOverflow = input(false, { transform: booleanAttribute });\n\n\tremoveYearOverflow = input(false, { transform: booleanAttribute });\n\n\thideToday = input(false, { transform: booleanAttribute });\n\n\thasTodayButton = input(false, { transform: booleanAttribute });\n\n\thideWeekend = input(false, { transform: booleanAttribute });\n\n\tdisableModeChange = input(false, { transform: booleanAttribute });\n\n\t// Date used to init the component and as internal focus model\n\tdate = model.required<Date>();\n\n\ttabbableDate = model<Date | null>(null);\n\n\tmode = model<CalendarMode>('day');\n\n\tdisplayMode = model<CalendarMode | null>(null);\n\n\tranges = input<readonly DateRange[]>([]);\n\n\tgetCellInfo = input<(date: Date, displayMode: CalendarMode) => CellStatus>((_date: Date) => ({\n\t\tclasses: [],\n\t\tdisabled: false,\n\t}));\n\n\tmonth = computed(() => startOfMonth(this.date()));\n\n\tyear = computed(() => startOfYear(this.date()));\n\n\tdecade = computed(() => startOfDecade(this.date()));\n\n\tpreviousMonth = computed(() => subMonths(this.month(), 1));\n\n\tnextMonth = computed(() => addMonths(this.month(), 1));\n\n\tnextPage = output();\n\n\tpreviousPage = output();\n\n\tdateClicked = output<Date>();\n\n\tdateHovered = model<Date | null>(null);\n\n\ttodayLabel = this.#intlRelativeDay.format(0, 'day');\n\tthisMonthLabel = this.#intlRelativeDay.format(0, 'month');\n\tthisYearLabel = this.#intlRelativeDay.format(0, 'year');\n\n\tcalendar2CellInstances = viewChildren(Calendar2CellDirective);\n\n\tdaysOfWeek = eachDayOfInterval({\n\t\tstart: startOfWeek(new Date(), this.#weekOptions),\n\t\tend: endOfWeek(new Date(), this.#weekOptions),\n\t}).map((day) => ({\n\t\tlong: this.#intlDaysLong.format(day),\n\t\tshort: this.#intlDaysShort.format(day),\n\t}));\n\n\tmonthGridDisplay = computed(() => {\n\t\tconst daysOfMonth: CalendarCellInfo[] = eachDayOfInterval({\n\t\t\tstart: this.month(),\n\t\t\tend: endOfMonth(this.month()),\n\t\t}).map((date) => this.dateToCellInfo(date));\n\t\tconst daysByWeek = daysOfMonth.reduce<Record<number, CalendarCellInfo[]>>((acc, day) => {\n\t\t\tconst key = startOfWeek(day.date, this.#weekOptions).getTime();\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[key]: [...(acc[key] || []), day],\n\t\t\t};\n\t\t}, {});\n\t\t// If we want to show days before and after this month\n\t\t// Use last week of previous month\n\t\tconst startOfPreviousOverflow = startOfWeek(lastDayOfMonth(this.previousMonth()), this.#weekOptions);\n\t\tconst previousOverflow = eachDayOfInterval({\n\t\t\tstart: startOfPreviousOverflow,\n\t\t\tend: endOfMonth(this.previousMonth()),\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(endOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfPreviousOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfPreviousOverflow.getTime()] = [...previousOverflow, ...daysByWeek[startOfPreviousOverflow.getTime()]];\n\t\t}\n\t\t// Use first week of next month\n\t\tconst startOfNextMonthOverflow = startOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst endOfNextMonthOverflow = endOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst nextOverflow = eachDayOfInterval({\n\t\t\tstart: startOfMonth(this.nextMonth()),\n\t\t\tend: endOfNextMonthOverflow,\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(startOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfNextMonthOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfNextMonthOverflow.getTime()] = [...daysByWeek[startOfNextMonthOverflow.getTime()], ...nextOverflow];\n\t\t}\n\t\treturn Object.keys(daysByWeek)\n\t\t\t.sort()\n\t\t\t.map((weekStart) => daysByWeek[+weekStart]);\n\t});\n\n\tyearGridDisplay = computed(() => {\n\t\tconst monthsOfYear: Date[] = eachMonthOfInterval({\n\t\t\tstart: this.year(),\n\t\t\tend: endOfYear(this.year()),\n\t\t});\n\t\treturn monthsOfYear\n\t\t\t.map((month) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: month,\n\t\t\t\t\tshort: this.#intlMonthsShort.format(month),\n\t\t\t\t\tlong: this.#intlMonthsLong.format(month),\n\t\t\t\t\t...this.dateToCellInfo(month),\n\t\t\t\t\tisCurrent: isSameMonth(new Date(), month),\n\t\t\t\t} as CalendarMonthInfo;\n\t\t\t})\n\t\t\t.reduce<CalendarMonthInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tdecadeGridDisplay = computed(() => {\n\t\tconst yearsOfDecade: Date[] = eachYearOfInterval({\n\t\t\tstart: this.removeYearOverflow() ? this.decade() : subYears(this.decade(), 1),\n\t\t\tend: this.removeYearOverflow() ? endOfDecade(this.decade()) : addYears(endOfDecade(this.decade()), 1),\n\t\t});\n\t\treturn yearsOfDecade\n\t\t\t.map((year) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: year,\n\t\t\t\t\t...this.dateToCellInfo(year),\n\t\t\t\t\tname: this.#intlDateYear.format(year),\n\t\t\t\t\tisCurrent: isSameYear(new Date(), year),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.reduce<CalendarYearInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tcurrentMonthLabel = computed(() => {\n\t\treturn this.#intlDateFormat.format(this.date());\n\t});\n\n\tcurrentYearLabel = computed(() => {\n\t\treturn this.#intlDateYear.format(this.date());\n\t});\n\n\tcurrentDecadeLabel = computed(() => {\n\t\treturn `${this.#intlDateYear.format(startOfDecade(this.decade()))} – ${this.#intlDateYear.format(endOfDecade(this.decade()))}`;\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (this.tabbableDate() === null) {\n\t\t\t\tthis.tabbableDate.set(this.date());\n\t\t\t}\n\t\t});\n\t}\n\n\tfocusTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.focus();\n\t}\n\n\tblurTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.blur();\n\t}\n\n\tclickToday() {\n\t\tthis.onCellClicked(startOfDay(new Date()));\n\t}\n\n\tngOnInit(): void {\n\t\t// On init, set display mode to the mode specified by component consumer\n\t\tif (this.displayMode() === null) {\n\t\t\tthis.displayMode.set(this.mode());\n\t\t}\n\t}\n\n\tonCellClicked(date: Date): void {\n\t\t// On cell clicked, if display mode is same as mode, emit value\n\t\t// Else, zoom in to new mode\n\t\tif (this.displayMode() === this.mode()) {\n\t\t\tthis.dateClicked.emit(date);\n\t\t} else {\n\t\t\t// Check that we are able to zoom in\n\t\t\tconst maxZoomLevel = MODE_HIERARCHY.indexOf(this.mode());\n\t\t\tconst currentZoomLevel = MODE_HIERARCHY.indexOf(this.displayMode());\n\t\t\tconst targetZoomLevel = currentZoomLevel - 1;\n\t\t\tif (targetZoomLevel >= 0 && targetZoomLevel >= maxZoomLevel) {\n\t\t\t\tconst newZoomLevel = MODE_HIERARCHY[targetZoomLevel];\n\t\t\t\tswitch (newZoomLevel) {\n\t\t\t\t\tcase 'year':\n\t\t\t\t\t\tthis.date.set(startOfDecade(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'month':\n\t\t\t\t\t\tthis.date.set(startOfYear(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'day':\n\t\t\t\t\t\tthis.date.set(startOfMonth(date));\n\t\t\t\t}\n\t\t\t\tthis.displayMode.set(newZoomLevel);\n\t\t\t}\n\t\t}\n\t}\n\n\tdateToCellInfo(date: Date, isOverflow = false): CalendarCellInfo {\n\t\t// This method is quite complex and packs a lot of logic, let's try to decompose and explain it.\n\n\t\t// First of all get cell status from the input, if the consumer needs to apply specific statuses to it\n\t\tconst status = this.getCellInfo()(date, this.displayMode());\n\n\t\t// We need to store a boolean for day mode, because some logic is specific to day display (like weekends for instance)\n\t\tconst isDayMode = this.displayMode() === 'day';\n\n\t\t// Keeping consumer's classes aside\n\t\tconst classes: string[] = status?.classes || [];\n\n\t\t// Let's grab the ranges in which this date is in, which includes the \"in progress\" one if it exists, using the current hovered date\n\t\tconst rangeInfo = this.getRangeInfo(date, this.displayMode(), isOverflow);\n\n\t\t// If the range includes classes, add them to our display classes\n\t\tif (rangeInfo?.class) {\n\t\t\tclasses.push(rangeInfo.class);\n\t\t}\n\n\t\t// Day specific logic\n\t\t// Is it weekend day? for is-dayOff class toggle\n\t\tconst isWeekend = isDayMode && this.#weekInfo.weekend.includes(getIntlWeekDay(date)) && !this.hideWeekend();\n\t\t// Is it first day of month? Mostly used for overflow display logic\n\t\tconst isFirstDayOfMonth = isDayMode && isSameDay(startOfMonth(date), rangeInfo?.range.start);\n\n\t\t// Is this the current period? Will match if same day as today, or same month in month display, or same year if year display\n\t\tconst isCurrent = comparePeriods(this.displayMode(), new Date(), date) && !this.hideToday();\n\n\t\t// Are we currently in a range that's being created (start date selected, end date is being hovered)\n\t\tconst isInProgress = rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() !== null;\n\n\t\t// Progress flags\n\t\tlet isProgressBody = false;\n\t\tlet isProgressStart = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\tlet isProgressEnd = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\t// Specific case for when start is == end and we're hovering it\n\t\tlet isSingleDayInProgress = false;\n\n\t\tif (isInProgress) {\n\t\t\tlet start = rangeInfo?.range.start;\n\t\t\t// If we're in day mode, depending on if first day of month or not, we want to consider the start or the end of the day,\n\t\t\t// To make sure we don't conflict with overflow\n\t\t\tif (isDayMode) {\n\t\t\t\tstart = isFirstDayOfMonth ? endOfDay(rangeInfo.range.start) : startOfDay(rangeInfo.range.start);\n\t\t\t}\n\t\t\tconst hoveredRange: Interval = {\n\t\t\t\tstart,\n\t\t\t\tend: startOfDay(this.dateHovered()),\n\t\t\t};\n\n\t\t\t// If start is after end, fix this by inverting the two, we always want to work with start before end\n\t\t\tif (isAfter(hoveredRange.start, hoveredRange.end)) {\n\t\t\t\tlet newStart = hoveredRange.end;\n\t\t\t\tconst newStartIsFirstDayOfMonth = isSameDay(startOfMonth(hoveredRange.end), hoveredRange.end);\n\t\t\t\tif (isDayMode) {\n\t\t\t\t\tnewStart = newStartIsFirstDayOfMonth ? endOfDay(hoveredRange.end) : startOfDay(hoveredRange.end);\n\t\t\t\t}\n\t\t\t\thoveredRange.end = rangeInfo.range.start;\n\t\t\t\thoveredRange.start = newStart;\n\t\t\t}\n\n\t\t\t// if we're working on overflow for after the last day of a month, we want to use end of day as comparison date\n\t\t\tconst isEndOfMonthOverflow = isOverflow && isSameDay(date, startOfMonth(date));\n\n\t\t\tif (isEndOfMonthOverflow) {\n\t\t\t\thoveredRange.end = endOfDay(hoveredRange.end);\n\t\t\t}\n\t\t\t// We're progress body if middle of day is in the current range\n\t\t\tisProgressBody = isWithinInterval(addHours(startOfDay(date), 12), hoveredRange);\n\t\t\t// Overflow cannot be start status for CSS, same for end\n\t\t\tisProgressStart = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.start as Date);\n\t\t\tisProgressEnd = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.end as Date);\n\n\t\t\t// This is the case where you clicked a first date and then are hovering it, which requires a specific case for CSS\n\t\t\tif (isSameDay(rangeInfo.range.start, this.dateHovered())) {\n\t\t\t\tisSingleDayInProgress = !isOverflow && isSameDay(hoveredRange.start, hoveredRange.end) && isSameDay(hoveredRange.start, this.dateHovered());\n\t\t\t}\n\t\t}\n\n\t\tconst isSelected = status.selected || (!!rangeInfo?.range && !isInProgress);\n\n\t\treturn {\n\t\t\tday: date.getDate(),\n\t\t\tstatus,\n\t\t\tlabel: status.label || rangeInfo?.label,\n\t\t\tdate,\n\t\t\trangeInfo,\n\t\t\tisWeekend,\n\t\t\tisCurrent,\n\t\t\tisOverflow,\n\t\t\tisSelected,\n\t\t\tnoButton: isOverflow && !this.showOverflow(),\n\t\t\tdisabled: status?.disabled || (isOverflow && !this.enableOverflow()),\n\t\t\t// Compile everything into a list of classes for CSS\n\t\t\tclasses: {\n\t\t\t\t'is-daysOff': isWeekend,\n\t\t\t\t'is-overflow': isOverflow,\n\t\t\t\t'is-current': isCurrent,\n\t\t\t\t'is-start': !isOverflow && (rangeInfo?.isStart || status.selected) && !isInProgress,\n\t\t\t\t'is-end': !isOverflow && (rangeInfo?.isEnd || status.selected) && !isInProgress,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t// Range in progress statuses\n\t\t\t\t'is-selectionInProgress': isProgressBody,\n\t\t\t\t'is-startInProgress': isProgressStart,\n\t\t\t\t'is-endInProgress': isProgressEnd,\n\t\t\t\t'is-singleDayInProgress': isSingleDayInProgress,\n\n\t\t\t\t...classes.reduce((acc, key) => ({ ...acc, [key]: true }), {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tgetRangeInfo(date: Date, scope: CalendarMode, isOverflow = false) {\n\t\tconst range: DateRange | undefined = this.ranges().find((range: DateRange) => {\n\t\t\tconst isSameScope = (range.scope || 'day') === scope;\n\t\t\tif (isSameScope) {\n\t\t\t\tif (range.end) {\n\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\tstart: isOverflow ? endOfDay(range.start) : startOfDay(range.start),\n\t\t\t\t\t\tend: isOverflow ? startOfDay(range.end) : range.end,\n\t\t\t\t\t});\n\t\t\t\t} else if (this.dateHovered() !== null) {\n\t\t\t\t\t// Nominal case: end is after start\n\t\t\t\t\tif (isAfter(this.dateHovered(), startOfDay(range.start))) {\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(range.start),\n\t\t\t\t\t\t\tend: endOfDay(this.dateHovered()),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// When user clicked end date first and now wants to select a start date\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(this.dateHovered()),\n\t\t\t\t\t\t\tend: endOfDay(range.start),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\treturn isSameDay(date, range.start);\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\treturn isSameMonth(date, range.start);\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\treturn isSameYear(date, range.start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isStart: boolean = range && isSameDay(date, range.start);\n\t\tconst isEnd: boolean = range && range.end && isSameDay(date, range.end);\n\n\t\treturn {\n\t\t\trange,\n\t\t\tisStart,\n\t\t\tisEnd,\n\t\t\tlabel: range?.label,\n\t\t\tclass: range?.class,\n\t\t};\n\t}\n}\n","<div class=\"calendar\">\n\t@switch (displayMode()) {\n\t\t@case (\"day\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-name\" aria-live=\"polite\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentMonthLabel() }}&ngsp; {{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('month')\">{{ currentMonthLabel() }}</button>&ngsp;\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-name\">\n\t\t\t\t<thead class=\"calendar-table-head\">\n\t\t\t\t\t<tr class=\"calendar-table-head-row\">\n\t\t\t\t\t\t@for (day of daysOfWeek; track day.long) {\n\t\t\t\t\t\t\t<th class=\"calendar-table-head-row-cell\" scope=\"col\">\n\t\t\t\t\t\t\t\t<span [attr.data-content-after]=\"day.short.substring(0, 1)\" aria-hidden=\"true\"></span>\n\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ day.long }}</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (week of monthGridDisplay(); track $index; let isLastWeek = $last) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (day of week; track dayIndex; let dayIndex = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"day.isSelected && !day.isOverflow\"\n\t\t\t\t\t\t\t\t\t[class]=\"day.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@if (!day.noButton) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"dayIndex\"\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"day.date\"\n\t\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"day\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"day.disabled ? 'true' : null\"\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(focus)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(blur)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t\t[luTooltip]=\"day.label\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{{ day.day }}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ todayLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isWeekend) {\n\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"calendar-table-body-row-cell-action-stripes\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<use href=\"#calendar-stripes-symbol\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"isLastWeek ? 7 - week.length : 0\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t\t<tr class=\"calendar-table-body-row\" *luRepeatTimes=\"6 - monthGridDisplay().length\">\n\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"7\"></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t@if (hasTodayButton()) {\n\t\t\t\t<div class=\"calendar-divider divider\"></div>\n\t\t\t\t<button class=\"calendar-todayLink link\" type=\"button\" (click)=\"clickToday()\">{{ todayLabel }}</button>\n\t\t\t}\n\t\t\t<svg class=\"calendar-stripes\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" aria-hidden=\"true\">\n\t\t\t\t<symbol id=\"calendar-stripes-symbol\" viewBox=\"0 0 60 60\">\n\t\t\t\t\t<path\n\t\t\t\t\t\tclass=\"calendar-stripes-symbol-path\"\n\t\t\t\t\t\td=\"m-41.82 43.03 84.85-84.85.53.53-84.85 84.85zm2.12 2.12L45.15-39.7l.53.53-84.85 84.85zm2.12 2.12\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.13L49.4-35.47l.53.53-84.85 84.85zm2.12 2.11\n\t\t\t84.85-84.85.54.53-84.86 84.86zm2.12 2.13 84.86-84.86.53.53-84.86 84.86zm2.12\n\t\t\t2.12L55.76-29.1l.53.53-84.86 84.86zm2.13 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L60-24.85l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L64.24-20.6l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.13L68.5-16.37l.53.53-84.86 84.86zm2.12 2.11 84.86-84.85.53.53-84.86 84.86zm2.13 2.13\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.12L74.85-10l.53.53-84.85 84.85zm2.12\n\t\t\t2.12L76.97-7.88l.53.53L-7.35 77.5zm2.12 2.13L79.09-5.77l.53.53-84.85 84.85zm2.12\n\t\t\t2.11L81.21-3.64l.53.53L-3.1 81.74zm2.12 2.12L83.33-1.52l.53.53L-.99\n\t\t\t83.86zM.6 85.46 85.46.6l.53.53L1.13 86zm2.12 2.12L87.58 2.72l.53.53L3.25 88.11zm2.13 2.12L89.7\n\t\t\t4.85l.53.53L5.38 90.23zm2.12 2.12L91.82 6.97l.53.53L7.5 92.35zm2.12 2.12L93.94 9.1l.53.53L9.62\n\t\t\t94.47zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12 84.86-84.85.53.53-84.86 84.86z\"\n\t\t\t\t\t/>\n\t\t\t\t</symbol>\n\t\t\t</svg>\n\t\t}\n\t\t@case (\"month\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-year-name\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-year-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (quarter of yearGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (month of quarter; track month.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"month.status.selected || !!month.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"month.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[attr.data-content-after]=\"month.short\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"month.date\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"month.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"month\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ month.long }}</span>\n\t\t\t\t\t\t\t\t\t\t@if (month.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisMonthLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t\t@case (\"year\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-decade-name\">\n\t\t\t\t{{ currentDecadeLabel() }}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-decade-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (row of decadeGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (year of row; track year.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"year.status.selected || !!year.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"year.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"year.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"year.date\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"year\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ year.name }}\n\t\t\t\t\t\t\t\t\t\t@if (year.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisYearLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t}\n</div>\n","export function getDateFormat(locale: string): string {\n\treturn new Intl.DateTimeFormat(locale).formatToParts(new Date('01/01/2024')).reduce((acc, part) => {\n\t\tswitch (part.type) {\n\t\t\tcase 'day':\n\t\t\t\treturn `${acc}${'d'.repeat(part.value.length)}`;\n\t\t\tcase 'month':\n\t\t\t\treturn `${acc}${'M'.repeat(part.value.length)}`;\n\t\t\tcase 'year':\n\t\t\t\treturn `${acc}${'y'.repeat(part.value.length)}`;\n\t\t\tcase 'literal':\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n}\n\nexport function getSeparator(locale: string): string {\n\treturn new Intl.DateTimeFormat(locale).formatToParts(new Date('01/01/2024')).find((part) => part.type === 'literal')?.value || '/';\n}\n\n// Warning: it works on Latin languages, but deserves to be tested on non-Latin languages\nexport function getLocalizedDateFormat(locale: string, period: 'year' | 'month' | 'day' = 'day'): string {\n\tconst letterLocalizedForDay = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'day')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForMonth = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'month')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForYear = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'year')[2]['value'].charAt(1).toUpperCase();\n\n\tconst intlConfig: Intl.DateTimeFormatOptions = {\n\t\tyear: 'numeric',\n\t};\n\n\tif (period === 'month' || period === 'day') {\n\t\tintlConfig.month = 'numeric';\n\t}\n\n\tif (period === 'day') {\n\t\tintlConfig.day = 'numeric';\n\t}\n\n\treturn new Intl.DateTimeFormat(locale, intlConfig).formatToParts(new Date('01/01/2024')).reduce((acc, part) => {\n\t\tswitch (part.type) {\n\t\t\tcase 'day':\n\t\t\t\treturn `${acc}${letterLocalizedForDay.repeat(part.value.length)}`;\n\t\t\tcase 'month':\n\t\t\t\treturn `${acc}${letterLocalizedForMonth.repeat(part.value.length)}`;\n\t\t\tcase 'year':\n\t\t\t\treturn `${acc}${letterLocalizedForYear.repeat(part.value.length)}`;\n\t\t\tcase 'literal':\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, inject, input, LOCALE_ID, model, output, signal } from '@angular/core';\nimport { getIntl } from '@lucca-front/ng/core';\nimport { addMonths, addYears, isAfter, isBefore, isSameMonth, startOfDay, startOfMonth } from 'date-fns';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { CellStatus } from './calendar2/cell-status';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { getDateFormat, getLocalizedDateFormat, getSeparator } from './date-format';\nimport { DATE_FORMAT, DateFormat } from './date.const';\nimport { LU_DATE2_TRANSLATIONS } from './date2.translate';\nimport { transformDateInputToDate, transformDateRangeInputToDateRange } from './utils';\n\n@Component({\n\t// eslint-disable-next-line @angular-eslint/component-selector\n\tselector: '',\n\ttemplate: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AbstractDateComponent {\n\tprotected locale = inject(LOCALE_ID);\n\t// Contains the current date format (like dd/mm/yy etc) based on current locale\n\tprotected dateFormat = getDateFormat(this.locale);\n\tprotected separator = getSeparator(this.locale);\n\tintlDateTimeFormat = new Intl.DateTimeFormat(this.locale);\n\n\tintlDateTimeFormatMonth = new Intl.DateTimeFormat(this.locale, { month: 'numeric', year: 'numeric' });\n\tintlDateTimeFormatYear = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\n\n\tintl = getIntl(LU_DATE2_TRANSLATIONS);\n\n\tonTouched?: () => void;\n\tdisabled = signal<boolean>(false);\n\n\treadonly format = input<DateFormat>(DATE_FORMAT.DATE);\n\tprotected inDateISOFormat = computed(() => this.format() === DATE_FORMAT.DATE_ISO);\n\n\treadonly ranges = input([], { transform: (v: readonly DateRange[] | readonly DateRangeInput[]) => v.map(transformDateRangeInputToDateRange) });\n\treadonly hideToday = input(false, { transform: booleanAttribute });\n\treadonly hasTodayButton = input(false, { transform: booleanAttribute });\n\treadonly clearable = input(null, { transform: booleanAttribute });\n\treadonly clearBehavior = input<'clear' | 'reset'>('clear');\n\n\treadonly mode = input<CalendarMode>('day');\n\treadonly hideWeekend = input(false, { transform: booleanAttribute });\n\n\treadonly getCellInfo = input<((day: Date, mode: CalendarMode) => CellStatus) | null>();\n\n\treadonly min = input(new Date('1/1/1000'), {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly max = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly focusedDate = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\n\tcalendarMode = model<CalendarMode>();\n\n\treadonly panelOpened = output<void>();\n\n\treadonly panelClosed = output<void>();\n\n\treadonly dateFormatLocalized = computed(() => getLocalizedDateFormat(this.locale, this.mode()));\n\n\tprotected currentDate = signal(new Date());\n\n\tprotected tabbableDate = signal<Date | null>(null);\n\n\tprotected constructor() {\n\t\teffect(() => {\n\t\t\tconst focusedDate = this.focusedDate();\n\t\t\tif (focusedDate) {\n\t\t\t\tthis.currentDate.set(startOfDay(focusedDate));\n\t\t\t}\n\t\t});\n\t}\n\n\tisInMinMax(date: Date, mode: CalendarMode): boolean {\n\t\treturn this.isAfterMin(date, mode) && this.isBeforeMax(date, mode);\n\t}\n\n\tisAfterMin(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.min()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.min().getTime() <= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isBefore(startOfMonth(this.min()), startOfMonth(date)) || isSameMonth(this.min(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.min().getFullYear() <= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisBeforeMax(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.max()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.max().getTime() >= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isAfter(startOfMonth(this.max()), startOfMonth(date)) || isSameMonth(this.max(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.max().getFullYear() >= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisValidDate(date: Date): boolean {\n\t\treturn !!date && !isNaN(date.getTime());\n\t}\n\n\tprev(mode: CalendarMode) {\n\t\tthis.move(-1, mode);\n\t}\n\n\tnext(mode: CalendarMode) {\n\t\tthis.move(1, mode);\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tmove(direction: 1 | -1, mode: CalendarMode): void {\n\t\tswitch (mode) {\n\t\t\tcase 'year':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction * 10));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction * 10));\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\tthis.currentDate.set(addMonths(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addMonths(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tuntracked,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { InputDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { isSameDay, parse, startOfDay } from 'date-fns';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { comparePeriods, startOfPeriod, transformDateInputToDate, transformDateToDateISO } from '../utils';\n\nexport type DateInputValidatorErrorType = {\n\tmin: true;\n\tmax: true;\n\tdate: true;\n};\n\n@Component({\n\tselector: 'lu-date-input',\n\timports: [PopoverDirective, Calendar2Component, IconComponent, InputDirective, NgTemplateOutlet, FilterPillDisplayerDirective, ClearComponent],\n\ttemplateUrl: './date-input.component.html',\n\tstyleUrl: './date-input.component.scss',\n\thost: {\n\t\tclass: 'dateField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\t#ngControl: NgControl; // Initialized in ngOnInit\n\n\t// CVA stuff\n\t#onChange?: (value: Date | null) => void;\n\n\t#luClass = inject(LuClass);\n\n\tautocomplete = input<AutoFill>('off');\n\n\tplaceholder = input<string>();\n\n\tdisableOverflow = input(false, { transform: booleanAttribute });\n\thideOverflow = input(false, { transform: booleanAttribute });\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tfilterPillDisabled = signal(false);\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\tselectedDate = signal<Date | null>(null);\n\n\tinitialValue = signal<Date | null>(undefined);\n\tdateFromWriteValue = signal<Date | null>(null);\n\n\tcalendar = viewChild(Calendar2Component);\n\n\tinputRef = viewChild<ElementRef<HTMLInputElement>>('date');\n\n\tdisplayValue = computed(() => {\n\t\tconst textInput = this.userTextInput();\n\t\tif (textInput !== 'ɵ') {\n\t\t\tconst parsedInput = parse(textInput, this.dateFormat, startOfDay(new Date()));\n\t\t\tif (this.isValidDate(parsedInput) && this.inputFocused()) {\n\t\t\t\treturn textInput;\n\t\t\t}\n\t\t}\n\t\tif (this.selectedDate() && this.isValidDate(this.selectedDate())) {\n\t\t\tlet formatter: Intl.DateTimeFormat;\n\t\t\tswitch (this.mode()) {\n\t\t\t\tcase 'day':\n\t\t\t\t\tformatter = this.intlDateTimeFormat;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tformatter = this.intlDateTimeFormatMonth;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'year':\n\t\t\t\t\tformatter = this.intlDateTimeFormatYear;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn formatter.format(this.selectedDate());\n\t\t}\n\t\t// If we are initializing the component, we don't want to display the value\n\t\tif (textInput === 'ɵ') {\n\t\t\treturn '';\n\t\t}\n\t\treturn textInput;\n\t});\n\n\t// We need to use a \"magic key\" here to avoid sending a null value change on initialization\n\tuserTextInput = signal<string>('ɵ');\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: this.selectedDate() && this.calendarMode() === mode && comparePeriods(mode, date, this.selectedDate()),\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => !this.selectedDate());\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\teffect(() => {\n\t\t\tconst nativeElement = this.inputRef().nativeElement;\n\t\t\tconst cursorPositionBefore = nativeElement.selectionStart;\n\t\t\tconst displayValue = this.displayValue();\n\t\t\tnativeElement.value = this.displayValue();\n\t\t\tif (displayValue.endsWith(this.separator)) {\n\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore + 1, cursorPositionBefore + 1);\n\t\t\t} else {\n\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore, cursorPositionBefore);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst inputValue = this.userTextInput();\n\t\t\t// If we are initializing the component, we don't want to parse the value\n\t\t\tif (inputValue === 'ɵ') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (inputValue.length > 0) {\n\t\t\t\tlet parsed: Date;\n\t\t\t\ttry {\n\t\t\t\t\tparsed = parse(inputValue, this.dateFormat, startOfDay(new Date()));\n\t\t\t\t} catch {\n\t\t\t\t\t/* not a correct date */\n\t\t\t\t}\n\t\t\t\tif (parsed instanceof Date && parsed.getFullYear() > 999) {\n\t\t\t\t\tthis.selectedDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t\t} else if (!this.isFilterPill) {\n\t\t\t\t\tthis.onTouched?.();\n\t\t\t\t\tthis.selectedDate.set(parsed);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.selectedDate.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (!this.#safeCompareDate(untracked(this.dateFromWriteValue), this.selectedDate())) {\n\t\t\t\tthis.#onChange?.(this.selectedDate());\n\t\t\t\tthis.dateFromWriteValue.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.mode, this.calendarMode], (mode, calendarMode) => {\n\t\t\tif (mode && isNil(calendarMode)) {\n\t\t\t\tthis.calendarMode.set(mode);\n\t\t\t}\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate && !comparePeriods(calendarMode, tabbableDate, this.currentDate())) {\n\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.calendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.#ngControl = this.#injector.get(NgControl);\n\t}\n\n\t#safeCompareDate(a: Date, b: Date): boolean {\n\t\treturn a === b || (!!a && !!b && isSameDay(a, b));\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarDate';\n\t}\n\n\topenPopover(ref: PopoverDirective): void {\n\t\tif (!this.isFilterPill) {\n\t\t\tref.openPopover(true, true);\n\t\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t});\n\t\t}\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective) {\n\t\tif (this.isFilterPill) {\n\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t} else {\n\t\t\tif (popoverRef.opened()) {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t} else {\n\t\t\t\tthis.openPopover(popoverRef);\n\t\t\t}\n\t\t}\n\t}\n\n\tspaceDown(event: Event, popoverRef: PopoverDirective) {\n\t\tif (this.userTextInput()?.length === 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.openPopover(popoverRef);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<Date | string | null>): Partial<DateInputValidatorErrorType> | null {\n\t\t// null is not an error but means we'll skip everything else, we'll let the presence of a\n\t\t// Validators.required (or not) decide if it's an error.\n\t\tif (control.value === null || control.value === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\tconst date = transformDateInputToDate(control.value);\n\t\t// try to parse the display value cause formControl.value is undefined if date is not parsable\n\t\ttry {\n\t\t\tparse(this.displayValue(), this.dateFormat, startOfDay(new Date()));\n\t\t} catch {\n\t\t\t/* not a correct date */\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check date validity\n\t\tif (!this.isValidDate(date)) {\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check min and max\n\t\tif (this.min() && !this.isAfterMin(date, this.mode())) {\n\t\t\treturn { min: true };\n\t\t} else if (this.max() && !this.isBeforeMax(date, this.mode())) {\n\t\t\treturn { max: true };\n\t\t}\n\t\t// Everything is valid\n\t\treturn null;\n\t}\n\n\twriteValue(date: Date | string | null): void {\n\t\tif (this.#ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\n\t\tconst _date = transformDateInputToDate(date);\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(_date);\n\t\t}\n\n\t\tif (date != null) {\n\t\t\tconst start = startOfDay(_date);\n\t\t\tthis.dateFromWriteValue.set(start);\n\t\t\tthis.selectedDate.set(start);\n\t\t\tthis.currentDate.set(start);\n\t\t} else {\n\t\t\tthis.reset();\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: Date | string | null) => void): void {\n\t\tthis.#onChange = (date: Date | null) => {\n\t\t\tfn(date && this.inDateISOFormat() && this.isValidDate(date) ? transformDateToDateISO(date) : date);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\treset(): Date | null {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.dateFromWriteValue.set(newValue);\n\t\tthis.selectedDate.set(newValue);\n\t\treturn newValue;\n\t}\n\n\tclear() {\n\t\tconst newValue = this.reset();\n\t\tthis.#onChange?.(newValue);\n\t\tthis.onTouched?.();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tthis.selectedDate.set(date);\n\t\tthis.currentDate.set(date);\n\t\tthis.tabbableDate.set(date);\n\t\tif (!this.isFilterPill) {\n\t\t\tpopoverRef.close();\n\t\t\tthis.inputRef().nativeElement.focus();\n\t\t}\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tinputBlurred(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.userTextInput.set('ɵ');\n\t}\n}\n","@if (isFilterPill) {\n\t<label for=\"dateInput\" class=\"pr-u-mask\">{{ intl.pickDate }}</label>\n}\n<div class=\"textField dateField-textField\" #popoverAnchor>\n\t<div class=\"textField-input\">\n\t\t<input\n\t\t\ttype=\"text\"\n\t\t\tid=\"dateInput\"\n\t\t\t#date\n\t\t\tluInput\n\t\t\tclass=\"textField-input-value\"\n\t\t\t(input)=\"userTextInput.set(date.value)\"\n\t\t\t(blur)=\"inputBlurred()\"\n\t\t\t(focus)=\"inputFocused.set(true)\"\n\t\t\taria-haspopup=\"true\"\n\t\t\trole=\"combobox\"\n\t\t\t(click)=\"popoverRef.openPopover(true, true)\"\n\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef)\"\n\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t(keydown.space)=\"spaceDown($event, popoverRef)\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[attr.placeholder]=\"placeholder() || dateFormatLocalized()\"\n\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t/>\n\n\t\t<div class=\"textField-input-affix\">\n\t\t\t@if (clearable() && !disabled() && (clearBehavior() === \"clear\" ? date.value !== \"\" : selectedDate() !== initialValue())) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl.clear }}</lu-clear>\n\t\t\t}\n\t\t\t@if (isFilterPill && !isFilterPillEmpty()) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl.clear }}</lu-clear>\n\t\t\t}\n\t\t\t<button\n\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t[luPopoverDisabled]=\"isFilterPill\"\n\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t(luPopoverClosed)=\"panelClosed.emit()\"\n\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t>\n\t\t\t\t<lu-icon [icon]=\"'calendarDate'\" [alt]=\"intl.pickDate\" />\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<div *luFilterPillDisplayer>{{ displayValue() }}</div>\n\n<ng-template #calendar>\n\t<div class=\"calendarWrapper\">\n\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(calendarMode())\" #previousButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl.previous }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(calendarMode())\" #nextButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl.next }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t<lu-calendar2\n\t\t\t\t[enableOverflow]=\"!disableOverflow()\"\n\t\t\t\t[showOverflow]=\"!hideOverflow()\"\n\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t[hasTodayButton]=\"hasTodayButton()\"\n\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t[(tabbableDate)]=\"tabbableDate\"\n\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t[ranges]=\"ranges()\"\n\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t(nextPage)=\"move(1, calendarMode())\"\n\t\t\t\t(previousPage)=\"move(-1, calendarMode())\"\n\t\t\t\t[(displayMode)]=\"calendarMode\"\n\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</ng-template>\n","import { DateRange } from '../calendar2/date-range';\nimport { endOfDay, endOfMonth, endOfQuarter, endOfWeek, endOfYear, startOfDay, startOfMonth, startOfQuarter, startOfWeek, startOfYear, subMonths, subQuarters, subWeeks, subYears } from 'date-fns';\nimport { getLocaleFirstDayOfWeek } from '@angular/common';\n\nexport interface CalendarShortcut {\n\tlabel: string;\n\trange: DateRange;\n}\n\nexport const PremadeShortcuts: Record<string, (locale: string) => DateRange> = {\n\tSinceStartOfWeek: (locale: string) => {\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfWeek(new Date(), { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t\tend: startOfDay(new Date()),\n\t\t};\n\t},\n\tLastWeek: (locale: string) => {\n\t\tconst startOfLastWeek = startOfWeek(subWeeks(new Date(), 1), { weekStartsOn: getLocaleFirstDayOfWeek(locale) });\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfLastWeek,\n\t\t\tend: endOfWeek(startOfLastWeek, { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t};\n\t},\n\tSinceStartOfMonth: () => {\n\t\treturn {\n\t\t\tstart: startOfMonth(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastMonth: () => {\n\t\tconst startOfLastMonth = startOfMonth(subMonths(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastMonth,\n\t\t\tend: endOfMonth(startOfLastMonth),\n\t\t};\n\t},\n\tSinceStartOfQuarter: () => {\n\t\treturn {\n\t\t\tstart: startOfQuarter(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastQuarter: () => {\n\t\tconst startOfLastQuarter = startOfQuarter(subQuarters(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastQuarter,\n\t\t\tend: endOfQuarter(startOfLastQuarter),\n\t\t};\n\t},\n\tSinceStartOfYear: () => {\n\t\treturn {\n\t\t\tstart: startOfYear(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastYear: () => {\n\t\tconst startOfLastYear = startOfYear(subYears(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastYear,\n\t\t\tend: endOfYear(startOfLastYear),\n\t\t};\n\t},\n\tLastTwelveMonths: () => {\n\t\treturn {\n\t\t\tstart: subMonths(new Date(), 12),\n\t\t\tend: new Date(),\n\t\t};\n\t},\n};\n","import { BreakpointObserver, LayoutModule } from '@angular/cdk/layout';\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, ValidationErrors, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, PortalContent, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { FORM_FIELD_INSTANCE, InputDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { addMonths, addYears, endOfDecade, endOfMonth, endOfYear, isAfter, isBefore, isSameDay, parse, startOfDay, startOfDecade, startOfMonth, startOfYear, subMonths, subYears } from 'date-fns';\nimport { map } from 'rxjs';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { DateRange, DateRangeInput } from '../calendar2/date-range';\nimport { compareCalendarPeriods, startOfPeriod, transformDateRangeInputToDateRange, transformDateRangeToDateRangeInput } from '../utils';\nimport { CalendarShortcut } from './calendar-shortcut';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-date-range-input',\n\timports: [PopoverDirective, Calendar2Component, IconComponent, InputDirective, LayoutModule, PortalDirective, NgTemplateOutlet, FilterPillDisplayerDirective, ClearComponent],\n\ttemplateUrl: './date-range-input.component.html',\n\tstyleUrl: './date-range-input.component.scss',\n\thost: {\n\t\tclass: 'dateRangeField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateRangeInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\t#ngControl: NgControl; // Initialized in ngOnInit\n\t#luClass = inject(LuClass);\n\n\t#formFieldRef = inject(FORM_FIELD_INSTANCE, { optional: true });\n\n\t#breakpointObserver = inject(BreakpointObserver);\n\n\thasTwoCalendars = toSignal(this.#breakpointObserver.observe('(min-width: 40em)').pipe(map((state) => state.matches)));\n\n\tidSuffix = nextId++;\n\n\tstartTextInputRef = viewChild<ElementRef<HTMLInputElement>>('start');\n\n\tendTextInputRef = viewChild<ElementRef<HTMLInputElement>>('end');\n\n\t// CVA stuff\n\t#onChange?: (value: DateRange) => void;\n\n\tinitialValue = signal<DateRange | null>(undefined);\n\tselectedRange = signal<DateRange | null>(null);\n\n\tdateHovered = signal<Date | null>(null);\n\n\tplaceholder = input<string>();\n\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tlabel: PortalContent;\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\teditedField = signal<-1 | 0 | 1>(-1);\n\n\thighlightedField = signal<-1 | 0 | 1>(-1);\n\n\tshortcuts = input<readonly CalendarShortcut[]>();\n\n\tautocomplete = input<AutoFill>('off');\n\n\tprotected currentRightDate = computed(() => {\n\t\treturn this.hasTwoCalendars() ? this.getNextCalendarDate(this.currentDate()) : this.currentDate();\n\t});\n\n\tprotected currentStartDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(this.currentDate());\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(this.currentDate());\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(this.currentDate());\n\t\t}\n\t});\n\n\tprotected currentEndDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn endOfMonth(this.currentRightDate());\n\t\t\tcase 'month':\n\t\t\t\treturn endOfYear(this.currentRightDate());\n\t\t\tcase 'year':\n\t\t\t\treturn endOfDecade(this.currentRightDate());\n\t\t}\n\t});\n\n\tcalendars = viewChildren(Calendar2Component);\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: false,\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tcalendarRanges = computed(() => {\n\t\tif (this.selectedRange()) {\n\t\t\treturn [this.selectedRange(), ...this.ranges()];\n\t\t}\n\t\treturn this.ranges();\n\t});\n\n\tstartLabel = computed(() => {\n\t\tif (this.selectedRange()?.start && this.isValidDate(this.selectedRange()?.start)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.start);\n\t\t}\n\t\treturn '';\n\t});\n\n\tendLabel = computed(() => {\n\t\tif (this.selectedRange()?.end && this.isValidDate(this.selectedRange()?.end)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.end);\n\t\t}\n\t\treturn '';\n\t});\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t// Which calendar is currently being focused in, used for tabbable date logic\n\tfocusedCalendarIndex = signal(0);\n\n\tfocusedCalendar = computed(() => this.calendars()[this.focusedCalendarIndex()]);\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => this.selectedRange() === null);\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tfilterPillDisabled = signal(false);\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this.#formFieldRef) {\n\t\t\tthis.#formFieldRef.rolePresentationLabel.set(true);\n\t\t\tthis.label = this.#formFieldRef.label();\n\t\t}\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate) {\n\t\t\t\tif (isAfter(tabbableDate, this.currentEndDisplayDate())) {\n\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t} else if (isBefore(tabbableDate, this.currentStartDisplayDate())) {\n\t\t\t\t\tif (this.hasTwoCalendars()) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subMonths(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 10) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.hasTwoCalendars()) {\n\t\t\t\t\tif (this.focusedCalendarIndex() === 1 && isBefore(tabbableDate, this.currentRightDate())) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\t} else if (this.focusedCalendarIndex() === 0 && (isAfter(tabbableDate, this.currentRightDate()) || isSameDay(tabbableDate, this.currentRightDate()))) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.focusedCalendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.#ngControl = this.#injector.get(NgControl);\n\t}\n\n\tgetNextCalendarDate(date: Date): Date {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(addMonths(date, 1));\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(addYears(date, 1));\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(addYears(date, 10));\n\t\t}\n\t}\n\n\tpopoverClosed(): void {\n\t\tthis.panelClosed.emit();\n\t\tif (this.editedField() === 1) {\n\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t} else if (this.editedField() === 0) {\n\t\t\tthis.startTextInputRef().nativeElement.focus();\n\t\t}\n\t}\n\n\tinputBlur(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.highlightedField.set(-1);\n\t}\n\n\tfixOrderIfNeeded(): void {\n\t\tif (this.selectedRange() && isAfter(this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\tconst range = this.selectedRange();\n\t\t\tthis.selectedRange.set({\n\t\t\t\t...range,\n\t\t\t\tend: range.start,\n\t\t\t\tstart: range.end,\n\t\t\t});\n\t\t\tthis.#onChange?.(this.selectedRange());\n\t\t}\n\t}\n\n\ttabbableDateChange(date: Date, calendarIndex: number) {\n\t\tif (calendarIndex == this.focusedCalendarIndex()) {\n\t\t\tthis.tabbableDate.set(date);\n\t\t}\n\t}\n\n\topenPopover(ref: PopoverDirective, propertyToFocus?: 'start' | 'end', focusTabbableDate = false): void {\n\t\tif (this.isFilterPill) {\n\t\t\treturn;\n\t\t}\n\t\tif (!ref.opened()) {\n\t\t\tref.openPopover(true, true);\n\t\t}\n\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\t\tsetTimeout(() => {\n\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\tif (propertyToFocus && this.selectedRange()?.[propertyToFocus]) {\n\t\t\t\t// Specific case: if range is on a single month, focus on it on left calendar\n\t\t\t\t// Same goes for focus on start date, we want it on left panel\n\t\t\t\tif (propertyToFocus === 'start' || compareCalendarPeriods(this.mode(), this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\t\t\tthis.currentDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t\tthis.tabbableDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t} else {\n\t\t\t\t\t// Compute the date to use for proper focus on left panel, minus one calendar on focus date basically\n\t\t\t\t\tconst leftPanelFocus = this.selectedRange()?.end;\n\t\t\t\t\tthis.currentDate.set(leftPanelFocus);\n\t\t\t\t\tthis.tabbableDate.set(leftPanelFocus);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (focusTabbableDate) {\n\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t}\n\t\t});\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tif (this.selectedRange() === null) {\n\t\t\tthis.selectedRange.set({\n\t\t\t\tstart: date,\n\t\t\t\tscope: this.mode(),\n\t\t\t});\n\t\t\tthis.editedField.set(1);\n\t\t\tthis.highlightedField.set(1);\n\t\t} else {\n\t\t\t// If we're editing end field\n\t\t\tif (this.editedField() === 1) {\n\t\t\t\t// If end is before start, invert them\n\t\t\t\tif (isBefore(date, this.selectedRange().start)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: this.selectedRange().start,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: date,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpopoverRef?.close();\n\t\t\t\tthis.filterPillPopoverCloseFn?.();\n\t\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t\t\tthis.editedField.set(-1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t} else {\n\t\t\t\t// Else, we're editing start field\n\t\t\t\t// If start is after end, invert them\n\t\t\t\tif (isAfter(date, this.selectedRange().end)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.editedField.set(1);\n\t\t\t\tthis.highlightedField.set(1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t}\n\t\t}\n\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective, fieldToFocus: 'start' | 'end'): void {\n\t\tthis.openPopover(popoverRef, fieldToFocus, true);\n\t\tif (this.isFilterPill) {\n\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t} else if (this.editedField() === -1) {\n\t\t\tthis.editedField.set(fieldToFocus === 'start' ? 0 : 1);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<DateRange | DateRangeInput | null>): ValidationErrors | null {\n\t\tif (!control.value) {\n\t\t\treturn null;\n\t\t}\n\t\tconst dateRange = transformDateRangeInputToDateRange(control.value);\n\n\t\treturn this.isValidDate(dateRange.start) ? null : { date: true };\n\t}\n\n\twriteValue(dateRange: DateRange | DateRangeInput | null): void {\n\t\tif (this.#ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\t\tconst _dateRange = transformDateRangeInputToDateRange(dateRange);\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(_dateRange);\n\t\t}\n\n\t\tif (dateRange != null) {\n\t\t\tthis.selectedRange.set(_dateRange);\n\t\t\tthis.currentDate.set(startOfDay(dateRange.start));\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: DateRange | DateRangeInput | null) => void): void {\n\t\tthis.#onChange = (dateRange: DateRange | null) => {\n\t\t\tfn(dateRange && this.inDateISOFormat() ? transformDateRangeToDateRangeInput(dateRange) : dateRange);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\tclear() {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.selectedRange.set(newValue);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tthis.onTouched?.();\n\t\tthis.startTextInputRef().nativeElement.focus();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tgetDateLabelForInput(date: Date): string {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.intlDateTimeFormat.format(date);\n\t\t\tcase 'month':\n\t\t\t\treturn this.intlDateTimeFormatMonth.format(date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.intlDateTimeFormatYear.format(date);\n\t\t}\n\t}\n\n\tselectShortcut(shortcut: CalendarShortcut, popover: PopoverDirective): void {\n\t\tthis.selectedRange.set(shortcut.range);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tpopover?.close();\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarPlanning';\n\t}\n\n\ttextInputChange(inputValue: string, rangeProperty: 'start' | 'end'): void {\n\t\tlet currentRange: DateRange = this.selectedRange() || ({} as DateRange);\n\t\tif (inputValue?.length > 0) {\n\t\t\tconst parsed = parse(inputValue, this.dateFormat, startOfDay(new Date()));\n\t\t\tif (parsed.getFullYear() > 999) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t} else if (this.isValidDate(parsed)) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (inputValue !== null) {\n\t\t\tcurrentRange = {\n\t\t\t\t...currentRange,\n\t\t\t\tscope: this.mode(),\n\t\t\t\t[rangeProperty]: undefined,\n\t\t\t};\n\t\t}\n\t\tif (!currentRange.start && !currentRange.end) {\n\t\t\tthis.selectedRange.set(null);\n\t\t} else {\n\t\t\tthis.selectedRange.set(currentRange);\n\t\t}\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n}\n","<fieldset class=\"dateRangeField-fieldset\">\n\t<legend>\n\t\t<span class=\"pr-u-mask\">\n\t\t\t<ng-container *luPortal=\"label\" />\n\t\t</span>\n\t</legend>\n\t<div class=\"dateRangeField-fieldset-textField textField\" #popoverAnchor>\n\t\t<div class=\"textField-input\">\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-start\" [class.is-highlighted]=\"highlightedField() === 0\">\n\t\t\t\t<label for=\"range-input-start-{{ idSuffix }}\" class=\"pr-u-mask\">Start</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#start\n\t\t\t\t\tid=\"range-input-start-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"startLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'start')\"\n\t\t\t\t\t(blur)=\"inputBlur()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(0); highlightedField.set(0)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(0); openPopover(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-end\" [class.is-highlighted]=\"highlightedField() === 1\">\n\t\t\t\t<label for=\"range-input-end-{{ idSuffix }}\" class=\"pr-u-mask\">End</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#end\n\t\t\t\t\tid=\"range-input-end-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"endLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'end')\"\n\t\t\t\t\t(blur)=\"inputBlur(); fixOrderIfNeeded()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(1); highlightedField.set(1)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(1); openPopover(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<lu-icon [icon]=\"'arrowRight'\" [alt]=\"''\" class=\"dateRangeField-fieldset-arrow\" />\n\t\t\t<div class=\"textField-input-affix\">\n\t\t\t\t@if (!isFilterPill) {\n\t\t\t\t\t@if (clearable() && (start.value !== \"\" || end.value !== \"\")) {\n\t\t\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); start.focus()\">{{ intl.clear }}</lu-clear>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t\t(luPopoverClosed)=\"popoverClosed()\"\n\t\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t\t\t(click)=\"editedField.set(0)\"\n\t\t\t\t>\n\t\t\t\t\t<lu-icon [icon]=\"'calendarPlanning'\" [alt]=\"intl.pickDate\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</fieldset>\n\n<ng-template #calendar>\n\t<div class=\"calendarShortcutsOptional\">\n\t\t@if (shortcuts()?.length > 0) {\n\t\t\t<ul\n\t\t\t\tclass=\"calendarShortcuts\"\n\t\t\t\t[class.mod-day]=\"mode() === 'day'\"\n\t\t\t\t[class.mod-month]=\"mode() === 'month'\"\n\t\t\t\t[class.mod-year]=\"mode() === 'year'\"\n\t\t\t>\n\t\t\t\t@for (shortcut of shortcuts(); track $index) {\n\t\t\t\t\t<li class=\"calendarShortcutsButton-item\">\n\t\t\t\t\t\t<button type=\"button\" class=\"calendarShortcutsButton-item-button button\" (click)=\"selectShortcut(shortcut, popoverRef)\">\n\t\t\t\t\t\t\t{{ shortcut.label }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t}\n\t\t<div class=\"calendarWrapper\">\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(mode())\" #previousButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl.previous }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(mode())\" #nextButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl.next }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t\t<lu-calendar2\n\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 0)\"\n\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t/>\n\t\t\t\t@if (hasTwoCalendars()) {\n\t\t\t\t\t<lu-calendar2\n\t\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t\t[date]=\"currentRightDate()\"\n\t\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 1)\"\n\t\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</ng-template>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<ng-container *luFilterPillDisplayer=\"let empty = isEmpty\">\n\t@if (!empty) {\n\t\t<span class=\"pr-u-mask\">{{ intl.from }}</span>\n\t\t{{ startLabel() }}\n\t\t<lu-icon [icon]=\"'arrowRight'\" size=\"XS\" [alt]=\"intl.to\" />\n\t\t{{ endLabel() }}\n\t}\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps"],"mappings":"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"}