@lucca-front/ng 22.1.0 → 22.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/lucca-front-ng-activity-feed.mjs +8 -4
- package/fesm2022/lucca-front-ng-activity-feed.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-approbation-inbox.mjs +46 -25
- package/fesm2022/lucca-front-ng-approbation-inbox.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-department.mjs +2 -0
- package/fesm2022/lucca-front-ng-core-select-department.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-establishment.mjs +2 -0
- package/fesm2022/lucca-front-ng-core-select-establishment.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-user.mjs +2 -0
- package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select.mjs +6 -6
- package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-date2.mjs +62 -12
- package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-dialog.mjs +3 -2
- package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-filter-pills.mjs +4 -4
- package/fesm2022/lucca-front-ng-form-field.mjs +6 -2
- package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +3 -2
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-highlight-section.mjs +3 -0
- package/fesm2022/lucca-front-ng-highlight-section.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-impersonation.mjs +3 -1
- package/fesm2022/lucca-front-ng-impersonation.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-link.mjs +33 -9
- package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-listing.mjs +17 -7
- package/fesm2022/lucca-front-ng-listing.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-multi-select.mjs +6 -6
- package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-popover2.mjs +2 -2
- package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-priority-level.mjs +128 -0
- package/fesm2022/lucca-front-ng-priority-level.mjs.map +1 -0
- package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs +2 -2
- package/fesm2022/lucca-front-ng-segmented-control.mjs +2 -2
- package/fesm2022/lucca-front-ng-simple-select.mjs +4 -4
- package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-tree-select.mjs +2 -2
- package/fesm2022/lucca-front-ng-tree-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-user.mjs +11 -4
- package/fesm2022/lucca-front-ng-user.mjs.map +1 -1
- package/package.json +11 -8
- package/schematics/lu-button/migration.js +59 -33
- package/src/components/_sidepanel.scss +2 -2
- package/src/components/cdk/_global.scss +4 -0
- package/src/components/cdk/_overlay.scss +1 -1
- package/types/lucca-front-ng-activity-feed.d.ts +13 -9
- package/types/lucca-front-ng-api.d.ts +28 -28
- package/types/lucca-front-ng-approbation-inbox.d.ts +19 -11
- package/types/lucca-front-ng-bubble-icon.d.ts +1 -1
- package/types/lucca-front-ng-callout.d.ts +17 -17
- package/types/lucca-front-ng-chip.d.ts +6 -6
- package/types/lucca-front-ng-clear.d.ts +1 -1
- package/types/lucca-front-ng-color.d.ts +3 -3
- package/types/lucca-front-ng-comment.d.ts +11 -11
- package/types/lucca-front-ng-container.d.ts +1 -1
- package/types/lucca-front-ng-core-select-api.d.ts +7 -7
- package/types/lucca-front-ng-core-select-department.d.ts +7 -5
- package/types/lucca-front-ng-core-select-establishment.d.ts +7 -5
- package/types/lucca-front-ng-core-select-job-qualification.d.ts +2 -2
- package/types/lucca-front-ng-core-select-legal-units.d.ts +3 -3
- package/types/lucca-front-ng-core-select-occupation-category.d.ts +2 -2
- package/types/lucca-front-ng-core-select-user.d.ts +14 -12
- package/types/lucca-front-ng-core-select.d.ts +39 -39
- package/types/lucca-front-ng-core.d.ts +2 -2
- package/types/lucca-front-ng-data-table.d.ts +33 -33
- package/types/lucca-front-ng-date.d.ts +11 -11
- package/types/lucca-front-ng-date2.d.ts +52 -36
- package/types/lucca-front-ng-dialog.d.ts +8 -8
- package/types/lucca-front-ng-divider.d.ts +2 -2
- package/types/lucca-front-ng-dropdown.d.ts +2 -2
- package/types/lucca-front-ng-empty-state.d.ts +20 -20
- package/types/lucca-front-ng-establishment.d.ts +13 -13
- package/types/lucca-front-ng-fancy-box.d.ts +12 -12
- package/types/lucca-front-ng-file-upload.d.ts +13 -13
- package/types/lucca-front-ng-filter-pills.d.ts +17 -17
- package/types/lucca-front-ng-footer.d.ts +1 -1
- package/types/lucca-front-ng-form-field.d.ts +19 -19
- package/types/lucca-front-ng-form-label.d.ts +4 -4
- package/types/lucca-front-ng-form.d.ts +1 -1
- package/types/lucca-front-ng-forms-phone-number-input.d.ts +11 -11
- package/types/lucca-front-ng-forms-rich-text-input.d.ts +11 -11
- package/types/lucca-front-ng-forms.d.ts +50 -50
- package/types/lucca-front-ng-grid.d.ts +23 -23
- package/types/lucca-front-ng-highlight-data.d.ts +5 -5
- package/types/lucca-front-ng-highlight-section.d.ts +6 -3
- package/types/lucca-front-ng-horizontal-navigation.d.ts +4 -4
- package/types/lucca-front-ng-impersonation.d.ts +8 -6
- package/types/lucca-front-ng-index-table.d.ts +18 -18
- package/types/lucca-front-ng-inline-message.d.ts +2 -2
- package/types/lucca-front-ng-link.d.ts +17 -4
- package/types/lucca-front-ng-listbox.d.ts +9 -9
- package/types/lucca-front-ng-listing.d.ts +14 -3
- package/types/lucca-front-ng-loading.d.ts +4 -4
- package/types/lucca-front-ng-main-layout.d.ts +9 -9
- package/types/lucca-front-ng-modal.d.ts +2 -2
- package/types/lucca-front-ng-multi-select.d.ts +20 -20
- package/types/lucca-front-ng-option.d.ts +3 -3
- package/types/lucca-front-ng-page-header.d.ts +2 -2
- package/types/lucca-front-ng-pagination.d.ts +3 -3
- package/types/lucca-front-ng-popover.d.ts +18 -18
- package/types/lucca-front-ng-popover2.d.ts +8 -8
- package/types/lucca-front-ng-popup.d.ts +2 -2
- package/types/{lucca-front-ng-priority-levels.d.ts → lucca-front-ng-priority-level.d.ts} +11 -11
- package/types/lucca-front-ng-progress-bar.d.ts +1 -1
- package/types/lucca-front-ng-progress-stepper.d.ts +2 -2
- package/types/lucca-front-ng-read-more.d.ts +4 -4
- package/types/lucca-front-ng-resource-card.d.ts +3 -3
- package/types/lucca-front-ng-segmented-control-tabs.d.ts +5 -5
- package/types/lucca-front-ng-segmented-control.d.ts +3 -3
- package/types/lucca-front-ng-select.d.ts +9 -9
- package/types/lucca-front-ng-simple-select.d.ts +8 -8
- package/types/lucca-front-ng-software-icon.d.ts +1 -1
- package/types/lucca-front-ng-sortable-list.d.ts +1 -1
- package/types/lucca-front-ng-status-badge.d.ts +1 -1
- package/types/lucca-front-ng-time.d.ts +19 -19
- package/types/lucca-front-ng-toast.d.ts +1 -1
- package/types/lucca-front-ng-tree-select.d.ts +2 -2
- package/types/lucca-front-ng-user-popover.d.ts +1 -1
- package/types/lucca-front-ng-user.d.ts +24 -18
- package/types/lucca-front-ng-vertical-navigation.d.ts +5 -5
- package/fesm2022/lucca-front-ng-priority-levels.mjs +0 -128
- package/fesm2022/lucca-front-ng-priority-levels.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucca-front-ng-date2.mjs","sources":["../../../packages/ng/date2/calendar2/calendar-mode.ts","../../../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/date2.type.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":["export const CALENDAR_MODE = ['day', 'week', 'month', 'year'] as const;\nexport type CalendarMode = (typeof CALENDAR_MODE)[number];\n","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\tpl: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tfromDate: 'from',\n\t\tuntilDate: 'until',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through the dates.',\n\t\tpickDate: 'Select from the calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear this field',\n\t\tweekNumber: 'Week number',\n\t\tweekPrefix: 'W',\n\t},\n\t'nl-BE': {\n\t\tfrom: 'Van',\n\t\tto: 'naar',\n\t\tfromDate: 'vanaf',\n\t\tuntilDate: 'tot',\n\t\tdirectionKeysTip: 'Met de pijltjestoetsen kun je door de datums bladeren.',\n\t\tpickDate: 'Selecteer in de kalender',\n\t\tprevious: 'Vorige',\n\t\tnext: 'Volgende',\n\t\tclear: 'Dit veld leegmaken',\n\t\tweekNumber: 'Weeknummer',\n\t\tweekPrefix: 'S',\n\t},\n\tfr: {\n\t\tfrom: 'Du',\n\t\tto: 'au',\n\t\tfromDate: 'à partir du',\n\t\tuntilDate: 'jusqu’au',\n\t\tdirectionKeysTip: 'Les touches directionnelles servent à parcourir les dates.',\n\t\tpickDate: 'Sélectionner dans le calendrier',\n\t\tprevious: 'Précédent',\n\t\tnext: 'Suivant',\n\t\tclear: 'Vider ce champ',\n\t\tweekNumber: 'Numéro de semaine',\n\t\tweekPrefix: 'S',\n\t},\n\tde: {\n\t\tfrom: 'Von',\n\t\tto: 'am',\n\t\tfromDate: 'ab',\n\t\tuntilDate: 'bis',\n\t\tdirectionKeysTip: 'Mit den Pfeiltasten kann man durch die Daten blättern.',\n\t\tpickDate: 'Im Kalender auswählen',\n\t\tprevious: 'Zurück',\n\t\tnext: 'Weiter',\n\t\tclear: 'Inhalt aus diesem Feld entfernen',\n\t\tweekNumber: 'Wochennummer',\n\t\tweekPrefix: 'S',\n\t},\n\ten: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tfromDate: 'from',\n\t\tuntilDate: 'until',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through the dates.',\n\t\tpickDate: 'Select from the calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear this field',\n\t\tweekNumber: 'Week number',\n\t\tweekPrefix: 'W',\n\t},\n\tes: {\n\t\tfrom: 'Desde',\n\t\tto: 'al',\n\t\tfromDate: 'a partir del',\n\t\tuntilDate: 'hasta el',\n\t\tdirectionKeysTip: 'Las teclas de dirección sirven para desplazarse por las fechas.',\n\t\tpickDate: 'Seleccionar en el calendario',\n\t\tprevious: 'Anterior',\n\t\tnext: 'Siguiente',\n\t\tclear: 'Vaciar este campo',\n\t\tweekNumber: 'Número de semana',\n\t\tweekPrefix: 'S',\n\t},\n\tit: {\n\t\tfrom: 'Dal',\n\t\tto: 'al giorno',\n\t\tfromDate: 'a partire dal',\n\t\tuntilDate: 'Fino a',\n\t\tdirectionKeysTip: 'I tasti direzionali servono a scorrere le date.',\n\t\tpickDate: 'Seleziona dal calendario',\n\t\tprevious: 'Precedente',\n\t\tnext: 'Successiva',\n\t\tclear: 'Vuotare questo campo',\n\t\tweekNumber: 'Numero di settimana',\n\t\tweekPrefix: 'S',\n\t},\n\tnl: {\n\t\tfrom: 'Van',\n\t\tto: 'naar',\n\t\tfromDate: 'vanaf',\n\t\tuntilDate: 'tot',\n\t\tdirectionKeysTip: 'Met de pijltjestoetsen kun je door de datums bladeren.',\n\t\tpickDate: 'Selecteer in de kalender',\n\t\tprevious: 'Vorige',\n\t\tnext: 'Volgende',\n\t\tclear: 'Dit veld leegmaken',\n\t\tweekNumber: 'Weeknummer',\n\t\tweekPrefix: 'S',\n\t},\n\tpt: {\n\t\tfrom: 'De',\n\t\tto: 'no',\n\t\tfromDate: 'a partir de',\n\t\tuntilDate: 'até',\n\t\tdirectionKeysTip: 'As setas servem para percorrer as datas.',\n\t\tpickDate: 'Selecionar no calendário',\n\t\tprevious: 'Anterior',\n\t\tnext: 'Seguinte',\n\t\tclear: 'Esvaziar este campo',\n\t\tweekNumber: 'Número da semana',\n\t\tweekPrefix: 'S',\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\tfromDate: string;\n\tuntilDate: string;\n\tdirectionKeysTip: string;\n\tpickDate: string;\n\tprevious: string;\n\tnext: string;\n\tclear: string;\n\tweekNumber: string;\n\tweekPrefix: string;\n}\n\nexport const luDate2Translations: LuTranslation<Date2Translate> = Translations;\n","import { Directive, inject, input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { ɵeffectWithDeps } from '@lucca-front/ng/core';\n\n@Directive({\n\tselector: '[luRepeatTimes]',\n})\nexport class RepeatTimesDirective {\n\tprivate templateRef = inject<TemplateRef<void>>(TemplateRef);\n\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\treadonly repeatTimes = input<number>(0, { alias: 'luRepeatTimes' });\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.repeatTimes], (times) => {\n\t\t\tthis.viewContainerRef.clear();\n\n\t\t\tfor (let i = 0; i < times; i++) {\n\t\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t\t}\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","/**\n * Available DateComponent Types\n */\n\nexport const DATE2_CLEAR_BEHAVIOR = ['clear', 'reset'] as const;\nexport type Date2ClearBehavior = (typeof DATE2_CLEAR_BEHAVIOR)[number];\n\nexport const DATE_FORMAT_CONST = ['date', 'date-iso'] as const;\n\nexport 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, FirstWeekContainsDate, format, isSameDay, isSameMonth, isSameWeek, isSameYear, parse, startOfDecade, startOfMonth, startOfYear, WeekOptions } from 'date-fns';\nimport { CalendarWeekDay, CalendarWeekInfo } from './calendar.token';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { OpenDateRange, OpenDateRangeInput } from './calendar2/open-date-range';\nimport { DATE_ISO_FORMAT } from './date2.type';\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\nexport function getWeekNumberOptions(weekInfo: CalendarWeekInfo): { weekStartsOn: Day; firstWeekContainsDate: FirstWeekContainsDate } {\n\tconst weekStartsOn = getJSFirstDayOfWeek(weekInfo);\n\t// Monday-start locales follow ISO 8601 numbering (the first week of the year is the one containing January 4th),\n\t// others (like en-US) number the week containing January 1st as week 1.\n\treturn { weekStartsOn, firstWeekContainsDate: weekStartsOn === 1 ? 4 : 1 };\n}\n\nconst modeToComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameDay,\n\tweek: isSameWeek,\n\tmonth: isSameMonth,\n\tyear: isSameYear,\n};\n\nconst modeToCalendarComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameMonth,\n\tweek: isSameWeek,\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\tweek: startOfMonth, // week mode pages by month (the grid shows a full month of weeks)\n\tmonth: startOfYear,\n\tyear: startOfDecade,\n};\n\nexport function comparePeriods(mode: CalendarMode | null, a: Date, b: Date, weekOptions?: WeekOptions): boolean {\n\tif (!mode) return false;\n\tif (mode === 'week') return isSameWeek(a, b, weekOptions);\n\treturn modeToComparator[mode](a, b);\n}\n\nexport function compareCalendarPeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn mode ? modeToCalendarComparator[mode](a, b) : false;\n}\n\nexport function startOfPeriod(mode: CalendarMode | null, date: Date): Date {\n\treturn mode ? modeToPeriodStart[mode](date) : 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: null | undefined): null;\nexport function transformDateInputToDate(value: Date | string): Date;\nexport function transformDateInputToDate(value: Date | string | null): Date | null;\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: null): null;\nexport function transformDateToDateISO(value: Date): string;\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: OpenDateRangeInput | OpenDateRange): value is OpenDateRangeInput {\n\treturn typeof value.start === 'string' || typeof value.end === 'string';\n}\n\nexport function transformDateRangeInputToDateRange(value: OpenDateRange | null | undefined | OpenDateRangeInput): OpenDateRange | 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: value.start ? transformDateInputToDate(value.start) : null,\n\t\tend: value.end ? transformDateInputToDate(value.end) : null,\n\t};\n}\n\n/**\n * Bound a range is anchored on: its start when it has one, its end otherwise. A range open on\n * its start is displayed from its end, the same way an incomplete one is displayed from its start.\n */\nexport function getDateRangeAnchor(range: OpenDateRange | null | undefined): Date | null {\n\treturn range?.start ?? range?.end ?? null;\n}\n\nexport function transformDateRangeToDateRangeInput(value: OpenDateRange): OpenDateRangeInput {\n\treturn {\n\t\t...value,\n\t\tstart: value.start ? transformDateToDateISO(value.start) : null,\n\t\tend: value.end ? transformDateToDateISO(value.end) : null,\n\t};\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { CalendarMode } from './calendar-mode';\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');\nexport const CALENDAR_DISPLAY_MODE = new InjectionToken<Signal<CalendarMode | null>>('Calendar2:DisplayMode');\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport type { Duration } from 'date-fns';\nimport { add, addMonths, addYears, endOfWeek, startOfWeek, sub, subMonths, subYears } from 'date-fns';\nimport { WEEK_INFO } from '../calendar.token';\nimport { comparePeriods, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarMode } from './calendar-mode';\nimport { CALENDAR_DISPLAY_MODE, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\n\nconst modeToDurationKey: Record<CalendarMode, keyof Duration> = {\n\tday: 'days',\n\tweek: 'weeks',\n\tmonth: 'months',\n\tyear: 'years',\n};\n\n@Directive({\n\tselector: '[luCalendar2Cell]',\n\thost: {\n\t\t'[tabindex]': 'tabindex',\n\t\t'(keydown)': 'keydown($event)',\n\t},\n})\nexport class Calendar2CellDirective {\n\t#host = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\treadonly #tabbableDate = inject(CALENDAR_TABBABLE_DATE);\n\treadonly #displayMode = inject(CALENDAR_DISPLAY_MODE);\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\treadonly luCalendar2Cell = input.required<number>();\n\n\treadonly luCalendar2Mode = input.required<CalendarMode>();\n\n\treadonly luCalendar2Date = input.required<Date>();\n\n\tget tabindex(): 0 | -1 {\n\t\treturn this.isTabbableDate() ? 0 : -1;\n\t}\n\n\treadonly isTabbableDate = computed(() => {\n\t\t// In week display mode, day cells share the grid with the week rowheaders: only the cell\n\t\t// whose own mode matches the calendar's display mode can be tabbable, so a tabbable date\n\t\t// never makes both a week rowheader and a day cell tabbable at the same time.\n\t\tif (this.luCalendar2Mode() !== this.#displayMode()) {\n\t\t\treturn false;\n\t\t}\n\t\treturn comparePeriods(this.luCalendar2Mode(), this.luCalendar2Date(), this.#tabbableDate(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) });\n\t});\n\n\tkeydown($event: Event): 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 : this.luCalendar2Mode() === 'week' ? 1 : 3;\n\t\tconst datePropertyToEdit = modeToDurationKey[this.luCalendar2Mode()];\n\t\tswitch (($event as KeyboardEvent).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' || this.luCalendar2Mode() === 'week') {\n\t\t\t\t\tif (($event as KeyboardEvent).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' || this.luCalendar2Mode() === 'week') {\n\t\t\t\t\tif (($event as KeyboardEvent).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 { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, LOCALE_ID, model, OnInit, output, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { intlInputOptions, luBooleanAttribute } 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\tgetWeek,\n\tInterval,\n\tisAfter,\n\tisBefore,\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 { WEEK_INFO } from '../calendar.token';\nimport { LU_DATE2_TRANSLATIONS } from '../date2.translate';\nimport { RepeatTimesDirective } from '../repeat-times.directive';\nimport { comparePeriods, getDateRangeAnchor, getIntlWeekDay, getJSFirstDayOfWeek, getWeekNumberOptions } 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_DISPLAY_MODE, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\nimport { CellStatus } from './cell-status';\nimport { DateRange } from './date-range';\nimport { OpenDateRange } from './open-date-range';\n\nconst MODE_HIERARCHY: Array<CalendarMode | null> = ['day', 'month', 'year', null];\nconst WEEK_MODE_HIERARCHY: Array<CalendarMode | null> = ['week', 'month', 'year', null];\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\t{\n\t\t\tprovide: CALENDAR_DISPLAY_MODE,\n\t\t\tuseFactory: () => inject(Calendar2Component).displayMode,\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\t#weekNumberOptions = getWeekNumberOptions(this.#weekInfo);\n\n\treadonly intl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\treadonly showOverflow = input(false, { transform: luBooleanAttribute });\n\n\treadonly enableOverflow = input(false, { transform: luBooleanAttribute });\n\n\treadonly removeYearOverflow = input(false, { transform: luBooleanAttribute });\n\n\treadonly hideToday = input(false, { transform: luBooleanAttribute });\n\n\treadonly hasTodayButton = input(false, { transform: luBooleanAttribute });\n\n\treadonly hideWeekend = input(false, { transform: luBooleanAttribute });\n\n\treadonly disableModeChange = input(false, { transform: luBooleanAttribute });\n\n\t// Date used to init the component and as internal focus model\n\treadonly date = model.required<Date>();\n\n\treadonly tabbableDate = model<Date | null>(null);\n\n\treadonly mode = model<CalendarMode>('day');\n\n\treadonly displayMode = model<CalendarMode | null>(null);\n\n\treadonly ranges = input<readonly DateRange[]>([]);\n\n\treadonly getCellInfo = input<(date: Date, displayMode: CalendarMode | null) => CellStatus>((_date: Date) => ({\n\t\tclasses: [],\n\t\tdisabled: false,\n\t}));\n\n\treadonly month = computed(() => startOfMonth(this.date()));\n\n\treadonly year = computed(() => startOfYear(this.date()));\n\n\treadonly decade = computed(() => startOfDecade(this.date()));\n\n\treadonly previousMonth = computed(() => subMonths(this.month(), 1));\n\n\treadonly nextMonth = computed(() => addMonths(this.month(), 1));\n\n\treadonly nextPage = output();\n\n\treadonly previousPage = output();\n\n\tdateClicked = output<Date>();\n\n\treadonly dateHovered = 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\treadonly calendar2CellInstances = 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\treadonly monthGridDisplay = 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\treadonly yearGridDisplay = 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\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};\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\treadonly decadeGridDisplay = 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\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\treadonly currentMonthLabel = computed(() => {\n\t\treturn this.#intlDateFormat.format(this.date());\n\t});\n\n\treadonly currentYearLabel = computed(() => {\n\t\treturn this.#intlDateYear.format(this.date());\n\t});\n\n\treadonly currentDecadeLabel = 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\tconst emittedDate = this.mode() === 'week' ? startOfWeek(date, this.#weekOptions) : date;\n\t\t\tthis.dateClicked.emit(emittedDate);\n\t\t} else {\n\t\t\t// Check that we are able to zoom in\n\t\t\tconst hierarchy = this.mode() === 'week' ? WEEK_MODE_HIERARCHY : MODE_HIERARCHY;\n\t\t\tconst maxZoomLevel = hierarchy.indexOf(this.mode());\n\t\t\tconst currentZoomLevel = 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 = 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 'week':\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' || this.displayMode() === 'week';\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 && rangeInfo && isSameDay(startOfMonth(date), rangeInfo.anchor);\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\n\t\tlet isCurrent: boolean;\n\t\tif (this.displayMode() == 'week') {\n\t\t\tisCurrent = comparePeriods('day', new Date(), date, this.#weekOptions) && !this.hideToday();\n\t\t} else {\n\t\t\tisCurrent = comparePeriods(this.displayMode(), new Date(), date, this.#weekOptions) && !this.hideToday();\n\t\t}\n\n\t\t// A range with a single bound is either being created (one date selected, the other one is\n\t\t// being hovered) or open on one side\n\t\tconst isOpenRange = !!rangeInfo?.range && !(rangeInfo.range.start && rangeInfo.range.end);\n\n\t\t// Are we currently in a range that's being created (one date selected, the other one is being hovered)\n\t\tconst isInProgress = isOpenRange && this.dateHovered() !== null;\n\n\t\t// Open range with nothing hovered: it spans every period from its start onwards (start only)\n\t\t// or every period up to its end (end only)\n\t\tconst isInIdleOpenRange = isOpenRange && this.dateHovered() === null;\n\t\tconst isIdleOpenRangeBound = isInIdleOpenRange && comparePeriods(this.displayMode(), date, rangeInfo.anchor, this.#weekOptions);\n\n\t\t// Progress flags\n\t\tlet isProgressBody = isInIdleOpenRange;\n\t\tlet isProgressStart = isIdleOpenRangeBound && !isOverflow && !!rangeInfo.range.start;\n\t\tlet isProgressEnd = isIdleOpenRangeBound && !isOverflow && !rangeInfo.range.start;\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 && rangeInfo) {\n\t\t\tlet start = rangeInfo.anchor;\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.anchor) : startOfDay(rangeInfo.anchor);\n\t\t\t}\n\t\t\tconst hoveredRange: Interval = {\n\t\t\t\tstart,\n\t\t\t\tend: startOfDay(this.dateHovered() ?? 0),\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.anchor;\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, this.#weekOptions);\n\t\t\tisProgressEnd = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.end as Date, this.#weekOptions);\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.anchor, this.dateHovered() ?? 0)) {\n\t\t\t\tisSingleDayInProgress = !isOverflow && isSameDay(hoveredRange.start, hoveredRange.end) && isSameDay(hoveredRange.start, this.dateHovered() ?? 0);\n\t\t\t}\n\t\t}\n\n\t\t// In an open range, only the known bound is actually selected, the other periods are just highlighted\n\t\tconst isSelected = status.selected || (!!rangeInfo?.range && !isInProgress && (!isInIdleOpenRange || isIdleOpenRangeBound));\n\n\t\treturn {\n\t\t\tday: date.getDate(),\n\t\t\tweek: getWeek(date, this.#weekNumberOptions),\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': Boolean(!isOverflow && (rangeInfo?.isStart || status.selected) && !isInProgress),\n\t\t\t\t'is-end': Boolean((this.displayMode() === 'week' || !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\t// The week rowheader must not inherit the overflow status of the week's first cell:\n\t// a week containing days of the displayed month stays selectable even when its first\n\t// days belong to the previous month and overflow is disabled or hidden.\n\tgetWeekHeaderCell(week: CalendarCellInfo[]): CalendarCellInfo {\n\t\treturn week.find((day) => !day.isOverflow) ?? week[0];\n\t}\n\n\tgetWeekRowClasses(week: CalendarCellInfo[]): Record<string, boolean> {\n\t\tconst header = this.getWeekHeaderCell(week);\n\t\treturn {\n\t\t\t'is-selected': header?.isSelected ?? false,\n\t\t\t'is-start': header?.classes['is-start'] ?? false,\n\t\t};\n\t}\n\n\tgetWeekDayCellClasses(day: CalendarCellInfo, isLastDay: boolean): Record<string, boolean> {\n\t\tconst { 'is-start': _start, 'is-end': isEnd, ...rest } = day.classes;\n\t\treturn isLastDay ? { ...rest, 'is-end': isEnd } : rest;\n\t}\n\n\tgetRangeInfo(date: Date, scope: CalendarMode | null, isOverflow = false) {\n\t\t// Ranges given by the date range input can be open on one side, even if the public input type does not say so yet\n\t\tconst ranges: readonly OpenDateRange[] = this.ranges();\n\t\tconst range: OpenDateRange | undefined = ranges.find((range) => {\n\t\t\tconst isSameScope = (range.scope || 'day') === scope;\n\t\t\tif (isSameScope) {\n\t\t\t\tif (range.start && 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}\n\t\t\t\t// Only one bound is known, either because the range is still being built or because\n\t\t\t\t// it is open on one side. The other bound follows the hovered date.\n\t\t\t\tconst anchor = getDateRangeAnchor(range);\n\t\t\t\tif (!anchor) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this.dateHovered() !== null) {\n\t\t\t\t\t// Nominal case: the hovered date is after the known bound\n\t\t\t\t\tif (isAfter(this.dateHovered() ?? 0, startOfDay(anchor))) {\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(anchor),\n\t\t\t\t\t\t\tend: endOfDay(this.dateHovered() ?? 0),\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() ?? 0),\n\t\t\t\t\t\t\tend: endOfDay(anchor),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Open range with nothing hovered: every period from the start onwards (start only)\n\t\t\t\t\t// or up to the end (end only) is in range\n\t\t\t\t\tconst isInAnchorPeriod = comparePeriods(this.mode(), date, anchor, this.#weekOptions);\n\t\t\t\t\treturn isInAnchorPeriod || (range.start ? isAfter(date, anchor) : isBefore(date, anchor));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tconst anchor = getDateRangeAnchor(range);\n\t\tif (!range || !anchor) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isStart: boolean = Boolean(range.start && isSameDay(date, range.start));\n\t\tconst isEnd: boolean = Boolean(range.end && isSameDay(date, range.end));\n\n\t\treturn {\n\t\t\trange,\n\t\t\tanchor,\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 (\"week\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-week-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-week-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<th scope=\"col\" class=\"calendar-table-head-row-cell\">\n\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ intl().weekNumber }}</span>\n\t\t\t\t\t\t</th>\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@let weekHeader = getWeekHeaderCell(week);\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\" (click)=\"!weekHeader.disabled ? onCellClicked(weekHeader.date) : null\">\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tscope=\"row\"\n\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t[class]=\"getWeekRowClasses(week)\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"weekHeader.isSelected || null\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\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[luCalendar2Cell]=\"0\"\n\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"weekHeader.date\"\n\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"week\"\n\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"weekHeader.disabled ? 'true' : null\"\n\t\t\t\t\t\t\t\t\t(keydown.space)=\"!weekHeader.disabled ? onCellClicked(weekHeader.date) : null\"\n\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(weekHeader.date)\"\n\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span class=\"calendar-table-body-row-cell-action-week\">{{ weekHeader.week }}</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t@for (day of week; track dayIndex; let dayIndex = $index; let isLastDay = $last) {\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[class]=\"getWeekDayCellClasses(day, isLastDay)\"\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 mod-week\"\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\ttabindex=\"-1\"\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","import { capitalize } from '@lucca-front/ng/core';\nimport { differenceInCalendarDays } from 'date-fns';\nimport { CalendarMode } from './public-api';\n\nexport function getDateFormat(locale: string, mode: CalendarMode = 'day'): string {\n\treturn new Intl.DateTimeFormat(locale)\n\t\t.formatToParts(new Date('01/01/2024'))\n\t\t.reduce((acc, part) => {\n\t\t\tif (part.type === 'day' && (mode === 'day' || mode === 'week')) {\n\t\t\t\treturn `${acc}${'d'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'month' && mode !== 'year') {\n\t\t\t\treturn `${acc}${'M'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'year') {\n\t\t\t\treturn `${acc}${'y'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'literal') {\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, '')\n\t\t.replace(/^\\/+/, '');\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: CalendarMode = 'day', weekPrefix: string = 'W'): 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' || period === 'week') {\n\t\tintlConfig.month = 'numeric';\n\t}\n\n\tif (period === 'day' || period === 'week') {\n\t\tintlConfig.day = 'numeric';\n\t}\n\n\tconst intlDateFormat = new Intl.DateTimeFormat(locale, intlConfig);\n\tlet separator: string = '';\n\tconst format = intlDateFormat.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\tseparator = part.value;\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n\n\tif (period === 'week') {\n\t\treturn `${weekPrefix}${separator}${letterLocalizedForYear.repeat(4)}`;\n\t}\n\n\treturn format;\n}\n\nexport function humanizeDate(locale: string, date: Date, mode: CalendarMode = 'day', reference: Date = new Date()): string | null {\n\tif (isNaN(date.getTime())) {\n\t\treturn null;\n\t}\n\n\tswitch (mode) {\n\t\tcase 'day': {\n\t\t\tconst differenceInDays = differenceInCalendarDays(date, reference);\n\t\t\tif (Math.abs(differenceInDays) > 1) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn capitalize(new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(differenceInDays, 'day'));\n\t\t}\n\t\tcase 'month':\n\t\t\treturn capitalize(new Intl.DateTimeFormat(locale, { month: 'short', year: 'numeric' }).format(date));\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, linkedSignal, LOCALE_ID, output, signal } from '@angular/core';\nimport { intlInputOptions, isNotNil, luBooleanAttribute, luNullableBooleanAttribute } from '@lucca-front/ng/core';\nimport { addMonths, addYears, FirstWeekContainsDateOptions, isAfter, isBefore, isSameMonth, startOfDay, startOfMonth, startOfWeek, WeekOptions } from 'date-fns';\nimport { WEEK_INFO } from './calendar.token';\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 { LU_DATE2_TRANSLATIONS } from './date2.translate';\nimport { Date2ClearBehavior, DATE_FORMAT, DateFormat } from './date2.type';\nimport { getJSFirstDayOfWeek, transformDateInputToDate, transformDateRangeInputToDateRange } from './utils';\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AbstractDateComponent {\n\tprotected locale = inject(LOCALE_ID);\n\t#weekInfo = inject(WEEK_INFO);\n\n\tprotected get weekOptions(): WeekOptions & FirstWeekContainsDateOptions {\n\t\treturn { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo), firstWeekContainsDate: 4 };\n\t}\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\tprotected readonly dateFormatWithMode = computed(() => getDateFormat(this.locale, this.mode()));\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\treadonly intl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\tonTouched?: () => void;\n\treadonly disabled = signal<boolean>(false);\n\n\treadonly format = input<DateFormat>(DATE_FORMAT.DATE);\n\tprotected readonly inDateISOFormat = computed(() => this.format() === DATE_FORMAT.DATE_ISO);\n\n\treadonly ranges = input([], {\n\t\ttransform: (v: readonly DateRange[] | readonly DateRangeInput[]) => v.map(transformDateRangeInputToDateRange).filter((range): range is DateRange => range !== null),\n\t});\n\treadonly hideToday = input(false, { transform: luBooleanAttribute });\n\treadonly hasTodayButton = input(false, { transform: luBooleanAttribute });\n\treadonly clearable = input(null, { transform: luNullableBooleanAttribute });\n\treadonly clearBehavior = input<Date2ClearBehavior>('clear');\n\treadonly hideWeekend = input(false, { transform: luBooleanAttribute });\n\n\treadonly mode = input<CalendarMode>('day');\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\treadonly calendarModeInput = input<CalendarMode | null>(null, { alias: 'calendarMode' });\n\treadonly calendarMode = linkedSignal<CalendarMode>(() => this.calendarModeInput() ?? this.mode());\n\n\treadonly calendarModeChange = output<CalendarMode>();\n\n\treadonly panelOpened = output<void>();\n\n\treadonly panelClosed = output<void>();\n\n\treadonly dateFormatLocalized = computed(() => getLocalizedDateFormat(this.locale, this.mode(), this.intl().weekPrefix));\n\n\tprotected readonly currentDate = signal(new Date());\n\n\tprotected readonly tabbableDate = signal<Date | null>(null);\n\n\tprotected changeCalendarMode(calendarMode: CalendarMode | null): void {\n\t\tif (calendarMode && calendarMode !== this.calendarMode()) {\n\t\t\tthis.calendarMode.set(calendarMode);\n\t\t\tthis.calendarModeChange.emit(calendarMode);\n\t\t}\n\t}\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\tconst min = this.min();\n\t\tif (!min) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfDay(min).getTime() <= startOfDay(date).getTime();\n\t\t\tcase 'week':\n\t\t\t\t// In week mode the emitted value is the start of the week, so min applies to it\n\t\t\t\treturn startOfWeek(date, this.weekOptions).getTime() >= min.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isBefore(startOfMonth(min), startOfMonth(date)) || isSameMonth(min, date);\n\t\t\tcase 'year':\n\t\t\t\treturn 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\tconst max = this.max();\n\t\tif (max) {\n\t\t\tswitch (mode) {\n\t\t\t\tcase 'day':\n\t\t\t\t\treturn startOfDay(max).getTime() >= startOfDay(date).getTime();\n\t\t\t\tcase 'week':\n\t\t\t\t\t// In week mode the emitted value is the start of the week, so max applies to it\n\t\t\t\t\treturn startOfWeek(date, this.weekOptions).getTime() <= max.getTime();\n\t\t\t\tcase 'month':\n\t\t\t\t\treturn isAfter(startOfMonth(max), startOfMonth(date)) || isSameMonth(max, date);\n\t\t\t\tcase 'year':\n\t\t\t\t\treturn max.getFullYear() >= date.getFullYear();\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tisValidDate(date: Date | null | undefined): date is Date {\n\t\treturn isNotNil(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() ?? 0, 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() ?? 0, direction));\n\t\t\t\tbreak;\n\t\t\tcase 'week':\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() ?? 0, 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\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\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, isNotNil, luBooleanAttribute, LuClass, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';\nimport { InputDirective, PresentationDisplayDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { addDays, getWeek, parse, setDay, setWeek, startOfDay, startOfWeek } 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 { humanizeDate } from '../date-format';\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, PresentationDisplayDirective],\n\ttemplateUrl: './date-input.component.html',\n\tstyleUrl: './date-input.component.scss',\n\thost: {\n\t\tclass: 'dateField',\n\t\t'[class.mod-filterPill]': 'isFilterPill',\n\t\t'[class.mod-auto]': 'isWidthAuto',\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\tngControl: NgControl; // Initialized in ngOnInit\n\tweekParsingRegexp = /(\\d{1,2})\\D*(\\d{4})?/;\n\n\t// CVA stuff\n\t#onChange?: (value: Date | null) => void;\n\n\t#luClass = inject(LuClass);\n\n\treadonly autocomplete = input<AutoFill>('off');\n\n\treadonly placeholder = input<string>();\n\n\treadonly disableOverflow = input(false, { transform: luBooleanAttribute });\n\treadonly hideOverflow = input(false, { transform: luBooleanAttribute });\n\treadonly widthAuto = input(false, { transform: luBooleanAttribute });\n\n\treadonly humanized = input(false, { transform: luBooleanAttribute });\n\n\treadonly filterPillDisabled = 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\treadonly inputFocused = signal(false);\n\n\treadonly panelOpen = signal(false);\n\n\treadonly selectedDate = signal<Date | null>(null);\n\n\treadonly initialValue = signal<Date | null | undefined>(undefined);\n\treadonly dateFromWriteValue = signal<Date | null>(null);\n\n\treadonly calendar = viewChild(Calendar2Component);\n\n\treadonly inputRef = viewChild<ElementRef<HTMLInputElement>>('date');\n\n\treadonly formattedValue = computed(() => {\n\t\tconst textInput = this.userTextInput();\n\t\tif (textInput !== 'ɵ') {\n\t\t\tconst parsedInput = this.parseValue(textInput);\n\t\t\tif (this.isValidDate(parsedInput) && this.inputFocused()) {\n\t\t\t\treturn textInput;\n\t\t\t}\n\t\t}\n\t\tconst selectedDate = this.selectedDate();\n\t\tif (selectedDate && this.isValidDate(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 'week':\n\t\t\t\t\treturn `${this.intl().weekPrefix}${getWeek(selectedDate, this.weekOptions)}/${selectedDate.getFullYear()}`;\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(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\treadonly displayValue = computed(() => {\n\t\tconst selectedDate = this.selectedDate();\n\t\tif (this.humanized() && !this.inputFocused() && !this.panelOpen() && this.isValidDate(selectedDate)) {\n\t\t\tconst humanizedDate = humanizeDate(this.locale, selectedDate, this.mode());\n\t\t\tif (humanizedDate) {\n\t\t\t\treturn humanizedDate;\n\t\t\t}\n\t\t}\n\t\treturn this.formattedValue();\n\t});\n\n\t// We need to use a \"magic key\" here to avoid sending a null value change on initialization\n\treadonly userTextInput = signal<string>('ɵ');\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\tconst selectedDate = this.selectedDate();\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: isNotNil(selectedDate) && this.calendarMode() === mode && comparePeriods(mode, date, selectedDate, this.weekOptions),\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\treadonly previousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\treadonly nextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\tisFilterPill = false;\n\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\treadonly isFilterPillEmpty = computed(() => !this.selectedDate());\n\treadonly isFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\treadonly #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 || undefined);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\teffect(() => {\n\t\t\tconst nativeElement = this.inputRef()?.nativeElement;\n\t\t\tif (nativeElement) {\n\t\t\t\tconst cursorPositionBefore = nativeElement.selectionStart ?? 0;\n\t\t\t\tconst displayValue = this.displayValue();\n\t\t\t\tnativeElement.value = this.displayValue();\n\t\t\t\tif (displayValue.endsWith(this.separator)) {\n\t\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore + 1, cursorPositionBefore + 1);\n\t\t\t\t} else {\n\t\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore, cursorPositionBefore);\n\t\t\t\t}\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\tconst parsed: Date | null = this.parseValue(inputValue);\n\t\t\t\tif (parsed instanceof Date && parsed.getFullYear() > 999) {\n\t\t\t\t\tconst normalized = this.#normalizeDate(parsed);\n\t\t\t\t\tthis.selectedDate.set(normalized);\n\t\t\t\t\tthis.currentDate.set(normalized);\n\t\t\t\t\tthis.tabbableDate.set(normalized);\n\t\t\t\t} else if (!this.isFilterPill) {\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(this.selectedDate());\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-week': this.mode() === 'week',\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 && !comparePeriods(calendarMode, tabbableDate, this.currentDate(), this.weekOptions)) {\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\tafterNextRender(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t\t},\n\t\t\t\t\t{ injector: this.#injector },\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tparseValue(inputValue: string): Date | null {\n\t\tif (this.mode() === 'week') {\n\t\t\tlet parsed: Date | null = startOfDay(new Date());\n\t\t\tconst regexpResult = this.weekParsingRegexp.exec(inputValue);\n\t\t\tif (regexpResult) {\n\t\t\t\t// If we have a year, use it, otherwise use current year\n\t\t\t\tif (regexpResult[2]) {\n\t\t\t\t\tparsed.setFullYear(+regexpResult[2]);\n\t\t\t\t}\n\t\t\t\tparsed = setWeek(parsed, +regexpResult[1], this.weekOptions);\n\t\t\t\tparsed = setDay(parsed, 3);\n\t\t\t\treturn parsed;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} else {\n\t\t\ttry {\n\t\t\t\treturn parse(inputValue, this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t\t} catch {\n\t\t\t\t/* not a correct date */\n\t\t\t\treturn null;\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// The value is a Date in every mode, but two dates are \"the same value\" only if they belong\n\t// to the same period for the current mode (same week in week mode, same day in day mode, etc.)\n\t#safeCompareDate(a: Date | null, b: Date | null): boolean {\n\t\treturn a === b || (!!a && !!b && comparePeriods(this.mode(), a, b, this.weekOptions));\n\t}\n\n\t// The emitted value is always the start of the period matching the current mode:\n\t// start of day, or start of week in week mode.\n\t#normalizeDate(date: Date): Date {\n\t\treturn this.mode() === 'week' ? addDays(startOfWeek(date, this.weekOptions), 3) : startOfDay(date);\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\t\t\tafterNextRender(\n\t\t\t\t() => {\n\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t},\n\t\t\t\t{ injector: this.#injector },\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 (isNil(control.value)) {\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.formattedValue(), this.dateFormatWithMode(), 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\t\tconst normalized = isNotNil(_date) ? this.#normalizeDate(_date) : null;\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(normalized);\n\t\t}\n\n\t\tif (isNotNil(date) && isNotNil(normalized)) {\n\t\t\tthis.dateFromWriteValue.set(normalized);\n\t\t\tthis.selectedDate.set(normalized);\n\t\t\tthis.currentDate.set(normalized);\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) : 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\tconst normalized = this.#normalizeDate(date);\n\t\tthis.selectedDate.set(normalized);\n\t\tthis.currentDate.set(normalized);\n\t\tthis.tabbableDate.set(normalized);\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=\"dialog\"\n\t\t\t[attr.aria-expanded]=\"popoverRef.opened()\"\n\t\t\t[attr.aria-controls]=\"popoverRef.ariaControls\"\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\tdata-testid=\"lu-date-input\"\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)=\"panelOpen.set(false); panelClosed.emit()\"\n\t\t\t\t(luPopoverOpened)=\"panelOpen.set(true); 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\taria-hidden=\"true\"\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\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"intl().pickDate\">\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(displayModeChange)=\"changeCalendarMode($event)\"\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\n<ng-container *luPresentationDisplay>{{ displayValue() }}</ng-container>\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\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tSignal,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, FormsModule, 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, isNotNil, luBooleanAttribute, LuClass, PortalContent, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';\nimport { FORM_FIELD_INSTANCE, InputDirective, ɵPresentationDisplayDefaultDirective } 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 { OpenDateRange } from '../calendar2/open-date-range';\nimport { compareCalendarPeriods, getDateRangeAnchor, 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: [\n\t\tPopoverDirective,\n\t\tCalendar2Component,\n\t\tIconComponent,\n\t\tInputDirective,\n\t\tLayoutModule,\n\t\tPortalDirective,\n\t\tNgTemplateOutlet,\n\t\tFilterPillDisplayerDirective,\n\t\tClearComponent,\n\t\tɵPresentationDisplayDefaultDirective,\n\t\tFormsModule,\n\t],\n\ttemplateUrl: './date-range-input.component.html',\n\tstyleUrl: './date-range-input.component.scss',\n\thost: {\n\t\tclass: 'dateRangeField',\n\t\t'[class.mod-filterPill]': 'isFilterPill',\n\t\t'[class.mod-auto]': 'isWidthAuto',\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\treadonly hasTwoCalendars = toSignal(this.#breakpointObserver.observe('(min-width: 40em)').pipe(map((state) => state.matches)));\n\n\tidSuffix = nextId++;\n\n\treadonly startTextInputRef = viewChild<ElementRef<HTMLInputElement>>('start');\n\treadonly startUserTextInput = signal('ɵ');\n\n\treadonly endTextInputRef = viewChild<ElementRef<HTMLInputElement>>('end');\n\treadonly endUserTextInput = signal('ɵ');\n\n\t// CVA stuff\n\t#onChange?: (value: OpenDateRange | null) => void;\n\n\treadonly initialValue = signal<OpenDateRange | null | undefined>(undefined);\n\treadonly selectedRange = signal<OpenDateRange | null>(null);\n\n\treadonly dateHovered = signal<Date | null>(null);\n\n\treadonly placeholder = input<string>();\n\n\treadonly widthAuto = input(false, { transform: luBooleanAttribute });\n\n\treadonly label: Signal<PortalContent | undefined> = signal('');\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\treadonly inputFocused = signal(false);\n\n\treadonly editedField = signal<-1 | 0 | 1>(-1);\n\n\treadonly highlightedField = signal<-1 | 0 | 1>(-1);\n\n\treadonly shortcuts = input<readonly CalendarShortcut[]>();\n\n\treadonly autocomplete = input<AutoFill>('off');\n\n\tprotected readonly currentRightDate = computed(() => {\n\t\treturn this.hasTwoCalendars() ? this.getNextCalendarDate(this.currentDate()) : this.currentDate();\n\t});\n\n\tprotected readonly currentStartDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\tcase 'week':\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 readonly currentEndDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\tcase 'week':\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\treadonly calendars = 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\treadonly calendarRanges = computed(() => {\n\t\tconst selectedRange = this.selectedRange();\n\t\tif (selectedRange) {\n\t\t\t// The calendar handles ranges open on one side, but its public input type still requires a start date\n\t\t\treturn [selectedRange as DateRange, ...this.ranges()];\n\t\t}\n\t\treturn this.ranges();\n\t});\n\n\treadonly startLabel = computed(() => {\n\t\tconst inputValue = this.startUserTextInput();\n\t\tif (inputValue !== 'ɵ') {\n\t\t\treturn inputValue;\n\t\t}\n\t\tconst range = this.selectedRange();\n\t\tif (range?.start && this.isValidDate(range.start)) {\n\t\t\treturn this.getDateLabelForInput(range.start);\n\t\t}\n\t\treturn '';\n\t});\n\n\treadonly endLabel = computed(() => {\n\t\tconst inputValue = this.endUserTextInput();\n\t\tif (inputValue !== 'ɵ') {\n\t\t\treturn inputValue;\n\t\t}\n\t\tconst range = this.selectedRange();\n\t\tif (range?.end && this.isValidDate(range.end)) {\n\t\t\treturn this.getDateLabelForInput(range.end);\n\t\t}\n\t\treturn '';\n\t});\n\n\treadonly previousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\treadonly nextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t// Which calendar is currently being focused in, used for tabbable date logic\n\treadonly focusedCalendarIndex = signal(0);\n\n\treadonly focusedCalendar = computed(() => this.calendars()[this.focusedCalendarIndex()]);\n\n\tisFilterPill = false;\n\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\treadonly isFilterPillEmpty = computed(() => this.selectedRange() === null);\n\n\t/**\n\t * The field of the missing bound when a single date is selected, null otherwise.\n\t * In filter pill mode, the popover initially focuses it, so the next picked date completes the range instead of replacing the selected one\n\t */\n\tprotected readonly missingBoundField = computed<0 | 1 | null>(() => {\n\t\tconst range = this.selectedRange();\n\t\tif (range?.start && !range.end) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (range?.end && !range.start) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn null;\n\t});\n\treadonly isFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\treadonly #defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\treadonly filterPillDisabled = signal(false);\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement ?? undefined);\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 = computed(() => 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\tafterNextRender(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t\t},\n\t\t\t\t\t{ injector: this.#injector },\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\tcase 'week':\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.startUserTextInput.set('ɵ');\n\t\tthis.endUserTextInput.set('ɵ');\n\t\tthis.highlightedField.set(-1);\n\t\tthis.fixOrderIfNeeded();\n\t}\n\n\tfixOrderIfNeeded(): void {\n\t\tconst range = this.selectedRange();\n\t\tif (range?.start && range.end && isAfter(range.start, range.end)) {\n\t\t\tconst swappedRange = {\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.selectedRange.set(swappedRange);\n\t\t\tthis.#onChange?.(swappedRange);\n\t\t}\n\t}\n\n\ttabbableDateChange(date: Date | null, 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\tafterNextRender(\n\t\t\t() => {\n\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\tconst selectedRange = this.selectedRange();\n\t\t\t\tif (propertyToFocus && selectedRange && selectedRange[propertyToFocus]) {\n\t\t\t\t\t// Specific case: if range is on a single month, focus on it on left calendar\n\t\t\t\t\t// Same goes for focus on start date, we want it on left panel\n\t\t\t\t\tif (propertyToFocus === 'start' || (selectedRange.start && selectedRange.end && compareCalendarPeriods(this.mode(), selectedRange.start, selectedRange.end))) {\n\t\t\t\t\t\tthis.currentDate.set(selectedRange[propertyToFocus]);\n\t\t\t\t\t\tthis.tabbableDate.set(selectedRange[propertyToFocus]);\n\t\t\t\t\t} else {\n\t\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\t\tconst leftPanelFocus = selectedRange.end;\n\t\t\t\t\t\tif (leftPanelFocus) {\n\t\t\t\t\t\t\tthis.currentDate.set(leftPanelFocus);\n\t\t\t\t\t\t\tthis.tabbableDate.set(leftPanelFocus);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (focusTabbableDate) {\n\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ injector: this.#injector },\n\t\t);\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tconst selectedRange = this.selectedRange();\n\t\t// The clicked date always fills the field being edited, so picking a date while the end\n\t\t// field is focused builds a range without start date\n\t\tconst isEditingEnd = this.editedField() === 1;\n\t\t// The user picked the end date first and is now picking the start date\n\t\tconst isCompletingFromEnd = !isEditingEnd && !!selectedRange?.end && !selectedRange.start;\n\t\tlet newRange: OpenDateRange;\n\n\t\tif (isEditingEnd) {\n\t\t\t// If end is before start, invert them\n\t\t\tnewRange =\n\t\t\t\tselectedRange?.start && isBefore(date, selectedRange.start)\n\t\t\t\t\t? { ...selectedRange, scope: this.mode(), start: date, end: selectedRange.start }\n\t\t\t\t\t: { ...selectedRange, scope: this.mode(), end: date };\n\t\t} else if (isCompletingFromEnd && selectedRange?.end) {\n\t\t\t// If start is after end, invert them, the same way as when the start date is picked first\n\t\t\tnewRange = isAfter(date, selectedRange.end) ? { ...selectedRange, scope: this.mode(), start: selectedRange.end, end: date } : { ...selectedRange, scope: this.mode(), start: date };\n\t\t} else {\n\t\t\t// If start is after end, start a new range from it\n\t\t\tnewRange = selectedRange?.end && isAfter(date, selectedRange.end) ? { scope: this.mode(), start: date } : { ...selectedRange, scope: this.mode(), start: date };\n\t\t}\n\n\t\tthis.selectedRange.set(newRange);\n\n\t\tif ((isEditingEnd && newRange.start) || isCompletingFromEnd) {\n\t\t\t// Both bounds are set, the user is done picking\n\t\t\tpopoverRef?.close();\n\t\t\tthis.filterPillPopoverCloseFn?.();\n\t\t\t(isEditingEnd ? this.endTextInputRef() : this.startTextInputRef())?.nativeElement.focus();\n\t\t\tthis.editedField.set(-1);\n\t\t\tthis.dateHovered.set(null);\n\t\t} else {\n\t\t\t// Move on to the bound that is still missing\n\t\t\tthis.editedField.set(isEditingEnd ? 0 : 1);\n\t\t\tthis.highlightedField.set(isEditingEnd ? 0 : 1);\n\t\t}\n\n\t\tthis.#onChange?.(newRange);\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 (isNil(this.initialValue())) {\n\t\t\tthis.selectedRange.set(this.clearBehavior() === 'reset' ? (this.initialValue() ?? null) : _dateRange);\n\t\t}\n\n\t\tif (isNotNil(dateRange)) {\n\t\t\tthis.selectedRange.set(_dateRange);\n\t\t\tconst calendarAnchor = getDateRangeAnchor(_dateRange) ?? new Date();\n\t\t\tthis.currentDate.set(startOfDay(calendarAnchor));\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: DateRange | DateRangeInput | null) => void): void {\n\t\tthis.#onChange = (dateRange: OpenDateRange | null) => {\n\t\t\tconst value = dateRange && this.inDateISOFormat() ? transformDateRangeToDateRangeInput(dateRange) : dateRange;\n\t\t\t// The emitted range can be open on one side, but the public type still requires a start date\n\t\t\tfn(value as DateRange | DateRangeInput | null);\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) : 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\tif (!date?.getTime()) {\n\t\t\treturn '';\n\t\t}\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.intlDateTimeFormat.format(date);\n\t\t\tcase 'week':\n\t\t\t\t// TODO\n\t\t\t\treturn date.toString();\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\tswitch (rangeProperty) {\n\t\t\tcase 'start':\n\t\t\t\tthis.startUserTextInput.set(inputValue);\n\t\t\t\tbreak;\n\t\t\tcase 'end':\n\t\t\t\tthis.endUserTextInput.set(inputValue);\n\t\t\t\tbreak;\n\t\t}\n\t\tlet currentRange: OpenDateRange = this.selectedRange() || {};\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@if (label(); as label) {\n\t\t\t\t<ng-container *luPortal=\"label\" />\n\t\t\t}\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[ngModel]=\"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=\"dialog\"\n\t\t\t\t\t[attr.aria-expanded]=\"popoverRef.opened()\"\n\t\t\t\t\t[attr.aria-controls]=\"popoverRef.ariaControls\"\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[attr.cdkFocusInitial]=\"isFilterPill && missingBoundField() === 0 ? '' : null\"\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]=\"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-end-{{ 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[ngModel]=\"endLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(end.value, 'end')\"\n\t\t\t\t\t(blur)=\"inputBlur()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(1); highlightedField.set(1)\"\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t[attr.aria-expanded]=\"popoverRef.opened()\"\n\t\t\t\t\t[attr.aria-controls]=\"popoverRef.ariaControls\"\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[attr.cdkFocusInitial]=\"isFilterPill && missingBoundField() === 1 ? '' : null\"\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]=\"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\taria-hidden=\"true\"\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\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"intl().pickDate\">\n\t\t@if ((shortcuts()?.length ?? 0) > 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@if (startLabel() && endLabel()) {\n\t\t\t<span class=\"pr-u-mask\">{{ intl().from }}</span>\n\t\t\t{{ startLabel() }}\n\t\t\t<lu-icon [icon]=\"'arrowRight'\" size=\"XS\" [alt]=\"intl().to\" />\n\t\t\t{{ endLabel() }}\n\t\t} @else if (startLabel()) {\n\t\t\t{{ intl().fromDate }} {{ startLabel() }}\n\t\t} @else if (endLabel()) {\n\t\t\t{{ intl().untilDate }} {{ endLabel() }}\n\t\t}\n\t}\n</ng-container>\n\n<ng-container *luPresentationDisplayDefault>\n\t{{ intl().from }}\n\t@if (startLabel()) {\n\t\t{{ startLabel() }}\n\t} @else {\n\t\t<span aria-hidden=\"true\" data-content-before=\"–\"></span>\n\t}\n\t{{ intl().to }}\n\t@if (endLabel()) {\n\t\t{{ endLabel() }}\n\t} @else {\n\t\t<span aria-hidden=\"true\" data-content-before=\"–\"></span>\n\t}\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps","ɵPresentationDisplayDefaultDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lucca-front-ng-date2.mjs","sources":["../../../packages/ng/date2/calendar2/calendar-mode.ts","../../../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/date2.type.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":["export const CALENDAR_MODE = ['day', 'week', 'month', 'year'] as const;\nexport type CalendarMode = (typeof CALENDAR_MODE)[number];\n","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\tpl: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tfromDate: 'from',\n\t\tuntilDate: 'until',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through the dates.',\n\t\tpickDate: 'Select from the calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear this field',\n\t\tweekNumber: 'Week number',\n\t\tweekPrefix: 'W',\n\t},\n\t'nl-BE': {\n\t\tfrom: 'Van',\n\t\tto: 'naar',\n\t\tfromDate: 'vanaf',\n\t\tuntilDate: 'tot',\n\t\tdirectionKeysTip: 'Met de pijltjestoetsen kun je door de datums bladeren.',\n\t\tpickDate: 'Selecteer in de kalender',\n\t\tprevious: 'Vorige',\n\t\tnext: 'Volgende',\n\t\tclear: 'Dit veld leegmaken',\n\t\tweekNumber: 'Weeknummer',\n\t\tweekPrefix: 'S',\n\t},\n\tfr: {\n\t\tfrom: 'Du',\n\t\tto: 'au',\n\t\tfromDate: 'à partir du',\n\t\tuntilDate: 'jusqu’au',\n\t\tdirectionKeysTip: 'Les touches directionnelles servent à parcourir les dates.',\n\t\tpickDate: 'Sélectionner dans le calendrier',\n\t\tprevious: 'Précédent',\n\t\tnext: 'Suivant',\n\t\tclear: 'Vider ce champ',\n\t\tweekNumber: 'Numéro de semaine',\n\t\tweekPrefix: 'S',\n\t},\n\tde: {\n\t\tfrom: 'Von',\n\t\tto: 'am',\n\t\tfromDate: 'ab',\n\t\tuntilDate: 'bis',\n\t\tdirectionKeysTip: 'Mit den Pfeiltasten kann man durch die Daten blättern.',\n\t\tpickDate: 'Im Kalender auswählen',\n\t\tprevious: 'Zurück',\n\t\tnext: 'Weiter',\n\t\tclear: 'Inhalt aus diesem Feld entfernen',\n\t\tweekNumber: 'Wochennummer',\n\t\tweekPrefix: 'S',\n\t},\n\ten: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tfromDate: 'from',\n\t\tuntilDate: 'until',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through the dates.',\n\t\tpickDate: 'Select from the calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear this field',\n\t\tweekNumber: 'Week number',\n\t\tweekPrefix: 'W',\n\t},\n\tes: {\n\t\tfrom: 'Desde',\n\t\tto: 'al',\n\t\tfromDate: 'a partir del',\n\t\tuntilDate: 'hasta el',\n\t\tdirectionKeysTip: 'Las teclas de dirección sirven para desplazarse por las fechas.',\n\t\tpickDate: 'Seleccionar en el calendario',\n\t\tprevious: 'Anterior',\n\t\tnext: 'Siguiente',\n\t\tclear: 'Vaciar este campo',\n\t\tweekNumber: 'Número de semana',\n\t\tweekPrefix: 'S',\n\t},\n\tit: {\n\t\tfrom: 'Dal',\n\t\tto: 'al giorno',\n\t\tfromDate: 'a partire dal',\n\t\tuntilDate: 'Fino a',\n\t\tdirectionKeysTip: 'I tasti direzionali servono a scorrere le date.',\n\t\tpickDate: 'Seleziona dal calendario',\n\t\tprevious: 'Precedente',\n\t\tnext: 'Successiva',\n\t\tclear: 'Vuotare questo campo',\n\t\tweekNumber: 'Numero di settimana',\n\t\tweekPrefix: 'S',\n\t},\n\tnl: {\n\t\tfrom: 'Van',\n\t\tto: 'naar',\n\t\tfromDate: 'vanaf',\n\t\tuntilDate: 'tot',\n\t\tdirectionKeysTip: 'Met de pijltjestoetsen kun je door de datums bladeren.',\n\t\tpickDate: 'Selecteer in de kalender',\n\t\tprevious: 'Vorige',\n\t\tnext: 'Volgende',\n\t\tclear: 'Dit veld leegmaken',\n\t\tweekNumber: 'Weeknummer',\n\t\tweekPrefix: 'S',\n\t},\n\tpt: {\n\t\tfrom: 'De',\n\t\tto: 'no',\n\t\tfromDate: 'a partir de',\n\t\tuntilDate: 'até',\n\t\tdirectionKeysTip: 'As setas servem para percorrer as datas.',\n\t\tpickDate: 'Selecionar no calendário',\n\t\tprevious: 'Anterior',\n\t\tnext: 'Seguinte',\n\t\tclear: 'Esvaziar este campo',\n\t\tweekNumber: 'Número da semana',\n\t\tweekPrefix: 'S',\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\tfromDate: string;\n\tuntilDate: string;\n\tdirectionKeysTip: string;\n\tpickDate: string;\n\tprevious: string;\n\tnext: string;\n\tclear: string;\n\tweekNumber: string;\n\tweekPrefix: string;\n}\n\nexport const luDate2Translations: LuTranslation<Date2Translate> = Translations;\n","import { Directive, inject, input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { ɵeffectWithDeps } from '@lucca-front/ng/core';\n\n@Directive({\n\tselector: '[luRepeatTimes]',\n})\nexport class RepeatTimesDirective {\n\tprivate templateRef = inject<TemplateRef<void>>(TemplateRef);\n\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\treadonly repeatTimes = input<number>(0, { alias: 'luRepeatTimes' });\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.repeatTimes], (times) => {\n\t\t\tthis.viewContainerRef.clear();\n\n\t\t\tfor (let i = 0; i < times; i++) {\n\t\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t\t}\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","/**\n * Available DateComponent Types\n */\n\nexport const DATE2_CLEAR_BEHAVIOR = ['clear', 'reset'] as const;\nexport type Date2ClearBehavior = (typeof DATE2_CLEAR_BEHAVIOR)[number];\n\nexport const DATE_FORMAT_CONST = ['date', 'date-iso'] as const;\n\nexport 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, FirstWeekContainsDate, format, isSameDay, isSameMonth, isSameWeek, isSameYear, parse, startOfDecade, startOfMonth, startOfYear, WeekOptions } from 'date-fns';\nimport { CalendarWeekDay, CalendarWeekInfo } from './calendar.token';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { OpenDateRange, OpenDateRangeInput } from './calendar2/open-date-range';\nimport { DATE_ISO_FORMAT } from './date2.type';\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\nexport function getWeekNumberOptions(weekInfo: CalendarWeekInfo): { weekStartsOn: Day; firstWeekContainsDate: FirstWeekContainsDate } {\n\tconst weekStartsOn = getJSFirstDayOfWeek(weekInfo);\n\t// Monday-start locales follow ISO 8601 numbering (the first week of the year is the one containing January 4th),\n\t// others (like en-US) number the week containing January 1st as week 1.\n\treturn { weekStartsOn, firstWeekContainsDate: weekStartsOn === 1 ? 4 : 1 };\n}\n\nconst modeToComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameDay,\n\tweek: isSameWeek,\n\tmonth: isSameMonth,\n\tyear: isSameYear,\n};\n\nconst modeToCalendarComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameMonth,\n\tweek: isSameWeek,\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\tweek: startOfMonth, // week mode pages by month (the grid shows a full month of weeks)\n\tmonth: startOfYear,\n\tyear: startOfDecade,\n};\n\nexport function comparePeriods(mode: CalendarMode | null, a: Date, b: Date, weekOptions?: WeekOptions): boolean {\n\tif (!mode) return false;\n\tif (mode === 'week') return isSameWeek(a, b, weekOptions);\n\treturn modeToComparator[mode](a, b);\n}\n\nexport function compareCalendarPeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn mode ? modeToCalendarComparator[mode](a, b) : false;\n}\n\nexport function startOfPeriod(mode: CalendarMode | null, date: Date): Date {\n\treturn mode ? modeToPeriodStart[mode](date) : 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: null | undefined): null;\nexport function transformDateInputToDate(value: Date | string): Date;\nexport function transformDateInputToDate(value: Date | string | null): Date | null;\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: null): null;\nexport function transformDateToDateISO(value: Date): string;\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: OpenDateRangeInput | OpenDateRange): value is OpenDateRangeInput {\n\treturn typeof value.start === 'string' || typeof value.end === 'string';\n}\n\nexport function transformDateRangeInputToDateRange(value: OpenDateRange | null | undefined | OpenDateRangeInput): OpenDateRange | 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: value.start ? transformDateInputToDate(value.start) : null,\n\t\tend: value.end ? transformDateInputToDate(value.end) : null,\n\t};\n}\n\n/**\n * Bound a range is anchored on: its start when it has one, its end otherwise. A range open on\n * its start is displayed from its end, the same way an incomplete one is displayed from its start.\n */\nexport function getDateRangeAnchor(range: OpenDateRange | null | undefined): Date | null {\n\treturn range?.start ?? range?.end ?? null;\n}\n\nexport function transformDateRangeToDateRangeInput(value: OpenDateRange): OpenDateRangeInput {\n\treturn {\n\t\t...value,\n\t\tstart: value.start ? transformDateToDateISO(value.start) : null,\n\t\tend: value.end ? transformDateToDateISO(value.end) : null,\n\t};\n}\n\n/**\n * Whether the newly focused element still belongs to a date field: its host or its calendar.\n * The whole overlay pane of the calendar is considered, to include the focus trap anchors around it.\n */\nexport function isFocusWithinField(focusedElement: Node, host: HTMLElement, calendar: HTMLElement | undefined): boolean {\n\tconst calendarArea = calendar?.closest('.cdk-overlay-pane') ?? calendar;\n\treturn host.contains(focusedElement) || !!calendarArea?.contains(focusedElement);\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { CalendarMode } from './calendar-mode';\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');\nexport const CALENDAR_DISPLAY_MODE = new InjectionToken<Signal<CalendarMode | null>>('Calendar2:DisplayMode');\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport type { Duration } from 'date-fns';\nimport { add, addMonths, addYears, endOfWeek, startOfWeek, sub, subMonths, subYears } from 'date-fns';\nimport { WEEK_INFO } from '../calendar.token';\nimport { comparePeriods, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarMode } from './calendar-mode';\nimport { CALENDAR_DISPLAY_MODE, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\n\nconst modeToDurationKey: Record<CalendarMode, keyof Duration> = {\n\tday: 'days',\n\tweek: 'weeks',\n\tmonth: 'months',\n\tyear: 'years',\n};\n\n@Directive({\n\tselector: '[luCalendar2Cell]',\n\thost: {\n\t\t'[tabindex]': 'tabindex',\n\t\t'(keydown)': 'keydown($event)',\n\t},\n})\nexport class Calendar2CellDirective {\n\t#host = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\treadonly #tabbableDate = inject(CALENDAR_TABBABLE_DATE);\n\treadonly #displayMode = inject(CALENDAR_DISPLAY_MODE);\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\treadonly luCalendar2Cell = input.required<number>();\n\n\treadonly luCalendar2Mode = input.required<CalendarMode>();\n\n\treadonly luCalendar2Date = input.required<Date>();\n\n\tget tabindex(): 0 | -1 {\n\t\treturn this.isTabbableDate() ? 0 : -1;\n\t}\n\n\treadonly isTabbableDate = computed(() => {\n\t\t// In week display mode, day cells share the grid with the week rowheaders: only the cell\n\t\t// whose own mode matches the calendar's display mode can be tabbable, so a tabbable date\n\t\t// never makes both a week rowheader and a day cell tabbable at the same time.\n\t\tif (this.luCalendar2Mode() !== this.#displayMode()) {\n\t\t\treturn false;\n\t\t}\n\t\treturn comparePeriods(this.luCalendar2Mode(), this.luCalendar2Date(), this.#tabbableDate(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) });\n\t});\n\n\tkeydown($event: Event): 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 : this.luCalendar2Mode() === 'week' ? 1 : 3;\n\t\tconst datePropertyToEdit = modeToDurationKey[this.luCalendar2Mode()];\n\t\tswitch (($event as KeyboardEvent).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' || this.luCalendar2Mode() === 'week') {\n\t\t\t\t\tif (($event as KeyboardEvent).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' || this.luCalendar2Mode() === 'week') {\n\t\t\t\t\tif (($event as KeyboardEvent).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 { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, LOCALE_ID, model, OnInit, output, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { intlInputOptions, luBooleanAttribute } 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\tgetWeek,\n\tInterval,\n\tisAfter,\n\tisBefore,\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 { WEEK_INFO } from '../calendar.token';\nimport { LU_DATE2_TRANSLATIONS } from '../date2.translate';\nimport { RepeatTimesDirective } from '../repeat-times.directive';\nimport { comparePeriods, getDateRangeAnchor, getIntlWeekDay, getJSFirstDayOfWeek, getWeekNumberOptions } 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_DISPLAY_MODE, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\nimport { CellStatus } from './cell-status';\nimport { DateRange } from './date-range';\nimport { OpenDateRange } from './open-date-range';\n\nconst MODE_HIERARCHY: Array<CalendarMode | null> = ['day', 'month', 'year', null];\nconst WEEK_MODE_HIERARCHY: Array<CalendarMode | null> = ['week', 'month', 'year', null];\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\t{\n\t\t\tprovide: CALENDAR_DISPLAY_MODE,\n\t\t\tuseFactory: () => inject(Calendar2Component).displayMode,\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\t#weekNumberOptions = getWeekNumberOptions(this.#weekInfo);\n\n\treadonly intl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\treadonly showOverflow = input(false, { transform: luBooleanAttribute });\n\n\treadonly enableOverflow = input(false, { transform: luBooleanAttribute });\n\n\treadonly removeYearOverflow = input(false, { transform: luBooleanAttribute });\n\n\treadonly hideToday = input(false, { transform: luBooleanAttribute });\n\n\treadonly hasTodayButton = input(false, { transform: luBooleanAttribute });\n\n\treadonly hideWeekend = input(false, { transform: luBooleanAttribute });\n\n\treadonly disableModeChange = input(false, { transform: luBooleanAttribute });\n\n\t// Date used to init the component and as internal focus model\n\treadonly date = model.required<Date>();\n\n\treadonly tabbableDate = model<Date | null>(null);\n\n\treadonly mode = model<CalendarMode>('day');\n\n\treadonly displayMode = model<CalendarMode | null>(null);\n\n\treadonly ranges = input<readonly DateRange[]>([]);\n\n\treadonly getCellInfo = input<(date: Date, displayMode: CalendarMode | null) => CellStatus>((_date: Date) => ({\n\t\tclasses: [],\n\t\tdisabled: false,\n\t}));\n\n\treadonly month = computed(() => startOfMonth(this.date()));\n\n\treadonly year = computed(() => startOfYear(this.date()));\n\n\treadonly decade = computed(() => startOfDecade(this.date()));\n\n\treadonly previousMonth = computed(() => subMonths(this.month(), 1));\n\n\treadonly nextMonth = computed(() => addMonths(this.month(), 1));\n\n\treadonly nextPage = output();\n\n\treadonly previousPage = output();\n\n\tdateClicked = output<Date>();\n\n\treadonly dateHovered = 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\treadonly calendar2CellInstances = 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\treadonly monthGridDisplay = 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\treadonly yearGridDisplay = 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\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};\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\treadonly decadeGridDisplay = 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\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\treadonly currentMonthLabel = computed(() => {\n\t\treturn this.#intlDateFormat.format(this.date());\n\t});\n\n\treadonly currentYearLabel = computed(() => {\n\t\treturn this.#intlDateYear.format(this.date());\n\t});\n\n\treadonly currentDecadeLabel = 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\tconst emittedDate = this.mode() === 'week' ? startOfWeek(date, this.#weekOptions) : date;\n\t\t\tthis.dateClicked.emit(emittedDate);\n\t\t} else {\n\t\t\t// Check that we are able to zoom in\n\t\t\tconst hierarchy = this.mode() === 'week' ? WEEK_MODE_HIERARCHY : MODE_HIERARCHY;\n\t\t\tconst maxZoomLevel = hierarchy.indexOf(this.mode());\n\t\t\tconst currentZoomLevel = 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 = 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 'week':\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' || this.displayMode() === 'week';\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 && rangeInfo && isSameDay(startOfMonth(date), rangeInfo.anchor);\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\n\t\tlet isCurrent: boolean;\n\t\tif (this.displayMode() == 'week') {\n\t\t\tisCurrent = comparePeriods('day', new Date(), date, this.#weekOptions) && !this.hideToday();\n\t\t} else {\n\t\t\tisCurrent = comparePeriods(this.displayMode(), new Date(), date, this.#weekOptions) && !this.hideToday();\n\t\t}\n\n\t\t// A range with a single bound is either being created (one date selected, the other one is\n\t\t// being hovered) or open on one side\n\t\tconst isOpenRange = !!rangeInfo?.range && !(rangeInfo.range.start && rangeInfo.range.end);\n\n\t\t// Are we currently in a range that's being created (one date selected, the other one is being hovered)\n\t\tconst isInProgress = isOpenRange && this.dateHovered() !== null;\n\n\t\t// Open range with nothing hovered: it spans every period from its start onwards (start only)\n\t\t// or every period up to its end (end only)\n\t\tconst isInIdleOpenRange = isOpenRange && this.dateHovered() === null;\n\t\tconst isIdleOpenRangeBound = isInIdleOpenRange && comparePeriods(this.displayMode(), date, rangeInfo.anchor, this.#weekOptions);\n\n\t\t// Progress flags\n\t\tlet isProgressBody = isInIdleOpenRange;\n\t\tlet isProgressStart = isIdleOpenRangeBound && !isOverflow && !!rangeInfo.range.start;\n\t\tlet isProgressEnd = isIdleOpenRangeBound && !isOverflow && !rangeInfo.range.start;\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 && rangeInfo) {\n\t\t\tlet start = rangeInfo.anchor;\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.anchor) : startOfDay(rangeInfo.anchor);\n\t\t\t}\n\t\t\tconst hoveredRange: Interval = {\n\t\t\t\tstart,\n\t\t\t\tend: startOfDay(this.dateHovered() ?? 0),\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.anchor;\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, this.#weekOptions);\n\t\t\tisProgressEnd = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.end as Date, this.#weekOptions);\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.anchor, this.dateHovered() ?? 0)) {\n\t\t\t\tisSingleDayInProgress = !isOverflow && isSameDay(hoveredRange.start, hoveredRange.end) && isSameDay(hoveredRange.start, this.dateHovered() ?? 0);\n\t\t\t}\n\t\t}\n\n\t\t// In an open range, only the known bound is actually selected, the other periods are just highlighted\n\t\tconst isSelected = status.selected || (!!rangeInfo?.range && !isInProgress && (!isInIdleOpenRange || isIdleOpenRangeBound));\n\n\t\treturn {\n\t\t\tday: date.getDate(),\n\t\t\tweek: getWeek(date, this.#weekNumberOptions),\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': Boolean(!isOverflow && (rangeInfo?.isStart || status.selected) && !isInProgress),\n\t\t\t\t'is-end': Boolean((this.displayMode() === 'week' || !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\t// The week rowheader must not inherit the overflow status of the week's first cell:\n\t// a week containing days of the displayed month stays selectable even when its first\n\t// days belong to the previous month and overflow is disabled or hidden.\n\tgetWeekHeaderCell(week: CalendarCellInfo[]): CalendarCellInfo {\n\t\treturn week.find((day) => !day.isOverflow) ?? week[0];\n\t}\n\n\tgetWeekRowClasses(week: CalendarCellInfo[]): Record<string, boolean> {\n\t\tconst header = this.getWeekHeaderCell(week);\n\t\treturn {\n\t\t\t'is-selected': header?.isSelected ?? false,\n\t\t\t'is-start': header?.classes['is-start'] ?? false,\n\t\t};\n\t}\n\n\tgetWeekDayCellClasses(day: CalendarCellInfo, isLastDay: boolean): Record<string, boolean> {\n\t\tconst { 'is-start': _start, 'is-end': isEnd, ...rest } = day.classes;\n\t\treturn isLastDay ? { ...rest, 'is-end': isEnd } : rest;\n\t}\n\n\tgetRangeInfo(date: Date, scope: CalendarMode | null, isOverflow = false) {\n\t\t// Ranges given by the date range input can be open on one side, even if the public input type does not say so yet\n\t\tconst ranges: readonly OpenDateRange[] = this.ranges();\n\t\tconst range: OpenDateRange | undefined = ranges.find((range) => {\n\t\t\tconst isSameScope = (range.scope || 'day') === scope;\n\t\t\tif (isSameScope) {\n\t\t\t\tif (range.start && 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}\n\t\t\t\t// Only one bound is known, either because the range is still being built or because\n\t\t\t\t// it is open on one side. The other bound follows the hovered date.\n\t\t\t\tconst anchor = getDateRangeAnchor(range);\n\t\t\t\tif (!anchor) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this.dateHovered() !== null) {\n\t\t\t\t\t// Nominal case: the hovered date is after the known bound\n\t\t\t\t\tif (isAfter(this.dateHovered() ?? 0, startOfDay(anchor))) {\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(anchor),\n\t\t\t\t\t\t\tend: endOfDay(this.dateHovered() ?? 0),\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() ?? 0),\n\t\t\t\t\t\t\tend: endOfDay(anchor),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Open range with nothing hovered: every period from the start onwards (start only)\n\t\t\t\t\t// or up to the end (end only) is in range\n\t\t\t\t\tconst isInAnchorPeriod = comparePeriods(this.mode(), date, anchor, this.#weekOptions);\n\t\t\t\t\treturn isInAnchorPeriod || (range.start ? isAfter(date, anchor) : isBefore(date, anchor));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tconst anchor = getDateRangeAnchor(range);\n\t\tif (!range || !anchor) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isStart: boolean = Boolean(range.start && isSameDay(date, range.start));\n\t\tconst isEnd: boolean = Boolean(range.end && isSameDay(date, range.end));\n\n\t\treturn {\n\t\t\trange,\n\t\t\tanchor,\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(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 (\"week\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-week-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-week-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<th scope=\"col\" class=\"calendar-table-head-row-cell\">\n\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ intl().weekNumber }}</span>\n\t\t\t\t\t\t</th>\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@let weekHeader = getWeekHeaderCell(week);\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\" (click)=\"!weekHeader.disabled ? onCellClicked(weekHeader.date) : null\">\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tscope=\"row\"\n\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t[class]=\"getWeekRowClasses(week)\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"weekHeader.isSelected || null\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\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[luCalendar2Cell]=\"0\"\n\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"weekHeader.date\"\n\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"week\"\n\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"weekHeader.disabled ? 'true' : null\"\n\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(weekHeader.date)\"\n\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span class=\"calendar-table-body-row-cell-action-week\">{{ weekHeader.week }}</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t@for (day of week; track dayIndex; let dayIndex = $index; let isLastDay = $last) {\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[class]=\"getWeekDayCellClasses(day, isLastDay)\"\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 mod-week\"\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(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\ttabindex=\"-1\"\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\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>\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","import { capitalize } from '@lucca-front/ng/core';\nimport { differenceInCalendarDays } from 'date-fns';\nimport { CalendarMode } from './public-api';\n\nexport function getDateFormat(locale: string, mode: CalendarMode = 'day'): string {\n\treturn new Intl.DateTimeFormat(locale)\n\t\t.formatToParts(new Date('01/01/2024'))\n\t\t.reduce((acc, part) => {\n\t\t\tif (part.type === 'day' && (mode === 'day' || mode === 'week')) {\n\t\t\t\treturn `${acc}${'d'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'month' && mode !== 'year') {\n\t\t\t\treturn `${acc}${'M'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'year') {\n\t\t\t\treturn `${acc}${'y'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'literal') {\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, '')\n\t\t.replace(/^\\/+/, '');\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: CalendarMode = 'day', weekPrefix: string = 'W'): 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' || period === 'week') {\n\t\tintlConfig.month = 'numeric';\n\t}\n\n\tif (period === 'day' || period === 'week') {\n\t\tintlConfig.day = 'numeric';\n\t}\n\n\tconst intlDateFormat = new Intl.DateTimeFormat(locale, intlConfig);\n\tlet separator: string = '';\n\tconst format = intlDateFormat.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\tseparator = part.value;\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n\n\tif (period === 'week') {\n\t\treturn `${weekPrefix}${separator}${letterLocalizedForYear.repeat(4)}`;\n\t}\n\n\treturn format;\n}\n\nexport function humanizeDate(locale: string, date: Date, mode: CalendarMode = 'day', reference: Date = new Date()): string | null {\n\tif (isNaN(date.getTime())) {\n\t\treturn null;\n\t}\n\n\tswitch (mode) {\n\t\tcase 'day': {\n\t\t\tconst differenceInDays = differenceInCalendarDays(date, reference);\n\t\t\tif (Math.abs(differenceInDays) > 1) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn capitalize(new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(differenceInDays, 'day'));\n\t\t}\n\t\tcase 'month':\n\t\t\treturn capitalize(new Intl.DateTimeFormat(locale, { month: 'short', year: 'numeric' }).format(date));\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, linkedSignal, LOCALE_ID, output, signal } from '@angular/core';\nimport { intlInputOptions, isNotNil, luBooleanAttribute, luNullableBooleanAttribute } from '@lucca-front/ng/core';\nimport { addMonths, addYears, FirstWeekContainsDateOptions, isAfter, isBefore, isSameMonth, startOfDay, startOfMonth, startOfWeek, WeekOptions } from 'date-fns';\nimport { WEEK_INFO } from './calendar.token';\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 { LU_DATE2_TRANSLATIONS } from './date2.translate';\nimport { Date2ClearBehavior, DATE_FORMAT, DateFormat } from './date2.type';\nimport { getJSFirstDayOfWeek, transformDateInputToDate, transformDateRangeInputToDateRange } from './utils';\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AbstractDateComponent {\n\tprotected locale = inject(LOCALE_ID);\n\t#weekInfo = inject(WEEK_INFO);\n\n\tprotected get weekOptions(): WeekOptions & FirstWeekContainsDateOptions {\n\t\treturn { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo), firstWeekContainsDate: 4 };\n\t}\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\tprotected readonly dateFormatWithMode = computed(() => getDateFormat(this.locale, this.mode()));\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\treadonly intl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\tonTouched?: () => void;\n\treadonly disabled = signal<boolean>(false);\n\n\treadonly format = input<DateFormat>(DATE_FORMAT.DATE);\n\tprotected readonly inDateISOFormat = computed(() => this.format() === DATE_FORMAT.DATE_ISO);\n\n\treadonly ranges = input([], {\n\t\ttransform: (v: readonly DateRange[] | readonly DateRangeInput[]) => v.map(transformDateRangeInputToDateRange).filter((range): range is DateRange => range !== null),\n\t});\n\treadonly hideToday = input(false, { transform: luBooleanAttribute });\n\treadonly hasTodayButton = input(false, { transform: luBooleanAttribute });\n\treadonly clearable = input(null, { transform: luNullableBooleanAttribute });\n\treadonly clearBehavior = input<Date2ClearBehavior>('clear');\n\treadonly hideWeekend = input(false, { transform: luBooleanAttribute });\n\n\treadonly mode = input<CalendarMode>('day');\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\treadonly calendarModeInput = input<CalendarMode | null>(null, { alias: 'calendarMode' });\n\treadonly calendarMode = linkedSignal<CalendarMode>(() => this.calendarModeInput() ?? this.mode());\n\n\treadonly calendarModeChange = output<CalendarMode>();\n\n\treadonly panelOpened = output<void>();\n\n\treadonly panelClosed = output<void>();\n\n\treadonly dateFormatLocalized = computed(() => getLocalizedDateFormat(this.locale, this.mode(), this.intl().weekPrefix));\n\n\tprotected readonly currentDate = signal(new Date());\n\n\tprotected readonly tabbableDate = signal<Date | null>(null);\n\n\tprotected changeCalendarMode(calendarMode: CalendarMode | null): void {\n\t\tif (calendarMode && calendarMode !== this.calendarMode()) {\n\t\t\tthis.calendarMode.set(calendarMode);\n\t\t\tthis.calendarModeChange.emit(calendarMode);\n\t\t}\n\t}\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\tconst min = this.min();\n\t\tif (!min) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfDay(min).getTime() <= startOfDay(date).getTime();\n\t\t\tcase 'week':\n\t\t\t\t// In week mode the emitted value is the start of the week, so min applies to it\n\t\t\t\treturn startOfWeek(date, this.weekOptions).getTime() >= min.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isBefore(startOfMonth(min), startOfMonth(date)) || isSameMonth(min, date);\n\t\t\tcase 'year':\n\t\t\t\treturn 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\tconst max = this.max();\n\t\tif (max) {\n\t\t\tswitch (mode) {\n\t\t\t\tcase 'day':\n\t\t\t\t\treturn startOfDay(max).getTime() >= startOfDay(date).getTime();\n\t\t\t\tcase 'week':\n\t\t\t\t\t// In week mode the emitted value is the start of the week, so max applies to it\n\t\t\t\t\treturn startOfWeek(date, this.weekOptions).getTime() <= max.getTime();\n\t\t\t\tcase 'month':\n\t\t\t\t\treturn isAfter(startOfMonth(max), startOfMonth(date)) || isSameMonth(max, date);\n\t\t\t\tcase 'year':\n\t\t\t\t\treturn max.getFullYear() >= date.getFullYear();\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tisValidDate(date: Date | null | undefined): date is Date {\n\t\treturn isNotNil(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() ?? 0, 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() ?? 0, direction));\n\t\t\t\tbreak;\n\t\t\tcase 'week':\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() ?? 0, 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\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\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, isNotNil, luBooleanAttribute, LuClass, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';\nimport { InputDirective, PresentationDisplayDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { addDays, getWeek, parse, setDay, setWeek, startOfDay, startOfWeek } 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 { humanizeDate } from '../date-format';\nimport { comparePeriods, isFocusWithinField, 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, PresentationDisplayDirective],\n\ttemplateUrl: './date-input.component.html',\n\tstyleUrl: './date-input.component.scss',\n\thost: {\n\t\tclass: 'dateField',\n\t\t'[class.mod-filterPill]': 'isFilterPill',\n\t\t'[class.mod-auto]': 'isWidthAuto',\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#elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tngControl: NgControl; // Initialized in ngOnInit\n\tweekParsingRegexp = /(\\d{1,2})\\D*(\\d{4})?/;\n\n\t// CVA stuff\n\t#onChange?: (value: Date | null) => void;\n\n\t#luClass = inject(LuClass);\n\n\treadonly autocomplete = input<AutoFill>('off');\n\n\treadonly placeholder = input<string>();\n\n\treadonly disableOverflow = input(false, { transform: luBooleanAttribute });\n\treadonly hideOverflow = input(false, { transform: luBooleanAttribute });\n\treadonly widthAuto = input(false, { transform: luBooleanAttribute });\n\n\treadonly humanized = input(false, { transform: luBooleanAttribute });\n\n\treadonly filterPillDisabled = 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\treadonly inputFocused = signal(false);\n\n\treadonly panelOpen = signal(false);\n\n\treadonly selectedDate = signal<Date | null>(null);\n\n\treadonly initialValue = signal<Date | null | undefined>(undefined);\n\treadonly dateFromWriteValue = signal<Date | null>(null);\n\n\treadonly calendar = viewChild(Calendar2Component);\n\n\treadonly inputRef = viewChild<ElementRef<HTMLInputElement>>('date');\n\n\treadonly formattedValue = computed(() => {\n\t\tconst textInput = this.userTextInput();\n\t\tif (textInput !== 'ɵ') {\n\t\t\tconst parsedInput = this.parseValue(textInput);\n\t\t\tif (this.isValidDate(parsedInput) && this.inputFocused()) {\n\t\t\t\treturn textInput;\n\t\t\t}\n\t\t}\n\t\tconst selectedDate = this.selectedDate();\n\t\tif (selectedDate && this.isValidDate(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 'week':\n\t\t\t\t\treturn `${this.intl().weekPrefix}${getWeek(selectedDate, this.weekOptions)}/${selectedDate.getFullYear()}`;\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(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\treadonly displayValue = computed(() => {\n\t\tconst selectedDate = this.selectedDate();\n\t\tif (this.humanized() && !this.inputFocused() && !this.panelOpen() && this.isValidDate(selectedDate)) {\n\t\t\tconst humanizedDate = humanizeDate(this.locale, selectedDate, this.mode());\n\t\t\tif (humanizedDate) {\n\t\t\t\treturn humanizedDate;\n\t\t\t}\n\t\t}\n\t\treturn this.formattedValue();\n\t});\n\n\t// We need to use a \"magic key\" here to avoid sending a null value change on initialization\n\treadonly userTextInput = signal<string>('ɵ');\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\tconst selectedDate = this.selectedDate();\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: isNotNil(selectedDate) && this.calendarMode() === mode && comparePeriods(mode, date, selectedDate, this.weekOptions),\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\treadonly previousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\treadonly nextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\treadonly calendarDialog = viewChild<ElementRef<HTMLElement>>('calendarDialog');\n\n\tisFilterPill = false;\n\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\treadonly isFilterPillEmpty = computed(() => !this.selectedDate());\n\treadonly isFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\treadonly #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 || undefined);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\teffect(() => {\n\t\t\tconst nativeElement = this.inputRef()?.nativeElement;\n\t\t\tif (nativeElement) {\n\t\t\t\tconst cursorPositionBefore = nativeElement.selectionStart ?? 0;\n\t\t\t\tconst displayValue = this.displayValue();\n\t\t\t\tnativeElement.value = this.displayValue();\n\t\t\t\tif (displayValue.endsWith(this.separator)) {\n\t\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore + 1, cursorPositionBefore + 1);\n\t\t\t\t} else {\n\t\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore, cursorPositionBefore);\n\t\t\t\t}\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\tconst parsed: Date | null = this.parseValue(inputValue);\n\t\t\t\tif (parsed instanceof Date && parsed.getFullYear() > 999) {\n\t\t\t\t\tconst normalized = this.#normalizeDate(parsed);\n\t\t\t\t\tthis.selectedDate.set(normalized);\n\t\t\t\t\tthis.currentDate.set(normalized);\n\t\t\t\t\tthis.tabbableDate.set(normalized);\n\t\t\t\t} else if (!this.isFilterPill) {\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(this.selectedDate());\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-week': this.mode() === 'week',\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 && !comparePeriods(calendarMode, tabbableDate, this.currentDate(), this.weekOptions)) {\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\tafterNextRender(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t\t},\n\t\t\t\t\t{ injector: this.#injector },\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tparseValue(inputValue: string): Date | null {\n\t\tif (this.mode() === 'week') {\n\t\t\tlet parsed: Date | null = startOfDay(new Date());\n\t\t\tconst regexpResult = this.weekParsingRegexp.exec(inputValue);\n\t\t\tif (regexpResult) {\n\t\t\t\t// If we have a year, use it, otherwise use current year\n\t\t\t\tif (regexpResult[2]) {\n\t\t\t\t\tparsed.setFullYear(+regexpResult[2]);\n\t\t\t\t}\n\t\t\t\tparsed = setWeek(parsed, +regexpResult[1], this.weekOptions);\n\t\t\t\tparsed = setDay(parsed, 3);\n\t\t\t\treturn parsed;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} else {\n\t\t\ttry {\n\t\t\t\treturn parse(inputValue, this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t\t} catch {\n\t\t\t\t/* not a correct date */\n\t\t\t\treturn null;\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// The value is a Date in every mode, but two dates are \"the same value\" only if they belong\n\t// to the same period for the current mode (same week in week mode, same day in day mode, etc.)\n\t#safeCompareDate(a: Date | null, b: Date | null): boolean {\n\t\treturn a === b || (!!a && !!b && comparePeriods(this.mode(), a, b, this.weekOptions));\n\t}\n\n\t// The emitted value is always the start of the period matching the current mode:\n\t// start of day, or start of week in week mode.\n\t#normalizeDate(date: Date): Date {\n\t\treturn this.mode() === 'week' ? addDays(startOfWeek(date, this.weekOptions), 3) : startOfDay(date);\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\t\t\tafterNextRender(\n\t\t\t\t() => {\n\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t},\n\t\t\t\t{ injector: this.#injector },\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 (isNil(control.value)) {\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.formattedValue(), this.dateFormatWithMode(), 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\t\tconst normalized = isNotNil(_date) ? this.#normalizeDate(_date) : null;\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(normalized);\n\t\t}\n\n\t\tif (isNotNil(date) && isNotNil(normalized)) {\n\t\t\tthis.dateFromWriteValue.set(normalized);\n\t\t\tthis.selectedDate.set(normalized);\n\t\t\tthis.currentDate.set(normalized);\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) : 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\tconst normalized = this.#normalizeDate(date);\n\t\tthis.selectedDate.set(normalized);\n\t\tthis.currentDate.set(normalized);\n\t\tthis.tabbableDate.set(normalized);\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(event: FocusEvent): void {\n\t\tthis.inputFocused.set(false);\n\t\tthis.userTextInput.set('ɵ');\n\t\tthis.markAsTouchedIfFocusLeft(event);\n\t}\n\n\tpopoverClosed(): void {\n\t\tthis.panelOpen.set(false);\n\t\tthis.panelClosed.emit();\n\t\t// Closing the calendar ends the interaction with it. Deferred, as picking a date closes the calendar before the value is emitted\n\t\tafterNextRender(() => this.onTouched?.(), { injector: this.#injector });\n\t}\n\n\t/**\n\t * The control is touched once the focus leaves both the input and the calendar.\n\t * When the newly focused element is unknown (e.g. Safari does not focus clicked buttons) and the calendar is open,\n\t * the calendar closing takes over.\n\t */\n\tmarkAsTouchedIfFocusLeft(event: FocusEvent): void {\n\t\tconst focusedElement = event.relatedTarget;\n\t\tif (focusedElement instanceof Node ? !isFocusWithinField(focusedElement, this.#elementRef.nativeElement, this.calendarDialog()?.nativeElement) : !this.panelOpen()) {\n\t\t\tthis.onTouched?.();\n\t\t}\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($event)\"\n\t\t\t(focus)=\"inputFocused.set(true)\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\t[attr.aria-expanded]=\"popoverRef.opened()\"\n\t\t\t[attr.aria-controls]=\"popoverRef.ariaControls\"\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\tdata-testid=\"lu-date-input\"\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)=\"popoverClosed()\"\n\t\t\t\t(luPopoverOpened)=\"panelOpen.set(true); 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\taria-hidden=\"true\"\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\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"intl().pickDate\" #calendarDialog>\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(displayModeChange)=\"changeCalendarMode($event)\"\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\n<ng-container *luPresentationDisplay>{{ displayValue() }}</ng-container>\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\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tSignal,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, FormsModule, 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, isNotNil, luBooleanAttribute, LuClass, PortalContent, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';\nimport { FORM_FIELD_INSTANCE, InputDirective, ɵPresentationDisplayDefaultDirective } 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 { OpenDateRange } from '../calendar2/open-date-range';\nimport { compareCalendarPeriods, getDateRangeAnchor, isFocusWithinField, 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: [\n\t\tPopoverDirective,\n\t\tCalendar2Component,\n\t\tIconComponent,\n\t\tInputDirective,\n\t\tLayoutModule,\n\t\tPortalDirective,\n\t\tNgTemplateOutlet,\n\t\tFilterPillDisplayerDirective,\n\t\tClearComponent,\n\t\tɵPresentationDisplayDefaultDirective,\n\t\tFormsModule,\n\t],\n\ttemplateUrl: './date-range-input.component.html',\n\tstyleUrl: './date-range-input.component.scss',\n\thost: {\n\t\tclass: 'dateRangeField',\n\t\t'[class.mod-filterPill]': 'isFilterPill',\n\t\t'[class.mod-auto]': 'isWidthAuto',\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#elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\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\treadonly hasTwoCalendars = toSignal(this.#breakpointObserver.observe('(min-width: 40em)').pipe(map((state) => state.matches)));\n\n\tidSuffix = nextId++;\n\n\treadonly startTextInputRef = viewChild<ElementRef<HTMLInputElement>>('start');\n\treadonly startUserTextInput = signal('ɵ');\n\n\treadonly endTextInputRef = viewChild<ElementRef<HTMLInputElement>>('end');\n\treadonly endUserTextInput = signal('ɵ');\n\n\t// CVA stuff\n\t#onChange?: (value: OpenDateRange | null) => void;\n\n\treadonly initialValue = signal<OpenDateRange | null | undefined>(undefined);\n\treadonly selectedRange = signal<OpenDateRange | null>(null);\n\n\treadonly dateHovered = signal<Date | null>(null);\n\n\treadonly placeholder = input<string>();\n\n\treadonly widthAuto = input(false, { transform: luBooleanAttribute });\n\n\treadonly label: Signal<PortalContent | undefined> = signal('');\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\treadonly inputFocused = signal(false);\n\n\treadonly panelOpen = signal(false);\n\n\treadonly editedField = signal<-1 | 0 | 1>(-1);\n\n\treadonly highlightedField = signal<-1 | 0 | 1>(-1);\n\n\treadonly shortcuts = input<readonly CalendarShortcut[]>();\n\n\treadonly autocomplete = input<AutoFill>('off');\n\n\tprotected readonly currentRightDate = computed(() => {\n\t\treturn this.hasTwoCalendars() ? this.getNextCalendarDate(this.currentDate()) : this.currentDate();\n\t});\n\n\tprotected readonly currentStartDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\tcase 'week':\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 readonly currentEndDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\tcase 'week':\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\treadonly calendars = 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\treadonly calendarRanges = computed(() => {\n\t\tconst selectedRange = this.selectedRange();\n\t\tif (selectedRange) {\n\t\t\t// The calendar handles ranges open on one side, but its public input type still requires a start date\n\t\t\treturn [selectedRange as DateRange, ...this.ranges()];\n\t\t}\n\t\treturn this.ranges();\n\t});\n\n\treadonly startLabel = computed(() => {\n\t\tconst inputValue = this.startUserTextInput();\n\t\tif (inputValue !== 'ɵ') {\n\t\t\treturn inputValue;\n\t\t}\n\t\tconst range = this.selectedRange();\n\t\tif (range?.start && this.isValidDate(range.start)) {\n\t\t\treturn this.getDateLabelForInput(range.start);\n\t\t}\n\t\treturn '';\n\t});\n\n\treadonly endLabel = computed(() => {\n\t\tconst inputValue = this.endUserTextInput();\n\t\tif (inputValue !== 'ɵ') {\n\t\t\treturn inputValue;\n\t\t}\n\t\tconst range = this.selectedRange();\n\t\tif (range?.end && this.isValidDate(range.end)) {\n\t\t\treturn this.getDateLabelForInput(range.end);\n\t\t}\n\t\treturn '';\n\t});\n\n\treadonly previousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\treadonly nextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\treadonly calendarDialog = viewChild<ElementRef<HTMLElement>>('calendarDialog');\n\n\t// Which calendar is currently being focused in, used for tabbable date logic\n\treadonly focusedCalendarIndex = signal(0);\n\n\treadonly focusedCalendar = computed(() => this.calendars()[this.focusedCalendarIndex()]);\n\n\tisFilterPill = false;\n\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\treadonly isFilterPillEmpty = computed(() => this.selectedRange() === null);\n\n\t/**\n\t * The field of the missing bound when a single date is selected, null otherwise.\n\t * In filter pill mode, the popover initially focuses it, so the next picked date completes the range instead of replacing the selected one\n\t */\n\tprotected readonly missingBoundField = computed<0 | 1 | null>(() => {\n\t\tconst range = this.selectedRange();\n\t\tif (range?.start && !range.end) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (range?.end && !range.start) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn null;\n\t});\n\treadonly isFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\treadonly #defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\treadonly filterPillDisabled = signal(false);\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement ?? undefined);\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 = computed(() => 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\tafterNextRender(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t\t},\n\t\t\t\t\t{ injector: this.#injector },\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\tcase 'week':\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.panelOpen.set(false);\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\t// Closing the calendar ends the interaction with it, even though the focus is given back to an input.\n\t\t// Deferred, as picking a date closes the calendar before the value is emitted\n\t\tafterNextRender(() => this.onTouched?.(), { injector: this.#injector });\n\t}\n\n\tinputBlur(event: FocusEvent): void {\n\t\tthis.inputFocused.set(false);\n\t\tthis.startUserTextInput.set('ɵ');\n\t\tthis.endUserTextInput.set('ɵ');\n\t\tthis.highlightedField.set(-1);\n\t\tthis.fixOrderIfNeeded();\n\t\tthis.markAsTouchedIfFocusLeft(event);\n\t}\n\n\t/**\n\t * The control is touched once the focus leaves both inputs and the calendar.\n\t * When the newly focused element is unknown (e.g. Safari does not focus clicked buttons) and the calendar is open,\n\t * the calendar closing takes over.\n\t */\n\tmarkAsTouchedIfFocusLeft(event: FocusEvent): void {\n\t\tconst focusedElement = event.relatedTarget;\n\t\tif (focusedElement instanceof Node ? !isFocusWithinField(focusedElement, this.#elementRef.nativeElement, this.calendarDialog()?.nativeElement) : !this.panelOpen()) {\n\t\t\tthis.onTouched?.();\n\t\t}\n\t}\n\n\tfixOrderIfNeeded(): void {\n\t\tconst range = this.selectedRange();\n\t\tif (range?.start && range.end && isAfter(range.start, range.end)) {\n\t\t\tconst swappedRange = {\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.selectedRange.set(swappedRange);\n\t\t\tthis.#onChange?.(swappedRange);\n\t\t}\n\t}\n\n\ttabbableDateChange(date: Date | null, 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\tafterNextRender(\n\t\t\t() => {\n\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\tconst selectedRange = this.selectedRange();\n\t\t\t\tif (propertyToFocus && selectedRange && selectedRange[propertyToFocus]) {\n\t\t\t\t\t// Specific case: if range is on a single month, focus on it on left calendar\n\t\t\t\t\t// Same goes for focus on start date, we want it on left panel\n\t\t\t\t\tif (propertyToFocus === 'start' || (selectedRange.start && selectedRange.end && compareCalendarPeriods(this.mode(), selectedRange.start, selectedRange.end))) {\n\t\t\t\t\t\tthis.currentDate.set(selectedRange[propertyToFocus]);\n\t\t\t\t\t\tthis.tabbableDate.set(selectedRange[propertyToFocus]);\n\t\t\t\t\t} else {\n\t\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\t\tconst leftPanelFocus = selectedRange.end;\n\t\t\t\t\t\tif (leftPanelFocus) {\n\t\t\t\t\t\t\tthis.currentDate.set(leftPanelFocus);\n\t\t\t\t\t\t\tthis.tabbableDate.set(leftPanelFocus);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (focusTabbableDate) {\n\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ injector: this.#injector },\n\t\t);\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tconst selectedRange = this.selectedRange();\n\t\t// The clicked date always fills the field being edited, so picking a date while the end\n\t\t// field is focused builds a range without start date\n\t\tconst isEditingEnd = this.editedField() === 1;\n\t\t// The user picked the end date first and is now picking the start date\n\t\tconst isCompletingFromEnd = !isEditingEnd && !!selectedRange?.end && !selectedRange.start;\n\t\tlet newRange: OpenDateRange;\n\n\t\tif (isEditingEnd) {\n\t\t\t// If end is before start, invert them\n\t\t\tnewRange =\n\t\t\t\tselectedRange?.start && isBefore(date, selectedRange.start)\n\t\t\t\t\t? { ...selectedRange, scope: this.mode(), start: date, end: selectedRange.start }\n\t\t\t\t\t: { ...selectedRange, scope: this.mode(), end: date };\n\t\t} else if (isCompletingFromEnd && selectedRange?.end) {\n\t\t\t// If start is after end, invert them, the same way as when the start date is picked first\n\t\t\tnewRange = isAfter(date, selectedRange.end) ? { ...selectedRange, scope: this.mode(), start: selectedRange.end, end: date } : { ...selectedRange, scope: this.mode(), start: date };\n\t\t} else {\n\t\t\t// If start is after end, start a new range from it\n\t\t\tnewRange = selectedRange?.end && isAfter(date, selectedRange.end) ? { scope: this.mode(), start: date } : { ...selectedRange, scope: this.mode(), start: date };\n\t\t}\n\n\t\tthis.selectedRange.set(newRange);\n\n\t\tif ((isEditingEnd && newRange.start) || isCompletingFromEnd) {\n\t\t\t// Both bounds are set, the user is done picking\n\t\t\tpopoverRef?.close();\n\t\t\tthis.filterPillPopoverCloseFn?.();\n\t\t\t(isEditingEnd ? this.endTextInputRef() : this.startTextInputRef())?.nativeElement.focus();\n\t\t\tthis.editedField.set(-1);\n\t\t\tthis.dateHovered.set(null);\n\t\t} else {\n\t\t\t// Move on to the bound that is still missing\n\t\t\tthis.editedField.set(isEditingEnd ? 0 : 1);\n\t\t\tthis.highlightedField.set(isEditingEnd ? 0 : 1);\n\t\t}\n\n\t\tthis.#onChange?.(newRange);\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 (isNil(this.initialValue())) {\n\t\t\tthis.selectedRange.set(this.clearBehavior() === 'reset' ? (this.initialValue() ?? null) : _dateRange);\n\t\t}\n\n\t\tif (isNotNil(dateRange)) {\n\t\t\tthis.selectedRange.set(_dateRange);\n\t\t\tconst calendarAnchor = getDateRangeAnchor(_dateRange) ?? new Date();\n\t\t\tthis.currentDate.set(startOfDay(calendarAnchor));\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: DateRange | DateRangeInput | null) => void): void {\n\t\tthis.#onChange = (dateRange: OpenDateRange | null) => {\n\t\t\tconst value = dateRange && this.inDateISOFormat() ? transformDateRangeToDateRangeInput(dateRange) : dateRange;\n\t\t\t// The emitted range can be open on one side, but the public type still requires a start date\n\t\t\tfn(value as DateRange | DateRangeInput | null);\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) : 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\tif (!date?.getTime()) {\n\t\t\treturn '';\n\t\t}\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.intlDateTimeFormat.format(date);\n\t\t\tcase 'week':\n\t\t\t\t// TODO\n\t\t\t\treturn date.toString();\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\tswitch (rangeProperty) {\n\t\t\tcase 'start':\n\t\t\t\tthis.startUserTextInput.set(inputValue);\n\t\t\t\tbreak;\n\t\t\tcase 'end':\n\t\t\t\tthis.endUserTextInput.set(inputValue);\n\t\t\t\tbreak;\n\t\t}\n\t\tlet currentRange: OpenDateRange = this.selectedRange() || {};\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@if (label(); as label) {\n\t\t\t\t<ng-container *luPortal=\"label\" />\n\t\t\t}\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[ngModel]=\"startLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'start')\"\n\t\t\t\t\t(blur)=\"inputBlur($event)\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(0); highlightedField.set(0)\"\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t[attr.aria-expanded]=\"popoverRef.opened()\"\n\t\t\t\t\t[attr.aria-controls]=\"popoverRef.ariaControls\"\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[attr.cdkFocusInitial]=\"isFilterPill && missingBoundField() === 0 ? '' : null\"\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]=\"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-end-{{ 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[ngModel]=\"endLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(end.value, 'end')\"\n\t\t\t\t\t(blur)=\"inputBlur($event)\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(1); highlightedField.set(1)\"\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t[attr.aria-expanded]=\"popoverRef.opened()\"\n\t\t\t\t\t[attr.aria-controls]=\"popoverRef.ariaControls\"\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[attr.cdkFocusInitial]=\"isFilterPill && missingBoundField() === 1 ? '' : null\"\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]=\"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)=\"panelOpen.set(true); 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\taria-hidden=\"true\"\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\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"intl().pickDate\" #calendarDialog>\n\t\t@if ((shortcuts()?.length ?? 0) > 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@if (startLabel() && endLabel()) {\n\t\t\t<span class=\"pr-u-mask\">{{ intl().from }}</span>\n\t\t\t{{ startLabel() }}\n\t\t\t<lu-icon [icon]=\"'arrowRight'\" size=\"XS\" [alt]=\"intl().to\" />\n\t\t\t{{ endLabel() }}\n\t\t} @else if (startLabel()) {\n\t\t\t{{ intl().fromDate }} {{ startLabel() }}\n\t\t} @else if (endLabel()) {\n\t\t\t{{ intl().untilDate }} {{ endLabel() }}\n\t\t}\n\t}\n</ng-container>\n\n<ng-container *luPresentationDisplayDefault>\n\t{{ intl().from }}\n\t@if (startLabel()) {\n\t\t{{ startLabel() }}\n\t} @else {\n\t\t<span aria-hidden=\"true\" data-content-before=\"–\"></span>\n\t}\n\t{{ intl().to }}\n\t@if (endLabel()) {\n\t\t{{ endLabel() }}\n\t} @else {\n\t\t<span aria-hidden=\"true\" data-content-before=\"–\"></span>\n\t}\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps","ɵPresentationDisplayDefaultDirective"],"mappings":"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"}
|