@siemens/element-ng 49.2.0 → 49.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/siemens-element-ng-accordion.mjs +2 -2
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-application-header.mjs +3 -3
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +22 -24
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-header-dropdown.mjs +2 -2
- package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs +21 -25
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-menu.mjs +6 -6
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +8 -4
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-search-bar.mjs +7 -2
- package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +164 -10
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-toggle.mjs +1 -1
- package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +11 -3
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
- package/package.json +3 -3
- package/schematics/vitest-setup.js +5 -0
- package/types/siemens-element-ng-application-header.d.ts +1 -1
- package/types/siemens-element-ng-auto-collapsable-list.d.ts +1 -1
- package/types/siemens-element-ng-avatar.d.ts +1 -1
- package/types/siemens-element-ng-circle-status.d.ts +1 -1
- package/types/siemens-element-ng-dashboard.d.ts +2 -2
- package/types/siemens-element-ng-date-range-filter.d.ts +1 -1
- package/types/siemens-element-ng-datepicker.d.ts +7 -7
- package/types/siemens-element-ng-file-uploader.d.ts +1 -1
- package/types/siemens-element-ng-filtered-search.d.ts +1 -1
- package/types/siemens-element-ng-form.d.ts +1 -1
- package/types/siemens-element-ng-list-details.d.ts +1 -1
- package/types/siemens-element-ng-main-detail-container.d.ts +10 -11
- package/types/siemens-element-ng-navbar-vertical.d.ts +7 -3
- package/types/siemens-element-ng-navbar.d.ts +1 -1
- package/types/siemens-element-ng-number-input.d.ts +1 -1
- package/types/siemens-element-ng-phone-number.d.ts +1 -1
- package/types/siemens-element-ng-photo-upload.d.ts +1 -1
- package/types/siemens-element-ng-search-bar.d.ts +1 -1
- package/types/siemens-element-ng-side-panel.d.ts +115 -5
- package/types/siemens-element-ng-split.d.ts +2 -2
- package/types/siemens-element-ng-status-bar.d.ts +1 -1
- package/types/siemens-element-ng-status-toggle.d.ts +1 -1
- package/types/siemens-element-ng-tree-view.d.ts +1 -1
- package/types/siemens-element-ng-typeahead.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-datepicker.mjs","sources":["../../../../projects/element-ng/datepicker/date-time-helper.ts","../../../../projects/element-ng/datepicker/si-datepicker.model.ts","../../../../projects/element-ng/datepicker/si-date-input.directive.ts","../../../../projects/element-ng/datepicker/components/si-calendar-date-cell.directive.ts","../../../../projects/element-ng/datepicker/components/si-compare-adapter.ts","../../../../projects/element-ng/datepicker/components/si-calendar-body.component.ts","../../../../projects/element-ng/datepicker/components/si-calendar-body.component.html","../../../../projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts","../../../../projects/element-ng/datepicker/components/si-calendar-direction-button.component.html","../../../../projects/element-ng/datepicker/components/si-initial-focus.component.ts","../../../../projects/element-ng/datepicker/components/si-day-selection.component.ts","../../../../projects/element-ng/datepicker/components/si-day-selection.component.html","../../../../projects/element-ng/datepicker/components/si-month-selection.component.ts","../../../../projects/element-ng/datepicker/components/si-month-selection.component.html","../../../../projects/element-ng/datepicker/components/si-year-selection.component.ts","../../../../projects/element-ng/datepicker/components/si-year-selection.component.html","../../../../projects/element-ng/datepicker/si-timepicker.component.ts","../../../../projects/element-ng/datepicker/si-timepicker.component.html","../../../../projects/element-ng/datepicker/si-datepicker.component.ts","../../../../projects/element-ng/datepicker/si-datepicker.component.html","../../../../projects/element-ng/datepicker/si-datepicker-overlay.component.ts","../../../../projects/element-ng/datepicker/si-datepicker-overlay.directive.ts","../../../../projects/element-ng/datepicker/si-datepicker.directive.ts","../../../../projects/element-ng/datepicker/si-date-range.component.ts","../../../../projects/element-ng/datepicker/si-date-range.component.html","../../../../projects/element-ng/datepicker/si-calendar-button.component.ts","../../../../projects/element-ng/datepicker/si-datepicker.module.ts","../../../../projects/element-ng/datepicker/index.ts","../../../../projects/element-ng/datepicker/siemens-element-ng-datepicker.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n FormatWidth,\n FormStyle,\n getLocaleDateFormat,\n getLocaleDateTimeFormat,\n getLocaleDayPeriods,\n getLocaleId,\n getLocaleTimeFormat,\n TranslationWidth\n} from '@angular/common';\n\nimport { DatepickerInputConfig, getDatepickerFormat, WeekStart } from './si-datepicker.model';\n\nexport interface DayOfWeek {\n id: string;\n index: number;\n offset: number;\n isWeekend: boolean;\n}\n\nconst WEEK_ISO: DayOfWeek[] = [\n { id: 'monday', index: 1, offset: 0, isWeekend: false },\n { id: 'tuesday', index: 2, offset: 1, isWeekend: false },\n { id: 'wednesday', index: 3, offset: 2, isWeekend: false },\n { id: 'thursday', index: 4, offset: 3, isWeekend: false },\n { id: 'friday', index: 5, offset: 4, isWeekend: false },\n { id: 'saturday', index: 6, offset: 5, isWeekend: true },\n { id: 'sunday', index: 7, offset: 6, isWeekend: true }\n];\n\nexport const WEEK_START_OFFSET = {\n 'monday': 0,\n 'saturday': 5,\n 'sunday': 6\n};\n\nconst UNITS = {\n millisecondsPerDay: 86400000,\n daysPerWeek: 7,\n thursday: 4\n};\n\nconst dayOfWeekMap: {\n [key: string]: DayOfWeek[];\n} = {};\n\nexport const getDaysOfWeek = (weekStart: WeekStart): DayOfWeek[] => {\n weekStart = weekStart ?? 'monday';\n let weekdays: DayOfWeek[] = dayOfWeekMap[weekStart];\n if (!weekdays) {\n dayOfWeekMap[weekStart] = weekdays = [];\n const offset = WEEK_START_OFFSET[weekStart];\n for (let i = 0; i < 7; i++) {\n weekdays.push({ ...WEEK_ISO[(i + offset) % 7], offset: i });\n }\n }\n return weekdays;\n};\n\n/**\n * Get local specific months using DateTimeFormat.\n * @param locale - current locale\n */\nexport const getLocaleMonthNames = (locale: string): string[] => {\n const format = new Intl.DateTimeFormat(locale, { month: 'long', timeZone: 'UTC' }).format;\n return Array(12)\n .fill(0)\n .map((v, m) => format(new Date(Date.UTC(0, m))));\n};\n\n/**\n * Get local specific weekdays as string using DateTimeFormat.\n * @param locale - current local\n * @param weekStart - start of the week\n * @param format - display format\n * @returns array of week days.\n */\nexport const getDayStrings = (\n locale: string,\n weekStart: WeekStart = 'monday',\n format: 'narrow' | 'short' | 'long' = 'short'\n): string[] => {\n const dateFormatter = new Intl.DateTimeFormat(locale, { weekday: format, timeZone: 'utc' });\n const days = [];\n // Get local specific day strings from sunday (0) .. saturady (6)\n for (let index = 1; index <= 7; index++) {\n const day = new Date(Date.UTC(2023, 0, index));\n days.push(dateFormatter.format(day));\n }\n const map = { 'sunday': 0, 'monday': 1, 'saturday': 6 };\n const index = map[weekStart];\n return days.slice(index).concat(days.slice(0, index));\n};\n\n/**\n * Gets the first day in the specified month.\n * Expects the month as a value between 1 and 12.\n * The year is required to handle leap years.\n *\n * @returns The first day of the month as a Date.\n */\nexport const getFirstDayInMonth = (year: number, month: number): Date =>\n new Date(year, month - 1, 1);\n\n/**\n * Returns the ISO-8601 week number for the user's week containing the specified date.\n * ISO-8601 weeks always start on Monday. When the user's week starts on Sunday or Saturday,\n * the date is adjusted to find the corresponding ISO week (based on the Thursday rule).\n * The first week of a year is the week that contains the first Thursday of the year (='First 4-day week').\n * The highest week number in a year is either 52 or 53.\n *\n * @param date -The JavaScript date object.\n * @param weekStart -Name of the first day of the week\n * @returns The number of the Week\n */\nexport const getWeekOfYear = (date: Date, weekStart: WeekStart): number => {\n const nearestThu = new Date(date);\n nearestThu.setHours(0, 0, 0, 0);\n const offset = weekStart === 'monday' ? 0 : weekStart === 'sunday' ? 1 : 2;\n nearestThu.setDate(nearestThu.getDate() + offset);\n adjustToThursday(nearestThu);\n const year = nearestThu.getFullYear();\n const weekOne = new Date(year, 0, 4);\n adjustToThursday(weekOne);\n const days = Math.round((nearestThu.getTime() - weekOne.getTime()) / UNITS.millisecondsPerDay);\n const week = 1 + Math.floor(days / UNITS.daysPerWeek); // Count of Thursdays\n return week;\n};\n\nconst adjustToThursday = (date: Date): void => {\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n};\n\nexport const getWeekDayOffset = (date: Date, weekStart: WeekStart): number => {\n const offset = WEEK_START_OFFSET[weekStart ?? 'monday'];\n return (date.getDay() + 6 - offset) % 7;\n};\n\n/** returns the date string in format YYYY-MM-DD for given date */\nexport const getStringforDate = (date: Date): string => {\n let month = '' + (date.getMonth() + 1);\n let day = '' + date.getDate();\n const year = date.getFullYear();\n\n if (month.length < 2) {\n month = '0' + month;\n }\n if (day.length < 2) {\n day = '0' + day;\n }\n return `${year}-${month}-${day}`;\n};\n\n/**\n * Creates a new date object on from a date with or without time.\n * @param value - The date from with the year, month and day is taken.\n * @param hours - Optional numeric value of the hours, otherwise 0.\n * @param minutes - Optional numeric value of the minutes, otherwise 0.\n * @param seconds - Optional numeric value of the seconds, otherwise 0.\n * @param milliseconds - Optional numeric value of the milliseconds, otherwise 0.\n * @returns\n */\nexport const createDate = (\n value: Date,\n hours: number = 0,\n minutes: number = 0,\n seconds: number = 0,\n milliseconds: number = 0\n): Date => {\n const newDate = new Date(\n value.getFullYear(),\n value.getMonth(),\n value.getDate(),\n hours,\n minutes,\n seconds,\n milliseconds\n );\n // Seems redundant, but makes sure that increasing\n // the hours does no change the date when switching\n // from 11pm up.\n newDate.setFullYear(value.getFullYear());\n newDate.setMonth(value.getMonth());\n newDate.setDate(value.getDate());\n return newDate;\n};\n\n/** Creates a date but allows the month and date to overflow. */\nconst createDateInternal = (year: number, month: number, date: number): Date => {\n const d = new Date();\n d.setFullYear(year, month, date);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nconst NAMED_FORMATS: { [localeId: string]: { [format: string]: string } } = {};\nconst INVALID_DATE = new Date(NaN);\n/**\n * @param input - String containing a date or dateTime value (Ex. \"05/15/2020\"\n * @param format - Format of the input value (Ex. \"M/d/YYYY\")\n * @param locale - Locale of the input value\n * @returns A JS Date in accordance of the three parameters\n */\nexport const parseDate = (input: string, format: string, locale: string): Date | undefined => {\n if (!input) {\n return undefined;\n }\n\n const splitFormat = format.split(/[^MydhHmsSa]+/);\n const splitDate = input.toUpperCase().match(/\\d+|\\w+/g);\n if (!splitDate) {\n return INVALID_DATE;\n }\n // in case of some locales where meridian is with special chars\n const dateAndMeridian = input.split(/ +/);\n if (splitDate.length > 0 && dateAndMeridian.length > 0) {\n const parsedMeridian = dateAndMeridian[dateAndMeridian.length - 1].toUpperCase();\n if (\n splitDate![splitDate.length - 1] !== parsedMeridian &&\n getMeridian(parsedMeridian, locale)\n ) {\n splitDate?.push(parsedMeridian);\n }\n }\n let year = 0;\n let month = 0;\n /*\n date as in the numeric day of the month to be provided for the Date() constructor.\n default value is 1 since 0 refers to the last date of previous month.\n */\n let date = 1;\n let hour = 0;\n let minute = 0;\n let second = 0;\n let milliseconds = 0;\n\n // check if date is invalid and return if it is invalid\n for (let i = 0; i < splitDate.length; i++) {\n if (i === splitDate.length - 1) {\n const parsedMeridian = splitDate![splitDate.length - 1];\n // skip if its meridian\n if (getMeridian(parsedMeridian, locale)) {\n continue;\n }\n }\n const parsedDateVal = parseInt(splitDate![i], 10);\n if (isNaN(parsedDateVal)) {\n return INVALID_DATE;\n }\n }\n\n for (let i = 0; i < splitFormat.length; i++) {\n const f = splitFormat[i];\n let parsedNumber = parseInt(splitDate![i], 10);\n if (f !== 'a' && isNaN(parsedNumber)) {\n // auto fill seconds and milliseconds if not passed by user\n if (f === 'ss' || f === 'SSS') {\n parsedNumber = 0;\n } else {\n return INVALID_DATE;\n }\n }\n\n if (f === 'M' || f === 'MM') {\n month = parsedNumber;\n } else if (f === 'd' || f === 'dd') {\n date = parsedNumber;\n } else if (f === 'y' || f === 'yy' || f === 'yyyy') {\n // JS adds 1900 for numbers between 0 and 99. Adjust to be more user-friendly\n year =\n parsedNumber < 50\n ? parsedNumber + 2000\n : parsedNumber < 100\n ? parsedNumber + 1900\n : parsedNumber;\n } else if (f === 'h' || f === 'HH') {\n hour = parsedNumber;\n } else if (f === 'mm') {\n minute = parsedNumber;\n } else if (f === 'ss') {\n second = parsedNumber;\n } else if (f === 'SSS') {\n milliseconds = parsedNumber;\n } else if (f === 'a') {\n if (!isNaN(parseInt(splitDate![splitDate!.length - 1], 10))) {\n continue;\n }\n const parsedMeridian = splitDate![splitDate.length - 1];\n const meridian = getMeridian(parsedMeridian, locale);\n if (hour === 12 && meridian === 'AM') {\n hour = 0;\n } else if (meridian === 'PM') {\n hour = (hour % 12) + 12;\n } else if (!meridian) {\n return INVALID_DATE;\n }\n }\n }\n if (month > 12 || date > 31 || date > new Date(year, month, 0).getDate()) {\n return INVALID_DATE;\n }\n return new Date(year, month - 1, date, hour, minute, second, milliseconds);\n};\n\nconst getMeridian = (parsedMeridian: string, locale: string): 'AM' | 'PM' | undefined => {\n const meridian = getLocaleDayPeriods(locale, FormStyle.Format, TranslationWidth.Short);\n const usingAM = parsedMeridian === meridian[0].toUpperCase();\n if (usingAM) {\n return 'AM';\n } else {\n const usingPM = parsedMeridian === meridian[1].toUpperCase();\n return usingPM ? 'PM' : undefined;\n }\n};\n\n// Adapted from: https://github.com/angular/angular/blob/91954cf20e17a386d71cc8ea25d1d17b9ae1e31c/packages/common/src/i18n/format_date.ts\n// unfortunately it is not exported there\nexport const getNamedFormat = (locale: string, format: string): string => {\n const localeId = getLocaleId(locale);\n NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {};\n\n if (NAMED_FORMATS[localeId][format]) {\n return NAMED_FORMATS[localeId][format];\n }\n\n let formatValue = '';\n switch (format) {\n case 'shortDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Short);\n break;\n case 'shortTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);\n break;\n case 'mediumTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);\n break;\n case 'longTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);\n break;\n case 'fullTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);\n break;\n case 'short':\n case 'medium':\n {\n const shortTime = getNamedFormat(locale, format === 'short' ? 'shortTime' : 'mediumTime');\n const shortDate = getNamedFormat(locale, 'shortDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [\n shortTime,\n shortDate\n ]);\n }\n break;\n }\n if (formatValue) {\n NAMED_FORMATS[localeId][format] = formatValue;\n }\n return formatValue;\n};\n\nconst formatDateTime = (str: string, optVals: string[]): string => {\n if (optVals) {\n str = str.replace(/\\{([^}]+)}/g, (match, key) =>\n optVals != null && key in optVals ? optVals[key] : match\n );\n }\n return str;\n};\n\nexport const getDateWithoutTime = (date: Date): Date => createDate(date, 0, 0, 0, 0);\n\n/**\n * Get today\n * @returns date of today\n */\nexport const today = (): Date => new Date();\n\n/**\n * Calculate a new date based on the offset while considering the min and max date.\n * @param current - input date.\n * @param daysOffset - numeric offset of days.\n * @returns new date if the range is valid or original date\n */\nexport const addDaysInRange = (\n current: Date,\n daysOffset: number,\n minDate?: Date,\n maxDate?: Date\n): Date => {\n const newDate = addDays(current, daysOffset);\n // Make sure the new date is within the specified limits\n // MinDate < new data < MaxDate\n if (isSameOrBetween(newDate, minDate, maxDate)) {\n return newDate;\n }\n return getDateSameOrBetween(newDate, minDate, maxDate);\n};\n\n/**\n * Get date delta based on the offset.\n * @param date - source date object.\n * @param days - numeric offset of days.\n * @returns new date.\n */\nexport const addDays = (date: Date, days: number): Date => {\n const d = createDate(date);\n d.setDate(d.getDate() + days);\n return d;\n};\n\n/**\n * Update date/day of give date without changing the month.\n * In case the day exceed the number of days in the current month the last day in month will be assigned.\n * @param date - the date object to update the day.\n * @param day - the day which shall be set.\n * @returns the updated date object.\n */\nexport const changeDay = (date: Date, day: number): Date => {\n const lastDay = daysInMonth(date.getMonth(), date.getFullYear());\n date.setDate(lastDay <= day ? lastDay : day);\n return date;\n};\n\n/**\n * Get date delta specifically for months based on the offset.\n * @param current - starting date.\n * @param monthsOffset - numeric offset of months.\n * @param minDate - optional minimum allowed date.\n * @param maxDate - optional maximum allowed date.\n * @returns a new date object with the updated month.\n */\nexport const addMonthsInRange = (\n current: Date,\n monthsOffset: number,\n minDate?: Date,\n maxDate?: Date\n): Date => {\n let newDate = createDateInternal(current.getFullYear(), current.getMonth() + monthsOffset, 1);\n newDate = changeDay(newDate, current.getDate());\n if (isSameOrBetween(newDate, minDate, maxDate)) {\n return newDate;\n }\n return getDateSameOrBetween(newDate, minDate, maxDate);\n};\n\n/**\n * Get date delta specifically for years based on the offset.\n * @param current - starting date.\n * @param yearsOffset - numeric offset of years.\n * @param minDate - optional minimum allowed date.\n * @param maxDate - optional maximum allowed date.\n * @returns a new date object with the updated year.\n */\nexport const addYearsInRange = (\n current: Date,\n yearsOffset: number,\n minDate?: Date,\n maxDate?: Date\n): Date => {\n const newDate = createDateInternal(\n current.getFullYear() + yearsOffset,\n current.getMonth(),\n current.getDate()\n );\n if (isSameOrBetween(newDate, minDate, maxDate)) {\n return newDate;\n }\n return getDateSameOrBetween(newDate, minDate, maxDate);\n};\n\n/**\n * Get number of days for the given month and year.\n * @param month - month as number (0..11).\n * @param year - year as number.\n * @returns the number of days for the given month.\n */\nexport const daysInMonth = (month: number, year: number): number =>\n // By using 0 as the day it will give us the last day of the prior\n // month. So passing in 1 as the month number will return the last day\n new Date(year, month + 1, 0).getDate();\n\n/**\n * Get the first date of the week based on the input date.\n * @param current - a date object from where the last date of a week is derived.\n * @param weekStartDay - optional when a week shall start.\n * @returns a new date object which is the start of the current week.\n */\nexport const getWeekStartDate = (current: Date, weekStartDay: WeekStart = 'monday'): Date => {\n const weekStartDate = createDate(current);\n const diff = current.getDate() - getWeekDayOffset(current, weekStartDay);\n weekStartDate.setDate(diff);\n return weekStartDate;\n};\n\n/**\n * Get the last date of the week based on the input date.\n * @param current - a date object from where the last date of a week is derived.\n * @param weekStartDay - optional when a week shall start.\n * @returns the last date within the week.\n */\nexport const getWeekEndDate = (current: Date, weekStartDay: WeekStart = 'monday'): Date => {\n const weekStartDate = createDate(current);\n weekStartDate.setDate(current.getDate() + 6 - getWeekDayOffset(current, weekStartDay));\n return weekStartDate;\n};\n\n/**\n * Get the beginning of the month.\n * @param current - a date object from where the first date in a month is derived.\n * @returns a new date object which starts a the first.\n */\nexport const getFirstDateInMonth = (current: Date): Date =>\n new Date(current.getFullYear(), current.getMonth(), 1);\n\n/**\n * Get the last date of the month.\n * @param current - a date object from where we derive the last date in a month.\n * @returns a new date object which is the last day in the current month.\n */\nexport const getLastDateInMonth = (current: Date): Date =>\n new Date(current.getFullYear(), current.getMonth() + 1, 0);\n\n/**\n * Get the beginning of the year.\n * @param current - a date object from where the first date in a year is derived.\n * @returns a new date object which starts a the first.\n */\nexport const getFirstDateInYear = (current: Date): Date => new Date(current.getFullYear(), 0, 1);\n\n/**\n * Are the two dates identical without considering time.\n */\nexport const isSameDate = (current: Date, compareTo?: Date): boolean => {\n if (!compareTo) {\n return false;\n }\n return (\n current.getFullYear() === compareTo.getFullYear() &&\n current.getMonth() === compareTo.getMonth() &&\n current.getDate() === compareTo.getDate()\n );\n};\n\n/**\n * Are the two months identical without considering time.\n */\nexport const isSameMonth = (current: Date, compareTo?: Date): boolean => {\n if (!compareTo) {\n return false;\n }\n return isSameYear(current, compareTo) && current.getMonth() === compareTo.getMonth();\n};\n\n/**\n * Are the two years identical.\n */\nexport const isSameYear = (current: Date, compareTo?: Date): boolean => {\n if (!compareTo) {\n return false;\n }\n return current.getFullYear() === compareTo.getFullYear();\n};\n/**\n * Compares two dates.\n * @param first - The first date to compare.\n * @param second - The second date to compare.\n * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n * a number greater than 0 if the first date is later.\n */\nexport const compareDate = (first: Date, second: Date): number =>\n compareMonth(first, second) || first.getDate() - second.getDate();\n\n/**\n * Compares two months.\n * @param first - The first month to compare.\n * @param second - The second month to compare.\n * @returns 0 if the months are equal, a number less than 0 if the first month is earlier,\n * a number greater than 0 if the first month is later.\n */\nexport const compareMonth = (first: Date, second: Date): number =>\n compareYear(first, second) || first.getMonth() - second.getMonth();\n\n/**\n * Compares two years.\n * @param first - The first year to compare.\n * @param second - The second year to compare.\n * @returns 0 if the years are equal, a number less than 0 if the first year is earlier,\n * a number greater than 0 if the first year is later.\n */\nexport const compareYear = (first: Date, second: Date): number =>\n first.getFullYear() - second.getFullYear();\n/**\n * Compare the current date is the same date or between start and end date.\n * @param current - the date object.\n * @param from - optional min date, if no value is provided we assume true for the min value.\n * @param to - optional max date, if no value is provided we assume true for the max value.\n * @returns true if the date is in the provided range.\n */\nexport const isSameOrBetween = (current: Date, from?: Date, to?: Date): boolean => {\n // from <= d\n const isInMinRange = from ? compareDate(from, current) <= 0 : true;\n // d <= to\n const isInMaxRange = to ? compareDate(current, to) <= 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current month is the same month or between start and end month.\n * @param current - the month object.\n * @param from - optional min month, if no value is provided we assume true for the min value.\n * @param to - optional max month, if no value is provided we assume true for the max value.\n * @returns true if the date is in the provided range.\n */\nexport const isSameOrBetweenMonth = (current: Date, from?: Date, to?: Date): boolean => {\n // from <= d\n const isInMinRange = from ? compareMonth(from, current) <= 0 : true;\n // d <= to\n const isInMaxRange = to ? compareMonth(current, to) <= 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current year is the same year or between start and end year.\n * @param current - the year object.\n * @param from - optional min year, if no value is provided we assume true for the min value.\n * @param to - optional max year, if no value is provided we assume true for the max value.\n * @returns true if the date is in the provided range.\n */\nexport const isSameOrBetweenYears = (current: Date, from?: Date, to?: Date): boolean => {\n // from <= d\n const isInMinRange = from ? compareYear(from, current) <= 0 : true;\n // d <= to\n const isInMaxRange = to ? compareYear(current, to) <= 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current date is between start and end date.\n * from \\< current \\< to\n */\nexport const isBetween = (current: Date, from?: Date, to?: Date): boolean => {\n const isInMinRange = from ? compareDate(current, from) > 0 : true;\n const isInMaxRange = to ? compareDate(current, to) < 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current month is between start and end month.\n * from \\< current \\< to\n */\nexport const isBetweenMonth = (current: Date, from?: Date, to?: Date): boolean => {\n const isInMinRange = from ? compareMonth(current, from) > 0 : true;\n const isInMaxRange = to ? compareMonth(current, to) < 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current year is between start and end year.\n * from \\< current \\< to\n */\nexport const isBetweenYears = (current: Date, from?: Date, to?: Date): boolean => {\n const isInMinRange = from ? compareYear(current, from) > 0 : true;\n const isInMaxRange = to ? compareYear(current, to) < 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Is first date after the second date (without considering the time).\n * current \\> compareTo\n */\nexport const isAfter = (current: Date, compareTo: Date): boolean =>\n compareDate(current, compareTo) > 0;\n\n/**\n * Is first month after the second month (without considering the time).\n * current \\> compareTo\n */\nexport const isAfterMonth = (current: Date, compareTo: Date): boolean =>\n compareMonth(current, compareTo) > 0;\n\n/**\n * Is first year after the second year.\n * current \\> compareTo\n */\nexport const isAfterYear = (current: Date, compareTo: Date): boolean =>\n compareYear(current, compareTo) > 0;\n\n/**\n * Is first date equal or before the second date (without considering the time).\n * current \\>= compareTo\n */\nexport const isSameOrBefore = (current: Date, compareTo: Date): boolean =>\n compareDate(current, compareTo) <= 0;\n\n/**\n * Is first month equal or before the second month.\n * current \\>= compareTo\n */\nexport const isSameOrBeforeMonth = (current: Date, compareTo: Date): boolean =>\n compareMonth(current, compareTo) <= 0;\n\n/**\n * Is first year equal or before the second year.\n * current \\>= compareTo\n */\nexport const isSameOrBeforeYear = (current: Date, compareTo: Date): boolean =>\n compareMonth(current, compareTo) <= 0;\n\n/**\n * Are the two dates in different months.\n */\nexport const isAnotherMonth = (current: Date, compareTo: Date): boolean =>\n current.getMonth() !== compareTo.getMonth();\n\n/**\n * Are the two dates in different years.\n */\nexport const isAnotherYear = (current: Date, compareTo: Date): boolean =>\n current.getFullYear() !== compareTo.getFullYear();\n\n/**\n * Are the two dates either in different months or years.\n */\nexport const isAnotherMonthOrYear = (current: Date, compareTo: Date): boolean =>\n isAnotherMonth(current, compareTo) || isAnotherYear(current, compareTo);\n\n/**\n * Get a date which is in within the range and the close to current.\n */\nexport const getDateSameOrBetween = (current: Date, minDate?: Date, maxDate?: Date): Date => {\n if (isSameOrBetween(current, minDate, maxDate)) {\n return current;\n }\n const minDistance = minDate\n ? Math.ceil(Math.abs(current.getTime() - minDate!.getTime()))\n : Number.MAX_VALUE;\n const maxDistance = maxDate\n ? Math.ceil(Math.abs(current.getTime() - maxDate!.getTime()))\n : Number.MAX_VALUE;\n return minDistance < maxDistance ? createDate(minDate!) : createDate(maxDate!);\n};\n\n/**\n * Get date or absolute min date.\n * @param date - input date.\n * @returns date or date of 1.1.1900\n */\nexport const getMinDate = (date?: Date): Date =>\n date && !isNaN(date.getTime()) ? date : new Date(Date.UTC(1900, 0, 1));\n\n/**\n * Get date or absolute max date.\n * @param date - input date.\n * @returns date or date of 31.12.2154\n */\nexport const getMaxDate = (date?: Date): Date =>\n date && !isNaN(date.getTime()) ? date : new Date(Date.UTC(2154, 11, 31));\n\n/**\n * Is valid date object.\n */\nexport const isValid = (date?: Date): date is NonNullable<Date> => !!date && !isNaN(date.getTime());\n\n/**\n * Returns the next months of the given date.\n * @param date - The date for which the next month is returned.\n * @returns A date of the first day of the following month of the given day.\n */\nexport const nextMonth = (date: Date): Date => {\n if (date.getMonth() === 11) {\n return new Date(date.getFullYear() + 1, 0, 1);\n } else {\n return new Date(date.getFullYear(), date.getMonth() + 1, 1);\n }\n};\n\n/**\n * Returns the last day of the previous month of the given date object.\n * @param date - The date for which the previous month is returned.\n * @returns A date of the last day of the previous month of the given day.\n */\nexport const previousMonth = (date: Date): Date => {\n if (date.getMonth() === 0) {\n return new Date(date.getFullYear() - 1, 12, 0);\n } else {\n return new Date(date.getFullYear(), date.getMonth(), 0);\n }\n};\n\nexport const minDate = (first?: Date, second?: Date): Date | undefined => {\n return !!first && !!second ? (first < second ? first : second) : (first ?? second);\n};\n\nexport const maxDate = (first?: Date, second?: Date): Date | undefined => {\n return !!first && !!second ? (first > second ? first : second) : (first ?? second);\n};\n\n/**\n * Indicate whether the time use the 12-hour format\n */\nexport const is12HourFormat = (locale: string, config: DatepickerInputConfig): boolean => {\n const dateFormat = getDatepickerFormat(locale, config, true);\n return dateFormat?.includes('a') ?? false;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { getNamedFormat } from './date-time-helper';\n\nexport type WeekStart = 'monday' | 'saturday' | 'sunday' | undefined;\n\nexport interface DatepickerConfig {\n /**\n * Text or translation key for today button title. Default is `Today`.\n */\n todayText?: TranslatableString;\n /**\n * Defines the starting day of the week. Default is `monday`.\n */\n weekStartDay?: WeekStart;\n /**\n * Configuration for hiding week numbers. Default is `false`.\n */\n hideWeekNumbers?: boolean;\n /**\n * Defines the timepicker visibility. Default is `false`.\n */\n showTime?: boolean;\n /**\n * Defines the timepicker minutes visibility. Default is `true`.\n */\n showMinutes?: boolean;\n /**\n * Defines the timepicker seconds visibility . Default is `false`.\n */\n showSeconds?: boolean;\n /**\n * Defines the timepicker milliseconds visibility . Default is `false`.\n */\n showMilliseconds?: boolean;\n /**\n * Hides disable time switch in the timepicker part and includes mandatory the\n * time in the picker.\n */\n mandatoryTime?: boolean;\n /**\n * Defines the time is disabled when visible. Will also be updated on user change. Default is `false`.\n */\n disabledTime?: boolean;\n /**\n * Text or translation key for the `enabled` disable time. Default is `Consider time`.\n */\n enabledTimeText?: TranslatableString;\n /**\n * Text or translation key for the `disabled` disable time. Default is `Ignore time`.\n */\n disabledTimeText?: TranslatableString;\n /**\n * Minimal (earliest) selectable date.\n */\n minDate?: Date;\n /**\n * Maximal (latest) selectable date.\n */\n maxDate?: Date;\n /**\n * Options to turn on date range selection.\n */\n enableDateRange?: boolean;\n /**\n * Option to use two months view for date range picking.\n */\n enableTwoMonthDateRange?: boolean;\n /**\n * Consider time with minDate and maxDate\n */\n enableTimeValidation?: boolean;\n /**\n * Only month and year are selectable.\n */\n onlyMonthSelection?: boolean;\n\n hoursLabel?: string;\n minutesLabel?: string;\n secondsLabel?: string;\n millisecondsLabel?: string;\n hideLabels?: boolean;\n\n hoursAriaLabel?: string;\n minutesAriaLabel?: string;\n secondsAriaLabel?: string;\n millisecondsAriaLabel?: string;\n\n hoursPlaceholder?: string;\n minutesPlaceholder?: string;\n secondsPlaceholder?: string;\n millisecondsPlaceholder?: string;\n\n meridians?: string[];\n meridiansLabel?: string;\n meridiansAriaLabel?: string;\n\n startTimeLabel?: string;\n endTimeLabel?: string;\n}\n\nexport interface DatepickerInputConfig extends DatepickerConfig {\n /**\n * A custom date/time format according the Angular date pipe (see {@link https://angular.dev/api/common/DatePipe}).\n * Only numeric date formats are supported.\n * The format is used to render the time of a date-time criterion. If not specified, `mediumTime` is\n * used if the `showSeconds` flag is true, otherwise `shortTime` as default. For the date-only\n * case, 'shortDate' is used.\n */\n dateTimeFormat?: string;\n /**\n * Similar to `dateTimeFormat`, but used when only a date is displayed\n * (e.g. when `showTime === false` or `disabledTime === true`).\n * Only numeric date formats are supported.\n */\n dateFormat?: string;\n}\n\n/**\n * Returns date / datetime format to be used for rendering a date object as text\n * to an Html input element, which has the `SiDatepickerDirective`.\n *\n * @see https://angular.dev/api/common/DatePipe?tab=usage-notes\n * @param locale - The locale for which the format is returned.\n * @param config - The config object of the datepicker.\n * @param timeWhenDisabled - If `true`, a format with time (medium or short) is returned, even if the `disabledTime` config is `true`.\n * @returns Either\n * - a custom format provided by the config,\n * - the localized `medium` format when time and seconds included\n * - the localized `short` format when time and no seconds included\n */\nexport const getDatepickerFormat = (\n locale: string,\n config?: DatepickerInputConfig,\n timeWhenDisabled = false\n): string => {\n // try format from consumer\n let dateFormat =\n config?.showTime && !config.disabledTime ? config.dateTimeFormat : config?.dateFormat;\n if (!dateFormat) {\n // no format from consumer - use default depending on configuration\n let named: string;\n if (config?.showTime && (!config.disabledTime || timeWhenDisabled)) {\n named = config.showSeconds ? 'medium' : 'short';\n } else {\n named = 'shortDate';\n }\n dateFormat = getNamedFormat(locale, named);\n }\n\n // patch 2-digit year to 4-digit year\n if (!dateFormat.includes('yyyy')) {\n dateFormat = dateFormat.replace('yy', 'yyyy');\n }\n if (config?.onlyMonthSelection && dateFormat.includes('d')) {\n dateFormat = dateFormat\n .replace(/\\sd/, '')\n .replace(/\\/d/, '')\n .replace(/d/g, '')\n .replace(/^\\./, '');\n }\n\n return dateFormat;\n};\n\nexport type DateRange = {\n start: Date | undefined;\n end: Date | undefined;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { formatDate } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n output,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '@siemens/element-ng/form';\n\nimport { compareDate, getMaxDate, getMinDate, isValid, parseDate } from './date-time-helper';\nimport { DatepickerInputConfig, getDatepickerFormat } from './si-datepicker.model';\n\n/**\n * Base directive for date input fields.\n */\n@Directive({\n selector: 'input[siDateInput]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiDateInputDirective,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiDateInputDirective,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiDateInputDirective\n }\n ],\n host: {\n '[attr.id]': 'id()',\n '[attr.disabled]': 'disabled() || null',\n '[attr.readonly]': 'readonly() || null',\n '[class.readonly]': 'readonly()',\n '[attr.aria-describedby]': 'errormessageId()',\n '[value]': 'dateString()'\n },\n exportAs: 'siDateInput'\n})\nexport class SiDateInputDirective\n implements ControlValueAccessor, OnChanges, Validator, SiFormItemControl\n{\n private static idCounter = 0;\n\n /**\n * @defaultValue\n * ```\n * `si-date-input-${SiDateInputDirective.idCounter++}`\n * ```\n */\n readonly id = input(`si-date-input-${SiDateInputDirective.idCounter++}`);\n\n /**\n * Configuration object for the datepicker.\n *\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly siDatepickerConfig = model<DatepickerInputConfig | undefined>({});\n\n /**\n * Emits an event to notify about disabling the time from the datepicker.\n * When time is disable, we construct a pure date object in UTC 00:00:00 time.\n */\n readonly siDatepickerDisabledTime = output<boolean>();\n /**\n * Emits an event on state changes e.g. readonly, disable, ... .\n */\n readonly stateChange = output<void>();\n /**\n * Whether the date range input is disabled.\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly disabledInput = input(false, { alias: 'disabled' });\n\n /**\n * Whether the date range input is readonly.\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * This ID will be bound to the `aria-describedby` attribute of the date-input.\n * Use this to reference the element containing the error message(s) for the date-input.\n * It will be picked by the {@link SiFormItemComponent} if the date-input is used inside a form item.\n *\n * @defaultValue\n * ```\n * `${this.id()}-errormessage`\n * ```\n */\n readonly errormessageId = input(`${this.id()}-errormessage`);\n\n /** @internal */\n validatorOnChange = (): void => {};\n /**\n * Date form input validator function, validating text format, min and max value.\n */\n protected validator = Validators.compose([\n () => this.formatValidator(),\n () => this.minValidator(),\n () => this.maxValidator()\n ])!;\n protected date?: Date;\n /**\n * Emits a new `date` value on input field value changes.\n */\n protected readonly dateChange = output<Date | undefined>();\n /** @internal */\n public readonly disabled = computed(() => this.disabledInput() || this.disabledNgControl());\n protected onTouched: () => void = () => {};\n protected onModelChange: (value: any) => void = () => {};\n protected readonly dateString = signal('');\n private readonly disabledNgControl = signal(false);\n protected readonly locale = inject(LOCALE_ID).toString();\n private format = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.siDatepickerConfig && !changes.siDatepickerConfig.currentValue) {\n this.siDatepickerConfig.set({});\n }\n if (changes.readonly || changes.disabledInput) {\n this.stateChange.emit();\n }\n if (changes.siDatepickerConfig) {\n // reflect possible change is date/time format\n const format = this.format;\n this.format = '';\n this.getFormat();\n const formatChanged = format !== this.format;\n if (this.date && formatChanged) {\n this.updateNativeValue();\n }\n }\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n return this.validator(c);\n }\n\n registerOnChange(fn: any): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledNgControl.set(isDisabled);\n this.stateChange.emit();\n }\n\n writeValue(value?: Date | string): void {\n // remove date when user input is empty\n let emptyString = false;\n // Flag to define invalid string\n let invalidDate = false;\n if (typeof value === 'string') {\n emptyString = value.trim().length === 0;\n value = parseDate(value, this.getFormat(), this.locale);\n invalidDate = !value;\n }\n\n // Only emit changes to prevent that a destroyed output emit a value\n if (this.date !== value) {\n this.date = value;\n this.dateChange.emit(this.date);\n\n // We should not change the content of the input field when the user typed\n // a wrong input. Otherwise the typed content changes and the user cannot\n // correct the content.\n if (!invalidDate || emptyString) {\n this.updateNativeValue();\n }\n }\n }\n\n private updateNativeValue(): void {\n let dtStr = '';\n if (isValid(this.date)) {\n dtStr = formatDate(this.date, this.getFormat(), this.locale);\n }\n this.dateString.set(dtStr);\n }\n\n /**\n * Handles `input` events on the input element.\n */\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n const parsedDate = parseDate(value, this.getFormat(), this.locale);\n\n // Is same date\n const hasChanged = !(parsedDate === this.date);\n if (hasChanged) {\n this.date = parsedDate;\n this.onModelChange(this.date);\n this.dateChange.emit(this.date);\n }\n }\n\n @HostListener('blur', ['$event']) protected onBlur(event: FocusEvent): void {\n this.onTouched();\n }\n\n private getFormat(): string {\n if (!this.format) {\n this.format = getDatepickerFormat(this.locale, this.siDatepickerConfig());\n }\n return this.format;\n }\n\n /**\n * Callback when the datepicker changes his value.\n * @param date - updated date\n */\n protected onDateChanged(date?: Date): void {\n // update input element\n this.writeValue(date);\n // update the Forms ngModel\n this.onModelChange(this.date);\n }\n\n /**\n * Datepicker consider time / ignore time changed.\n * @param disabledTime - disable time\n * @internal\n */\n onDisabledTime(disabledTime: boolean): void {\n this.format = '';\n // Temporary reset internal date to force an update with the new date format\n const currentDate = this.date;\n this.date = undefined;\n this.siDatepickerConfig()!.disabledTime = disabledTime;\n // Ensure the time format will be removed\n this.onDateChanged(currentDate);\n this.siDatepickerDisabledTime.emit(disabledTime);\n }\n\n /** The form control validator for date format */\n private formatValidator(): ValidationErrors | null {\n const invalidFormat = this.date && isNaN(this.date.getTime());\n return invalidFormat ? { dateFormat: { format: this.getFormat() } } : null;\n }\n\n /** The form control validator for the min date. */\n private minValidator(): ValidationErrors | null {\n const controlValue = this.date;\n const siDatepickerConfig = this.siDatepickerConfig();\n const min = getMinDate(siDatepickerConfig?.minDate);\n const withTime = siDatepickerConfig?.showTime;\n\n return !min ||\n !isValid(controlValue) ||\n (withTime ? controlValue >= min : compareDate(controlValue, min) >= 0)\n ? null\n : {\n minDate: {\n min,\n actual: controlValue,\n minString: formatDate(min, this.getFormat(), this.locale)\n }\n };\n }\n\n /** The form control validator for the min date. */\n private maxValidator(): ValidationErrors | null {\n const controlValue = this.date;\n const siDatepickerConfig = this.siDatepickerConfig();\n const max = getMaxDate(siDatepickerConfig?.maxDate);\n const withTime = siDatepickerConfig?.showTime;\n\n return !max ||\n !isValid(controlValue) ||\n (withTime ? controlValue <= max : compareDate(controlValue, max) <= 0)\n ? null\n : {\n maxDate: {\n max,\n actual: controlValue,\n maxString: formatDate(max, this.getFormat(), this.locale)\n }\n };\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, ElementRef, inject, input } from '@angular/core';\n\nimport { Cell } from './si-calendar-body.component';\nimport { CompareAdapter } from './si-compare-adapter';\n\n@Directive({\n selector: '[siCalendarDateCell]',\n host: {\n class: 'si-calendar-date-cell',\n '[attr.aria-disabled]': 'cell().disabled',\n '[class.disabled]': 'cell().disabled',\n '[attr.aria-label]': 'cell().ariaLabel',\n '[class.today]': 'this.cell().isToday',\n '[attr.aria-current]': 'this.cell().isToday ? \"date\" : null'\n }\n})\nexport class SiCalendarDateCellDirective {\n readonly cell = input.required<Cell>();\n readonly compareAdapter = input.required<CompareAdapter>();\n /** @defaultValue inject(ElementRef) */\n readonly ref = inject(ElementRef);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n isAfter,\n isAfterMonth,\n isAfterYear,\n isBetween,\n isBetweenMonth,\n isBetweenYears,\n isSameDate,\n isSameMonth,\n isSameOrBefore,\n isSameOrBeforeMonth,\n isSameOrBeforeYear,\n isSameOrBetween,\n isSameOrBetweenMonth,\n isSameOrBetweenYears,\n isSameYear\n} from '../date-time-helper';\n\n/**\n * Compare the dates based on the active view.\n */\nexport interface CompareAdapter {\n isAfter(current: Date, start: Date): boolean;\n isBetween(current: Date, from?: Date, to?: Date): boolean;\n isEqual(current: Date, other?: Date): boolean;\n isEqualOrBefore(current: Date, other: Date): boolean;\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean;\n}\n\n/**\n * Compare dates in the month view.\n */\nexport class DayCompareAdapter implements CompareAdapter {\n isAfter(current: Date, start: Date): boolean {\n return isAfter(current, start);\n }\n\n isBetween(current: Date, from?: Date | undefined, to?: Date | undefined): boolean {\n return isBetween(current, from, to);\n }\n\n isEqual(current: Date, other: Date): boolean {\n return isSameDate(current, other);\n }\n\n isEqualOrBefore(current: Date, other: Date): boolean {\n return isSameOrBefore(current, other);\n }\n\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean {\n return isSameOrBetween(current, from, to);\n }\n}\n\n/**\n * Compare dates in the year view.\n */\nexport class MonthCompareAdapter implements CompareAdapter {\n isAfter(current: Date, start: Date): boolean {\n return isAfterMonth(current, start);\n }\n\n isBetween(current: Date, from?: Date | undefined, to?: Date | undefined): boolean {\n return isBetweenMonth(current, from, to);\n }\n\n isEqual(current: Date, other: Date): boolean {\n return isSameMonth(current, other);\n }\n\n isEqualOrBefore(current: Date, other: Date): boolean {\n return isSameOrBeforeMonth(current, other);\n }\n\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean {\n return isSameOrBetweenMonth(current, from, to);\n }\n}\n\nexport class YearCompareAdapter implements CompareAdapter {\n isAfter(current: Date, other: Date): boolean {\n return isAfterYear(current, other);\n }\n\n isBetween(current: Date, from?: Date | undefined, to?: Date | undefined): boolean {\n return isBetweenYears(current, from, to);\n }\n\n isEqual(current: Date, other: Date): boolean {\n return isSameYear(current, other);\n }\n\n isEqualOrBefore(current: Date, other?: Date): boolean {\n if (!other) {\n return false;\n }\n return isSameOrBeforeYear(current, other);\n }\n\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean {\n return isSameOrBetweenYears(current, from, to);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n Component,\n computed,\n input,\n model,\n output,\n viewChildren\n} from '@angular/core';\n\nimport { SiCalendarDateCellDirective } from './si-calendar-date-cell.directive';\nimport { CompareAdapter, DayCompareAdapter } from './si-compare-adapter';\n\n/** CSS classes that can be associated with a calendar cell. */\nexport type CellCssClasses = string | string[] | Set<string> | { [key: string]: any };\n\nexport interface Cell {\n value: number;\n /** Indicate that the cell is disabled */\n disabled: boolean;\n /** Cell specific aria label */\n ariaLabel: string;\n /** Display value */\n displayValue: string;\n /**\n * Indicate that the cell is a preview, this is dedicated to the calendar month\n * view to where a day could be part of the previous or next month\n */\n isPreview: boolean;\n /**\n * The cell corresponds to today.\n */\n isToday: boolean;\n /** Raw value */\n valueRaw: Date;\n /** Additional CSS classes for the cell */\n cssClasses: CellCssClasses;\n}\n\n/**\n * Base interface for selections.\n */\nabstract class SelectionStrategy {\n constructor(protected compare: CompareAdapter) {}\n\n /**\n * Indicate whether the cell is selected\n */\n abstract isSelected(cell: Cell, start?: Date, end?: Date): boolean;\n /**\n * Cell is between start and end value.\n * start \\< Cell value \\< end\n */\n abstract inRange(c: Cell, start?: Date, end?: Date): boolean;\n /**\n * Cell is either startValue or endValue\n */\n abstract isRangeSelected(cell: Cell, date?: Date): boolean;\n /**\n * Preview selection range on mouse hover.\n */\n abstract previewRangeHover(cell: Cell, hoverCell?: Cell, start?: Date): boolean;\n /**\n * Preview selection range on mouse hover end of range.\n */\n abstract previewRangeHoverEnd(cell: Cell, hoverCell?: Cell, start?: Date): boolean;\n}\n\n/**\n * Strategy the handle single selection within the {@link SiCalendarBodyComponent}.\n */\nclass SingleSelectionStrategy extends SelectionStrategy {\n isSelected(cell: Cell, start?: Date, end?: Date): boolean {\n return this.compare.isEqual(cell.valueRaw, start);\n }\n\n inRange(cell: Cell, start?: Date, end?: Date): boolean {\n return false;\n }\n\n isRangeSelected(cell: Cell, date?: Date): boolean {\n return false;\n }\n\n previewRangeHover(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n return false;\n }\n\n previewRangeHoverEnd(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n return false;\n }\n}\n\n/**\n * Strategy the handle range selection within the {@link SiCalendarBodyComponent}.\n */\nclass RangeSelectionStrategy extends SelectionStrategy {\n isSelected(cell: Cell, start?: Date, end?: Date): boolean {\n return this.compare.isEqual(cell.valueRaw, start) || this.compare.isEqual(cell.valueRaw, end);\n }\n\n inRange(c: Cell, start?: Date, end?: Date): boolean {\n if (!start || !end) {\n return false;\n }\n return this.compare.isBetween(c.valueRaw, start, end);\n }\n\n isRangeSelected(cell: Cell, date?: Date): boolean {\n return this.compare.isEqual(cell.valueRaw, date);\n }\n\n previewRangeHover(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n if (!hoverCell || cell.disabled || !start) {\n return false;\n }\n return (\n this.compare.isAfter(cell.valueRaw, start) &&\n this.compare.isEqualOrBefore(cell.valueRaw, hoverCell.valueRaw)\n );\n }\n\n previewRangeHoverEnd(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n if (!hoverCell || cell.disabled || !start) {\n return false;\n }\n return (\n this.compare.isAfter(cell.valueRaw, start) &&\n this.compare.isEqual(cell.valueRaw, hoverCell.valueRaw)\n );\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[si-calendar-body]',\n imports: [A11yModule, SiCalendarDateCellDirective],\n templateUrl: './si-calendar-body.component.html',\n host: {\n class: 'si-calendar-body'\n },\n exportAs: 'siCalendarBody'\n})\nexport class SiCalendarBodyComponent {\n /** The active date, the cell which will receive the focus. */\n readonly focusedDate = model.required<Date>();\n /** The date which shall be indicated as currently selected. */\n readonly startDate = input<Date>();\n /** Selected end value which is only considered with enableRangeSelection. */\n readonly endDate = input<Date>();\n /**\n * The cells to display in the table.\n *\n * @defaultValue []\n */\n readonly rows = input<Cell[][]>([]);\n /**\n * Labels for each row, which can be used to display the week number.\n * @defaultValue undefined\n */\n readonly rowLabels = input<string[] | undefined>(undefined);\n /**\n * Additional row label CSS class(es).\n *\n * @defaultValue []\n */\n readonly rowLabelCssClasses = input<CellCssClasses>([]);\n /**\n * Choose the selection strategy between single or range selection.\n * @defaultValue false\n */\n readonly enableRangeSelection = input(false);\n /**\n * Indicate whether a range preview shall be displayed.\n * It's necessary since to display a preview also datepicker has a valid endDate.\n *\n * @defaultValue true\n */\n readonly previewRange = input(true, { transform: booleanAttribute });\n /** The cell which which has the mouse hover. */\n readonly activeHover = model<Cell>();\n /**\n * Compare date functions which are necessary to compare a the dates according the current view.\n *\n * @defaultValue new DayCompareAdapter()\n */\n readonly compareAdapter = input<CompareAdapter>(new DayCompareAdapter());\n /** Emits when a user select a cell via click, space or enter. */\n readonly selectedValueChange = output<Date>();\n\n private readonly calendarDateCells = viewChildren(SiCalendarDateCellDirective);\n\n protected readonly selection = computed(() =>\n this.enableRangeSelection()\n ? new RangeSelectionStrategy(this.compareAdapter())\n : new SingleSelectionStrategy(this.compareAdapter())\n );\n\n /**\n * Focus calendar cell which is marked as active cell.\n */\n focusActiveCell(): void {\n setTimeout(() => {\n const focusedDateCells = this.calendarDateCells().filter(dateCell =>\n this.compareAdapter().isEqual(this.focusedDate()!, dateCell.cell().valueRaw)\n );\n if (focusedDateCells.length > 0) {\n focusedDateCells[0].ref.nativeElement.focus();\n }\n });\n }\n\n protected isActive(cell: Cell): boolean {\n return this.compareAdapter().isEqual(this.focusedDate()!, cell.valueRaw);\n }\n\n protected cellCss(cell: Cell): CellCssClasses {\n return cell.cssClasses;\n }\n\n protected emitActiveHover(cell: Cell): void {\n this.activeHover.set(cell);\n }\n\n protected emitSelectCell(selection: Cell): void {\n if (selection.disabled) {\n return;\n }\n this.selectedValueChange.emit(selection.valueRaw);\n }\n\n protected emitActiveDateChange(cell: Cell): void {\n if (!cell.disabled && !cell.isPreview) {\n // To provide a date-range preview it is necessary to maintain hoverCell also in case of keyboard usage\n this.emitActiveHover(cell);\n this.focusedDate.set(cell.valueRaw);\n }\n }\n}\n","@for (row of rows(); track rowIndex; let rowIndex = $index) {\n <tr role=\"row\">\n <!-- Typically used for week numbers -->\n @if (rowLabels()) {\n <td [class]=\"`si-calendar-row-label ${rowLabelCssClasses()}`\" [attr.data-row]=\"rowIndex\">\n {{ rowLabels()?.at(rowIndex) ?? '' }}\n </td>\n }\n @for (col of row; track colIndex; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"si-calendar-cell\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-col]=\"colIndex\"\n [class.range-hover]=\"\n previewRange() && selection().previewRangeHover(col, activeHover(), startDate())\n \"\n [class.range-hover-end]=\"\n previewRange() && selection().previewRangeHoverEnd(col, activeHover(), startDate())\n \"\n [class.range]=\"selection().inRange(col, startDate(), endDate())\"\n [class.range-start]=\"selection().isRangeSelected(col, startDate())\"\n [class.range-end]=\"selection().isRangeSelected(col, endDate())\"\n >\n <button\n siCalendarDateCell\n type=\"button\"\n [cell]=\"col\"\n [compareAdapter]=\"compareAdapter()\"\n [attr.cdkFocusInitial]=\"isActive(col) ? '' : null\"\n [class]=\"cellCss(col)\"\n [class.selected]=\"selection().isSelected(col, startDate(), endDate())\"\n [class.text-secondary]=\"\n col.isPreview &&\n !col.disabled &&\n !selection().isRangeSelected(col, startDate()) &&\n !selection().isRangeSelected(col, endDate()) &&\n !selection().inRange(col, startDate(), endDate())\n \"\n [tabindex]=\"isActive(col) ? '0' : '-1'\"\n (mouseover)=\"emitActiveHover(col)\"\n (click)=\"emitSelectCell(col)\"\n (focus)=\"emitActiveDateChange(col)\"\n >\n {{ col.displayValue }}\n </button>\n </td>\n }\n </tr>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output\n} from '@angular/core';\nimport { elementLeft2, elementRight2 } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\n\nexport type Direction = 'left' | 'right';\n\n@Component({\n selector: 'si-calendar-direction-button',\n imports: [SiIconComponent],\n templateUrl: './si-calendar-direction-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiCalendarDirectionButtonComponent {\n readonly ariaLabel = input.required<string>();\n /** @defaultValue false */\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly direction = input<Direction>();\n\n /**\n * Emit on button click.\n */\n readonly clicked = output();\n\n protected readonly icon = computed(() =>\n this.direction() === 'left' ? this.icons.elementLeft2 : this.icons.elementRight2\n );\n protected readonly buttonClass = computed(() =>\n this.direction() === 'left' ? 'previous-button' : 'next-button'\n );\n\n protected readonly icons = addIcons({ elementLeft2, elementRight2 });\n\n protected onClick(): void {\n this.clicked.emit();\n }\n}\n","<button\n role=\"button\"\n type=\"button\"\n [class]=\"`btn btn-circle btn-tertiary ${buttonClass()}`\"\n [disabled]=\"disabled() || null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick()\"\n>\n <si-icon class=\"icon flip-rtl\" [icon]=\"icon()\" />\n</button>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterViewInit,\n booleanAttribute,\n Component,\n input,\n model,\n output,\n viewChild\n} from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\n\n/**\n * Helper directive to set the initial focus to the calendar body cell.\n */\n@Component({\n template: ''\n})\nexport class SiInitialFocusComponent implements AfterViewInit {\n /** The cell which has the mouse hover. */\n readonly activeHover = model<Cell>();\n /** The date which is displayed as selected. */\n readonly startDate = input<Date>();\n /** The date which is displayed as selected end. The value is only considered with enableRangeSelection. */\n readonly endDate = input<Date>();\n /**\n * Guard to set the focus during ngAfterViewInit, we just set the focus after we first initialized the view\n *\n * @defaultValue true\n */\n readonly initialFocus = input(true);\n /** The minimum selectable date. */\n readonly minDate = input<Date>();\n /** The maximum selectable date. */\n readonly maxDate = input<Date>();\n /**\n * Optional input to control the minimum month the datepicker can show and the user can navigate.\n * The `minMonth` can be larger than the `minDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows an earlier month the more right one.\n */\n readonly minMonth = input<Date>();\n /**\n * Optional input to control the maximum month the datepicker can show and the user can navigate.\n * The `maxMonth` can be smaller than the `maxDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows an earlier month the more right one.\n */\n readonly maxMonth = input<Date>();\n /** Aria label for the next button. Needed for a11y. */\n readonly previousLabel = input.required<TranslatableString>();\n /** Aria label for the next button. Needed for a11y. */\n readonly nextLabel = input.required<TranslatableString>();\n /**\n * Is range selection enabled, when enabled it shows a preview between the startDate and the focused date.\n *\n * @defaultValue false\n */\n readonly isRangeSelection = input(false, { transform: booleanAttribute });\n /**\n * Indicate whether a range preview shall be displayed.\n * When enabled a preview is visible between startDate and focusedDate.\n *\n * @defaultValue true\n */\n readonly previewRange = input(true, { transform: booleanAttribute });\n /**\n * Emits when a new value is selected. In case where the value is null to\n * user aborted the selection by Escape.\n */\n readonly selectedValueChange = output<Date | null>();\n /** The body of calendar table */\n protected readonly calendarBody = viewChild.required(SiCalendarBodyComponent);\n\n ngAfterViewInit(): void {\n if (this.initialFocus()) {\n this.focusActiveCell();\n }\n }\n\n /**\n * Focus calendar cell which is marked as active cell.\n */\n focusActiveCell(): void {\n this.calendarBody().focusActiveCell();\n }\n\n protected onActiveHoverChange(event?: Cell): void {\n this.activeHover.set(event);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n LOCALE_ID,\n model,\n output\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport {\n addDaysInRange,\n addMonthsInRange,\n createDate,\n getDayStrings,\n getFirstDateInMonth,\n getLastDateInMonth,\n getWeekEndDate,\n getWeekOfYear,\n getWeekStartDate,\n isAfterMonth,\n isAnotherMonthOrYear,\n isSameDate,\n isSameMonth,\n isSameOrBetween,\n today\n} from '../date-time-helper';\nimport { WeekStart } from '../si-datepicker.model';\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\nimport { SiCalendarDirectionButtonComponent } from './si-calendar-direction-button.component';\nimport { DayCompareAdapter } from './si-compare-adapter';\nimport { SiInitialFocusComponent } from './si-initial-focus.component';\n\n/**\n * Show dates of a single month as table and handles the keyboard interactions.\n * The focusedDate is handled according the keyboard interactions.\n */\n@Component({\n selector: 'si-day-selection',\n imports: [DatePipe, SiCalendarBodyComponent, SiCalendarDirectionButtonComponent, SiTranslatePipe],\n templateUrl: './si-day-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiDaySelectionComponent extends SiInitialFocusComponent {\n private readonly todayDefaultText = t(() => $localize`:@@SI_DATEPICKER.TODAY:Today`);\n /**\n * Indicate whether the week numbers shall be hidden.\n *\n * @defaultValue false\n */\n readonly hideWeekNumbers = input(false, { transform: booleanAttribute });\n /**\n * Defines the starting day of the week. Default is `monday`.\n *\n * @defaultValue 'monday'\n */\n readonly weekStartDay = input<WeekStart>('monday');\n /**\n * The active date, the cell which will receive the focus.\n * @defaultValue calendarUtils.today()\n */\n readonly focusedDate = model.required<Date>();\n /** Today button text */\n readonly todayLabel = input<TranslatableString>();\n /** Aria label for calendar week column */\n readonly calendarWeekLabel = input<TranslatableString>();\n /** Emits when the active focused date changed to another month / year, typically during keyboard navigation */\n readonly activeMonthChange = output<Date>();\n /** Emits when the user requests a different to show a different view */\n readonly viewChange = output<'year' | 'month'>();\n protected readonly today = computed(() => this.todayLabel() ?? this.todayDefaultText);\n /** The translated list of week days. */\n protected readonly days = computed(() => getDayStrings(this.locale, this.weekStartDay()));\n /** The week numbers which are shown as row label */\n protected readonly weekNumbers = computed(() =>\n this.weeks().map(w => getWeekOfYear(w[0].valueRaw, this.weekStartDay()).toString())\n );\n /**\n * The current visible list of calendar days.\n * Every time the focusedDate changes to either another month or year the list will be rebuild.\n */\n protected readonly weeks = computed(() => {\n const focusedDate = this.focusedDate();\n const monthStart = getFirstDateInMonth(focusedDate);\n const monthEnd = getLastDateInMonth(focusedDate);\n /**\n * We start the month with the first day in the week which has the effect that dates are\n * visible which aren't in the active month.\n */\n const startDate = getWeekStartDate(monthStart, this.weekStartDay());\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const weeks: Cell[][] = [[], [], [], [], [], []];\n let weekIndex = 0;\n for (\n let i = 0, date = new Date(startDate);\n weeks[weeks.length - 1].length < 7;\n i++, date.setDate(date.getDate() + 1)\n ) {\n if (i > 0 && i % 7 === 0) {\n weekIndex++;\n }\n\n const activeMonth = isSameOrBetween(date, monthStart, monthEnd);\n const isToday = isSameDate(date, today());\n const outOfRange = !isSameOrBetween(date, minDate, maxDate);\n\n weeks.at(weekIndex)?.push({\n value: date.getDate(),\n disabled: outOfRange,\n ariaLabel: date.toDateString(),\n displayValue: date.getDate().toString(),\n isPreview: !activeMonth,\n isToday,\n valueRaw: createDate(date),\n cssClasses: ['day', activeMonth ? 'si-h4' : 'si-body-lg']\n });\n }\n return weeks;\n });\n /** Compare date based on the current view */\n protected compareAdapter = new DayCompareAdapter();\n /** Disable today button if it is the same month */\n protected readonly isTodayButtonDisabled = computed(() =>\n isSameMonth(today(), this.focusedDate())\n );\n /**\n * Indicate the previous button shall be disabled.\n * This happens when the focusedDate is equal or before the minDate.\n */\n protected readonly isPreviousButtonDisabled = computed(() => {\n const minDate = this.minDate();\n const focusedDate = this.focusedDate();\n return minDate && (isSameMonth(focusedDate, minDate) || isAfterMonth(minDate, focusedDate));\n });\n /**\n * Indicate the next button shall be disabled.\n * This happens when the focusedDate is equal or after the maxDate.\n */\n protected readonly isNextButtonDisabled = computed(() => {\n const maxDate = this.maxDate();\n const focusedDate = this.focusedDate();\n return maxDate && (isSameMonth(focusedDate, maxDate) || isAfterMonth(focusedDate, maxDate));\n });\n\n private readonly locale = inject(LOCALE_ID).toString();\n\n protected calendarBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = isRTL();\n switch (event.key) {\n case 'ArrowLeft':\n this.updateFocusedDateByDay(isRtl ? 1 : -1);\n break;\n case 'ArrowRight':\n this.updateFocusedDateByDay(isRtl ? -1 : 1);\n break;\n case 'ArrowUp':\n this.updateFocusedDateByDay(-7);\n break;\n case 'ArrowDown':\n this.updateFocusedDateByDay(7);\n break;\n case 'Home':\n this.updateFocusedDate(getWeekStartDate(this.focusedDate(), this.weekStartDay()));\n break;\n case 'End':\n this.updateFocusedDate(getWeekEndDate(this.focusedDate(), this.weekStartDay()));\n break;\n case 'PageDown':\n this.updateFocusedDateByMonth(1);\n break;\n case 'PageUp':\n this.updateFocusedDateByMonth(-1);\n break;\n case 'Enter':\n case 'Space':\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n protected updateFocusedDateByDay(offset: number): void {\n this.updateFocusedDate(\n addDaysInRange(this.focusedDate(), offset, this.minDate(), this.maxDate())\n );\n }\n\n protected updateFocusedDateByMonth(offset: number): void {\n this.updateFocusedDate(\n addMonthsInRange(this.focusedDate(), offset, this.minDate(), this.maxDate())\n );\n }\n\n protected updateFocusedDate(newDate: Date): void {\n const prevDate = this.focusedDate();\n if (!isSameDate(prevDate, newDate)) {\n this.focusedDate.set(newDate);\n if (isAnotherMonthOrYear(newDate, prevDate)) {\n this.activeMonthChange.emit(newDate);\n }\n this.focusActiveCell();\n }\n }\n\n /**\n * Update month of focusedDate.\n * @param offset -1 or -1.\n */\n protected setMonthOffset(offset: number): void {\n // Only update emit focusedDate since the focus shall stay on the button.\n const actualMonth = addMonthsInRange(\n this.focusedDate(),\n offset,\n this.minDate(),\n this.maxDate()\n );\n this.focusedDate.set(actualMonth);\n this.activeMonthChange.emit(actualMonth);\n }\n\n /** Change the focusedDate to today */\n protected goToToday(): void {\n this.focusedDate.set(today());\n this.focusActiveCell();\n }\n\n protected emitSelectedValue(selected: Date): void {\n if (selected !== this.startDate() || selected !== this.endDate()) {\n this.selectedValueChange.emit(selected);\n }\n }\n\n protected emitActiveDate(active: Date): void {\n this.focusedDate.set(active);\n }\n\n protected emitViewChange(view: 'year' | 'month'): void {\n this.viewChange.emit(view);\n }\n}\n","<div class=\"header\">\n <si-calendar-direction-button\n direction=\"left\"\n [ariaLabel]=\"previousLabel() | translate\"\n [disabled]=\"isPreviousButtonDisabled()\"\n (clicked)=\"setMonthOffset(-1)\"\n />\n <div class=\"flex-fill\">\n <button\n type=\"button\"\n class=\"open-month-view flex-fill text-end px-2 btn btn-tertiary calendar-button\"\n tabindex=\"0\"\n (click)=\"emitViewChange('month')\"\n >\n {{ focusedDate() | date: 'MMMM' }}\n </button>\n <button\n type=\"button\"\n class=\"open-year-view flex-fill text-start px-2 btn btn-tertiary calendar-button\"\n tabindex=\"0\"\n (click)=\"emitViewChange('year')\"\n >\n {{ focusedDate() | date: 'yyyy' }}\n </button>\n </div>\n <si-calendar-direction-button\n direction=\"right\"\n [ariaLabel]=\"nextLabel() | translate\"\n [disabled]=\"isNextButtonDisabled()\"\n (clicked)=\"setMonthOffset(1)\"\n />\n</div>\n<table class=\"px-9 mt-6\" role=\"grid\">\n <thead class=\"si-calendar-table-header\">\n <tr>\n @if (!hideWeekNumbers()) {\n <th scope=\"col\" class=\"week-num\">\n <span class=\"visually-hidden\">{{ calendarWeekLabel() | translate }}</span>\n </th>\n }\n @for (day of days(); track $index) {\n <th scope=\"col\">\n <span class=\"si-hidden-xs si-hidden-sm\">{{ day }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody\n si-calendar-body\n rowLabelCssClasses=\"week-num\"\n [focusedDate]=\"focusedDate()\"\n [compareAdapter]=\"compareAdapter\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [enableRangeSelection]=\"isRangeSelection()\"\n [previewRange]=\"previewRange()\"\n [rows]=\"weeks()\"\n [rowLabels]=\"hideWeekNumbers() ? undefined : weekNumbers()\"\n [activeHover]=\"activeHover()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (selectedValueChange)=\"emitSelectedValue($event)\"\n (focusedDateChange)=\"emitActiveDate($event!)\"\n (keydown)=\"calendarBodyKeyDown($event)\"\n >\n </tbody>\n</table>\n<div class=\"footer pt-2 ps-8 pe-8\">\n <button\n type=\"button\"\n class=\"today-button btn btn-tertiary flex-fill\"\n [disabled]=\"isTodayButtonDisabled()\"\n (click)=\"goToToday()\"\n >\n {{ today() | translate }}\n </button>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostListener,\n input,\n model,\n OnChanges,\n output,\n SimpleChanges\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\n\nimport {\n addMonthsInRange,\n createDate,\n getFirstDateInYear,\n isAfterYear,\n isAnotherYear,\n isSameYear,\n today as getToday\n} from '../date-time-helper';\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\nimport { SiCalendarDirectionButtonComponent } from './si-calendar-direction-button.component';\nimport { MonthCompareAdapter } from './si-compare-adapter';\nimport { SiInitialFocusComponent } from './si-initial-focus.component';\n\n/**\n * Show months of a single year as table and handles the keyboard interactions.\n * The focus and focusedDate is handled according the keyboard interactions.\n */\n@Component({\n selector: 'si-month-selection',\n imports: [SiCalendarDirectionButtonComponent, SiCalendarBodyComponent, DatePipe],\n templateUrl: './si-month-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiMonthSelectionComponent extends SiInitialFocusComponent implements OnChanges {\n /**\n * The translated list of months.\n *\n * @defaultValue []\n */\n readonly months = input<string[]>([]);\n /**\n * The active date, the cell which will receive the focus.\n */\n readonly focusedDate = model.required<Date>();\n /** Emits when the active focused date is changed to another month / year, typically during keyboard navigation. */\n readonly activeMonthChange = output<Date>();\n /** Emits when the user requests a different to show a different view. */\n readonly viewChange = output<'year'>();\n /** Listen Escape event to switch view back */\n @HostListener('keydown.Escape', ['$event'])\n triggerEsc(event: Event): void {\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n /**\n * The current visible list of calendar months.\n * Every time the focusedDate changes to another year the list will update.\n */\n protected monthCells: Cell[][] = [];\n protected compareAdapter = new MonthCompareAdapter();\n /** Number of column before the row is wrapped */\n private readonly columnCount = 2;\n\n /**\n * Indicate the previous button shall be disabled.\n * This happens when the focusedDate is equal or before the minDate.\n */\n protected readonly isPreviousButtonDisabled = computed(() => {\n const minDate = this.minDate();\n const focusedDate = this.focusedDate();\n return minDate && (isSameYear(focusedDate, minDate) || isAfterYear(minDate, focusedDate));\n });\n\n /**\n * Indicate the next button shall be disabled.\n * This happens when the focusedDate is equal or after the maxDate.\n */\n protected readonly isNextButtonDisabled = computed(() => {\n const maxDate = this.maxDate();\n const focusedDate = this.focusedDate();\n return maxDate && (isSameYear(focusedDate, maxDate) || isAfterYear(focusedDate, maxDate));\n });\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.maxDate ||\n changes.minDate ||\n changes.maxMonth ||\n changes.minMonth ||\n changes.focusedDate\n ) {\n this.initView();\n }\n }\n\n protected calendarBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = isRTL();\n switch (event.key) {\n case 'ArrowLeft':\n this.updateFocusedDate(isRtl ? 1 : -1);\n break;\n case 'ArrowRight':\n this.updateFocusedDate(isRtl ? -1 : 1);\n break;\n case 'ArrowUp':\n this.updateFocusedDate(-1 * this.columnCount);\n break;\n case 'ArrowDown':\n this.updateFocusedDate(this.columnCount);\n break;\n case 'Escape':\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n return;\n case 'Enter':\n case 'Space':\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n protected updateFocusedDate(offset: number): void {\n const prevDate = this.focusedDate();\n const newDate = addMonthsInRange(prevDate, offset, this.minDate(), this.maxDate());\n this.focusedDate.set(newDate);\n if (!this.compareAdapter.isEqual(prevDate, newDate)) {\n // Synchronize focusedDate with year view\n this.focusActiveCell();\n this.emitActiveMonthChange(newDate, prevDate);\n }\n }\n /**\n * Add offset to year and update focusedDate.\n */\n protected setYearOffset(offset: number): void {\n const prevDate = this.focusedDate();\n const newActive = createDate(prevDate);\n newActive.setFullYear(newActive.getFullYear() + offset);\n this.focusedDate.set(newActive);\n this.emitActiveMonthChange(newActive, prevDate);\n }\n\n protected emitSelectedValue(selected: Date): void {\n this.selectedValueChange.emit(selected);\n }\n\n protected emitFocusedDate(focused: Date): void {\n // Take over the current day on month changes\n focused.setDate(this.focusedDate().getDate());\n this.focusedDate.set(focused);\n }\n\n protected emitActiveMonthChange(focus: Date, prevFocus: Date): void {\n if (isAnotherYear(focus, prevFocus)) {\n this.activeMonthChange.emit(focus);\n }\n }\n\n protected emitViewChange(): void {\n this.viewChange.emit('year');\n }\n\n /**\n * Initialize view based on the focusedDate.\n */\n private initView(): void {\n this.monthCells = [];\n let row: Cell[] = [];\n\n // The cell date object needs to be the first to prevent that we jump to the next month when\n // setting the month. For example the focusedDate is 31. setting february would result in the\n // 3. March.\n const startDate = getFirstDateInYear(this.focusedDate());\n const today = getToday();\n const months = this.months();\n for (let i = 0; i <= 11; i++) {\n if (i > 0 && i % this.columnCount === 0) {\n this.monthCells.push(row);\n row = [];\n }\n const date = new Date(startDate);\n date.setMonth(i);\n const isToday = this.compareAdapter.isEqual(date, today);\n const isDisabled = !this.compareAdapter.isEqualOrBetween(\n date,\n this.minDate(),\n this.maxDate()\n );\n\n row.push({\n value: date.getDate(),\n disabled: isDisabled,\n ariaLabel: `${months[date.getMonth()]} ${this.focusedDate().getFullYear()}`,\n displayValue: months[date.getMonth()],\n isPreview: false,\n isToday,\n valueRaw: createDate(date),\n cssClasses: ['month', 'si-h4', 'text-truncate']\n });\n }\n this.monthCells.push(row);\n }\n}\n","<div class=\"header\">\n <si-calendar-direction-button\n direction=\"left\"\n [ariaLabel]=\"previousLabel()\"\n [disabled]=\"isPreviousButtonDisabled()\"\n (clicked)=\"setYearOffset(-1)\"\n />\n <button\n type=\"button\"\n class=\"open-year-view flex-fill mx-4 btn btn-tertiary calendar-button\"\n tabindex=\"0\"\n (click)=\"emitViewChange()\"\n >\n {{ focusedDate() | date: 'yyyy' }}\n </button>\n <si-calendar-direction-button\n direction=\"right\"\n [ariaLabel]=\"nextLabel()\"\n [disabled]=\"isNextButtonDisabled()\"\n (clicked)=\"setYearOffset(1)\"\n />\n</div>\n<table class=\"px-9 mt-6\" role=\"grid\">\n <tbody\n si-calendar-body\n [focusedDate]=\"focusedDate()\"\n [compareAdapter]=\"compareAdapter\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [enableRangeSelection]=\"isRangeSelection()\"\n [previewRange]=\"previewRange()\"\n [rows]=\"monthCells\"\n [activeHover]=\"activeHover()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (selectedValueChange)=\"emitSelectedValue($event)\"\n (focusedDateChange)=\"emitFocusedDate($event)\"\n (keydown)=\"calendarBodyKeyDown($event)\"\n >\n </tbody>\n</table>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostListener,\n model,\n OnChanges,\n output,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\n\nimport {\n addYearsInRange,\n getFirstDateInYear,\n minDate as getMinDate,\n isBetween,\n today as getToday,\n createDate\n} from '../date-time-helper';\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\nimport { SiCalendarDirectionButtonComponent } from './si-calendar-direction-button.component';\nimport { YearCompareAdapter } from './si-compare-adapter';\nimport { SiInitialFocusComponent } from './si-initial-focus.component';\n\n/**\n * Show months of a single year as table and handles the keyboard interactions.\n * The focus and focusedDate is handled according the keyboard interactions.\n */\n@Component({\n selector: 'si-year-selection',\n imports: [SiCalendarDirectionButtonComponent, SiCalendarBodyComponent, DatePipe],\n templateUrl: './si-year-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiYearSelectionComponent extends SiInitialFocusComponent implements OnChanges {\n /**\n * The active date, the cell which will receive the focus.\n */\n readonly focusedDate = model.required<Date>();\n /** Emits when the active focused date changed to another month / year, typically during keyboard navigation. */\n readonly yearRangeChange = output<Date[]>();\n /** Listen Escape event to switch view back */\n @HostListener('keydown.Escape', ['$event'])\n triggerEsc(event: Event): void {\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n /** Number of column before the row is wrapped */\n private readonly columnCount = 3;\n /** The number of years which shall be displayed, this number should be even and dividable by columnCount */\n private readonly yearsToDisplay = 18;\n /** Lower windows bound for displayed year range */\n protected readonly fromYear = signal<Date | undefined>(undefined);\n /** Upper windows bound for displayed year range */\n protected readonly toYear = signal<Date | undefined>(undefined);\n /**\n * The current visible list of calendar years.\n * Every time the focusedDate changes to another year the list will be rebuilt.\n */\n protected yearCells: Cell[][] = [];\n protected compareAdapter = new YearCompareAdapter();\n /** Is previous button disabled based on the minDate. */\n protected readonly isPreviousButtonDisabled = computed(() => {\n const minDate = this.minDate();\n const minMonth = this.minMonth();\n if (!minDate && !minMonth) {\n return false;\n }\n const min = getMinDate(minDate, minMonth)!;\n return (\n this.compareAdapter.isEqual(this.fromYear()!, min) ||\n this.compareAdapter.isAfter(min, this.fromYear()!)\n );\n });\n /** Is next button disabled based on the maxDate */\n protected readonly isNextButtonDisabled = computed(() => {\n const maxDate = this.maxDate();\n if (!maxDate) {\n return false;\n }\n return (\n this.compareAdapter.isEqual(this.toYear()!, maxDate) ||\n this.compareAdapter.isAfter(this.toYear()!, maxDate)\n );\n });\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.startDate || changes.focusedDate || changes.maxDate || changes.minDate) {\n this.initView();\n }\n }\n\n protected calendarBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = isRTL();\n const oldActiveDate = this.focusedDate();\n switch (event.key) {\n case 'ArrowLeft':\n this.setYearOffset(isRtl ? 1 : -1);\n break;\n case 'ArrowRight':\n this.setYearOffset(isRtl ? -1 : 1);\n break;\n case 'ArrowUp':\n this.setYearOffset(-1 * this.columnCount);\n break;\n case 'ArrowDown':\n this.setYearOffset(this.columnCount);\n break;\n case 'PageUp':\n this.setYearOffset(-1 * (oldActiveDate.getFullYear() - this.fromYear()!.getFullYear()));\n break;\n case 'PageDown':\n this.setYearOffset(this.toYear()!.getFullYear() - oldActiveDate.getFullYear());\n break;\n case 'Escape':\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n return;\n case 'Enter':\n case 'Space':\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (!this.compareAdapter.isEqual(oldActiveDate, this.focusedDate())) {\n this.focusActiveCell();\n }\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /**\n * Change the active date and the range of displayed years.\n * The windowOffset control the amount of ranges the view shall move forward or backward.\n * The number of displayed years ia controlled by yearsToDisplay.\n */\n protected changeVisibleYearRange(windowOffset: number): void {\n const offset = windowOffset * this.yearsToDisplay;\n this.setYearOffset(offset);\n }\n\n protected emitSelectedValue(selected: Date): void {\n this.selectedValueChange.emit(selected);\n }\n\n /**\n * Determine the year range start and end year.\n * - Based on the active date this function will find the start and\n * ending year of the current displayed range.\n * - In case the focusedDate is either before or after the current range the\n * start and end year will move the entire window (yearsToDisplay)\n */\n private initYearRange(): void {\n // Did we exceed the display current displayed year range\n let changed = false;\n const focusedDate = this.focusedDate();\n const fromYear = this.fromYear();\n const toYear = this.toYear();\n if (!fromYear || !toYear) {\n const start = focusedDate.getFullYear() - this.yearsToDisplay / 2;\n this.fromYear.set(new Date(start, 0, 1));\n this.toYear.set(new Date(start + this.yearsToDisplay - 1, 0, 1));\n changed = true;\n } else if (this.compareAdapter.isAfter(focusedDate, toYear)) {\n // Change window forward\n const rangeDistance = Math.floor(\n Math.abs(focusedDate.getFullYear() - fromYear.getFullYear()) / this.yearsToDisplay\n );\n const newFromYear = fromYear.getFullYear() + rangeDistance * this.yearsToDisplay;\n\n this.fromYear.set(new Date(newFromYear, 0, 1));\n this.toYear.set(new Date(newFromYear + this.yearsToDisplay - 1, 0, 1));\n changed = true;\n } else if (this.compareAdapter.isAfter(fromYear, focusedDate)) {\n // Change window backwards\n const rangeDistance = Math.ceil(\n Math.abs(focusedDate.getFullYear() - fromYear.getFullYear()) / this.yearsToDisplay\n );\n const newFromYear = fromYear.getFullYear() - rangeDistance * this.yearsToDisplay;\n\n this.fromYear.set(new Date(newFromYear, 0, 1));\n this.toYear.set(new Date(newFromYear + this.yearsToDisplay - 1, 0, 1));\n changed = true;\n }\n\n if (changed) {\n this.yearRangeChange.emit([this.fromYear()!, this.toYear()!]);\n }\n }\n\n /**\n * Initialize view based on the focusedDate.\n */\n private initView(): void {\n // Initial year limits\n this.initYearRange();\n\n this.yearCells = [];\n let row: Cell[] = [];\n\n // The cell date object needs to be the first to prevent that we jump to the next month when\n // setting the month. For example the focusedDate is 31. setting february would result in the\n // 3. March.\n const startDate = getFirstDateInYear(this.fromYear()!);\n const today = getToday();\n for (let i = 0; i < this.yearsToDisplay; i++) {\n if (i > 0 && i % this.columnCount === 0) {\n this.yearCells.push(row);\n row = [];\n }\n\n const date = createDate(startDate);\n date.setFullYear(date.getFullYear() + i);\n const isToday = this.compareAdapter.isEqual(date, today);\n const isDisabled = !this.compareAdapter.isEqualOrBetween(\n date,\n this.minDate(),\n this.maxDate()\n );\n const year = date.getFullYear().toString();\n row.push({\n value: date.getDate(),\n disabled: isDisabled,\n ariaLabel: year,\n displayValue: year,\n isPreview: false,\n isToday,\n valueRaw: createDate(date),\n cssClasses: ['year', 'si-h4']\n });\n }\n this.yearCells.push(row);\n }\n\n /**\n * Add offset to year and update focusedDate.\n * If the new year is outside min/max date the year will set to the closest year in range.\n */\n private setYearOffset(offset: number): void {\n const newActive = addYearsInRange(this.focusedDate(), offset, this.minDate(), this.maxDate());\n this.focusedDate.set(newActive);\n if (!this.fromYear() || !isBetween(this.focusedDate(), this.fromYear(), this.toYear())) {\n // Re-calc years view\n this.initView();\n }\n }\n}\n","<div class=\"header\">\n <si-calendar-direction-button\n direction=\"left\"\n [ariaLabel]=\"previousLabel()\"\n [disabled]=\"isPreviousButtonDisabled()\"\n (clicked)=\"changeVisibleYearRange(-1)\"\n />\n <span class=\"year-range-label flex-fill mx-4 si-h4 text-secondary calendar-button\">\n {{ fromYear() | date: 'yyyy' }} - {{ toYear() | date: 'yyyy' }}\n </span>\n <si-calendar-direction-button\n direction=\"right\"\n [ariaLabel]=\"nextLabel()\"\n [disabled]=\"isNextButtonDisabled()\"\n (clicked)=\"changeVisibleYearRange(1)\"\n />\n</div>\n<table class=\"px-9 mt-6\" role=\"grid\">\n <tbody\n si-calendar-body\n [focusedDate]=\"focusedDate()\"\n [compareAdapter]=\"compareAdapter\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [enableRangeSelection]=\"isRangeSelection()\"\n [previewRange]=\"previewRange()\"\n [rows]=\"yearCells\"\n (selectedValueChange)=\"emitSelectedValue($event)\"\n (keydown)=\"calendarBodyKeyDown($event)\"\n >\n </tbody>\n</table>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n FormatWidth,\n FormStyle,\n getLocaleDayPeriods,\n getLocaleTimeFormat,\n NgTemplateOutlet,\n TranslationWidth\n} from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n LOCALE_ID,\n output,\n signal,\n viewChildren\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn\n} from '@angular/forms';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '@siemens/element-ng/form';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { createDate } from './date-time-helper';\n\ninterface Value<T = string> {\n hours: T;\n minutes: T;\n seconds: T;\n milliseconds: T;\n}\n\ninterface TimeComponents extends Partial<Value<string | number>> {\n isPM?: boolean;\n}\n\ninterface Config {\n ariaLabel: TranslatableString;\n label: TranslatableString;\n maxLength: number;\n max: number;\n name: keyof Value;\n placeholder: string;\n separator?: string;\n}\n\nconst dateWithTime = (base: Date, time: Date): Date =>\n createDate(base, time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n\n@Component({\n selector: 'si-timepicker',\n imports: [A11yModule, NgTemplateOutlet, ReactiveFormsModule, SiTranslatePipe],\n templateUrl: './si-timepicker.component.html',\n styleUrl: './si-timepicker.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiTimepickerComponent,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiTimepickerComponent,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiTimepickerComponent\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'group',\n class: 'form-custom-control',\n '[class.readonly]': 'readonly()',\n '[attr.aria-labelledby]': 'labelledby'\n }\n})\nexport class SiTimepickerComponent implements ControlValueAccessor, Validator, SiFormItemControl {\n private static idCounter = 0;\n private readonly locale = inject(LOCALE_ID).toString();\n private readonly formBuilder = inject(FormBuilder);\n\n /**\n * @defaultValue\n * ```\n * `__si-timepicker-${SiTimepickerComponent.idCounter++}`\n * ```\n */\n readonly id = input(`__si-timepicker-${SiTimepickerComponent.idCounter++}`);\n\n readonly labelledby =\n inject(new HostAttributeToken('aria-labelledby'), {\n optional: true\n }) ?? `${this.id()}-label`;\n /**\n * All input fields will be disabled if set to true.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly disabledInput = input(false, { alias: 'disabled' });\n\n /**\n * @defaultValue 'hh'\n */\n readonly hoursLabel = input<TranslatableString>('hh');\n /**\n * @defaultValue 'mm'\n */\n readonly minutesLabel = input<TranslatableString>('mm');\n /**\n * @defaultValue 'ss'\n */\n readonly secondsLabel = input<TranslatableString>('ss');\n /**\n * @defaultValue 'ms'\n */\n readonly millisecondsLabel = input<TranslatableString>('ms');\n /**\n * Hide the labels of the input fields.\n * @defaultValue false\n */\n readonly hideLabels = input(false, { transform: booleanAttribute });\n\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.HOURS:Hours`)\n * ```\n */\n readonly hoursAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.HOURS:Hours`));\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.MINUTES:Minutes`)\n * ```\n */\n readonly minutesAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.MINUTES:Minutes`));\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.SECONDS:Seconds`)\n * ```\n */\n readonly secondsAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.SECONDS:Seconds`));\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.MILLISECONDS:Milliseconds`)\n * ```\n */\n readonly millisecondsAriaLabel = input(\n t(() => $localize`:@@SI_DATEPICKER.MILLISECONDS:Milliseconds`)\n );\n\n /**\n * @defaultValue 'hh'\n */\n readonly hoursPlaceholder = input('hh');\n /**\n * @defaultValue 'mm'\n */\n readonly minutesPlaceholder = input('mm');\n /**\n * @defaultValue 'ss'\n */\n readonly secondsPlaceholder = input('ss');\n /**\n * @defaultValue 'ms'\n */\n readonly millisecondsPlaceholder = input('ms');\n\n readonly meridians = input<string[]>();\n /**\n * @defaultValue 'am/pm'\n */\n readonly meridiansLabel = input<TranslatableString>('am/pm');\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.PERIOD:Period`)\n * ```\n */\n readonly meridiansAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.PERIOD:Period`));\n\n /** @defaultValue true */\n readonly showMinutes = input(true, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly showSeconds = input(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly showMilliseconds = input(false, { transform: booleanAttribute });\n /**\n * Show time in 12-hour period including the select to toggle between AM/PM.\n */\n readonly showMeridian = input<boolean | undefined>();\n\n /**\n * A minimum time limit. The date part of the date object will be ignored.\n */\n readonly min = input<Date>();\n\n /**\n * A maximum time limit. The date part of the date object will be ignored.\n */\n readonly max = input<Date>();\n\n /** @defaultValue false */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n readonly isValid = output<boolean>();\n readonly meridianChange = output<string>();\n readonly inputCompleted = output<void>();\n\n private readonly inputParts = viewChildren<ElementRef<HTMLElement>>('inputPart');\n\n /**\n * This ID will be bound to the `aria-describedby` attribute of the timepicker.\n * Use this to reference the element containing the error message(s) for the timepicker.\n * It will be picked by the {@link SiFormItemComponent} if the timepicker is used inside a form item.\n *\n * @defaultValue\n * ```\n * `${this.id()}-errormessage`\n * ```\n */\n readonly errormessageId = input(`${this.id()}-errormessage`);\n\n private onChange: (val: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n // The following are the time values for the ui.\n protected readonly periods = computed(() => {\n const meridians = this.meridians();\n return meridians?.length ? meridians : this.periodDefaults;\n });\n protected readonly use12HourClock = computed(\n () => this.showMeridian() ?? getLocaleTimeFormat(this.locale, FormatWidth.Full).includes('a')\n );\n protected readonly disabled = computed(() => this.disabledInput() || this.disabledNgControl());\n protected readonly meridian = signal<'' | 'am' | 'pm'>('');\n protected readonly units = computed<Config[]>(() => {\n const config: Config[] = [\n {\n ariaLabel: this.hoursAriaLabel(),\n label: this.hoursLabel(),\n max: this.isPM() ? 12 : 23,\n maxLength: 2,\n name: 'hours',\n placeholder: this.hoursPlaceholder()\n }\n ];\n if (this.showMinutes()) {\n config.push({\n ariaLabel: this.minutesAriaLabel(),\n label: this.minutesLabel(),\n max: 59,\n maxLength: 2,\n name: 'minutes',\n placeholder: this.minutesPlaceholder()\n });\n }\n if (this.showSeconds()) {\n config.push({\n ariaLabel: this.secondsAriaLabel(),\n label: this.secondsLabel(),\n max: 59,\n maxLength: 2,\n name: 'seconds',\n placeholder: this.secondsPlaceholder()\n });\n }\n if (this.showMilliseconds()) {\n config.push({\n ariaLabel: this.millisecondsAriaLabel(),\n label: this.millisecondsLabel(),\n max: 999,\n maxLength: 3,\n name: 'milliseconds',\n placeholder: this.millisecondsPlaceholder(),\n separator: '.'\n });\n }\n return config;\n });\n\n /* Input fields state */\n protected readonly timeControls = this.formBuilder.group({\n hours: this.formBuilder.nonNullable.control('', [this.validateTime('hours')]),\n minutes: this.formBuilder.nonNullable.control('', [this.validateTime('minutes')]),\n seconds: this.formBuilder.nonNullable.control('', [this.validateTime('seconds')]),\n milliseconds: this.formBuilder.nonNullable.control('', [this.validateTime('milliseconds')])\n });\n /** Indicate whether one of the input fields has an invalid value. */\n protected hasInvalidUnit(): boolean {\n const values = this.timeControls.value;\n for (const config of this.units()) {\n const unit = values[config.name]!;\n if (isNaN(this.toNumber(unit, config.max))) {\n return true;\n }\n }\n return false;\n }\n private readonly disabledNgControl = signal(false);\n\n /**\n * Holds the time as date object that is presented by this control.\n */\n private time?: Date;\n private periodDefaults: string[];\n\n constructor() {\n this.periodDefaults = getLocaleDayPeriods(\n this.locale,\n FormStyle.Format,\n TranslationWidth.Short\n ).slice();\n effect(() => {\n if (this.disabled()) {\n this.timeControls.disable({ emitEvent: false, onlySelf: true });\n } else {\n this.timeControls.enable({ emitEvent: false, onlySelf: true });\n }\n });\n Object.values(this.timeControls.controls).forEach(control => {\n control.valueChanges.subscribe(value => {\n // Enforce digits only\n const cleaned = value.replace(/\\D/g, '');\n if (cleaned !== value) {\n control?.setValue(cleaned, { emitEvent: false });\n }\n });\n });\n }\n\n writeValue(obj?: Date | string): void {\n const time = this.parseTime(obj);\n if (!time || this.isValidDate(time)) {\n this.time = time;\n this.updateUI(this.time);\n }\n }\n\n /** @internal */\n isPM(): boolean {\n return this.use12HourClock() && this.meridian() === 'pm';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledNgControl.set(isDisabled);\n }\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n const childErrors = this.units()\n .map(u => this.timeControls.controls[u.name].errors)\n .reduce((prevObj, field) => ({ ...prevObj, ...field }), {} as ValidationErrors);\n if (childErrors && Object.keys(childErrors).length) {\n return childErrors;\n }\n const errors: ValidationErrors = {\n ...this.validateMin(control),\n ...this.validateMax(control)\n };\n return Object.keys(errors).length ? errors : null;\n }\n\n /**\n * Handle Enter, Arrow up/down and Space key press events.\n */\n protected handleKeyPressEvent(event: KeyboardEvent): void {\n const target = event.target as HTMLInputElement;\n switch (event.key) {\n case 'Enter':\n this.focusNext(event);\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n if (!this.readonly()) {\n this.changeTimeComponent(target.name, event.key === 'ArrowUp');\n } else {\n event.preventDefault();\n }\n break;\n case ' ':\n if (this.readonly()) {\n event.preventDefault();\n }\n break;\n default:\n break;\n }\n }\n\n protected toHtmlInputElement = (target?: EventTarget | null): HTMLInputElement =>\n target as HTMLInputElement;\n\n protected updateField(name: keyof Value, value: string): void {\n this.timeControls.get(name)?.setValue(value, { emitEvent: false });\n this.updateTime();\n this.onTouched();\n }\n\n protected toggleMeridian(): void {\n const time = this.changeTime(this.time, { hours: 12 });\n this.setTime(time);\n }\n\n /**\n * Takes the current UI values and updates the time object value\n * accordingly, if they UI input values are valid.\n */\n private updateTime(): void {\n if (this.hasInvalidUnit()) {\n this.isValid.emit(false);\n this.onChange(null);\n return;\n }\n\n this.setTime(this.createDateUpdate(this.time));\n }\n\n /**\n * Sets a new time object as model value, updates the user interface\n * and invokes onChange to let timepicker clients know about the update.\n * @param time - The new time to be set.\n */\n private setTime(time?: Date | undefined): void {\n if (this.time?.getTime() !== time?.getTime()) {\n this.time = time;\n this.updateUI(this.time);\n this.onChange(this.time);\n }\n }\n\n /**\n * Updates the user interface by filling the time components\n * into the time input fields. Sets empty values if the date\n * is undefined or invalid.\n *\n * @param value - The date object or string from with the time components are taken.\n */\n private updateUI(value?: string | Date): void {\n if (!value || !this.isValidDate(value)) {\n this.timeControls.setValue(\n {\n hours: '',\n minutes: '',\n seconds: '',\n milliseconds: ''\n },\n { emitEvent: false }\n );\n this.meridian.set('am');\n this.meridianChange.emit(this.meridian());\n } else {\n const time = this.parseTime(value);\n if (!time) {\n return;\n }\n\n let hours = time.getHours();\n if (this.use12HourClock()) {\n // 12:00 am is midnight while 12:00 pm is noon when users enter a value greater than 12 we can assume it's pm\n this.meridian.set(hours > 12 ? 'pm' : 'am');\n this.meridianChange.emit(this.meridian());\n hours = hours % 12;\n if (hours === 0) {\n hours = 12;\n }\n }\n this.timeControls.setValue(\n {\n hours: hours.toString().padStart(2, '0'),\n minutes: time.getMinutes().toString().padStart(2, '0'),\n seconds: time.getUTCSeconds().toString().padStart(2, '0'),\n milliseconds: time.getUTCMilliseconds().toString().padStart(3, '0')\n },\n { emitEvent: false }\n );\n }\n }\n\n private isValidDate(value?: string | Date): boolean {\n if (!value) {\n return false;\n }\n\n if (typeof value === 'string') {\n return this.isValidDate(new Date(value));\n }\n\n if (value instanceof Date && isNaN(value.getHours())) {\n return false;\n }\n\n return true;\n }\n\n private parseTime(value?: string | Date): Date | undefined {\n if (typeof value === 'string') {\n return new Date(value);\n }\n return value;\n }\n\n private createDateUpdate(date: Date | undefined): Date | undefined {\n const units = this.units();\n const value = this.timeControls.value;\n let hour = this.toNumber(value.hours, units.find(u => u.name === 'hours')?.max);\n const minute = this.toNumber(value.minutes, units.find(u => u.name === 'minutes')?.max);\n const seconds = this.toNumber(value.seconds, units.find(u => u.name === 'seconds')?.max) || 0;\n const milliseconds =\n this.toNumber(value.milliseconds, units.find(u => u.name === 'milliseconds')?.max) || 0;\n\n if (this.isPM() && hour !== 12) {\n hour += 12;\n } else if (this.use12HourClock() && !this.isPM() && hour === 12) {\n hour = 0;\n }\n\n if (!date) {\n if (!isNaN(hour) && !isNaN(minute)) {\n return createDate(new Date(), hour, minute, seconds, milliseconds);\n } else {\n return date;\n }\n } else if (isNaN(hour) || isNaN(minute)) {\n return date;\n } else {\n return createDate(date, hour, minute, seconds, milliseconds);\n }\n }\n\n private toNumber(value?: string | number, limit?: number): number {\n if (typeof value === 'undefined') {\n return NaN;\n } else if (typeof value === 'string') {\n value = parseInt(value, 10);\n }\n\n if (limit !== undefined && (isNaN(value) || value < 0 || value > limit)) {\n return NaN;\n }\n return value;\n }\n\n private changeTimeComponent(key: string, up: boolean): void {\n const change = up ? 1 : -1;\n const date = this.createDateUpdate(new Date());\n switch (key) {\n case 'hours': {\n const newTime = this.changeTime(date, { hours: change });\n let hour = newTime!.getHours();\n if (this.use12HourClock()) {\n hour = hour % 12;\n if (hour === 0 && !this.isPM()) {\n hour = 12;\n } else if (hour === 0 && this.isPM()) {\n this.toggleMeridian();\n }\n }\n this.updateField('hours', hour.toString());\n break;\n }\n case 'minutes': {\n const newTime = this.changeTime(date, { minutes: change });\n this.updateField('minutes', newTime.getMinutes().toString());\n break;\n }\n case 'seconds': {\n const newTime = this.changeTime(date, { seconds: change });\n this.updateField('seconds', newTime.getSeconds().toString());\n break;\n }\n case 'milliseconds': {\n const newTime = this.changeTime(date, { milliseconds: change });\n this.updateField('milliseconds', newTime.getMilliseconds().toString());\n break;\n }\n default:\n break;\n }\n }\n\n private changeTime(value?: Date, diff?: TimeComponents): Date {\n if (!value) {\n return this.changeTime(createDate(new Date(), 0, 0, 0, 0), diff);\n }\n\n if (!diff) {\n return value;\n }\n\n let hour = value.getHours();\n let minutes = value.getMinutes();\n let seconds = value.getSeconds();\n let milliseconds = value.getMilliseconds();\n\n if (diff.hours) {\n hour = hour + this.toNumber(diff.hours);\n }\n\n if (diff.minutes) {\n minutes = minutes + this.toNumber(diff.minutes);\n }\n\n if (diff.seconds) {\n seconds = seconds + this.toNumber(diff.seconds);\n }\n if (diff.milliseconds) {\n milliseconds = milliseconds + this.toNumber(diff.milliseconds);\n }\n\n return createDate(value, hour, minutes, seconds, milliseconds);\n }\n\n /**\n * Focuses the next available input/select field or emit inputCompleted event.\n */\n protected focusNext(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n const targets = this.inputParts();\n const position = targets?.findIndex(ref => ref.nativeElement === target);\n if (position === undefined || position === -1) {\n return;\n }\n\n if (position < targets!.length - 1) {\n targets![position + 1].nativeElement.focus();\n } else {\n this.inputCompleted.emit();\n }\n }\n\n protected focusChange(event: FocusOrigin): void {\n if (event === null) {\n this.onTouched();\n }\n }\n\n protected formatTime(time: Date): string {\n const options: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: this.showMinutes() ? '2-digit' : undefined,\n second: this.showSeconds() ? '2-digit' : undefined,\n hour12: this.use12HourClock(),\n fractionalSecondDigits: this.showMilliseconds() ? 3 : undefined\n };\n return new Intl.DateTimeFormat(this.locale, options).format(time);\n }\n protected validateMin(control: AbstractControl): ValidationErrors | null {\n const current = control.value;\n let min = this.min();\n if (control.value instanceof Date && min) {\n min = dateWithTime(current, min);\n if (current < min) {\n return { minTime: { actual: current, min: min, minString: this.formatTime(min) } };\n }\n }\n return null;\n }\n\n protected validateMax(control: AbstractControl): ValidationErrors | null {\n const error: ValidationErrors = {};\n const current = control.value;\n let max = this.max();\n if (control.value instanceof Date && max) {\n max = dateWithTime(current, max);\n if (current > max) {\n error.maxTime = { actual: current, max: max, maxString: this.formatTime(max) };\n }\n }\n return Object.keys(error).length ? error : null;\n }\n\n protected validateTime(name: string): ValidatorFn {\n return (c: AbstractControl): ValidationErrors | null => {\n const max = this.units().find(u => u.name === name)?.max;\n if (max !== undefined && c.value && parseInt(c.value, 10) > max) {\n return { [name]: { max } };\n }\n return null;\n };\n }\n}\n","<div\n class=\"d-flex flex-row flex-wrap\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"focusChange($event)\"\n>\n @for (config of units(); track $index) {\n @if (!$first) {\n <ng-container *ngTemplateOutlet=\"separator; context: { separator: config.separator }\" />\n }\n <label class=\"min-width\">\n @if (!hideLabels()) {\n <span class=\"form-label\">{{ (config.label | translate) || ' ' }}</span>\n }\n <input\n #inputPart\n autocomplete=\"off\"\n class=\"form-control hide-feedback-icon\"\n type=\"text\"\n inputmode=\"numeric\"\n [attr.aria-label]=\"config.ariaLabel | translate\"\n [attr.aria-describedby]=\"errormessageId()\"\n [attr.maxlength]=\"config.maxLength\"\n [formControl]=\"timeControls.controls[config.name]\"\n [name]=\"config.name\"\n [placeholder]=\"config.placeholder\"\n [readonly]=\"readonly()\"\n (blur)=\"updateField(config.name, toHtmlInputElement($event.target).value)\"\n (keydown)=\"handleKeyPressEvent($event)\"\n />\n </label>\n }\n @if (use12HourClock()) {\n <label class=\"ms-2\">\n @if (!hideLabels()) {\n <span class=\"form-label\">{{ (meridiansLabel() | translate) || ' ' }}</span>\n }\n <select\n #inputPart\n class=\"form-control\"\n [attr.aria-label]=\"meridiansAriaLabel() | translate\"\n [attr.aria-describedby]=\"errormessageId()\"\n [class.readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (change)=\"toggleMeridian()\"\n (keydown)=\"handleKeyPressEvent($event)\"\n >\n <option value=\"am\" [selected]=\"meridian() === 'am'\">{{ periods()[0] }}</option>\n <option value=\"pm\" [selected]=\"meridian() === 'pm'\">{{ periods()[1] }}</option>\n </select>\n </label>\n }\n</div>\n\n<ng-template #separator let-separator=\"separator\">\n <div class=\"align-self-end pb-3 px-1\" aria-hidden=\"true\">{{ separator ? separator : ':' }}</div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { getLocaleFirstDayOfWeek, WeekDay } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n OnInit,\n signal,\n SimpleChange,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n ReactiveFormsModule,\n ValidationErrors\n} from '@angular/forms';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { Cell } from './components/si-calendar-body.component';\nimport { SiDaySelectionComponent } from './components/si-day-selection.component';\nimport { SiMonthSelectionComponent } from './components/si-month-selection.component';\nimport { SiYearSelectionComponent } from './components/si-year-selection.component';\nimport {\n changeDay,\n createDate,\n getDateSameOrBetween,\n getDateWithoutTime,\n getLocaleMonthNames,\n isAfter,\n isSameDate,\n isSameOrBetween,\n isValid,\n today\n} from './date-time-helper';\nimport { DatepickerConfig, DateRange, WeekStart } from './si-datepicker.model';\nimport { SiTimepickerComponent } from './si-timepicker.component';\n\nlet idCounter = 1;\n\n/**\n * Choose which view shall be shown.\n * @internal\n */\ntype ViewType = 'week' | 'month' | 'year' | undefined;\n\nexport type RangeType = 'START' | 'END' | undefined;\n\n@Component({\n selector: 'si-datepicker',\n imports: [\n ReactiveFormsModule,\n SiYearSelectionComponent,\n SiMonthSelectionComponent,\n SiDaySelectionComponent,\n SiTimepickerComponent,\n SiTranslatePipe\n ],\n templateUrl: './si-datepicker.component.html',\n styleUrl: './si-datepicker.component.scss'\n})\nexport class SiDatepickerComponent implements OnInit, OnChanges, AfterViewInit {\n private readonly locale = inject(LOCALE_ID).toString();\n /**\n * The date which is currently focused\n * Compare to the selected date or range the calendar requires to have one element to focus.\n */\n readonly focusedDate = model<Date>();\n /**\n * The selected date of the datepicker. Use for\n * initialization and for bidirectional binding.\n */\n readonly date = model<Date>();\n /**\n * The selected date range of the datepicker. Use for\n * initialization and for bidirectional binding.\n */\n readonly dateRange = model<DateRange | undefined>();\n /** @internal */\n readonly dateRangeRole = input<RangeType>();\n /**\n * Set initial focus to calendar body.\n *\n * @defaultValue false\n */\n readonly initialFocus = input(false);\n /**\n * Disabled the optional visible time picker.\n *\n * @defaultValue false\n */\n readonly disabledTime = model(false);\n /**\n * Object to configure the datepicker.\n *\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly config = model<DatepickerConfig>({});\n /**\n * Aria label for the previous button. Needed for a11y.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.PREVIOUS:Previous`)\n * ```\n */\n readonly previousLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.PREVIOUS:Previous`)\n );\n /**\n * Aria label for the next button. Needed for a11y.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.NEXT:Next`)\n * ```\n */\n readonly nextLabel = input<TranslatableString>(t(() => $localize`:@@SI_DATEPICKER.NEXT:Next`));\n /**\n * Aria label for week number column\n *\n * @deprecated Use `calendarWeekLabel` instead.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_WEEK_LABEL:Calendar week`)\n * ```\n */\n readonly calenderWeekLabel = input<TranslatableString>();\n /**\n * Aria label for week number column\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_WEEK_LABEL:Calendar week`)\n * ```\n */\n readonly calendarWeekLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.CALENDAR_WEEK_LABEL:Calendar week`)\n );\n protected readonly derivedWeekLabel = computed(\n () => this.calenderWeekLabel() ?? this.calendarWeekLabel()\n );\n /**\n * Enable/disable 12H mode in timepicker. Defaults to locale\n *\n * @defaultValue undefined\n */\n readonly time12h = input<boolean | undefined, unknown>(undefined, {\n transform: booleanAttribute\n });\n /**\n * Use this to force date range operation to select either start date or end date.\n *\n * @defaultValue 'START'\n */\n readonly rangeType = model<RangeType>('START');\n\n /**\n * Optional input to control the minimum month the datepicker can show and the user can navigate.\n * The `minMonth` can be larger than the `minDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows a earlier month the the more right one.\n * @internal\n */\n readonly minMonth = input<Date>();\n /**\n * Optional input to control the maximum month the datepicker can show and the user can navigate.\n * The `maxMonth` can be smaller than the `maxDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows a earlier month the the more right one.\n * @internal\n */\n readonly maxMonth = input<Date>();\n /**\n * Option to hide the time switch.\n *\n * @defaultValue false\n */\n readonly hideTimeToggle = input(false);\n /** @internal */\n readonly hideCalendar = input(false);\n /**\n * Optional timepicker label.\n */\n readonly timepickerLabel = input<string>();\n\n protected get startDate(): Date | undefined {\n return this.config().enableDateRange ? this.dateRange()?.start : this.date();\n }\n\n protected get endDate(): Date | undefined {\n return this.config().enableDateRange ? this.dateRange()?.end : undefined;\n }\n /**\n * Returns the date object if not range selection is enabled. Otherwise, if\n * the date range role is 'END', the date range end date is returned. If\n * date range role is not 'END', the date range start date is returned.\n */\n private getRelevantDate(): Date | undefined {\n return !this.config().enableDateRange\n ? this.date()\n : this.dateRangeRole() === 'END'\n ? this.dateRange()?.end\n : this.dateRange()?.start;\n }\n\n private readonly defaultDisabledTimeText = t(\n () => $localize`:@@SI_DATEPICKER.DISABLED_TIME_TEXT:Ignore time`\n );\n private readonly defaultEnableTimeText = t(\n () => $localize`:@@SI_DATEPICKER.ENABLED_TIME_TEXT:Consider time`\n );\n\n protected readonly includeTimeLabel = computed(() =>\n this.disabledTime()\n ? (this.config().disabledTimeText ?? this.defaultDisabledTimeText)\n : (this.config().enabledTimeText ?? this.defaultEnableTimeText)\n );\n\n protected get weekStartDay(): WeekStart {\n return this.config().weekStartDay ?? this.localeWeekStart;\n }\n\n protected get hideWeekNumbers(): boolean {\n return this.config().hideWeekNumbers ?? false;\n }\n\n /**\n * The active view\n */\n protected readonly view = signal<ViewType>('week');\n /**\n * Get the current shown view.\n */\n private readonly activeView = computed(() => {\n switch (this.view()) {\n case 'month':\n return this.monthSelection();\n case 'year':\n return this.yearSelection();\n default:\n return this.daySelection();\n }\n });\n\n protected readonly actualFocusedDate = computed(() => this.focusedDate() ?? today());\n protected readonly requireFocus = signal(this.initialFocus());\n /** When the user switch from the year or month view via keyboard selection we force the focus. */\n protected readonly forceFocus = computed(() => this.requireFocus() || this.initialFocus());\n protected months: string[] = [];\n protected switchId = `__si-datepicker-switch-id-${idCounter++}`;\n protected timepickerId = `__si-datepicker-timepicker-id-${idCounter++}`;\n\n /**\n * Configuration which view shall be shown after year selection,\n * when onlyMonthSelection is enabled the month view is shown otherwise the week view.\n */\n protected yearViewSwitchTo: 'month' | 'week' = 'week';\n protected monthViewSwitchTo: 'month' | 'week' = 'week';\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly localeWeekStart: WeekStart;\n /**\n * Date object to track and change the time. Keeping time and date\n * in separate objects to not change the date when flipping time.\n * After change, a new date object is created with an adapted time.\n */\n protected time = new FormControl<Date | undefined>(undefined, {\n validators: [control => this.validateTime(control)],\n nonNullable: true\n });\n /**\n * Used to hold the last time when setting the time to disabled.\n * Value will be reset on enabling the time again.\n */\n private previousTime?: Date;\n\n /** Reference to the current day selection component. Shown when view === 'week' */\n private readonly daySelection = viewChild(SiDaySelectionComponent);\n /** Reference to the current month selection component. Shown when view === 'month' */\n private readonly monthSelection = viewChild(SiMonthSelectionComponent);\n /** Reference to the current year selection component. Shown when view === 'year' */\n private readonly yearSelection = viewChild(SiYearSelectionComponent);\n\n /**\n * The cell which which has the mouse hover.\n * @internal\n */\n readonly activeHover = model<Cell>();\n\n constructor() {\n this.initCalendarLabels();\n\n const weekStart = getLocaleFirstDayOfWeek(this.locale);\n this.localeWeekStart =\n weekStart === WeekDay.Sunday\n ? 'sunday'\n : weekStart === WeekDay.Saturday\n ? 'saturday'\n : 'monday';\n effect(() => {\n if (this.disabledTime()) {\n this.time.disable({ emitEvent: false });\n } else {\n this.time.enable({ emitEvent: false });\n }\n });\n this.time.valueChanges.subscribe((newTime?: Date) => this.timeSelected(newTime));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const config = this.config();\n if (changes.date && !config.enableDateRange) {\n if (this.date() && !isValid(this.date())) {\n this.date.set(undefined);\n }\n const date = this.date();\n if (date) {\n if (changes.date.isFirstChange()) {\n this.previousTime = new Date(date);\n this.time.setValue(date, { emitEvent: false });\n }\n if (this.time.value?.getTime() !== date?.getTime()) {\n this.time.setValue(date, { emitEvent: false });\n }\n this.focusedDate.set(date);\n }\n }\n\n if (changes.config?.currentValue?.disabledTime) {\n this.disabledTime.set(changes.config?.currentValue?.disabledTime);\n this.onDisabledTimeChanged();\n }\n\n if (changes.config?.firstChange) {\n if (config.onlyMonthSelection) {\n this.yearViewSwitchTo = 'month';\n this.monthViewSwitchTo = 'month';\n this.view.set('month');\n }\n }\n\n // Date-range input field has changed\n if (changes.dateRange) {\n // Ensure the dateRange object only contain valid start/end dates\n const dateRange = this.dateRange();\n if (dateRange) {\n if (!isValid(dateRange?.start)) {\n dateRange!.start = undefined;\n }\n if (!isValid(dateRange?.end)) {\n dateRange!.end = undefined;\n }\n }\n\n // Only one calendar is used when no dateRangeRole is available.\n const dateRangeRole = this.dateRangeRole();\n if (!dateRangeRole) {\n const previous: DateRange | undefined = changes.dateRange.previousValue;\n if (dateRange?.end && !isSameDate(dateRange.end, previous?.end)) {\n this.focusedDate.set(dateRange.end);\n }\n if (dateRange?.start && !isSameDate(dateRange.start, previous?.start)) {\n this.focusedDate.set(dateRange!.start);\n }\n } else {\n // Date range selection with two calendars\n const newDate = dateRangeRole === 'START' ? dateRange?.start : dateRange?.end;\n\n if (newDate && changes.dateRange.isFirstChange()) {\n this.previousTime = new Date(newDate);\n this.time.setValue(newDate, { emitEvent: false });\n }\n }\n }\n if (\n changes.minMonth?.currentValue &&\n isAfter(changes.minMonth.currentValue, this.actualFocusedDate())\n ) {\n this.focusedDate.set(changes.minMonth.currentValue);\n }\n if (\n changes.maxMonth?.currentValue &&\n isAfter(this.actualFocusedDate(), changes.maxMonth.currentValue)\n ) {\n this.focusedDate.set(changes.maxMonth.currentValue);\n }\n }\n\n ngOnInit(): void {\n const config = this.config();\n const dateRange = this.dateRange();\n const dateRangeRole = this.dateRangeRole();\n if (config.enableDateRange && this.rangeType() === 'END' && dateRange?.end && !dateRangeRole) {\n // The user chose to trigger the datepicker from the date-range end, in this\n // case we\n this.focusedDate.set(dateRange.end);\n } else if (config.enableDateRange && dateRangeRole === 'START') {\n const maxMonth = config?.onlyMonthSelection ? this.maxMonth() : config.maxDate;\n this.focusedDate.set(\n getDateSameOrBetween(\n dateRange?.start ? dateRange!.start : (this.focusedDate() ?? today()),\n config.minDate,\n maxMonth\n )\n );\n } else if (config.enableDateRange && dateRangeRole === 'END') {\n const minMonth = config?.onlyMonthSelection ? this.minMonth() : config.minDate;\n this.focusedDate.set(\n getDateSameOrBetween(\n dateRange?.end ? dateRange!.end : (this.focusedDate() ?? today()),\n minMonth,\n config.maxDate\n )\n );\n } else {\n this.focusedDate.set(\n getDateSameOrBetween(\n isValid(this.startDate) ? this.startDate : (this.focusedDate() ?? today()),\n config.minDate,\n config.maxDate\n )\n );\n }\n }\n\n ngAfterViewInit(): void {\n // After the view is created the first time we want that the children components set\n // the focus to the calendarBody. Means when we select a date in month-selection,\n // the day selection shall focus automatically the day in calendarBody.\n setTimeout(() => this.requireFocus.set(true));\n }\n\n /** Initialize day and month labels */\n private initCalendarLabels(): void {\n this.months = getLocaleMonthNames(this.locale.toString());\n }\n\n /**\n * Validates and sets a new date to the this.date model object of this component\n * and fires the related events. The model object shall not be updated elsewhere\n * with a new date object. Shall only be called on simple date selection and not\n * on date range selection.\n *\n * @param newDate - The new date to be set.\n */\n private setDate(newDate: Date): void {\n const dateWithoutTime = getDateWithoutTime(newDate);\n const config = this.config();\n const validForMinDate = !(\n config?.minDate && dateWithoutTime < getDateWithoutTime(config.minDate)\n );\n const configValue = this.config();\n const validForMaxDate = !(\n configValue?.maxDate && dateWithoutTime > getDateWithoutTime(configValue.maxDate)\n );\n const date = this.date();\n if (date !== newDate && validForMinDate && validForMaxDate) {\n const previousValue = date;\n this.date.set(newDate);\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.ngOnChanges({\n date: new SimpleChange(previousValue, date, previousValue === undefined)\n });\n //this.dateChange.emit(date);\n } else if (!validForMinDate || !validForMaxDate) {\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.ngOnChanges({ date: new SimpleChange(undefined, date, true) });\n }\n\n this.cdRef.markForCheck();\n }\n\n /**\n * Validates and sets the new date range to the dateRange model\n * object.\n * @param newDateRange - The new range to be set.\n * @returns True if the new range is valid and set. Otherwise false.\n */\n private setDateRange(newDateRange: DateRange): boolean {\n const config = this.config();\n if (newDateRange.start) {\n const isValidRange = isSameOrBetween(newDateRange.start, config?.minDate, config?.maxDate);\n if (!isValidRange) {\n return false;\n }\n }\n if (newDateRange.end) {\n const isValidRange = isSameOrBetween(newDateRange.end, config?.minDate, config?.maxDate);\n if (!isValidRange) {\n return false;\n }\n }\n\n this.dateRange.set(newDateRange);\n return true;\n }\n\n protected timeSelected(newTime?: Date): void {\n if (newTime == null) {\n return;\n }\n\n this.previousTime = this.time.value;\n this.time.setValue(newTime, { emitEvent: false });\n\n const oldDate = this.getRelevantDate() ?? new Date();\n let newDate: Date;\n if (this.disabledTime()) {\n // if time is disabled, ensure that 00:00:00 is displayed in any timezone\n newDate = createDate(oldDate);\n this.time.setValue(newDate, { emitEvent: false });\n } else {\n newDate = createDate(\n oldDate,\n newTime.getHours(),\n newTime.getMinutes(),\n newTime.getSeconds(),\n newTime.getMilliseconds()\n );\n }\n if (!this.config().enableDateRange) {\n this.setDate(newDate);\n } else {\n const newDateRange =\n this.dateRangeRole() === 'START'\n ? { start: newDate, end: this.dateRange()?.end }\n : { start: this.dateRange()?.start, end: newDate };\n this.setDateRange(newDateRange);\n }\n }\n\n protected toggleDisabledTime(): void {\n this.disabledTime.update(previous => !previous);\n this.config.update(c => {\n c.disabledTime = this.disabledTime();\n return c;\n });\n this.onDisabledTimeChanged();\n }\n\n private onDisabledTimeChanged(): void {\n if (!this.config().enableDateRange) {\n if (this.disabledTime()) {\n const date = this.date() ?? new Date();\n const newTime = new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0)\n );\n this.timeSelected(newTime);\n } else if (this.previousTime) {\n this.timeSelected(this.previousTime);\n } else {\n this.timeSelected(new Date());\n }\n }\n }\n\n private validateTime(control: AbstractControl): ValidationErrors | null {\n const config = this.config();\n const errors: ValidationErrors = {};\n if (!this.disabledTime() && config.enableTimeValidation && control.value) {\n if (config.minDate && control.value < config.minDate) {\n errors.minDate = { requiredDate: config.minDate, actual: control.value };\n } else if (config.maxDate && control.value > config.maxDate) {\n errors.maxDate = { requiredDate: config.maxDate, actual: control.value };\n }\n }\n\n return Object.keys(errors).length ? errors : null;\n }\n\n /**\n * Handle selection in the day view.\n * @param selection - selected date.\n */\n protected selectionChange(selection: Date): void {\n const time = this.time.value;\n const newDate = createDate(\n selection,\n time?.getHours(),\n time?.getMinutes(),\n time?.getSeconds(),\n time?.getMilliseconds()\n );\n if (this.config().enableDateRange) {\n const rangeType = this.rangeType();\n let newDateRange: DateRange =\n !rangeType || rangeType === 'START'\n ? { start: newDate, end: undefined }\n : { start: this.dateRange()?.start, end: newDate };\n let newRangeType: RangeType = !rangeType || rangeType === 'START' ? 'START' : 'END';\n\n // The user selected a date before the current range start. Now the clicked day\n // is used as new start and the end is cleared\n if (newDateRange.start && newDateRange.end && newDateRange.end < newDateRange.start) {\n newDateRange = { start: newDateRange.end, end: undefined };\n newRangeType = 'START'; // Switch back to start so that the next selection is end\n }\n\n // Reset end range when we started start\n if (newRangeType === 'START' && newDateRange.end) {\n newDateRange.end = undefined;\n }\n\n const rangeValid = this.setDateRange(newDateRange);\n\n if (rangeValid) {\n // Toggle rangeType every time the user uses the datepicker to change the range\n this.rangeType.set(newRangeType === 'START' ? 'END' : 'START');\n }\n } else {\n this.focusedDate.set(newDate);\n this.setDate(newDate);\n }\n }\n\n /**\n * Handle month/year changes\n * @param selection - the selected month or null of cancelled.\n */\n protected activeMonthChange(selection: Date | null): void {\n if (selection) {\n this.focusedDate.set(changeDay(selection, this.actualFocusedDate().getDate()));\n const config = this.config();\n if (config.onlyMonthSelection) {\n if (config.enableDateRange) {\n this.selectionChange(selection);\n } else {\n this.setDate(selection);\n }\n }\n }\n this.view.set(this.monthViewSwitchTo);\n }\n\n /**\n * Handle year changes\n * @param selection - the selected year or null of cancelled.\n */\n protected activeYearChange(selection: Date | null): void {\n if (selection) {\n selection.setMonth(this.actualFocusedDate().getMonth());\n this.focusedDate.set(changeDay(selection, this.actualFocusedDate().getDate()));\n }\n this.view.set(this.yearViewSwitchTo);\n }\n\n /**\n * Focus the active cell in view.\n * The function is required to transfer the focus from input to the active date cell.\n */\n focusActiveCell(): void {\n this.activeView()?.focusActiveCell();\n }\n\n protected onActiveHoverChange(event?: Cell): void {\n this.activeHover.set(event);\n }\n}\n","@if (!hideCalendar()) {\n <div class=\"text-center pb-6 calendar\">\n @switch (view()) {\n @case ('year') {\n <si-year-selection\n [focusedDate]=\"actualFocusedDate()\"\n [startDate]=\"startDate\"\n [endDate]=\"endDate\"\n [minDate]=\"config().minDate\"\n [maxDate]=\"config().maxDate\"\n [minMonth]=\"minMonth()\"\n [maxMonth]=\"maxMonth()\"\n [isRangeSelection]=\"config().enableDateRange!\"\n [previousLabel]=\"previousLabel() | translate\"\n [nextLabel]=\"nextLabel() | translate\"\n (selectedValueChange)=\"activeYearChange($event)\"\n />\n }\n @case ('month') {\n <si-month-selection\n [startDate]=\"startDate\"\n [endDate]=\"endDate\"\n [months]=\"months\"\n [minDate]=\"config().minDate\"\n [maxDate]=\"config().maxDate\"\n [minMonth]=\"minMonth()\"\n [maxMonth]=\"maxMonth()\"\n [isRangeSelection]=\"config().enableDateRange!\"\n [previewRange]=\"rangeType() === 'END'\"\n [previousLabel]=\"previousLabel() | translate\"\n [nextLabel]=\"nextLabel() | translate\"\n [activeHover]=\"activeHover()\"\n [focusedDate]=\"actualFocusedDate()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (focusedDateChange)=\"focusedDate.set($event)\"\n (selectedValueChange)=\"activeMonthChange($event)\"\n (viewChange)=\"view.set($event)\"\n />\n }\n @case ('week') {\n <si-day-selection\n [initialFocus]=\"forceFocus()\"\n [startDate]=\"startDate\"\n [endDate]=\"dateRange()?.end\"\n [isRangeSelection]=\"config().enableDateRange!\"\n [previewRange]=\"rangeType() === 'END'\"\n [hideWeekNumbers]=\"hideWeekNumbers\"\n [minDate]=\"config().minDate\"\n [maxDate]=\"config().maxDate\"\n [minMonth]=\"minMonth()\"\n [weekStartDay]=\"weekStartDay\"\n [calendarWeekLabel]=\"derivedWeekLabel()\"\n [previousLabel]=\"previousLabel() | translate\"\n [nextLabel]=\"nextLabel() | translate\"\n [todayLabel]=\"config().todayText\"\n [activeHover]=\"activeHover()\"\n [focusedDate]=\"actualFocusedDate()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (focusedDateChange)=\"focusedDate.set($event)\"\n (selectedValueChange)=\"selectionChange($event!)\"\n (viewChange)=\"view.set($event)\"\n />\n }\n }\n </div>\n}\n@if (this.config().showTime) {\n <div\n class=\"timepicker-container px-9 pb-6\"\n [class.pt-6]=\"!hideCalendar()\"\n [class.border-top]=\"!hideCalendar()\"\n >\n @if (!config().mandatoryTime && !hideTimeToggle()) {\n <div class=\"mb-5 form-check form-switch\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n role=\"switch\"\n [id]=\"switchId\"\n [checked]=\"!disabledTime()\"\n (change)=\"toggleDisabledTime()\"\n />\n <label class=\"form-check-label\" [for]=\"switchId\">{{\n includeTimeLabel() | translate\n }}</label>\n </div>\n }\n <div class=\"mt-auto\">\n @if (timepickerLabel()) {\n <label class=\"form-label\" [for]=\"timepickerId\">{{ timepickerLabel() | translate }}</label>\n }\n <si-timepicker\n #timePicker\n [id]=\"timepickerId\"\n [formControl]=\"time\"\n [hoursLabel]=\"config().hoursLabel ?? timePicker.hoursLabel()\"\n [minutesLabel]=\"config().minutesLabel ?? timePicker.minutesLabel()\"\n [secondsLabel]=\"config().secondsLabel ?? timePicker.secondsLabel()\"\n [millisecondsLabel]=\"config().millisecondsLabel ?? timePicker.millisecondsLabel()\"\n [hideLabels]=\"config().hideLabels ?? timePicker.hideLabels()\"\n [hoursAriaLabel]=\"config().hoursAriaLabel ?? timePicker.hoursAriaLabel()\"\n [minutesAriaLabel]=\"config().minutesAriaLabel ?? timePicker.minutesAriaLabel()\"\n [secondsAriaLabel]=\"config().secondsAriaLabel ?? timePicker.secondsAriaLabel()\"\n [millisecondsAriaLabel]=\"\n config().millisecondsAriaLabel ?? timePicker.millisecondsAriaLabel()\n \"\n [hoursPlaceholder]=\"config().hoursPlaceholder ?? timePicker.hoursPlaceholder()\"\n [minutesPlaceholder]=\"config().minutesPlaceholder ?? timePicker.minutesPlaceholder()\"\n [secondsPlaceholder]=\"config().secondsPlaceholder ?? timePicker.secondsPlaceholder()\"\n [millisecondsPlaceholder]=\"\n config().millisecondsPlaceholder ?? timePicker.millisecondsPlaceholder()\n \"\n [meridians]=\"config().meridians ?? timePicker.meridians()\"\n [meridiansLabel]=\"config().meridiansLabel ?? timePicker.meridiansLabel()\"\n [meridiansAriaLabel]=\"config().meridiansAriaLabel ?? timePicker.meridiansAriaLabel()\"\n [showMinutes]=\"config().showMinutes ?? true\"\n [showSeconds]=\"config().showSeconds ?? false\"\n [showMilliseconds]=\"config().showMilliseconds ?? false\"\n [showMeridian]=\"time12h()\"\n />\n </div>\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n A11yModule,\n ConfigurableFocusTrap,\n ConfigurableFocusTrapFactory,\n FocusMonitor\n} from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n signal,\n SimpleChanges,\n viewChild,\n DOCUMENT\n} from '@angular/core';\n\nimport { Cell } from './components/si-calendar-body.component';\nimport { isValid, nextMonth, previousMonth } from './date-time-helper';\nimport { SiDatepickerComponent } from './si-datepicker.component';\nimport { DatepickerConfig, DateRange } from './si-datepicker.model';\n\n@Component({\n selector: 'si-datepicker-overlay',\n imports: [SiDatepickerComponent, A11yModule],\n template: `\n <si-datepicker\n #datepicker\n tabindex=\"-1\"\n [initialFocus]=\"initialFocus()\"\n [config]=\"firstDatepickerConfig()\"\n [class.first-datepicker]=\"isTwoMonthDateRange() && !isMobile()\"\n [class.first-datepicker-mobile]=\"isTwoMonthDateRange() && isMobile()\"\n [date]=\"date()\"\n [dateRange]=\"dateRange()\"\n [dateRangeRole]=\"isTwoMonthDateRange() ? 'START' : undefined\"\n [time12h]=\"time12h()\"\n [timepickerLabel]=\"firstDatepickerConfig().startTimeLabel\"\n [maxMonth]=\"maxMonth()\"\n [rangeType]=\"rangeType()\"\n [(activeHover)]=\"activeHover\"\n (dateChange)=\"date.set($event)\"\n (dateRangeChange)=\"dateRange.set($event)\"\n (disabledTimeChange)=\"disableTime = $event; disabledTimeChange.emit($event)\"\n (focusedDateChange)=\"firstDatepickerFocusDateChange($event)\"\n (rangeTypeChange)=\"rangeType.set($event)\"\n />\n @if (isTwoMonthDateRange()) {\n <si-datepicker\n #datepickerTwo\n class=\"mh-100 overflow-auto\"\n tabindex=\"-1\"\n dateRangeRole=\"END\"\n [class.second-datepicker]=\"!isMobile()\"\n [class.second-datepicker-mobile]=\"isMobile()\"\n [hideTimeToggle]=\"true\"\n [initialFocus]=\"initialFocus()\"\n [config]=\"secondDatepickerConfig()\"\n [date]=\"date()\"\n [hideCalendar]=\"isMobile()\"\n [minMonth]=\"minMonth()\"\n [dateRange]=\"dateRange()\"\n [disabledTime]=\"disableTime\"\n [time12h]=\"time12h()\"\n [timepickerLabel]=\"secondDatepickerConfig().endTimeLabel\"\n [rangeType]=\"rangeType()\"\n [(activeHover)]=\"activeHover\"\n (dateRangeChange)=\"dateRange.set($event)\"\n (focusedDateChange)=\"secondDatepickerFocusDateChange($event)\"\n (rangeTypeChange)=\"rangeType.set($event)\"\n />\n }\n `,\n styleUrl: './si-datepicker-overlay.component.scss',\n changeDetection: ChangeDetectionStrategy.Default,\n host: {\n class: 'mt-md-1 d-flex elevation-2 rounded-2 overflow-auto align-items-stretch',\n '[class.flex-wrap]': 'isMobile()',\n '[class.mobile-datepicker-overlay]': 'isMobile()',\n '[class.fade]': 'isMobile()',\n '[class.show]': 'completeAnimation()'\n }\n})\nexport class SiDatepickerOverlayComponent implements OnChanges, OnInit, OnDestroy {\n protected readonly minMonth = signal<Date | undefined>(undefined);\n protected readonly maxMonth = signal<Date | undefined>(undefined);\n\n protected readonly datepicker = viewChild.required(SiDatepickerComponent);\n /**\n * {@inheritDoc SiDatepickerComponent#initialFocus}\n * @defaultValue false\n */\n readonly initialFocus = input(false, { transform: booleanAttribute });\n /**\n * {@inheritDoc SiDatepickerComponent#config}\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly config = input<DatepickerConfig>({});\n /**\n * {@inheritDoc SiDatepickerComponent#date}\n */\n readonly date = model<Date>();\n /**\n * {@inheritDoc SiDatepickerComponent#dateRange}\n */\n readonly dateRange = model<DateRange>();\n /**\n * {@inheritDoc SiDatepickerComponent#rangeType}\n */\n readonly rangeType = model<'START' | 'END'>();\n /**\n * {@inheritDoc SiDatepickerComponent#time12h}\n * @defaultValue false\n */\n readonly time12h = input(false, { transform: booleanAttribute });\n /**\n * Emits an event to notify about disabling the time from the datepicker.\n * When time is disable, we construct a pure date object in UTC 00:00:00 time.\n */\n readonly disabledTimeChange = output<boolean>();\n\n private readonly document = inject(DOCUMENT);\n private readonly elementRef = inject(ElementRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n private focusTrap!: ConfigurableFocusTrap;\n private previousActiveElement?: Element | HTMLElement;\n protected disableTime = false;\n protected activeHover?: Cell;\n protected readonly isTwoMonthDateRange = computed(\n () =>\n !!this.config().enableDateRange &&\n (!!this.config().enableTwoMonthDateRange || !!this.config().showTime)\n );\n protected readonly firstDatepickerConfig = signal<DatepickerConfig>({});\n protected readonly secondDatepickerConfig = signal<DatepickerConfig>({});\n /**\n * Indicate that the overlay is opened in small screen.\n * A modal dialog animation display when true and a wrapped two month calendar layout is displayed.\n *\n * @defaultValue false\n */\n readonly isMobile = input(false);\n\n protected readonly completeAnimation = signal(false);\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.config) {\n const config = this.config();\n\n this.firstDatepickerConfig.set(\n !this.isTwoMonthDateRange() ? config : { ...config, hideLabels: true }\n );\n\n this.secondDatepickerConfig.set({ ...config, hideLabels: true });\n }\n\n const dateRange = this.dateRange();\n if (\n changes.config?.currentValue?.onlyMonthSelection &&\n this.isTwoMonthDateRange() &&\n dateRange?.start\n ) {\n this.minMonth.set(new Date(dateRange?.start.getFullYear(), 0, 1));\n }\n\n this.rangeType.set('START');\n if (\n isValid(changes.dateRange?.currentValue?.start) &&\n !isValid(changes.dateRange?.currentValue?.end)\n ) {\n this.rangeType.set('END');\n }\n }\n\n ngOnInit(): void {\n this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);\n this.previousActiveElement = this.document.activeElement ?? undefined;\n if (this.isMobile()) {\n setTimeout(() => this.completeAnimation.set(true), 150);\n }\n }\n\n ngOnDestroy(): void {\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.focusTrap.destroy();\n if (this.initialFocus() && this.previousActiveElement && 'focus' in this.previousActiveElement)\n this.previousActiveElement.focus();\n }\n\n /**\n * Focus active cell in the current datepicker view.\n */\n focusActiveCell(): void {\n this.datepicker().focusActiveCell();\n }\n\n protected firstDatepickerFocusDateChange(newFocusedDate?: Date): void {\n if (!newFocusedDate) {\n return;\n }\n if (this.config()?.onlyMonthSelection) {\n this.minMonth.set(new Date(newFocusedDate.getFullYear() + 1, 0, 1));\n } else if (newFocusedDate !== this.maxMonth()) {\n this.minMonth.set(nextMonth(newFocusedDate));\n }\n }\n\n protected secondDatepickerFocusDateChange(newFocusedDate?: Date): void {\n if (newFocusedDate && newFocusedDate !== this.minMonth()) {\n if (this.config()?.onlyMonthSelection) {\n this.maxMonth.set(new Date(newFocusedDate.getFullYear() - 1, 11, 31));\n } else {\n this.maxMonth.set(previousMonth(newFocusedDate));\n }\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { BreakpointObserver, MediaMatcher } from '@angular/cdk/layout';\nimport { ConnectionPositionPair, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n OnDestroy,\n output,\n signal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { filter, map, skip, takeUntil, tap } from 'rxjs/operators';\n\nimport { SiDatepickerOverlayComponent } from './si-datepicker-overlay.component';\nimport { DatepickerConfig, DateRange } from './si-datepicker.model';\n\n// eslint-disable-next-line no-restricted-syntax\nexport enum CloseCause {\n Backdrop = 'backdrop',\n Detach = 'detach',\n Escape = 'escape',\n Select = 'select'\n}\n\nexport type DatepickerInput = {\n config: DatepickerConfig;\n date: Date;\n dateRange: DateRange;\n rangeType: 'START' | 'END';\n time12h: boolean;\n showTime: true;\n};\n\n/** Partial datepicker inputs */\nexport type DatepickerInputPartial = Partial<DatepickerInput>;\n\n/**\n * Directive with the responsibility to open/close datepicker overlay.\n */\n@Directive({\n selector: '[siDatepickerOverlay]',\n exportAs: 'siDatepickerOverlay'\n})\nexport class SiDatepickerOverlayDirective implements OnDestroy {\n /**\n * Position of the datepicker overlay. Accepts an array of positions or a single position.\n * The position will be chosen based on the first position that fits into the viewport.\n * The input is necessary since the positions between the siDatepicker directive and si-date-range\n * component are different.\n * @internal\n */\n readonly placement = signal<ConnectionPositionPair[]>([\n {\n overlayX: 'start',\n overlayY: 'top',\n originX: 'start',\n originY: 'bottom'\n },\n {\n overlayX: 'start',\n overlayY: 'bottom',\n originX: 'start',\n originY: 'top'\n }\n ]);\n /**\n * Output event on closing datepicker e.g. by clicking backdrop or escape key.\n */\n readonly siDatepickerClose = output<CloseCause>();\n\n private overlayRef?: OverlayRef;\n private datepickerRef?: ComponentRef<SiDatepickerOverlayComponent>;\n private autoCloseSelection = new Subject<void>();\n /** Guard for siDatepickerClose event emitter to make sure the cause is emitter just once */\n private ignoreClose = false;\n private readonly overlay = inject(Overlay);\n private readonly triggerElementRef = inject(ElementRef);\n private readonly mediaMatcher = inject(MediaMatcher);\n private readonly breakpointObserver = inject(BreakpointObserver);\n private readonly destroyRef = inject(DestroyRef);\n /**\n * When the media query matches on open the overlay is displayed like a modal dialog.\n * In case, users change the screen size to the matching media query we close the overlay\n * if it is open with a connected overlay strategy.\n */\n private readonly smallScreenQuery = `(max-width: ${BOOTSTRAP_BREAKPOINTS.mdMinimum}px) or (max-height: ${BOOTSTRAP_BREAKPOINTS.smMinimum}px)`;\n\n ngOnDestroy(): void {\n this.overlayRef?.dispose();\n this.datepickerRef = undefined;\n }\n\n /**\n * Show datepicker overlay.\n * @param focus - move focus to the datepicker.\n * @returns create datepicker overlay instance\n */\n showOverlay(\n focus = false,\n inputs?: DatepickerInputPartial\n ): ComponentRef<SiDatepickerOverlayComponent> {\n return this.showDatepicker().setInputs(inputs).focus(focus).datepickerRef!;\n }\n\n /**\n * Close datepicker.\n */\n closeOverlay(): undefined {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef?.detach();\n this.overlayRef?.dispose();\n }\n this.datepickerRef = undefined;\n return undefined;\n }\n\n /**\n * Focus active cell in datepicker.\n * @param focus - show transfer focus.\n * @returns current instance.\n */\n focus(focus = true): this {\n if (focus) {\n this.datepickerRef?.setInput('initialFocus', true);\n this.datepickerRef?.instance.focusActiveCell();\n this.datepickerRef?.changeDetectorRef.markForCheck();\n }\n return this;\n }\n\n /**\n * Indicate the datepicker is visible.\n * @returns is visible.\n */\n isShown(): ComponentRef<SiDatepickerOverlayComponent> | undefined {\n return this.datepickerRef;\n }\n\n /** Set datepicker inputs */\n setInputs(inputs?: DatepickerInputPartial): this {\n if (this.datepickerRef && inputs) {\n Object.entries(inputs).forEach(([key, value]) => {\n this.datepickerRef!.setInput(key.toString(), value);\n });\n }\n return this;\n }\n\n /** Close overlay with cause select, which will recover the focus */\n closeAfterSelection(): void {\n this.autoCloseSelection.next();\n }\n\n /** Indicate whether the HTML element is a child of the datepicker overlay. */\n contains(element: HTMLElement): boolean {\n if (!element) {\n return false;\n }\n return this.overlayRef?.overlayElement?.contains(element) ?? false;\n }\n\n private showDatepicker(): this {\n if (this.overlayRef?.hasAttached()) {\n return this;\n }\n\n // Since the connected overlay strategy has some limitations in small screens e.g.\n // the overlay is moved via style top without recalculating the (max)height which\n // can result in a cut of time picker.\n // To overcome this issue the overlay use the global position strategy in small screens.\n const smallScreen = this.mediaMatcher.matchMedia(this.smallScreenQuery).matches;\n if (smallScreen) {\n this.createMobileOverlay();\n } else {\n this.createDesktopOverlay();\n }\n\n this.closeStream(this.overlayRef!)\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n takeUntil(outputToObservable(this.siDatepickerClose))\n )\n .subscribe(cause => {\n // The handler is called multiple times since we need to listen to detach events\n if (this.datepickerRef && !this.ignoreClose) {\n this.ignoreClose = true;\n this.closeOverlay();\n this.ignoreClose = false;\n this.siDatepickerClose.emit(cause);\n }\n });\n\n const portal = new ComponentPortal(SiDatepickerOverlayComponent);\n this.datepickerRef = this.overlayRef!.attach(portal);\n if (smallScreen) {\n this.datepickerRef.setInput('isMobile', true);\n }\n\n // Automatically close the overlay if we reach the small screen breakpoint\n // and the picker does not use the global position strategy.\n this.breakpointObserver\n .observe(this.smallScreenQuery)\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n takeUntil(outputToObservable(this.siDatepickerClose)),\n skip(1)\n )\n .subscribe(() => this.closeOverlay());\n return this;\n }\n\n protected createMobileOverlay(): void {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n direction: isRTL() ? 'rtl' : 'ltr',\n hasBackdrop: true,\n backdropClass: 'modal-backdrop'\n });\n }\n\n protected createDesktopOverlay(): void {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.triggerElementRef)\n .withPositions(this.placement())\n .withPush(true)\n .withGrowAfterOpen(true)\n .withFlexibleDimensions(true)\n .withViewportMargin(4),\n direction: isRTL() ? 'rtl' : 'ltr',\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n }\n /**\n * Merge events which shall close the overlay\n * @param overlayRef - source for backdrop, detach or escape events.\n * @returns merged observable\n */\n private closeStream(overlayRef: OverlayRef): Observable<CloseCause> {\n return merge(\n this.autoCloseSelection.pipe(map(() => CloseCause.Select)),\n overlayRef.backdropClick().pipe(map(() => CloseCause.Backdrop)),\n overlayRef.detachments().pipe(map(() => CloseCause.Detach)),\n overlayRef.keydownEvents().pipe(\n filter(event => event.key === 'Escape'),\n tap(event => event.stopPropagation()), // ESC handled, prevent closing modal, etc.\n map(() => CloseCause.Escape)\n )\n );\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterViewInit,\n booleanAttribute,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n inject,\n input\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SI_FORM_ITEM_CONTROL } from '@siemens/element-ng/form';\nimport { Subscription } from 'rxjs';\n\nimport { is12HourFormat } from './date-time-helper';\nimport { SiDateInputDirective } from './si-date-input.directive';\nimport { SiDatepickerOverlayComponent } from './si-datepicker-overlay.component';\nimport { SiDatepickerOverlayDirective } from './si-datepicker-overlay.directive';\n\n@Directive({\n selector: '[siDatepicker]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiDatepickerDirective,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiDatepickerDirective,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiDatepickerDirective\n }\n ],\n hostDirectives: [\n {\n directive: SiDatepickerOverlayDirective,\n outputs: ['siDatepickerClose']\n }\n ],\n exportAs: 'siDatepicker'\n})\nexport class SiDatepickerDirective extends SiDateInputDirective implements AfterViewInit {\n /**\n * Automatically close overlay on date selection.\n * Do not use this behavior with config showTime = true, because it\n * will close the overlay when the user change one of the time units.\n *\n * @defaultValue false\n */\n readonly autoClose = input(false, { transform: booleanAttribute });\n\n /**\n * During focus on close the datepicker will not show since we recover the focus on element.\n * The focus on close is only relevant when the directive is configured without a calendar button.\n */\n private overlaySubscriptions?: Subscription[];\n private externalTrigger?: ElementRef<HTMLElement>;\n private readonly overlayToggle = inject(SiDatepickerOverlayDirective);\n\n ngAfterViewInit(): void {\n // Update datepicker with new date value\n this.dateChange.subscribe(date => this.overlayToggle.setInputs({ date }));\n }\n\n /** @internal */\n touch(): void {\n this.onTouched();\n }\n\n /**\n * On click shall show datepicker.\n */\n @HostListener('click')\n protected onClick(): void {\n if (!this.externalTrigger) {\n this.show();\n }\n }\n\n /**\n * Focus out shall close the datepicker except we are moving the focus to the datepicker.\n * @param event - focus out event with the related target\n */\n protected override onBlur(event: FocusEvent): void {\n const target = event.relatedTarget as HTMLElement;\n if (!this.externalTrigger && !this.overlayToggle.contains(target)) {\n this.overlayToggle.closeOverlay();\n this.onTouched();\n }\n }\n\n @HostListener('keydown.tab')\n protected onTab(): void {\n if (this.overlayToggle.isShown()) {\n this.overlayToggle.closeOverlay();\n }\n }\n\n /**\n * @internal\n */\n public show(initialFocus = false): void {\n if (this.disabled() || this.readonly() || this.overlayToggle.isShown()) {\n return;\n }\n\n this.subscribeDateChanges(\n this.overlayToggle.showOverlay(initialFocus, {\n config: this.siDatepickerConfig(),\n date: this.date,\n time12h: is12HourFormat(this.locale, this.siDatepickerConfig() ?? {})\n })\n );\n }\n\n /**\n * @internal\n */\n public useExternalTrigger(element: ElementRef<HTMLElement>): void {\n this.externalTrigger = element;\n }\n\n @HostListener('focus')\n protected focusChange(): void {\n if (!this.externalTrigger) {\n this.show();\n }\n }\n\n private subscribeDateChanges(overlay?: ComponentRef<SiDatepickerOverlayComponent>): void {\n this.overlaySubscriptions?.forEach(s => s.unsubscribe());\n\n overlay?.instance.date.subscribe(d => this.onDateChanged(d));\n overlay?.instance.disabledTimeChange.subscribe(d => this.onDisabledTime(d));\n }\n\n /**\n * Callback when the datepicker changes his value.\n * @param date - updated date\n */\n protected override onDateChanged(date?: Date): void {\n // While typing a date can be invalid and the datepicker component will automatically change the date to undefined.\n // Since we don't want to reset the current input value it is necessary to ignore those updates.\n if (!date) {\n return;\n }\n super.onDateChanged(date);\n if (this.autoClose()) {\n // a tick later so the event won't end on the wrong element\n setTimeout(() => this.overlayToggle.closeAfterSelection());\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n computed,\n ElementRef,\n HostAttributeToken,\n HostListener,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgModel,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { elementCalendar } from '@siemens/element-icons';\nimport {\n positionBottomCenter,\n positionBottomEnd,\n positionBottomStart,\n positionTopCenter,\n positionTopEnd,\n positionTopStart\n} from '@siemens/element-ng/common';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '@siemens/element-ng/form';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { is12HourFormat } from './date-time-helper';\nimport { SiDateInputDirective } from './si-date-input.directive';\nimport { SiDatepickerOverlayComponent } from './si-datepicker-overlay.component';\nimport { CloseCause, SiDatepickerOverlayDirective } from './si-datepicker-overlay.directive';\nimport { DatepickerInputConfig, DateRange } from './si-datepicker.model';\n\n@Component({\n selector: 'si-date-range',\n imports: [FormsModule, SiDateInputDirective, SiIconComponent, SiTranslatePipe, A11yModule],\n templateUrl: './si-date-range.component.html',\n styleUrl: './si-date-range.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiDateRangeComponent,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiDateRangeComponent,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiDateRangeComponent\n }\n ],\n host: {\n class: 'form-control d-flex align-items-center pe-2',\n role: 'group',\n '[class.disabled]': 'disabled()',\n '[class.readonly]': 'readonly()',\n '[attr.aria-labelledby]': 'labelledby'\n },\n hostDirectives: [\n {\n directive: SiDatepickerOverlayDirective,\n outputs: ['siDatepickerClose']\n }\n ]\n})\nexport class SiDateRangeComponent\n implements ControlValueAccessor, Validator, AfterViewInit, OnChanges, SiFormItemControl\n{\n private static idCounter = 0;\n private readonly inputDirectives = viewChildren(SiDateInputDirective);\n private readonly startInput = viewChild.required<NgModel>('startInput');\n private readonly endInput = viewChild.required<NgModel>('endInput');\n private readonly button = viewChild.required<ElementRef>('button');\n /**\n * @defaultValue\n * ```\n * `__si-date-range-${SiDateRangeComponent.idCounter++}`\n * ```\n */\n readonly id = input(`__si-date-range-${SiDateRangeComponent.idCounter++}`);\n\n readonly labelledby =\n inject(new HostAttributeToken('aria-labelledby'), {\n optional: true\n }) ?? `${this.id()}-label`;\n\n /**\n * Date range component configuration.\n *\n * @defaultValue\n * ```\n * { enableDateRange: true }\n * ```\n */\n readonly siDatepickerConfig = model<DatepickerInputConfig>({ enableDateRange: true });\n /**\n * Placeholder of the start date input.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.START_DATE_PLACEHOLDER:Start date`)\n * ```\n */\n readonly startDatePlaceholder = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.START_DATE_PLACEHOLDER:Start date`)\n );\n /**\n * Placeholder of the end date input.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.END_DATE_PLACEHOLDER:End date`)\n * ```\n */\n readonly endDatePlaceholder = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.END_DATE_PLACEHOLDER:End date`)\n );\n /**\n * Aria label of the date-range calendar toggle button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n * ```\n */\n readonly ariaLabelCalendarButton = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n );\n /**\n * Form label of the start timepicker.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.START_TIME_LABEL:from`)\n * ```\n */\n readonly startTimeLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.START_TIME_LABEL:from`)\n );\n /**\n * Form label of the start timepicker.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.END_TIME_LABEL:to`)\n * ```\n */\n readonly endTimeLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.END_TIME_LABEL:to`)\n );\n /**\n * Automatically close overlay on date selection.\n *\n * @defaultValue false\n */\n readonly autoClose = input(false, { transform: booleanAttribute });\n /** Emits on the date range value changes. */\n readonly siDatepickerRangeChange = output<DateRange | undefined>();\n /**\n * Emits an event to notify about disabling the time from the range picker.\n * When time is disable, we construct a pure date objects in UTC 00:00:00 time.\n */\n readonly disabledTimeChange = output<boolean>();\n\n /**\n * Whether the date range input is disabled.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly disabledInput = input(false, { alias: 'disabled' });\n\n /**\n * Whether the date range input is readonly.\n *\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Set the date-range object displayed in the control.\n * The input can be used if the control is used outside Angular forms.\n */\n readonly value = model<DateRange>();\n\n /**\n * This ID will be bound to the `aria-describedby` attribute of the date-range.\n * Use this to reference the element containing the error message(s) for the date-range.\n * It will be picked by the {@link SiFormItemComponent} if the date-range is used inside a form item.\n *\n * @defaultValue\n * ```\n * `${this.id()}-errormessage`\n * ```\n */\n readonly errormessageId = input(`${this.id()}-errormessage`);\n\n private validator!: ValidatorFn;\n private onChange = (val: any): void => {};\n private onTouch = (): void => {};\n\n protected readonly icons = addIcons({ elementCalendar });\n protected readonly disabled = computed(() => this.disabledInput() || this.disabledNgControl());\n private readonly disabledNgControl = signal(false);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly locale = inject(LOCALE_ID).toString();\n private readonly overlayToggle = inject(SiDatepickerOverlayDirective);\n private readonly elementRef = inject(ElementRef);\n private readonly defaultPlacement = [\n positionBottomCenter,\n positionBottomStart,\n positionBottomEnd,\n positionTopCenter,\n positionTopStart,\n positionTopEnd\n ];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.siDatepickerConfig) {\n this.siDatepickerConfig.set({\n ...changes.siDatepickerConfig.currentValue,\n enableDateRange: true,\n startTimeLabel:\n changes.siDatepickerConfig.currentValue.startTimeLabel ?? this.startTimeLabel(),\n endTimeLabel: changes.siDatepickerConfig.currentValue.endTimeLabel ?? this.endTimeLabel()\n });\n if (changes.value) {\n this.updateValue(this.value());\n }\n }\n this.overlayToggle.setInputs({ config: this.siDatepickerConfig(), dateRange: this.value() });\n }\n\n ngAfterViewInit(): void {\n this.validator = Validators.compose([\n () => this.endAfterStartValidator(),\n this.childValidation\n ])!;\n\n this.overlayToggle.placement.set(this.defaultPlacement);\n this.overlayToggle.siDatepickerClose.subscribe(cause => {\n if ([CloseCause.Escape, CloseCause.Select].includes(cause)) {\n this.button().nativeElement.focus();\n } else {\n // Mark component as touch when the focus isn't recovered on input\n this.onTouch();\n this.cdRef.markForCheck();\n }\n });\n }\n\n writeValue(dateRange: DateRange): void {\n this.updateValue(dateRange);\n this.overlayToggle.setInputs({ dateRange });\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledNgControl.set(isDisabled);\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n return this.validator ? this.validator(c) : null;\n }\n\n /**\n * Focus out shall close the datepicker except we are moving the focus to the datepicker or one of the input elements.\n * @param event - focus out event with the related target\n */\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n const target = event.relatedTarget as HTMLInputElement;\n if (!this.overlayToggle.contains(target)) {\n this.overlayToggle.closeOverlay();\n\n // Only mark the component as touched when the focus is not moved to the datepicker or one of the input elements.\n if (!this.elementRef.nativeElement.contains(target)) {\n this.onTouch();\n }\n }\n }\n\n /** Forward date range input changes to datepicker overlay */\n protected onInputChanged(dateRange: DateRange): void {\n this.updateValue(dateRange);\n\n this.onChange(this.value());\n this.siDatepickerRangeChange.emit(this.value());\n }\n\n protected show(): void {\n if (this.readonly() || this.disabled()) {\n return;\n }\n this.subscribeRangeChanges(\n this.overlayToggle.showOverlay(true, {\n config: this.siDatepickerConfig(),\n dateRange: this.value(),\n time12h: is12HourFormat(this.locale, this.siDatepickerConfig())\n })\n );\n }\n\n private subscribeRangeChanges(overlay?: ComponentRef<SiDatepickerOverlayComponent>): void {\n overlay?.instance.dateRange.subscribe(d => this.onRangeChanged(d));\n overlay?.instance.disabledTimeChange.subscribe(disabledTime => {\n this.inputDirectives().forEach(inputDirective => inputDirective.onDisabledTime(disabledTime));\n this.disabledTimeChange.emit(disabledTime);\n });\n }\n\n private onRangeChanged(range?: DateRange): void {\n this.updateValue(range);\n this.onChange(range);\n this.siDatepickerRangeChange.emit(range);\n this.validateChildren();\n\n if (this.autoClose() && this.value()?.start && this.value()?.end) {\n // We have to queue the close in the another cycle since other output event\n // emitters like rangeTypeChange can complete before we destroy the overlay.\n setTimeout(() => this.overlayToggle.closeAfterSelection());\n }\n }\n\n /** Run validators on the start/end inputs. */\n private validateChildren(): void {\n this.inputDirectives().forEach(d => d.validatorOnChange());\n }\n\n /** The form control validator for the end date is greater equal start date. */\n private endAfterStartValidator(): ValidationErrors | null {\n const endDate = this.endInput().value;\n const startDate = this.startInput().value;\n\n return !endDate || !startDate || endDate >= startDate\n ? null\n : {\n endBeforeStart: {\n start: startDate,\n end: endDate\n }\n };\n }\n\n private readonly childValidation: ValidatorFn = () => {\n const errors: Record<string, any> = {};\n this.readErrorsFromInnerControl(this.startInput(), 'Start', errors);\n this.readErrorsFromInnerControl(this.endInput(), 'End', errors);\n\n if (Object.keys(errors).length) {\n return errors;\n }\n\n return null;\n };\n\n private readErrorsFromInnerControl(\n control: NgModel,\n type: 'Start' | 'End',\n errors: Record<string, any>\n ): void {\n if (control.invalid) {\n const formatError = control.getError('dateFormat');\n if (formatError) {\n errors[`invalid${type}DateFormat`] = formatError;\n }\n const minError = control.getError('minDate');\n if (minError) {\n errors.rangeBeforeMinDate = {\n min: minError.min,\n minString: minError.minString,\n start: this.startInput().value,\n end: this.endInput().value\n };\n }\n const maxError = control.getError('maxDate');\n if (maxError) {\n errors.rangeAfterMaxDate = {\n max: maxError.max,\n maxString: maxError.maxString,\n start: this.startInput().value,\n end: this.endInput().value\n };\n }\n }\n }\n\n private updateValue(value?: DateRange): void {\n // this allows angular's built in required validator to work correctly\n if (!value?.start && !value?.end) {\n this.value.set(undefined);\n } else {\n this.value.set(value);\n }\n }\n}\n","<input\n #startInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none\"\n siDateInput\n [ngModel]=\"value()?.start ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"startDatePlaceholder() | translate\"\n [attr.aria-label]=\"startDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: $event, end: value()?.end })\"\n/>\n<span class=\"mx-3\">-</span>\n<input\n #endInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none text-end\"\n siDateInput\n [ngModel]=\"value()?.end ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"endDatePlaceholder() | translate\"\n [attr.aria-label]=\"endDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: value()?.start, end: $event })\"\n/>\n<button\n #button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary btn-sm\"\n [attr.aria-label]=\"ariaLabelCalendarButton() | translate\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"show()\"\n>\n <si-icon [icon]=\"icons.elementCalendar\" />\n</button>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n ElementRef,\n inject,\n input,\n OnInit,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl } from '@angular/forms';\nimport { elementCalendar } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { SiDatepickerOverlayDirective } from './si-datepicker-overlay.directive';\nimport { SiDatepickerDirective } from './si-datepicker.directive';\n\n/**\n * Calendar toggle button used in combination with a datepicker directive.\n *\n * @example\n * ```\n * <si-calendar-button class=\"w-100\">\n * <input\n * class=\"form-control\"\n * type=\"text\"\n * siDatepicker\n * [siDatepickerConfig]=\"config\"\n * />\n * </si-calendar-button>\n * ```\n */\n@Component({\n selector: 'si-calendar-button',\n imports: [SiIconComponent, SiTranslatePipe],\n template: `<ng-content />\n <button\n #calendarButton\n name=\"open-calendar\"\n type=\"button\"\n class=\"btn btn-icon btn-tertiary btn-sm position-absolute end-0 top-0 me-2 mt-2\"\n [attr.aria-label]=\"ariaLabel() | translate\"\n [disabled]=\"disabled()\"\n (click)=\"show()\"\n >\n <si-icon [icon]=\"icons.elementCalendar\" />\n </button>`,\n styles: ':host {--si-action-icon-offset: 24px;}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'd-inline-block position-relative form-control-wrapper'\n }\n})\nexport class SiCalendarButtonComponent implements OnInit, AfterContentInit {\n /**\n * Aria label for the calendar toggle button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n * ```\n */\n readonly ariaLabel = input(\n t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n );\n\n protected readonly button = viewChild.required<ElementRef<HTMLButtonElement>>('calendarButton');\n /** Datepicker input directive instance used to watch for state changes and required to open the calendar. */\n protected readonly datepicker = contentChild.required(SiDatepickerDirective);\n protected readonly datepickerOverlay = contentChild.required(SiDatepickerOverlayDirective);\n protected readonly ngControl = contentChild(NgControl);\n protected readonly disabled = signal(false);\n protected readonly icons = addIcons({ elementCalendar });\n private readonly destroyerRef = inject(DestroyRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n ngOnInit(): void {\n // Monitor input state changes and update the button accordingly\n this.datepicker().stateChange.subscribe(() => this.updateState());\n this.focusMonitor\n .monitor(this.elementRef, true)\n .pipe(takeUntilDestroyed(this.destroyerRef))\n .subscribe(origin => {\n setTimeout(() => {\n if (origin === null && !this.datepickerOverlay().isShown()) {\n this.datepicker().touch();\n }\n });\n });\n }\n\n ngAfterContentInit(): void {\n this.datepicker().useExternalTrigger(this.button());\n this.updateState();\n }\n\n protected show(): void {\n this.datepicker().show(true);\n }\n\n private updateState(): void {\n const datepicker = this.datepicker();\n this.disabled.set(datepicker.disabled() || datepicker.readonly());\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiCalendarButtonComponent } from './si-calendar-button.component';\nimport { SiDateInputDirective } from './si-date-input.directive';\nimport { SiDateRangeComponent } from './si-date-range.component';\nimport { SiDatepickerComponent } from './si-datepicker.component';\nimport { SiDatepickerDirective } from './si-datepicker.directive';\nimport { SiTimepickerComponent } from './si-timepicker.component';\n\n@NgModule({\n imports: [\n SiCalendarButtonComponent,\n SiDateInputDirective,\n SiDatepickerComponent,\n SiDatepickerDirective,\n SiDateRangeComponent,\n SiTimepickerComponent\n ],\n exports: [\n SiCalendarButtonComponent,\n SiDateInputDirective,\n SiDatepickerComponent,\n SiDatepickerDirective,\n SiDateRangeComponent,\n SiTimepickerComponent\n ]\n})\nexport class SiDatepickerModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-datepicker.model';\nexport * from './si-date-input.directive';\nexport * from './si-datepicker.directive';\nexport * from './si-datepicker.component';\n// included as output property siDatepickerClose is public\nexport * from './si-datepicker-overlay.directive';\nexport * from './si-timepicker.component';\nexport * from './si-date-range.component';\nexport * from './si-datepicker-overlay.component';\nexport * from './si-calendar-button.component';\nexport * from './si-datepicker.module';\nexport * from './date-time-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["today","getToday","minDate","getMinDate","i1","i1.SiDatepickerOverlayDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-datepicker.mjs","sources":["../../../../projects/element-ng/datepicker/date-time-helper.ts","../../../../projects/element-ng/datepicker/si-datepicker.model.ts","../../../../projects/element-ng/datepicker/si-date-input.directive.ts","../../../../projects/element-ng/datepicker/components/si-calendar-date-cell.directive.ts","../../../../projects/element-ng/datepicker/components/si-compare-adapter.ts","../../../../projects/element-ng/datepicker/components/si-calendar-body.component.ts","../../../../projects/element-ng/datepicker/components/si-calendar-body.component.html","../../../../projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts","../../../../projects/element-ng/datepicker/components/si-calendar-direction-button.component.html","../../../../projects/element-ng/datepicker/components/si-initial-focus.component.ts","../../../../projects/element-ng/datepicker/components/si-day-selection.component.ts","../../../../projects/element-ng/datepicker/components/si-day-selection.component.html","../../../../projects/element-ng/datepicker/components/si-month-selection.component.ts","../../../../projects/element-ng/datepicker/components/si-month-selection.component.html","../../../../projects/element-ng/datepicker/components/si-year-selection.component.ts","../../../../projects/element-ng/datepicker/components/si-year-selection.component.html","../../../../projects/element-ng/datepicker/si-timepicker.component.ts","../../../../projects/element-ng/datepicker/si-timepicker.component.html","../../../../projects/element-ng/datepicker/si-datepicker.component.ts","../../../../projects/element-ng/datepicker/si-datepicker.component.html","../../../../projects/element-ng/datepicker/si-datepicker-overlay.component.ts","../../../../projects/element-ng/datepicker/si-datepicker-overlay.directive.ts","../../../../projects/element-ng/datepicker/si-datepicker.directive.ts","../../../../projects/element-ng/datepicker/si-date-range.component.ts","../../../../projects/element-ng/datepicker/si-date-range.component.html","../../../../projects/element-ng/datepicker/si-calendar-button.component.ts","../../../../projects/element-ng/datepicker/si-datepicker.module.ts","../../../../projects/element-ng/datepicker/index.ts","../../../../projects/element-ng/datepicker/siemens-element-ng-datepicker.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n FormatWidth,\n FormStyle,\n getLocaleDateFormat,\n getLocaleDateTimeFormat,\n getLocaleDayPeriods,\n getLocaleId,\n getLocaleTimeFormat,\n TranslationWidth\n} from '@angular/common';\n\nimport { DatepickerInputConfig, getDatepickerFormat, WeekStart } from './si-datepicker.model';\n\nexport interface DayOfWeek {\n id: string;\n index: number;\n offset: number;\n isWeekend: boolean;\n}\n\nconst WEEK_ISO: DayOfWeek[] = [\n { id: 'monday', index: 1, offset: 0, isWeekend: false },\n { id: 'tuesday', index: 2, offset: 1, isWeekend: false },\n { id: 'wednesday', index: 3, offset: 2, isWeekend: false },\n { id: 'thursday', index: 4, offset: 3, isWeekend: false },\n { id: 'friday', index: 5, offset: 4, isWeekend: false },\n { id: 'saturday', index: 6, offset: 5, isWeekend: true },\n { id: 'sunday', index: 7, offset: 6, isWeekend: true }\n];\n\nexport const WEEK_START_OFFSET = {\n 'monday': 0,\n 'saturday': 5,\n 'sunday': 6\n};\n\nconst UNITS = {\n millisecondsPerDay: 86400000,\n daysPerWeek: 7,\n thursday: 4\n};\n\nconst dayOfWeekMap: {\n [key: string]: DayOfWeek[];\n} = {};\n\nexport const getDaysOfWeek = (weekStart: WeekStart): DayOfWeek[] => {\n weekStart = weekStart ?? 'monday';\n let weekdays: DayOfWeek[] = dayOfWeekMap[weekStart];\n if (!weekdays) {\n dayOfWeekMap[weekStart] = weekdays = [];\n const offset = WEEK_START_OFFSET[weekStart];\n for (let i = 0; i < 7; i++) {\n weekdays.push({ ...WEEK_ISO[(i + offset) % 7], offset: i });\n }\n }\n return weekdays;\n};\n\n/**\n * Get local specific months using DateTimeFormat.\n * @param locale - current locale\n */\nexport const getLocaleMonthNames = (locale: string): string[] => {\n const format = new Intl.DateTimeFormat(locale, { month: 'long', timeZone: 'UTC' }).format;\n return Array(12)\n .fill(0)\n .map((v, m) => format(new Date(Date.UTC(0, m))));\n};\n\n/**\n * Get local specific weekdays as string using DateTimeFormat.\n * @param locale - current local\n * @param weekStart - start of the week\n * @param format - display format\n * @returns array of week days.\n */\nexport const getDayStrings = (\n locale: string,\n weekStart: WeekStart = 'monday',\n format: 'narrow' | 'short' | 'long' = 'short'\n): string[] => {\n const dateFormatter = new Intl.DateTimeFormat(locale, { weekday: format, timeZone: 'utc' });\n const days = [];\n // Get local specific day strings from sunday (0) .. saturady (6)\n for (let index = 1; index <= 7; index++) {\n const day = new Date(Date.UTC(2023, 0, index));\n days.push(dateFormatter.format(day));\n }\n const map = { 'sunday': 0, 'monday': 1, 'saturday': 6 };\n const index = map[weekStart];\n return days.slice(index).concat(days.slice(0, index));\n};\n\n/**\n * Gets the first day in the specified month.\n * Expects the month as a value between 1 and 12.\n * The year is required to handle leap years.\n *\n * @returns The first day of the month as a Date.\n */\nexport const getFirstDayInMonth = (year: number, month: number): Date =>\n new Date(year, month - 1, 1);\n\n/**\n * Returns the ISO-8601 week number for the user's week containing the specified date.\n * ISO-8601 weeks always start on Monday. When the user's week starts on Sunday or Saturday,\n * the date is adjusted to find the corresponding ISO week (based on the Thursday rule).\n * The first week of a year is the week that contains the first Thursday of the year (='First 4-day week').\n * The highest week number in a year is either 52 or 53.\n *\n * @param date -The JavaScript date object.\n * @param weekStart -Name of the first day of the week\n * @returns The number of the Week\n */\nexport const getWeekOfYear = (date: Date, weekStart: WeekStart): number => {\n const nearestThu = new Date(date);\n nearestThu.setHours(0, 0, 0, 0);\n const offset = weekStart === 'monday' ? 0 : weekStart === 'sunday' ? 1 : 2;\n nearestThu.setDate(nearestThu.getDate() + offset);\n adjustToThursday(nearestThu);\n const year = nearestThu.getFullYear();\n const weekOne = new Date(year, 0, 4);\n adjustToThursday(weekOne);\n const days = Math.round((nearestThu.getTime() - weekOne.getTime()) / UNITS.millisecondsPerDay);\n const week = 1 + Math.floor(days / UNITS.daysPerWeek); // Count of Thursdays\n return week;\n};\n\nconst adjustToThursday = (date: Date): void => {\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n};\n\nexport const getWeekDayOffset = (date: Date, weekStart: WeekStart): number => {\n const offset = WEEK_START_OFFSET[weekStart ?? 'monday'];\n return (date.getDay() + 6 - offset) % 7;\n};\n\n/** returns the date string in format YYYY-MM-DD for given date */\nexport const getStringforDate = (date: Date): string => {\n let month = '' + (date.getMonth() + 1);\n let day = '' + date.getDate();\n const year = date.getFullYear();\n\n if (month.length < 2) {\n month = '0' + month;\n }\n if (day.length < 2) {\n day = '0' + day;\n }\n return `${year}-${month}-${day}`;\n};\n\n/**\n * Creates a new date object on from a date with or without time.\n * @param value - The date from with the year, month and day is taken.\n * @param hours - Optional numeric value of the hours, otherwise 0.\n * @param minutes - Optional numeric value of the minutes, otherwise 0.\n * @param seconds - Optional numeric value of the seconds, otherwise 0.\n * @param milliseconds - Optional numeric value of the milliseconds, otherwise 0.\n * @returns\n */\nexport const createDate = (\n value: Date,\n hours: number = 0,\n minutes: number = 0,\n seconds: number = 0,\n milliseconds: number = 0\n): Date => {\n const newDate = new Date(\n value.getFullYear(),\n value.getMonth(),\n value.getDate(),\n hours,\n minutes,\n seconds,\n milliseconds\n );\n // Seems redundant, but makes sure that increasing\n // the hours does no change the date when switching\n // from 11pm up.\n newDate.setFullYear(value.getFullYear());\n newDate.setMonth(value.getMonth());\n newDate.setDate(value.getDate());\n return newDate;\n};\n\n/** Creates a date but allows the month and date to overflow. */\nconst createDateInternal = (year: number, month: number, date: number): Date => {\n const d = new Date();\n d.setFullYear(year, month, date);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nconst NAMED_FORMATS: { [localeId: string]: { [format: string]: string } } = {};\nconst INVALID_DATE = new Date(NaN);\n/**\n * @param input - String containing a date or dateTime value (Ex. \"05/15/2020\"\n * @param format - Format of the input value (Ex. \"M/d/YYYY\")\n * @param locale - Locale of the input value\n * @returns A JS Date in accordance of the three parameters\n */\nexport const parseDate = (input: string, format: string, locale: string): Date | undefined => {\n if (!input) {\n return undefined;\n }\n\n const splitFormat = format.split(/[^MydhHmsSa]+/);\n const splitDate = input.toUpperCase().match(/\\d+|\\w+/g);\n if (!splitDate) {\n return INVALID_DATE;\n }\n // in case of some locales where meridian is with special chars\n const dateAndMeridian = input.split(/ +/);\n if (splitDate.length > 0 && dateAndMeridian.length > 0) {\n const parsedMeridian = dateAndMeridian[dateAndMeridian.length - 1].toUpperCase();\n if (\n splitDate![splitDate.length - 1] !== parsedMeridian &&\n getMeridian(parsedMeridian, locale)\n ) {\n splitDate?.push(parsedMeridian);\n }\n }\n let year = 0;\n let month = 0;\n /*\n date as in the numeric day of the month to be provided for the Date() constructor.\n default value is 1 since 0 refers to the last date of previous month.\n */\n let date = 1;\n let hour = 0;\n let minute = 0;\n let second = 0;\n let milliseconds = 0;\n\n // check if date is invalid and return if it is invalid\n for (let i = 0; i < splitDate.length; i++) {\n if (i === splitDate.length - 1) {\n const parsedMeridian = splitDate![splitDate.length - 1];\n // skip if its meridian\n if (getMeridian(parsedMeridian, locale)) {\n continue;\n }\n }\n const parsedDateVal = parseInt(splitDate![i], 10);\n if (isNaN(parsedDateVal)) {\n return INVALID_DATE;\n }\n }\n\n for (let i = 0; i < splitFormat.length; i++) {\n const f = splitFormat[i];\n let parsedNumber = parseInt(splitDate![i], 10);\n if (f !== 'a' && isNaN(parsedNumber)) {\n // auto fill seconds and milliseconds if not passed by user\n if (f === 'ss' || f === 'SSS') {\n parsedNumber = 0;\n } else {\n return INVALID_DATE;\n }\n }\n\n if (f === 'M' || f === 'MM') {\n month = parsedNumber;\n } else if (f === 'd' || f === 'dd') {\n date = parsedNumber;\n } else if (f === 'y' || f === 'yy' || f === 'yyyy') {\n // JS adds 1900 for numbers between 0 and 99. Adjust to be more user-friendly\n year =\n parsedNumber < 50\n ? parsedNumber + 2000\n : parsedNumber < 100\n ? parsedNumber + 1900\n : parsedNumber;\n } else if (f === 'h' || f === 'HH') {\n hour = parsedNumber;\n } else if (f === 'mm') {\n minute = parsedNumber;\n } else if (f === 'ss') {\n second = parsedNumber;\n } else if (f === 'SSS') {\n milliseconds = parsedNumber;\n } else if (f === 'a') {\n if (!isNaN(parseInt(splitDate![splitDate!.length - 1], 10))) {\n continue;\n }\n const parsedMeridian = splitDate![splitDate.length - 1];\n const meridian = getMeridian(parsedMeridian, locale);\n if (hour === 12 && meridian === 'AM') {\n hour = 0;\n } else if (meridian === 'PM') {\n hour = (hour % 12) + 12;\n } else if (!meridian) {\n return INVALID_DATE;\n }\n }\n }\n if (month > 12 || date > 31 || date > new Date(year, month, 0).getDate()) {\n return INVALID_DATE;\n }\n return new Date(year, month - 1, date, hour, minute, second, milliseconds);\n};\n\nconst getMeridian = (parsedMeridian: string, locale: string): 'AM' | 'PM' | undefined => {\n const meridian = getLocaleDayPeriods(locale, FormStyle.Format, TranslationWidth.Short);\n const usingAM = parsedMeridian === meridian[0].toUpperCase();\n if (usingAM) {\n return 'AM';\n } else {\n const usingPM = parsedMeridian === meridian[1].toUpperCase();\n return usingPM ? 'PM' : undefined;\n }\n};\n\n// Adapted from: https://github.com/angular/angular/blob/91954cf20e17a386d71cc8ea25d1d17b9ae1e31c/packages/common/src/i18n/format_date.ts\n// unfortunately it is not exported there\nexport const getNamedFormat = (locale: string, format: string): string => {\n const localeId = getLocaleId(locale);\n NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {};\n\n if (NAMED_FORMATS[localeId][format]) {\n return NAMED_FORMATS[localeId][format];\n }\n\n let formatValue = '';\n switch (format) {\n case 'shortDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Short);\n break;\n case 'shortTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);\n break;\n case 'mediumTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);\n break;\n case 'longTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);\n break;\n case 'fullTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);\n break;\n case 'short':\n case 'medium':\n {\n const shortTime = getNamedFormat(locale, format === 'short' ? 'shortTime' : 'mediumTime');\n const shortDate = getNamedFormat(locale, 'shortDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [\n shortTime,\n shortDate\n ]);\n }\n break;\n }\n if (formatValue) {\n NAMED_FORMATS[localeId][format] = formatValue;\n }\n return formatValue;\n};\n\nconst formatDateTime = (str: string, optVals: string[]): string => {\n if (optVals) {\n str = str.replace(/\\{([^}]+)}/g, (match, key) =>\n optVals != null && key in optVals ? optVals[key] : match\n );\n }\n return str;\n};\n\nexport const getDateWithoutTime = (date: Date): Date => createDate(date, 0, 0, 0, 0);\n\n/**\n * Get today\n * @returns date of today\n */\nexport const today = (): Date => new Date();\n\n/**\n * Calculate a new date based on the offset while considering the min and max date.\n * @param current - input date.\n * @param daysOffset - numeric offset of days.\n * @returns new date if the range is valid or original date\n */\nexport const addDaysInRange = (\n current: Date,\n daysOffset: number,\n minDate?: Date,\n maxDate?: Date\n): Date => {\n const newDate = addDays(current, daysOffset);\n // Make sure the new date is within the specified limits\n // MinDate < new data < MaxDate\n if (isSameOrBetween(newDate, minDate, maxDate)) {\n return newDate;\n }\n return getDateSameOrBetween(newDate, minDate, maxDate);\n};\n\n/**\n * Get date delta based on the offset.\n * @param date - source date object.\n * @param days - numeric offset of days.\n * @returns new date.\n */\nexport const addDays = (date: Date, days: number): Date => {\n const d = createDate(date);\n d.setDate(d.getDate() + days);\n return d;\n};\n\n/**\n * Update date/day of give date without changing the month.\n * In case the day exceed the number of days in the current month the last day in month will be assigned.\n * @param date - the date object to update the day.\n * @param day - the day which shall be set.\n * @returns the updated date object.\n */\nexport const changeDay = (date: Date, day: number): Date => {\n const lastDay = daysInMonth(date.getMonth(), date.getFullYear());\n date.setDate(lastDay <= day ? lastDay : day);\n return date;\n};\n\n/**\n * Get date delta specifically for months based on the offset.\n * @param current - starting date.\n * @param monthsOffset - numeric offset of months.\n * @param minDate - optional minimum allowed date.\n * @param maxDate - optional maximum allowed date.\n * @returns a new date object with the updated month.\n */\nexport const addMonthsInRange = (\n current: Date,\n monthsOffset: number,\n minDate?: Date,\n maxDate?: Date\n): Date => {\n let newDate = createDateInternal(current.getFullYear(), current.getMonth() + monthsOffset, 1);\n newDate = changeDay(newDate, current.getDate());\n if (isSameOrBetween(newDate, minDate, maxDate)) {\n return newDate;\n }\n return getDateSameOrBetween(newDate, minDate, maxDate);\n};\n\n/**\n * Get date delta specifically for years based on the offset.\n * @param current - starting date.\n * @param yearsOffset - numeric offset of years.\n * @param minDate - optional minimum allowed date.\n * @param maxDate - optional maximum allowed date.\n * @returns a new date object with the updated year.\n */\nexport const addYearsInRange = (\n current: Date,\n yearsOffset: number,\n minDate?: Date,\n maxDate?: Date\n): Date => {\n const newDate = createDateInternal(\n current.getFullYear() + yearsOffset,\n current.getMonth(),\n current.getDate()\n );\n if (isSameOrBetween(newDate, minDate, maxDate)) {\n return newDate;\n }\n return getDateSameOrBetween(newDate, minDate, maxDate);\n};\n\n/**\n * Get number of days for the given month and year.\n * @param month - month as number (0..11).\n * @param year - year as number.\n * @returns the number of days for the given month.\n */\nexport const daysInMonth = (month: number, year: number): number =>\n // By using 0 as the day it will give us the last day of the prior\n // month. So passing in 1 as the month number will return the last day\n new Date(year, month + 1, 0).getDate();\n\n/**\n * Get the first date of the week based on the input date.\n * @param current - a date object from where the last date of a week is derived.\n * @param weekStartDay - optional when a week shall start.\n * @returns a new date object which is the start of the current week.\n */\nexport const getWeekStartDate = (current: Date, weekStartDay: WeekStart = 'monday'): Date => {\n const weekStartDate = createDate(current);\n const diff = current.getDate() - getWeekDayOffset(current, weekStartDay);\n weekStartDate.setDate(diff);\n return weekStartDate;\n};\n\n/**\n * Get the last date of the week based on the input date.\n * @param current - a date object from where the last date of a week is derived.\n * @param weekStartDay - optional when a week shall start.\n * @returns the last date within the week.\n */\nexport const getWeekEndDate = (current: Date, weekStartDay: WeekStart = 'monday'): Date => {\n const weekStartDate = createDate(current);\n weekStartDate.setDate(current.getDate() + 6 - getWeekDayOffset(current, weekStartDay));\n return weekStartDate;\n};\n\n/**\n * Get the beginning of the month.\n * @param current - a date object from where the first date in a month is derived.\n * @returns a new date object which starts a the first.\n */\nexport const getFirstDateInMonth = (current: Date): Date =>\n new Date(current.getFullYear(), current.getMonth(), 1);\n\n/**\n * Get the last date of the month.\n * @param current - a date object from where we derive the last date in a month.\n * @returns a new date object which is the last day in the current month.\n */\nexport const getLastDateInMonth = (current: Date): Date =>\n new Date(current.getFullYear(), current.getMonth() + 1, 0);\n\n/**\n * Get the beginning of the year.\n * @param current - a date object from where the first date in a year is derived.\n * @returns a new date object which starts a the first.\n */\nexport const getFirstDateInYear = (current: Date): Date => new Date(current.getFullYear(), 0, 1);\n\n/**\n * Are the two dates identical without considering time.\n */\nexport const isSameDate = (current: Date, compareTo?: Date): boolean => {\n if (!compareTo) {\n return false;\n }\n return (\n current.getFullYear() === compareTo.getFullYear() &&\n current.getMonth() === compareTo.getMonth() &&\n current.getDate() === compareTo.getDate()\n );\n};\n\n/**\n * Are the two months identical without considering time.\n */\nexport const isSameMonth = (current: Date, compareTo?: Date): boolean => {\n if (!compareTo) {\n return false;\n }\n return isSameYear(current, compareTo) && current.getMonth() === compareTo.getMonth();\n};\n\n/**\n * Are the two years identical.\n */\nexport const isSameYear = (current: Date, compareTo?: Date): boolean => {\n if (!compareTo) {\n return false;\n }\n return current.getFullYear() === compareTo.getFullYear();\n};\n/**\n * Compares two dates.\n * @param first - The first date to compare.\n * @param second - The second date to compare.\n * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n * a number greater than 0 if the first date is later.\n */\nexport const compareDate = (first: Date, second: Date): number =>\n compareMonth(first, second) || first.getDate() - second.getDate();\n\n/**\n * Compares two months.\n * @param first - The first month to compare.\n * @param second - The second month to compare.\n * @returns 0 if the months are equal, a number less than 0 if the first month is earlier,\n * a number greater than 0 if the first month is later.\n */\nexport const compareMonth = (first: Date, second: Date): number =>\n compareYear(first, second) || first.getMonth() - second.getMonth();\n\n/**\n * Compares two years.\n * @param first - The first year to compare.\n * @param second - The second year to compare.\n * @returns 0 if the years are equal, a number less than 0 if the first year is earlier,\n * a number greater than 0 if the first year is later.\n */\nexport const compareYear = (first: Date, second: Date): number =>\n first.getFullYear() - second.getFullYear();\n/**\n * Compare the current date is the same date or between start and end date.\n * @param current - the date object.\n * @param from - optional min date, if no value is provided we assume true for the min value.\n * @param to - optional max date, if no value is provided we assume true for the max value.\n * @returns true if the date is in the provided range.\n */\nexport const isSameOrBetween = (current: Date, from?: Date, to?: Date): boolean => {\n // from <= d\n const isInMinRange = from ? compareDate(from, current) <= 0 : true;\n // d <= to\n const isInMaxRange = to ? compareDate(current, to) <= 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current month is the same month or between start and end month.\n * @param current - the month object.\n * @param from - optional min month, if no value is provided we assume true for the min value.\n * @param to - optional max month, if no value is provided we assume true for the max value.\n * @returns true if the date is in the provided range.\n */\nexport const isSameOrBetweenMonth = (current: Date, from?: Date, to?: Date): boolean => {\n // from <= d\n const isInMinRange = from ? compareMonth(from, current) <= 0 : true;\n // d <= to\n const isInMaxRange = to ? compareMonth(current, to) <= 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current year is the same year or between start and end year.\n * @param current - the year object.\n * @param from - optional min year, if no value is provided we assume true for the min value.\n * @param to - optional max year, if no value is provided we assume true for the max value.\n * @returns true if the date is in the provided range.\n */\nexport const isSameOrBetweenYears = (current: Date, from?: Date, to?: Date): boolean => {\n // from <= d\n const isInMinRange = from ? compareYear(from, current) <= 0 : true;\n // d <= to\n const isInMaxRange = to ? compareYear(current, to) <= 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current date is between start and end date.\n * from \\< current \\< to\n */\nexport const isBetween = (current: Date, from?: Date, to?: Date): boolean => {\n const isInMinRange = from ? compareDate(current, from) > 0 : true;\n const isInMaxRange = to ? compareDate(current, to) < 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current month is between start and end month.\n * from \\< current \\< to\n */\nexport const isBetweenMonth = (current: Date, from?: Date, to?: Date): boolean => {\n const isInMinRange = from ? compareMonth(current, from) > 0 : true;\n const isInMaxRange = to ? compareMonth(current, to) < 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Compare the current year is between start and end year.\n * from \\< current \\< to\n */\nexport const isBetweenYears = (current: Date, from?: Date, to?: Date): boolean => {\n const isInMinRange = from ? compareYear(current, from) > 0 : true;\n const isInMaxRange = to ? compareYear(current, to) < 0 : true;\n return isInMinRange && isInMaxRange;\n};\n\n/**\n * Is first date after the second date (without considering the time).\n * current \\> compareTo\n */\nexport const isAfter = (current: Date, compareTo: Date): boolean =>\n compareDate(current, compareTo) > 0;\n\n/**\n * Is first month after the second month (without considering the time).\n * current \\> compareTo\n */\nexport const isAfterMonth = (current: Date, compareTo: Date): boolean =>\n compareMonth(current, compareTo) > 0;\n\n/**\n * Is first year after the second year.\n * current \\> compareTo\n */\nexport const isAfterYear = (current: Date, compareTo: Date): boolean =>\n compareYear(current, compareTo) > 0;\n\n/**\n * Is first date equal or before the second date (without considering the time).\n * current \\>= compareTo\n */\nexport const isSameOrBefore = (current: Date, compareTo: Date): boolean =>\n compareDate(current, compareTo) <= 0;\n\n/**\n * Is first month equal or before the second month.\n * current \\>= compareTo\n */\nexport const isSameOrBeforeMonth = (current: Date, compareTo: Date): boolean =>\n compareMonth(current, compareTo) <= 0;\n\n/**\n * Is first year equal or before the second year.\n * current \\>= compareTo\n */\nexport const isSameOrBeforeYear = (current: Date, compareTo: Date): boolean =>\n compareMonth(current, compareTo) <= 0;\n\n/**\n * Are the two dates in different months.\n */\nexport const isAnotherMonth = (current: Date, compareTo: Date): boolean =>\n current.getMonth() !== compareTo.getMonth();\n\n/**\n * Are the two dates in different years.\n */\nexport const isAnotherYear = (current: Date, compareTo: Date): boolean =>\n current.getFullYear() !== compareTo.getFullYear();\n\n/**\n * Are the two dates either in different months or years.\n */\nexport const isAnotherMonthOrYear = (current: Date, compareTo: Date): boolean =>\n isAnotherMonth(current, compareTo) || isAnotherYear(current, compareTo);\n\n/**\n * Get a date which is in within the range and the close to current.\n */\nexport const getDateSameOrBetween = (current: Date, minDate?: Date, maxDate?: Date): Date => {\n if (isSameOrBetween(current, minDate, maxDate)) {\n return current;\n }\n const minDistance = minDate\n ? Math.ceil(Math.abs(current.getTime() - minDate!.getTime()))\n : Number.MAX_VALUE;\n const maxDistance = maxDate\n ? Math.ceil(Math.abs(current.getTime() - maxDate!.getTime()))\n : Number.MAX_VALUE;\n return minDistance < maxDistance ? createDate(minDate!) : createDate(maxDate!);\n};\n\n/**\n * Get date or absolute min date.\n * @param date - input date.\n * @returns date or date of 1.1.1900\n */\nexport const getMinDate = (date?: Date): Date =>\n date && !isNaN(date.getTime()) ? date : new Date(Date.UTC(1900, 0, 1));\n\n/**\n * Get date or absolute max date.\n * @param date - input date.\n * @returns date or date of 31.12.2154\n */\nexport const getMaxDate = (date?: Date): Date =>\n date && !isNaN(date.getTime()) ? date : new Date(Date.UTC(2154, 11, 31));\n\n/**\n * Is valid date object.\n */\nexport const isValid = (date?: Date): date is NonNullable<Date> => !!date && !isNaN(date.getTime());\n\n/**\n * Returns the next months of the given date.\n * @param date - The date for which the next month is returned.\n * @returns A date of the first day of the following month of the given day.\n */\nexport const nextMonth = (date: Date): Date => {\n if (date.getMonth() === 11) {\n return new Date(date.getFullYear() + 1, 0, 1);\n } else {\n return new Date(date.getFullYear(), date.getMonth() + 1, 1);\n }\n};\n\n/**\n * Returns the last day of the previous month of the given date object.\n * @param date - The date for which the previous month is returned.\n * @returns A date of the last day of the previous month of the given day.\n */\nexport const previousMonth = (date: Date): Date => {\n if (date.getMonth() === 0) {\n return new Date(date.getFullYear() - 1, 12, 0);\n } else {\n return new Date(date.getFullYear(), date.getMonth(), 0);\n }\n};\n\nexport const minDate = (first?: Date, second?: Date): Date | undefined => {\n return !!first && !!second ? (first < second ? first : second) : (first ?? second);\n};\n\nexport const maxDate = (first?: Date, second?: Date): Date | undefined => {\n return !!first && !!second ? (first > second ? first : second) : (first ?? second);\n};\n\n/**\n * Indicate whether the time use the 12-hour format\n */\nexport const is12HourFormat = (locale: string, config: DatepickerInputConfig): boolean => {\n const dateFormat = getDatepickerFormat(locale, config, true);\n return dateFormat?.includes('a') ?? false;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { getNamedFormat } from './date-time-helper';\n\nexport type WeekStart = 'monday' | 'saturday' | 'sunday' | undefined;\n\nexport interface DatepickerConfig {\n /**\n * Text or translation key for today button title. Default is `Today`.\n */\n todayText?: TranslatableString;\n /**\n * Defines the starting day of the week. Default is `monday`.\n */\n weekStartDay?: WeekStart;\n /**\n * Configuration for hiding week numbers. Default is `false`.\n */\n hideWeekNumbers?: boolean;\n /**\n * Defines the timepicker visibility. Default is `false`.\n */\n showTime?: boolean;\n /**\n * Defines the timepicker minutes visibility. Default is `true`.\n */\n showMinutes?: boolean;\n /**\n * Defines the timepicker seconds visibility . Default is `false`.\n */\n showSeconds?: boolean;\n /**\n * Defines the timepicker milliseconds visibility . Default is `false`.\n */\n showMilliseconds?: boolean;\n /**\n * Hides disable time switch in the timepicker part and includes mandatory the\n * time in the picker.\n */\n mandatoryTime?: boolean;\n /**\n * Defines the time is disabled when visible. Will also be updated on user change. Default is `false`.\n */\n disabledTime?: boolean;\n /**\n * Text or translation key for the `enabled` disable time. Default is `Consider time`.\n */\n enabledTimeText?: TranslatableString;\n /**\n * Text or translation key for the `disabled` disable time. Default is `Ignore time`.\n */\n disabledTimeText?: TranslatableString;\n /**\n * Minimal (earliest) selectable date.\n */\n minDate?: Date;\n /**\n * Maximal (latest) selectable date.\n */\n maxDate?: Date;\n /**\n * Options to turn on date range selection.\n */\n enableDateRange?: boolean;\n /**\n * Option to use two months view for date range picking.\n */\n enableTwoMonthDateRange?: boolean;\n /**\n * Consider time with minDate and maxDate\n */\n enableTimeValidation?: boolean;\n /**\n * Only month and year are selectable.\n */\n onlyMonthSelection?: boolean;\n\n hoursLabel?: string;\n minutesLabel?: string;\n secondsLabel?: string;\n millisecondsLabel?: string;\n hideLabels?: boolean;\n\n hoursAriaLabel?: string;\n minutesAriaLabel?: string;\n secondsAriaLabel?: string;\n millisecondsAriaLabel?: string;\n\n hoursPlaceholder?: string;\n minutesPlaceholder?: string;\n secondsPlaceholder?: string;\n millisecondsPlaceholder?: string;\n\n meridians?: string[];\n meridiansLabel?: string;\n meridiansAriaLabel?: string;\n\n startTimeLabel?: string;\n endTimeLabel?: string;\n}\n\nexport interface DatepickerInputConfig extends DatepickerConfig {\n /**\n * A custom date/time format according the Angular date pipe (see {@link https://angular.dev/api/common/DatePipe}).\n * Only numeric date formats are supported.\n * The format is used to render the time of a date-time criterion. If not specified, `mediumTime` is\n * used if the `showSeconds` flag is true, otherwise `shortTime` as default. For the date-only\n * case, 'shortDate' is used.\n */\n dateTimeFormat?: string;\n /**\n * Similar to `dateTimeFormat`, but used when only a date is displayed\n * (e.g. when `showTime === false` or `disabledTime === true`).\n * Only numeric date formats are supported.\n */\n dateFormat?: string;\n}\n\n/**\n * Returns date / datetime format to be used for rendering a date object as text\n * to an Html input element, which has the `SiDatepickerDirective`.\n *\n * @see https://angular.dev/api/common/DatePipe?tab=usage-notes\n * @param locale - The locale for which the format is returned.\n * @param config - The config object of the datepicker.\n * @param timeWhenDisabled - If `true`, a format with time (medium or short) is returned, even if the `disabledTime` config is `true`.\n * @returns Either\n * - a custom format provided by the config,\n * - the localized `medium` format when time and seconds included\n * - the localized `short` format when time and no seconds included\n */\nexport const getDatepickerFormat = (\n locale: string,\n config?: DatepickerInputConfig,\n timeWhenDisabled = false\n): string => {\n // try format from consumer\n let dateFormat =\n config?.showTime && !config.disabledTime ? config.dateTimeFormat : config?.dateFormat;\n if (!dateFormat) {\n // no format from consumer - use default depending on configuration\n let named: string;\n if (config?.showTime && (!config.disabledTime || timeWhenDisabled)) {\n named = config.showSeconds ? 'medium' : 'short';\n } else {\n named = 'shortDate';\n }\n dateFormat = getNamedFormat(locale, named);\n }\n\n // patch 2-digit year to 4-digit year\n if (!dateFormat.includes('yyyy')) {\n dateFormat = dateFormat.replace('yy', 'yyyy');\n }\n if (config?.onlyMonthSelection && dateFormat.includes('d')) {\n dateFormat = dateFormat\n .replace(/\\sd/, '')\n .replace(/\\/d/, '')\n .replace(/d/g, '')\n .replace(/^\\./, '');\n }\n\n return dateFormat;\n};\n\nexport type DateRange = {\n start: Date | undefined;\n end: Date | undefined;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { formatDate } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n output,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '@siemens/element-ng/form';\n\nimport { compareDate, getMaxDate, getMinDate, isValid, parseDate } from './date-time-helper';\nimport { DatepickerInputConfig, getDatepickerFormat } from './si-datepicker.model';\n\n/**\n * Base directive for date input fields.\n */\n@Directive({\n selector: 'input[siDateInput]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiDateInputDirective,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiDateInputDirective,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiDateInputDirective\n }\n ],\n host: {\n '[attr.id]': 'id()',\n '[attr.disabled]': 'disabled() || null',\n '[attr.readonly]': 'readonly() || null',\n '[class.readonly]': 'readonly()',\n '[attr.aria-describedby]': 'errormessageId()',\n '[value]': 'dateString()'\n },\n exportAs: 'siDateInput'\n})\nexport class SiDateInputDirective\n implements ControlValueAccessor, OnChanges, Validator, SiFormItemControl\n{\n private static idCounter = 0;\n\n /**\n * @defaultValue\n * ```\n * `si-date-input-${SiDateInputDirective.idCounter++}`\n * ```\n */\n readonly id = input(`si-date-input-${SiDateInputDirective.idCounter++}`);\n\n /**\n * Configuration object for the datepicker.\n *\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly siDatepickerConfig = model<DatepickerInputConfig | undefined>({});\n\n /**\n * Emits an event to notify about disabling the time from the datepicker.\n * When time is disable, we construct a pure date object in UTC 00:00:00 time.\n */\n readonly siDatepickerDisabledTime = output<boolean>();\n /**\n * Emits an event on state changes e.g. readonly, disable, ... .\n */\n readonly stateChange = output<void>();\n /**\n * Whether the date range input is disabled.\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly disabledInput = input(false, { alias: 'disabled' });\n\n /**\n * Whether the date range input is readonly.\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * This ID will be bound to the `aria-describedby` attribute of the date-input.\n * Use this to reference the element containing the error message(s) for the date-input.\n * It will be picked by the {@link SiFormItemComponent} if the date-input is used inside a form item.\n *\n * @defaultValue\n * ```\n * `${this.id()}-errormessage`\n * ```\n */\n readonly errormessageId = input(`${this.id()}-errormessage`);\n\n /** @internal */\n validatorOnChange: () => void = () => {};\n /**\n * Date form input validator function, validating text format, min and max value.\n */\n protected validator = Validators.compose([\n () => this.formatValidator(),\n () => this.minValidator(),\n () => this.maxValidator()\n ])!;\n protected date?: Date;\n /**\n * Emits a new `date` value on input field value changes.\n */\n protected readonly dateChange = output<Date | undefined>();\n /** @internal */\n public readonly disabled = computed(() => this.disabledInput() || this.disabledNgControl());\n protected onTouched: () => void = () => {};\n protected onModelChange: (value: any) => void = () => {};\n protected readonly dateString = signal('');\n private readonly disabledNgControl = signal(false);\n protected readonly locale = inject(LOCALE_ID).toString();\n private format = '';\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.siDatepickerConfig && !changes.siDatepickerConfig.currentValue) {\n this.siDatepickerConfig.set({});\n }\n if (changes.readonly || changes.disabledInput) {\n this.stateChange.emit();\n }\n if (changes.siDatepickerConfig) {\n // reflect possible change is date/time format\n const format = this.format;\n this.format = '';\n this.getFormat();\n const formatChanged = format !== this.format;\n if (this.date && formatChanged) {\n this.updateNativeValue();\n }\n }\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n return this.validator(c);\n }\n\n registerOnChange(fn: any): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledNgControl.set(isDisabled);\n this.stateChange.emit();\n }\n\n writeValue(value?: Date | string): void {\n // remove date when user input is empty\n let emptyString = false;\n // Flag to define invalid string\n let invalidDate = false;\n if (typeof value === 'string') {\n emptyString = value.trim().length === 0;\n value = parseDate(value, this.getFormat(), this.locale);\n invalidDate = !value;\n }\n\n // Only emit changes to prevent that a destroyed output emit a value\n if (this.date !== value) {\n this.date = value;\n this.dateChange.emit(this.date);\n\n // We should not change the content of the input field when the user typed\n // a wrong input. Otherwise the typed content changes and the user cannot\n // correct the content.\n if (!invalidDate || emptyString) {\n this.updateNativeValue();\n }\n }\n }\n\n private updateNativeValue(): void {\n let dtStr = '';\n if (isValid(this.date)) {\n dtStr = formatDate(this.date, this.getFormat(), this.locale);\n }\n this.dateString.set(dtStr);\n }\n\n /**\n * Handles `input` events on the input element.\n */\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n const parsedDate = parseDate(value, this.getFormat(), this.locale);\n\n // Is same date\n const hasChanged = !(parsedDate === this.date);\n if (hasChanged) {\n this.date = parsedDate;\n this.onModelChange(this.date);\n this.dateChange.emit(this.date);\n }\n }\n\n @HostListener('blur', ['$event']) protected onBlur(event: FocusEvent): void {\n this.onTouched();\n }\n\n private getFormat(): string {\n if (!this.format) {\n this.format = getDatepickerFormat(this.locale, this.siDatepickerConfig());\n }\n return this.format;\n }\n\n /**\n * Callback when the datepicker changes his value.\n * @param date - updated date\n */\n protected onDateChanged(date?: Date): void {\n // update input element\n this.writeValue(date);\n // update the Forms ngModel\n this.onModelChange(this.date);\n }\n\n /**\n * Datepicker consider time / ignore time changed.\n * @param disabledTime - disable time\n * @internal\n */\n onDisabledTime(disabledTime: boolean): void {\n this.format = '';\n // Temporary reset internal date to force an update with the new date format\n const currentDate = this.date;\n this.date = undefined;\n this.siDatepickerConfig()!.disabledTime = disabledTime;\n // Ensure the time format will be removed\n this.onDateChanged(currentDate);\n this.siDatepickerDisabledTime.emit(disabledTime);\n }\n\n /** The form control validator for date format */\n private formatValidator(): ValidationErrors | null {\n const invalidFormat = this.date && isNaN(this.date.getTime());\n return invalidFormat ? { dateFormat: { format: this.getFormat() } } : null;\n }\n\n /** The form control validator for the min date. */\n private minValidator(): ValidationErrors | null {\n const controlValue = this.date;\n const siDatepickerConfig = this.siDatepickerConfig();\n const min = getMinDate(siDatepickerConfig?.minDate);\n const withTime = siDatepickerConfig?.showTime;\n\n return !min ||\n !isValid(controlValue) ||\n (withTime ? controlValue >= min : compareDate(controlValue, min) >= 0)\n ? null\n : {\n minDate: {\n min,\n actual: controlValue,\n minString: formatDate(min, this.getFormat(), this.locale)\n }\n };\n }\n\n /** The form control validator for the min date. */\n private maxValidator(): ValidationErrors | null {\n const controlValue = this.date;\n const siDatepickerConfig = this.siDatepickerConfig();\n const max = getMaxDate(siDatepickerConfig?.maxDate);\n const withTime = siDatepickerConfig?.showTime;\n\n return !max ||\n !isValid(controlValue) ||\n (withTime ? controlValue <= max : compareDate(controlValue, max) <= 0)\n ? null\n : {\n maxDate: {\n max,\n actual: controlValue,\n maxString: formatDate(max, this.getFormat(), this.locale)\n }\n };\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, ElementRef, inject, input } from '@angular/core';\n\nimport { Cell } from './si-calendar-body.component';\nimport { CompareAdapter } from './si-compare-adapter';\n\n@Directive({\n selector: '[siCalendarDateCell]',\n host: {\n class: 'si-calendar-date-cell',\n '[attr.aria-disabled]': 'cell().disabled',\n '[class.disabled]': 'cell().disabled',\n '[attr.aria-label]': 'cell().ariaLabel',\n '[class.today]': 'this.cell().isToday',\n '[attr.aria-current]': 'this.cell().isToday ? \"date\" : null'\n }\n})\nexport class SiCalendarDateCellDirective {\n readonly cell = input.required<Cell>();\n readonly compareAdapter = input.required<CompareAdapter>();\n /** @defaultValue inject(ElementRef) */\n readonly ref = inject(ElementRef);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n isAfter,\n isAfterMonth,\n isAfterYear,\n isBetween,\n isBetweenMonth,\n isBetweenYears,\n isSameDate,\n isSameMonth,\n isSameOrBefore,\n isSameOrBeforeMonth,\n isSameOrBeforeYear,\n isSameOrBetween,\n isSameOrBetweenMonth,\n isSameOrBetweenYears,\n isSameYear\n} from '../date-time-helper';\n\n/**\n * Compare the dates based on the active view.\n */\nexport interface CompareAdapter {\n isAfter(current: Date, start: Date): boolean;\n isBetween(current: Date, from?: Date, to?: Date): boolean;\n isEqual(current: Date, other?: Date): boolean;\n isEqualOrBefore(current: Date, other: Date): boolean;\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean;\n}\n\n/**\n * Compare dates in the month view.\n */\nexport class DayCompareAdapter implements CompareAdapter {\n isAfter(current: Date, start: Date): boolean {\n return isAfter(current, start);\n }\n\n isBetween(current: Date, from?: Date | undefined, to?: Date | undefined): boolean {\n return isBetween(current, from, to);\n }\n\n isEqual(current: Date, other: Date): boolean {\n return isSameDate(current, other);\n }\n\n isEqualOrBefore(current: Date, other: Date): boolean {\n return isSameOrBefore(current, other);\n }\n\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean {\n return isSameOrBetween(current, from, to);\n }\n}\n\n/**\n * Compare dates in the year view.\n */\nexport class MonthCompareAdapter implements CompareAdapter {\n isAfter(current: Date, start: Date): boolean {\n return isAfterMonth(current, start);\n }\n\n isBetween(current: Date, from?: Date | undefined, to?: Date | undefined): boolean {\n return isBetweenMonth(current, from, to);\n }\n\n isEqual(current: Date, other: Date): boolean {\n return isSameMonth(current, other);\n }\n\n isEqualOrBefore(current: Date, other: Date): boolean {\n return isSameOrBeforeMonth(current, other);\n }\n\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean {\n return isSameOrBetweenMonth(current, from, to);\n }\n}\n\nexport class YearCompareAdapter implements CompareAdapter {\n isAfter(current: Date, other: Date): boolean {\n return isAfterYear(current, other);\n }\n\n isBetween(current: Date, from?: Date | undefined, to?: Date | undefined): boolean {\n return isBetweenYears(current, from, to);\n }\n\n isEqual(current: Date, other: Date): boolean {\n return isSameYear(current, other);\n }\n\n isEqualOrBefore(current: Date, other?: Date): boolean {\n if (!other) {\n return false;\n }\n return isSameOrBeforeYear(current, other);\n }\n\n isEqualOrBetween(current: Date, from?: Date, to?: Date): boolean {\n return isSameOrBetweenYears(current, from, to);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n Component,\n computed,\n input,\n model,\n output,\n viewChildren\n} from '@angular/core';\n\nimport { SiCalendarDateCellDirective } from './si-calendar-date-cell.directive';\nimport { CompareAdapter, DayCompareAdapter } from './si-compare-adapter';\n\n/** CSS classes that can be associated with a calendar cell. */\nexport type CellCssClasses = string | string[] | Set<string> | { [key: string]: any };\n\nexport interface Cell {\n value: number;\n /** Indicate that the cell is disabled */\n disabled: boolean;\n /** Cell specific aria label */\n ariaLabel: string;\n /** Display value */\n displayValue: string;\n /**\n * Indicate that the cell is a preview, this is dedicated to the calendar month\n * view to where a day could be part of the previous or next month\n */\n isPreview: boolean;\n /**\n * The cell corresponds to today.\n */\n isToday: boolean;\n /** Raw value */\n valueRaw: Date;\n /** Additional CSS classes for the cell */\n cssClasses: CellCssClasses;\n}\n\n/**\n * Base interface for selections.\n */\nabstract class SelectionStrategy {\n constructor(protected compare: CompareAdapter) {}\n\n /**\n * Indicate whether the cell is selected\n */\n abstract isSelected(cell: Cell, start?: Date, end?: Date): boolean;\n /**\n * Cell is between start and end value.\n * start \\< Cell value \\< end\n */\n abstract inRange(c: Cell, start?: Date, end?: Date): boolean;\n /**\n * Cell is either startValue or endValue\n */\n abstract isRangeSelected(cell: Cell, date?: Date): boolean;\n /**\n * Preview selection range on mouse hover.\n */\n abstract previewRangeHover(cell: Cell, hoverCell?: Cell, start?: Date): boolean;\n /**\n * Preview selection range on mouse hover end of range.\n */\n abstract previewRangeHoverEnd(cell: Cell, hoverCell?: Cell, start?: Date): boolean;\n}\n\n/**\n * Strategy the handle single selection within the {@link SiCalendarBodyComponent}.\n */\nclass SingleSelectionStrategy extends SelectionStrategy {\n isSelected(cell: Cell, start?: Date, end?: Date): boolean {\n return this.compare.isEqual(cell.valueRaw, start);\n }\n\n inRange(cell: Cell, start?: Date, end?: Date): boolean {\n return false;\n }\n\n isRangeSelected(cell: Cell, date?: Date): boolean {\n return false;\n }\n\n previewRangeHover(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n return false;\n }\n\n previewRangeHoverEnd(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n return false;\n }\n}\n\n/**\n * Strategy the handle range selection within the {@link SiCalendarBodyComponent}.\n */\nclass RangeSelectionStrategy extends SelectionStrategy {\n isSelected(cell: Cell, start?: Date, end?: Date): boolean {\n return this.compare.isEqual(cell.valueRaw, start) || this.compare.isEqual(cell.valueRaw, end);\n }\n\n inRange(c: Cell, start?: Date, end?: Date): boolean {\n if (!start || !end) {\n return false;\n }\n return this.compare.isBetween(c.valueRaw, start, end);\n }\n\n isRangeSelected(cell: Cell, date?: Date): boolean {\n return this.compare.isEqual(cell.valueRaw, date);\n }\n\n previewRangeHover(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n if (!hoverCell || cell.disabled || !start) {\n return false;\n }\n return (\n this.compare.isAfter(cell.valueRaw, start) &&\n this.compare.isEqualOrBefore(cell.valueRaw, hoverCell.valueRaw)\n );\n }\n\n previewRangeHoverEnd(cell: Cell, hoverCell?: Cell, start?: Date): boolean {\n if (!hoverCell || cell.disabled || !start) {\n return false;\n }\n return (\n this.compare.isAfter(cell.valueRaw, start) &&\n this.compare.isEqual(cell.valueRaw, hoverCell.valueRaw)\n );\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[si-calendar-body]',\n imports: [A11yModule, SiCalendarDateCellDirective],\n templateUrl: './si-calendar-body.component.html',\n host: {\n class: 'si-calendar-body'\n },\n exportAs: 'siCalendarBody'\n})\nexport class SiCalendarBodyComponent {\n /** The active date, the cell which will receive the focus. */\n readonly focusedDate = model.required<Date>();\n /** The date which shall be indicated as currently selected. */\n readonly startDate = input<Date>();\n /** Selected end value which is only considered with enableRangeSelection. */\n readonly endDate = input<Date>();\n /**\n * The cells to display in the table.\n *\n * @defaultValue []\n */\n readonly rows = input<Cell[][]>([]);\n /**\n * Labels for each row, which can be used to display the week number.\n * @defaultValue undefined\n */\n readonly rowLabels = input<string[] | undefined>(undefined);\n /**\n * Additional row label CSS class(es).\n *\n * @defaultValue []\n */\n readonly rowLabelCssClasses = input<CellCssClasses>([]);\n /**\n * Choose the selection strategy between single or range selection.\n * @defaultValue false\n */\n readonly enableRangeSelection = input(false);\n /**\n * Indicate whether a range preview shall be displayed.\n * It's necessary since to display a preview also datepicker has a valid endDate.\n *\n * @defaultValue true\n */\n readonly previewRange = input(true, { transform: booleanAttribute });\n /** The cell which which has the mouse hover. */\n readonly activeHover = model<Cell>();\n /**\n * Compare date functions which are necessary to compare a the dates according the current view.\n *\n * @defaultValue new DayCompareAdapter()\n */\n readonly compareAdapter = input<CompareAdapter>(new DayCompareAdapter());\n /** Emits when a user select a cell via click, space or enter. */\n readonly selectedValueChange = output<Date>();\n\n private readonly calendarDateCells = viewChildren(SiCalendarDateCellDirective);\n\n protected readonly selection = computed(() =>\n this.enableRangeSelection()\n ? new RangeSelectionStrategy(this.compareAdapter())\n : new SingleSelectionStrategy(this.compareAdapter())\n );\n\n /**\n * Focus calendar cell which is marked as active cell.\n */\n focusActiveCell(): void {\n setTimeout(() => {\n const focusedDateCells = this.calendarDateCells().filter(dateCell =>\n this.compareAdapter().isEqual(this.focusedDate()!, dateCell.cell().valueRaw)\n );\n if (focusedDateCells.length > 0) {\n focusedDateCells[0].ref.nativeElement.focus();\n }\n });\n }\n\n protected isActive(cell: Cell): boolean {\n return this.compareAdapter().isEqual(this.focusedDate()!, cell.valueRaw);\n }\n\n protected cellCss(cell: Cell): CellCssClasses {\n return cell.cssClasses;\n }\n\n protected emitActiveHover(cell: Cell): void {\n this.activeHover.set(cell);\n }\n\n protected emitSelectCell(selection: Cell): void {\n if (selection.disabled) {\n return;\n }\n this.selectedValueChange.emit(selection.valueRaw);\n }\n\n protected emitActiveDateChange(cell: Cell): void {\n if (!cell.disabled && !cell.isPreview) {\n // To provide a date-range preview it is necessary to maintain hoverCell also in case of keyboard usage\n this.emitActiveHover(cell);\n this.focusedDate.set(cell.valueRaw);\n }\n }\n}\n","@for (row of rows(); track rowIndex; let rowIndex = $index) {\n <tr role=\"row\">\n <!-- Typically used for week numbers -->\n @if (rowLabels()) {\n <td [class]=\"`si-calendar-row-label ${rowLabelCssClasses()}`\" [attr.data-row]=\"rowIndex\">\n {{ rowLabels()?.at(rowIndex) ?? '' }}\n </td>\n }\n @for (col of row; track colIndex; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"si-calendar-cell\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-col]=\"colIndex\"\n [class.range-hover]=\"\n previewRange() && selection().previewRangeHover(col, activeHover(), startDate())\n \"\n [class.range-hover-end]=\"\n previewRange() && selection().previewRangeHoverEnd(col, activeHover(), startDate())\n \"\n [class.range]=\"selection().inRange(col, startDate(), endDate())\"\n [class.range-start]=\"selection().isRangeSelected(col, startDate())\"\n [class.range-end]=\"selection().isRangeSelected(col, endDate())\"\n >\n <button\n siCalendarDateCell\n type=\"button\"\n [cell]=\"col\"\n [compareAdapter]=\"compareAdapter()\"\n [attr.cdkFocusInitial]=\"isActive(col) ? '' : null\"\n [class]=\"cellCss(col)\"\n [class.selected]=\"selection().isSelected(col, startDate(), endDate())\"\n [class.text-secondary]=\"\n col.isPreview &&\n !col.disabled &&\n !selection().isRangeSelected(col, startDate()) &&\n !selection().isRangeSelected(col, endDate()) &&\n !selection().inRange(col, startDate(), endDate())\n \"\n [tabindex]=\"isActive(col) ? '0' : '-1'\"\n (mouseover)=\"emitActiveHover(col)\"\n (click)=\"emitSelectCell(col)\"\n (focus)=\"emitActiveDateChange(col)\"\n >\n {{ col.displayValue }}\n </button>\n </td>\n }\n </tr>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output\n} from '@angular/core';\nimport { elementLeft2, elementRight2 } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\n\nexport type Direction = 'left' | 'right';\n\n@Component({\n selector: 'si-calendar-direction-button',\n imports: [SiIconComponent],\n templateUrl: './si-calendar-direction-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiCalendarDirectionButtonComponent {\n readonly ariaLabel = input.required<string>();\n /** @defaultValue false */\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly direction = input<Direction>();\n\n /**\n * Emit on button click.\n */\n readonly clicked = output();\n\n protected readonly icon = computed(() =>\n this.direction() === 'left' ? this.icons.elementLeft2 : this.icons.elementRight2\n );\n protected readonly buttonClass = computed(() =>\n this.direction() === 'left' ? 'previous-button' : 'next-button'\n );\n\n protected readonly icons = addIcons({ elementLeft2, elementRight2 });\n\n protected onClick(): void {\n this.clicked.emit();\n }\n}\n","<button\n role=\"button\"\n type=\"button\"\n [class]=\"`btn btn-circle btn-tertiary ${buttonClass()}`\"\n [disabled]=\"disabled() || null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick()\"\n>\n <si-icon class=\"icon flip-rtl\" [icon]=\"icon()\" />\n</button>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterViewInit,\n booleanAttribute,\n Component,\n input,\n model,\n output,\n viewChild\n} from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\n\n/**\n * Helper directive to set the initial focus to the calendar body cell.\n */\n@Component({\n template: ''\n})\nexport class SiInitialFocusComponent implements AfterViewInit {\n /** The cell which has the mouse hover. */\n readonly activeHover = model<Cell>();\n /** The date which is displayed as selected. */\n readonly startDate = input<Date>();\n /** The date which is displayed as selected end. The value is only considered with enableRangeSelection. */\n readonly endDate = input<Date>();\n /**\n * Guard to set the focus during ngAfterViewInit, we just set the focus after we first initialized the view\n *\n * @defaultValue true\n */\n readonly initialFocus = input(true);\n /** The minimum selectable date. */\n readonly minDate = input<Date>();\n /** The maximum selectable date. */\n readonly maxDate = input<Date>();\n /**\n * Optional input to control the minimum month the datepicker can show and the user can navigate.\n * The `minMonth` can be larger than the `minDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows an earlier month the more right one.\n */\n readonly minMonth = input<Date>();\n /**\n * Optional input to control the maximum month the datepicker can show and the user can navigate.\n * The `maxMonth` can be smaller than the `maxDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows an earlier month the more right one.\n */\n readonly maxMonth = input<Date>();\n /** Aria label for the next button. Needed for a11y. */\n readonly previousLabel = input.required<TranslatableString>();\n /** Aria label for the next button. Needed for a11y. */\n readonly nextLabel = input.required<TranslatableString>();\n /**\n * Is range selection enabled, when enabled it shows a preview between the startDate and the focused date.\n *\n * @defaultValue false\n */\n readonly isRangeSelection = input(false, { transform: booleanAttribute });\n /**\n * Indicate whether a range preview shall be displayed.\n * When enabled a preview is visible between startDate and focusedDate.\n *\n * @defaultValue true\n */\n readonly previewRange = input(true, { transform: booleanAttribute });\n /**\n * Emits when a new value is selected. In case where the value is null to\n * user aborted the selection by Escape.\n */\n readonly selectedValueChange = output<Date | null>();\n /** The body of calendar table */\n protected readonly calendarBody = viewChild.required(SiCalendarBodyComponent);\n\n ngAfterViewInit(): void {\n if (this.initialFocus()) {\n this.focusActiveCell();\n }\n }\n\n /**\n * Focus calendar cell which is marked as active cell.\n */\n focusActiveCell(): void {\n this.calendarBody().focusActiveCell();\n }\n\n protected onActiveHoverChange(event?: Cell): void {\n this.activeHover.set(event);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n LOCALE_ID,\n model,\n output\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport {\n addDaysInRange,\n addMonthsInRange,\n createDate,\n getDayStrings,\n getFirstDateInMonth,\n getLastDateInMonth,\n getWeekEndDate,\n getWeekOfYear,\n getWeekStartDate,\n isAfterMonth,\n isAnotherMonthOrYear,\n isSameDate,\n isSameMonth,\n isSameOrBetween,\n today\n} from '../date-time-helper';\nimport { WeekStart } from '../si-datepicker.model';\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\nimport { SiCalendarDirectionButtonComponent } from './si-calendar-direction-button.component';\nimport { DayCompareAdapter } from './si-compare-adapter';\nimport { SiInitialFocusComponent } from './si-initial-focus.component';\n\n/**\n * Show dates of a single month as table and handles the keyboard interactions.\n * The focusedDate is handled according the keyboard interactions.\n */\n@Component({\n selector: 'si-day-selection',\n imports: [DatePipe, SiCalendarBodyComponent, SiCalendarDirectionButtonComponent, SiTranslatePipe],\n templateUrl: './si-day-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiDaySelectionComponent extends SiInitialFocusComponent {\n private readonly todayDefaultText = t(() => $localize`:@@SI_DATEPICKER.TODAY:Today`);\n /**\n * Indicate whether the week numbers shall be hidden.\n *\n * @defaultValue false\n */\n readonly hideWeekNumbers = input(false, { transform: booleanAttribute });\n /**\n * Defines the starting day of the week. Default is `monday`.\n *\n * @defaultValue 'monday'\n */\n readonly weekStartDay = input<WeekStart>('monday');\n /**\n * The active date, the cell which will receive the focus.\n * @defaultValue calendarUtils.today()\n */\n readonly focusedDate = model.required<Date>();\n /** Today button text */\n readonly todayLabel = input<TranslatableString>();\n /** Aria label for calendar week column */\n readonly calendarWeekLabel = input<TranslatableString>();\n /** Emits when the active focused date changed to another month / year, typically during keyboard navigation */\n readonly activeMonthChange = output<Date>();\n /** Emits when the user requests a different to show a different view */\n readonly viewChange = output<'year' | 'month'>();\n protected readonly today = computed(() => this.todayLabel() ?? this.todayDefaultText);\n /** The translated list of week days. */\n protected readonly days = computed(() => getDayStrings(this.locale, this.weekStartDay()));\n /** The week numbers which are shown as row label */\n protected readonly weekNumbers = computed(() =>\n this.weeks().map(w => getWeekOfYear(w[0].valueRaw, this.weekStartDay()).toString())\n );\n /**\n * The current visible list of calendar days.\n * Every time the focusedDate changes to either another month or year the list will be rebuild.\n */\n protected readonly weeks = computed(() => {\n const focusedDate = this.focusedDate();\n const monthStart = getFirstDateInMonth(focusedDate);\n const monthEnd = getLastDateInMonth(focusedDate);\n /**\n * We start the month with the first day in the week which has the effect that dates are\n * visible which aren't in the active month.\n */\n const startDate = getWeekStartDate(monthStart, this.weekStartDay());\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const weeks: Cell[][] = [[], [], [], [], [], []];\n let weekIndex = 0;\n for (\n let i = 0, date = new Date(startDate);\n weeks[weeks.length - 1].length < 7;\n i++, date.setDate(date.getDate() + 1)\n ) {\n if (i > 0 && i % 7 === 0) {\n weekIndex++;\n }\n\n const activeMonth = isSameOrBetween(date, monthStart, monthEnd);\n const isToday = isSameDate(date, today());\n const outOfRange = !isSameOrBetween(date, minDate, maxDate);\n\n weeks.at(weekIndex)?.push({\n value: date.getDate(),\n disabled: outOfRange,\n ariaLabel: date.toDateString(),\n displayValue: date.getDate().toString(),\n isPreview: !activeMonth,\n isToday,\n valueRaw: createDate(date),\n cssClasses: ['day', activeMonth ? 'si-h4' : 'si-body-lg']\n });\n }\n return weeks;\n });\n /** Compare date based on the current view */\n protected compareAdapter = new DayCompareAdapter();\n /** Disable today button if it is the same month */\n protected readonly isTodayButtonDisabled = computed(() =>\n isSameMonth(today(), this.focusedDate())\n );\n /**\n * Indicate the previous button shall be disabled.\n * This happens when the focusedDate is equal or before the minDate.\n */\n protected readonly isPreviousButtonDisabled = computed(() => {\n const minDate = this.minDate();\n const focusedDate = this.focusedDate();\n return minDate && (isSameMonth(focusedDate, minDate) || isAfterMonth(minDate, focusedDate));\n });\n /**\n * Indicate the next button shall be disabled.\n * This happens when the focusedDate is equal or after the maxDate.\n */\n protected readonly isNextButtonDisabled = computed(() => {\n const maxDate = this.maxDate();\n const focusedDate = this.focusedDate();\n return maxDate && (isSameMonth(focusedDate, maxDate) || isAfterMonth(focusedDate, maxDate));\n });\n\n private readonly locale = inject(LOCALE_ID).toString();\n\n protected calendarBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = isRTL();\n switch (event.key) {\n case 'ArrowLeft':\n this.updateFocusedDateByDay(isRtl ? 1 : -1);\n break;\n case 'ArrowRight':\n this.updateFocusedDateByDay(isRtl ? -1 : 1);\n break;\n case 'ArrowUp':\n this.updateFocusedDateByDay(-7);\n break;\n case 'ArrowDown':\n this.updateFocusedDateByDay(7);\n break;\n case 'Home':\n this.updateFocusedDate(getWeekStartDate(this.focusedDate(), this.weekStartDay()));\n break;\n case 'End':\n this.updateFocusedDate(getWeekEndDate(this.focusedDate(), this.weekStartDay()));\n break;\n case 'PageDown':\n this.updateFocusedDateByMonth(1);\n break;\n case 'PageUp':\n this.updateFocusedDateByMonth(-1);\n break;\n case 'Enter':\n case 'Space':\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n protected updateFocusedDateByDay(offset: number): void {\n this.updateFocusedDate(\n addDaysInRange(this.focusedDate(), offset, this.minDate(), this.maxDate())\n );\n }\n\n protected updateFocusedDateByMonth(offset: number): void {\n this.updateFocusedDate(\n addMonthsInRange(this.focusedDate(), offset, this.minDate(), this.maxDate())\n );\n }\n\n protected updateFocusedDate(newDate: Date): void {\n const prevDate = this.focusedDate();\n if (!isSameDate(prevDate, newDate)) {\n this.focusedDate.set(newDate);\n if (isAnotherMonthOrYear(newDate, prevDate)) {\n this.activeMonthChange.emit(newDate);\n }\n this.focusActiveCell();\n }\n }\n\n /**\n * Update month of focusedDate.\n * @param offset -1 or -1.\n */\n protected setMonthOffset(offset: number): void {\n // Only update emit focusedDate since the focus shall stay on the button.\n const actualMonth = addMonthsInRange(\n this.focusedDate(),\n offset,\n this.minDate(),\n this.maxDate()\n );\n this.focusedDate.set(actualMonth);\n this.activeMonthChange.emit(actualMonth);\n }\n\n /** Change the focusedDate to today */\n protected goToToday(): void {\n this.focusedDate.set(today());\n this.focusActiveCell();\n }\n\n protected emitSelectedValue(selected: Date): void {\n if (selected !== this.startDate() || selected !== this.endDate()) {\n this.selectedValueChange.emit(selected);\n }\n }\n\n protected emitActiveDate(active: Date): void {\n this.focusedDate.set(active);\n }\n\n protected emitViewChange(view: 'year' | 'month'): void {\n this.viewChange.emit(view);\n }\n}\n","<div class=\"header\">\n <si-calendar-direction-button\n direction=\"left\"\n [ariaLabel]=\"previousLabel() | translate\"\n [disabled]=\"isPreviousButtonDisabled()\"\n (clicked)=\"setMonthOffset(-1)\"\n />\n <div class=\"flex-fill\">\n <button\n type=\"button\"\n class=\"open-month-view flex-fill text-end px-2 btn btn-tertiary calendar-button\"\n tabindex=\"0\"\n (click)=\"emitViewChange('month')\"\n >\n {{ focusedDate() | date: 'MMMM' }}\n </button>\n <button\n type=\"button\"\n class=\"open-year-view flex-fill text-start px-2 btn btn-tertiary calendar-button\"\n tabindex=\"0\"\n (click)=\"emitViewChange('year')\"\n >\n {{ focusedDate() | date: 'yyyy' }}\n </button>\n </div>\n <si-calendar-direction-button\n direction=\"right\"\n [ariaLabel]=\"nextLabel() | translate\"\n [disabled]=\"isNextButtonDisabled()\"\n (clicked)=\"setMonthOffset(1)\"\n />\n</div>\n<table class=\"px-9 mt-6\" role=\"grid\">\n <thead class=\"si-calendar-table-header\">\n <tr>\n @if (!hideWeekNumbers()) {\n <th scope=\"col\" class=\"week-num\">\n <span class=\"visually-hidden\">{{ calendarWeekLabel() | translate }}</span>\n </th>\n }\n @for (day of days(); track $index) {\n <th scope=\"col\">\n <span class=\"si-hidden-xs si-hidden-sm\">{{ day }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody\n si-calendar-body\n rowLabelCssClasses=\"week-num\"\n [focusedDate]=\"focusedDate()\"\n [compareAdapter]=\"compareAdapter\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [enableRangeSelection]=\"isRangeSelection()\"\n [previewRange]=\"previewRange()\"\n [rows]=\"weeks()\"\n [rowLabels]=\"hideWeekNumbers() ? undefined : weekNumbers()\"\n [activeHover]=\"activeHover()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (selectedValueChange)=\"emitSelectedValue($event)\"\n (focusedDateChange)=\"emitActiveDate($event!)\"\n (keydown)=\"calendarBodyKeyDown($event)\"\n >\n </tbody>\n</table>\n<div class=\"footer pt-2 ps-8 pe-8\">\n <button\n type=\"button\"\n class=\"today-button btn btn-tertiary flex-fill\"\n [disabled]=\"isTodayButtonDisabled()\"\n (click)=\"goToToday()\"\n >\n {{ today() | translate }}\n </button>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostListener,\n input,\n model,\n OnChanges,\n output,\n SimpleChanges\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\n\nimport {\n addMonthsInRange,\n createDate,\n getFirstDateInYear,\n isAfterYear,\n isAnotherYear,\n isSameYear,\n today as getToday\n} from '../date-time-helper';\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\nimport { SiCalendarDirectionButtonComponent } from './si-calendar-direction-button.component';\nimport { MonthCompareAdapter } from './si-compare-adapter';\nimport { SiInitialFocusComponent } from './si-initial-focus.component';\n\n/**\n * Show months of a single year as table and handles the keyboard interactions.\n * The focus and focusedDate is handled according the keyboard interactions.\n */\n@Component({\n selector: 'si-month-selection',\n imports: [SiCalendarDirectionButtonComponent, SiCalendarBodyComponent, DatePipe],\n templateUrl: './si-month-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiMonthSelectionComponent extends SiInitialFocusComponent implements OnChanges {\n /**\n * The translated list of months.\n *\n * @defaultValue []\n */\n readonly months = input<string[]>([]);\n /**\n * The active date, the cell which will receive the focus.\n */\n readonly focusedDate = model.required<Date>();\n /** Emits when the active focused date is changed to another month / year, typically during keyboard navigation. */\n readonly activeMonthChange = output<Date>();\n /** Emits when the user requests a different to show a different view. */\n readonly viewChange = output<'year'>();\n /** Listen Escape event to switch view back */\n @HostListener('keydown.Escape', ['$event'])\n triggerEsc(event: Event): void {\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n /**\n * The current visible list of calendar months.\n * Every time the focusedDate changes to another year the list will update.\n */\n protected monthCells: Cell[][] = [];\n protected compareAdapter = new MonthCompareAdapter();\n /** Number of column before the row is wrapped */\n private readonly columnCount = 2;\n\n /**\n * Indicate the previous button shall be disabled.\n * This happens when the focusedDate is equal or before the minDate.\n */\n protected readonly isPreviousButtonDisabled = computed(() => {\n const minDate = this.minDate();\n const focusedDate = this.focusedDate();\n return minDate && (isSameYear(focusedDate, minDate) || isAfterYear(minDate, focusedDate));\n });\n\n /**\n * Indicate the next button shall be disabled.\n * This happens when the focusedDate is equal or after the maxDate.\n */\n protected readonly isNextButtonDisabled = computed(() => {\n const maxDate = this.maxDate();\n const focusedDate = this.focusedDate();\n return maxDate && (isSameYear(focusedDate, maxDate) || isAfterYear(focusedDate, maxDate));\n });\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (\n changes.maxDate ||\n changes.minDate ||\n changes.maxMonth ||\n changes.minMonth ||\n changes.focusedDate\n ) {\n this.initView();\n }\n }\n\n protected calendarBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = isRTL();\n switch (event.key) {\n case 'ArrowLeft':\n this.updateFocusedDate(isRtl ? 1 : -1);\n break;\n case 'ArrowRight':\n this.updateFocusedDate(isRtl ? -1 : 1);\n break;\n case 'ArrowUp':\n this.updateFocusedDate(-1 * this.columnCount);\n break;\n case 'ArrowDown':\n this.updateFocusedDate(this.columnCount);\n break;\n case 'Escape':\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n return;\n case 'Enter':\n case 'Space':\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n protected updateFocusedDate(offset: number): void {\n const prevDate = this.focusedDate();\n const newDate = addMonthsInRange(prevDate, offset, this.minDate(), this.maxDate());\n this.focusedDate.set(newDate);\n if (!this.compareAdapter.isEqual(prevDate, newDate)) {\n // Synchronize focusedDate with year view\n this.focusActiveCell();\n this.emitActiveMonthChange(newDate, prevDate);\n }\n }\n /**\n * Add offset to year and update focusedDate.\n */\n protected setYearOffset(offset: number): void {\n const prevDate = this.focusedDate();\n const newActive = createDate(prevDate);\n newActive.setFullYear(newActive.getFullYear() + offset);\n this.focusedDate.set(newActive);\n this.emitActiveMonthChange(newActive, prevDate);\n }\n\n protected emitSelectedValue(selected: Date): void {\n this.selectedValueChange.emit(selected);\n }\n\n protected emitFocusedDate(focused: Date): void {\n // Take over the current day on month changes\n focused.setDate(this.focusedDate().getDate());\n this.focusedDate.set(focused);\n }\n\n protected emitActiveMonthChange(focus: Date, prevFocus: Date): void {\n if (isAnotherYear(focus, prevFocus)) {\n this.activeMonthChange.emit(focus);\n }\n }\n\n protected emitViewChange(): void {\n this.viewChange.emit('year');\n }\n\n /**\n * Initialize view based on the focusedDate.\n */\n private initView(): void {\n this.monthCells = [];\n let row: Cell[] = [];\n\n // The cell date object needs to be the first to prevent that we jump to the next month when\n // setting the month. For example the focusedDate is 31. setting february would result in the\n // 3. March.\n const startDate = getFirstDateInYear(this.focusedDate());\n const today = getToday();\n const months = this.months();\n for (let i = 0; i <= 11; i++) {\n if (i > 0 && i % this.columnCount === 0) {\n this.monthCells.push(row);\n row = [];\n }\n const date = new Date(startDate);\n date.setMonth(i);\n const isToday = this.compareAdapter.isEqual(date, today);\n const isDisabled = !this.compareAdapter.isEqualOrBetween(\n date,\n this.minDate(),\n this.maxDate()\n );\n\n row.push({\n value: date.getDate(),\n disabled: isDisabled,\n ariaLabel: `${months[date.getMonth()]} ${this.focusedDate().getFullYear()}`,\n displayValue: months[date.getMonth()],\n isPreview: false,\n isToday,\n valueRaw: createDate(date),\n cssClasses: ['month', 'si-h4', 'text-truncate']\n });\n }\n this.monthCells.push(row);\n }\n}\n","<div class=\"header\">\n <si-calendar-direction-button\n direction=\"left\"\n [ariaLabel]=\"previousLabel()\"\n [disabled]=\"isPreviousButtonDisabled()\"\n (clicked)=\"setYearOffset(-1)\"\n />\n <button\n type=\"button\"\n class=\"open-year-view flex-fill mx-4 btn btn-tertiary calendar-button\"\n tabindex=\"0\"\n (click)=\"emitViewChange()\"\n >\n {{ focusedDate() | date: 'yyyy' }}\n </button>\n <si-calendar-direction-button\n direction=\"right\"\n [ariaLabel]=\"nextLabel()\"\n [disabled]=\"isNextButtonDisabled()\"\n (clicked)=\"setYearOffset(1)\"\n />\n</div>\n<table class=\"px-9 mt-6\" role=\"grid\">\n <tbody\n si-calendar-body\n [focusedDate]=\"focusedDate()\"\n [compareAdapter]=\"compareAdapter\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [enableRangeSelection]=\"isRangeSelection()\"\n [previewRange]=\"previewRange()\"\n [rows]=\"monthCells\"\n [activeHover]=\"activeHover()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (selectedValueChange)=\"emitSelectedValue($event)\"\n (focusedDateChange)=\"emitFocusedDate($event)\"\n (keydown)=\"calendarBodyKeyDown($event)\"\n >\n </tbody>\n</table>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostListener,\n model,\n OnChanges,\n output,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\n\nimport {\n addYearsInRange,\n getFirstDateInYear,\n minDate as getMinDate,\n isBetween,\n today as getToday,\n createDate\n} from '../date-time-helper';\nimport { Cell, SiCalendarBodyComponent } from './si-calendar-body.component';\nimport { SiCalendarDirectionButtonComponent } from './si-calendar-direction-button.component';\nimport { YearCompareAdapter } from './si-compare-adapter';\nimport { SiInitialFocusComponent } from './si-initial-focus.component';\n\n/**\n * Show months of a single year as table and handles the keyboard interactions.\n * The focus and focusedDate is handled according the keyboard interactions.\n */\n@Component({\n selector: 'si-year-selection',\n imports: [SiCalendarDirectionButtonComponent, SiCalendarBodyComponent, DatePipe],\n templateUrl: './si-year-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiYearSelectionComponent extends SiInitialFocusComponent implements OnChanges {\n /**\n * The active date, the cell which will receive the focus.\n */\n readonly focusedDate = model.required<Date>();\n /** Emits when the active focused date changed to another month / year, typically during keyboard navigation. */\n readonly yearRangeChange = output<Date[]>();\n /** Listen Escape event to switch view back */\n @HostListener('keydown.Escape', ['$event'])\n triggerEsc(event: Event): void {\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n /** Number of column before the row is wrapped */\n private readonly columnCount = 3;\n /** The number of years which shall be displayed, this number should be even and dividable by columnCount */\n private readonly yearsToDisplay = 18;\n /** Lower windows bound for displayed year range */\n protected readonly fromYear = signal<Date | undefined>(undefined);\n /** Upper windows bound for displayed year range */\n protected readonly toYear = signal<Date | undefined>(undefined);\n /**\n * The current visible list of calendar years.\n * Every time the focusedDate changes to another year the list will be rebuilt.\n */\n protected yearCells: Cell[][] = [];\n protected compareAdapter = new YearCompareAdapter();\n /** Is previous button disabled based on the minDate. */\n protected readonly isPreviousButtonDisabled = computed(() => {\n const minDate = this.minDate();\n const minMonth = this.minMonth();\n if (!minDate && !minMonth) {\n return false;\n }\n const min = getMinDate(minDate, minMonth)!;\n return (\n this.compareAdapter.isEqual(this.fromYear()!, min) ||\n this.compareAdapter.isAfter(min, this.fromYear()!)\n );\n });\n /** Is next button disabled based on the maxDate */\n protected readonly isNextButtonDisabled = computed(() => {\n const maxDate = this.maxDate();\n if (!maxDate) {\n return false;\n }\n return (\n this.compareAdapter.isEqual(this.toYear()!, maxDate) ||\n this.compareAdapter.isAfter(this.toYear()!, maxDate)\n );\n });\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.startDate || changes.focusedDate || changes.maxDate || changes.minDate) {\n this.initView();\n }\n }\n\n protected calendarBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = isRTL();\n const oldActiveDate = this.focusedDate();\n switch (event.key) {\n case 'ArrowLeft':\n this.setYearOffset(isRtl ? 1 : -1);\n break;\n case 'ArrowRight':\n this.setYearOffset(isRtl ? -1 : 1);\n break;\n case 'ArrowUp':\n this.setYearOffset(-1 * this.columnCount);\n break;\n case 'ArrowDown':\n this.setYearOffset(this.columnCount);\n break;\n case 'PageUp':\n this.setYearOffset(-1 * (oldActiveDate.getFullYear() - this.fromYear()!.getFullYear()));\n break;\n case 'PageDown':\n this.setYearOffset(this.toYear()!.getFullYear() - oldActiveDate.getFullYear());\n break;\n case 'Escape':\n this.selectedValueChange.emit(null);\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n return;\n case 'Enter':\n case 'Space':\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (!this.compareAdapter.isEqual(oldActiveDate, this.focusedDate())) {\n this.focusActiveCell();\n }\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /**\n * Change the active date and the range of displayed years.\n * The windowOffset control the amount of ranges the view shall move forward or backward.\n * The number of displayed years ia controlled by yearsToDisplay.\n */\n protected changeVisibleYearRange(windowOffset: number): void {\n const offset = windowOffset * this.yearsToDisplay;\n this.setYearOffset(offset);\n }\n\n protected emitSelectedValue(selected: Date): void {\n this.selectedValueChange.emit(selected);\n }\n\n /**\n * Determine the year range start and end year.\n * - Based on the active date this function will find the start and\n * ending year of the current displayed range.\n * - In case the focusedDate is either before or after the current range the\n * start and end year will move the entire window (yearsToDisplay)\n */\n private initYearRange(): void {\n // Did we exceed the display current displayed year range\n let changed = false;\n const focusedDate = this.focusedDate();\n const fromYear = this.fromYear();\n const toYear = this.toYear();\n if (!fromYear || !toYear) {\n const start = focusedDate.getFullYear() - this.yearsToDisplay / 2;\n this.fromYear.set(new Date(start, 0, 1));\n this.toYear.set(new Date(start + this.yearsToDisplay - 1, 0, 1));\n changed = true;\n } else if (this.compareAdapter.isAfter(focusedDate, toYear)) {\n // Change window forward\n const rangeDistance = Math.floor(\n Math.abs(focusedDate.getFullYear() - fromYear.getFullYear()) / this.yearsToDisplay\n );\n const newFromYear = fromYear.getFullYear() + rangeDistance * this.yearsToDisplay;\n\n this.fromYear.set(new Date(newFromYear, 0, 1));\n this.toYear.set(new Date(newFromYear + this.yearsToDisplay - 1, 0, 1));\n changed = true;\n } else if (this.compareAdapter.isAfter(fromYear, focusedDate)) {\n // Change window backwards\n const rangeDistance = Math.ceil(\n Math.abs(focusedDate.getFullYear() - fromYear.getFullYear()) / this.yearsToDisplay\n );\n const newFromYear = fromYear.getFullYear() - rangeDistance * this.yearsToDisplay;\n\n this.fromYear.set(new Date(newFromYear, 0, 1));\n this.toYear.set(new Date(newFromYear + this.yearsToDisplay - 1, 0, 1));\n changed = true;\n }\n\n if (changed) {\n this.yearRangeChange.emit([this.fromYear()!, this.toYear()!]);\n }\n }\n\n /**\n * Initialize view based on the focusedDate.\n */\n private initView(): void {\n // Initial year limits\n this.initYearRange();\n\n this.yearCells = [];\n let row: Cell[] = [];\n\n // The cell date object needs to be the first to prevent that we jump to the next month when\n // setting the month. For example the focusedDate is 31. setting february would result in the\n // 3. March.\n const startDate = getFirstDateInYear(this.fromYear()!);\n const today = getToday();\n for (let i = 0; i < this.yearsToDisplay; i++) {\n if (i > 0 && i % this.columnCount === 0) {\n this.yearCells.push(row);\n row = [];\n }\n\n const date = createDate(startDate);\n date.setFullYear(date.getFullYear() + i);\n const isToday = this.compareAdapter.isEqual(date, today);\n const isDisabled = !this.compareAdapter.isEqualOrBetween(\n date,\n this.minDate(),\n this.maxDate()\n );\n const year = date.getFullYear().toString();\n row.push({\n value: date.getDate(),\n disabled: isDisabled,\n ariaLabel: year,\n displayValue: year,\n isPreview: false,\n isToday,\n valueRaw: createDate(date),\n cssClasses: ['year', 'si-h4']\n });\n }\n this.yearCells.push(row);\n }\n\n /**\n * Add offset to year and update focusedDate.\n * If the new year is outside min/max date the year will set to the closest year in range.\n */\n private setYearOffset(offset: number): void {\n const newActive = addYearsInRange(this.focusedDate(), offset, this.minDate(), this.maxDate());\n this.focusedDate.set(newActive);\n if (!this.fromYear() || !isBetween(this.focusedDate(), this.fromYear(), this.toYear())) {\n // Re-calc years view\n this.initView();\n }\n }\n}\n","<div class=\"header\">\n <si-calendar-direction-button\n direction=\"left\"\n [ariaLabel]=\"previousLabel()\"\n [disabled]=\"isPreviousButtonDisabled()\"\n (clicked)=\"changeVisibleYearRange(-1)\"\n />\n <span class=\"year-range-label flex-fill mx-4 si-h4 text-secondary calendar-button\">\n {{ fromYear() | date: 'yyyy' }} - {{ toYear() | date: 'yyyy' }}\n </span>\n <si-calendar-direction-button\n direction=\"right\"\n [ariaLabel]=\"nextLabel()\"\n [disabled]=\"isNextButtonDisabled()\"\n (clicked)=\"changeVisibleYearRange(1)\"\n />\n</div>\n<table class=\"px-9 mt-6\" role=\"grid\">\n <tbody\n si-calendar-body\n [focusedDate]=\"focusedDate()\"\n [compareAdapter]=\"compareAdapter\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [enableRangeSelection]=\"isRangeSelection()\"\n [previewRange]=\"previewRange()\"\n [rows]=\"yearCells\"\n (selectedValueChange)=\"emitSelectedValue($event)\"\n (keydown)=\"calendarBodyKeyDown($event)\"\n >\n </tbody>\n</table>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n FormatWidth,\n FormStyle,\n getLocaleDayPeriods,\n getLocaleTimeFormat,\n NgTemplateOutlet,\n TranslationWidth\n} from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n LOCALE_ID,\n output,\n signal,\n viewChildren\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn\n} from '@angular/forms';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '@siemens/element-ng/form';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { createDate } from './date-time-helper';\n\ninterface Value<T = string> {\n hours: T;\n minutes: T;\n seconds: T;\n milliseconds: T;\n}\n\ninterface TimeComponents extends Partial<Value<string | number>> {\n isPM?: boolean;\n}\n\ninterface Config {\n ariaLabel: TranslatableString;\n label: TranslatableString;\n maxLength: number;\n max: number;\n name: keyof Value;\n placeholder: string;\n separator?: string;\n}\n\nconst dateWithTime = (base: Date, time: Date): Date =>\n createDate(base, time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n\n@Component({\n selector: 'si-timepicker',\n imports: [A11yModule, NgTemplateOutlet, ReactiveFormsModule, SiTranslatePipe],\n templateUrl: './si-timepicker.component.html',\n styleUrl: './si-timepicker.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiTimepickerComponent,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiTimepickerComponent,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiTimepickerComponent\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'group',\n class: 'form-custom-control',\n '[class.readonly]': 'readonly()',\n '[attr.aria-labelledby]': 'labelledby'\n }\n})\nexport class SiTimepickerComponent implements ControlValueAccessor, Validator, SiFormItemControl {\n private static idCounter = 0;\n private readonly locale = inject(LOCALE_ID).toString();\n private readonly formBuilder = inject(FormBuilder);\n\n /**\n * @defaultValue\n * ```\n * `__si-timepicker-${SiTimepickerComponent.idCounter++}`\n * ```\n */\n readonly id = input(`__si-timepicker-${SiTimepickerComponent.idCounter++}`);\n\n readonly labelledby =\n inject(new HostAttributeToken('aria-labelledby'), {\n optional: true\n }) ?? `${this.id()}-label`;\n /**\n * All input fields will be disabled if set to true.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly disabledInput = input(false, { alias: 'disabled' });\n\n /**\n * @defaultValue 'hh'\n */\n readonly hoursLabel = input<TranslatableString>('hh');\n /**\n * @defaultValue 'mm'\n */\n readonly minutesLabel = input<TranslatableString>('mm');\n /**\n * @defaultValue 'ss'\n */\n readonly secondsLabel = input<TranslatableString>('ss');\n /**\n * @defaultValue 'ms'\n */\n readonly millisecondsLabel = input<TranslatableString>('ms');\n /**\n * Hide the labels of the input fields.\n * @defaultValue false\n */\n readonly hideLabels = input(false, { transform: booleanAttribute });\n\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.HOURS:Hours`)\n * ```\n */\n readonly hoursAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.HOURS:Hours`));\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.MINUTES:Minutes`)\n * ```\n */\n readonly minutesAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.MINUTES:Minutes`));\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.SECONDS:Seconds`)\n * ```\n */\n readonly secondsAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.SECONDS:Seconds`));\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.MILLISECONDS:Milliseconds`)\n * ```\n */\n readonly millisecondsAriaLabel = input(\n t(() => $localize`:@@SI_DATEPICKER.MILLISECONDS:Milliseconds`)\n );\n\n /**\n * @defaultValue 'hh'\n */\n readonly hoursPlaceholder = input('hh');\n /**\n * @defaultValue 'mm'\n */\n readonly minutesPlaceholder = input('mm');\n /**\n * @defaultValue 'ss'\n */\n readonly secondsPlaceholder = input('ss');\n /**\n * @defaultValue 'ms'\n */\n readonly millisecondsPlaceholder = input('ms');\n\n readonly meridians = input<string[]>();\n /**\n * @defaultValue 'am/pm'\n */\n readonly meridiansLabel = input<TranslatableString>('am/pm');\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.PERIOD:Period`)\n * ```\n */\n readonly meridiansAriaLabel = input(t(() => $localize`:@@SI_DATEPICKER.PERIOD:Period`));\n\n /** @defaultValue true */\n readonly showMinutes = input(true, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly showSeconds = input(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly showMilliseconds = input(false, { transform: booleanAttribute });\n /**\n * Show time in 12-hour period including the select to toggle between AM/PM.\n */\n readonly showMeridian = input<boolean | undefined>();\n\n /**\n * A minimum time limit. The date part of the date object will be ignored.\n */\n readonly min = input<Date>();\n\n /**\n * A maximum time limit. The date part of the date object will be ignored.\n */\n readonly max = input<Date>();\n\n /** @defaultValue false */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n readonly isValid = output<boolean>();\n readonly meridianChange = output<string>();\n readonly inputCompleted = output<void>();\n\n private readonly inputParts = viewChildren<ElementRef<HTMLElement>>('inputPart');\n\n /**\n * This ID will be bound to the `aria-describedby` attribute of the timepicker.\n * Use this to reference the element containing the error message(s) for the timepicker.\n * It will be picked by the {@link SiFormItemComponent} if the timepicker is used inside a form item.\n *\n * @defaultValue\n * ```\n * `${this.id()}-errormessage`\n * ```\n */\n readonly errormessageId = input(`${this.id()}-errormessage`);\n\n private onChange: (val: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n // The following are the time values for the ui.\n protected readonly periods = computed(() => {\n const meridians = this.meridians();\n return meridians?.length ? meridians : this.periodDefaults;\n });\n protected readonly use12HourClock = computed(\n () => this.showMeridian() ?? getLocaleTimeFormat(this.locale, FormatWidth.Full).includes('a')\n );\n protected readonly disabled = computed(() => this.disabledInput() || this.disabledNgControl());\n protected readonly meridian = signal<'' | 'am' | 'pm'>('');\n protected readonly units = computed<Config[]>(() => {\n const config: Config[] = [\n {\n ariaLabel: this.hoursAriaLabel(),\n label: this.hoursLabel(),\n max: this.isPM() ? 12 : 23,\n maxLength: 2,\n name: 'hours',\n placeholder: this.hoursPlaceholder()\n }\n ];\n if (this.showMinutes()) {\n config.push({\n ariaLabel: this.minutesAriaLabel(),\n label: this.minutesLabel(),\n max: 59,\n maxLength: 2,\n name: 'minutes',\n placeholder: this.minutesPlaceholder()\n });\n }\n if (this.showSeconds()) {\n config.push({\n ariaLabel: this.secondsAriaLabel(),\n label: this.secondsLabel(),\n max: 59,\n maxLength: 2,\n name: 'seconds',\n placeholder: this.secondsPlaceholder()\n });\n }\n if (this.showMilliseconds()) {\n config.push({\n ariaLabel: this.millisecondsAriaLabel(),\n label: this.millisecondsLabel(),\n max: 999,\n maxLength: 3,\n name: 'milliseconds',\n placeholder: this.millisecondsPlaceholder(),\n separator: '.'\n });\n }\n return config;\n });\n\n /* Input fields state */\n protected readonly timeControls = this.formBuilder.group({\n hours: this.formBuilder.nonNullable.control('', [this.validateTime('hours')]),\n minutes: this.formBuilder.nonNullable.control('', [this.validateTime('minutes')]),\n seconds: this.formBuilder.nonNullable.control('', [this.validateTime('seconds')]),\n milliseconds: this.formBuilder.nonNullable.control('', [this.validateTime('milliseconds')])\n });\n /** Indicate whether one of the input fields has an invalid value. */\n protected hasInvalidUnit(): boolean {\n const values = this.timeControls.value;\n for (const config of this.units()) {\n const unit = values[config.name]!;\n if (isNaN(this.toNumber(unit, config.max))) {\n return true;\n }\n }\n return false;\n }\n private readonly disabledNgControl = signal(false);\n\n /**\n * Holds the time as date object that is presented by this control.\n */\n private time?: Date;\n private periodDefaults: string[];\n\n constructor() {\n this.periodDefaults = getLocaleDayPeriods(\n this.locale,\n FormStyle.Format,\n TranslationWidth.Short\n ).slice();\n effect(() => {\n if (this.disabled()) {\n this.timeControls.disable({ emitEvent: false, onlySelf: true });\n } else {\n this.timeControls.enable({ emitEvent: false, onlySelf: true });\n }\n });\n Object.values(this.timeControls.controls).forEach(control => {\n control.valueChanges.subscribe(value => {\n // Enforce digits only\n const cleaned = value.replace(/\\D/g, '');\n if (cleaned !== value) {\n control?.setValue(cleaned, { emitEvent: false });\n }\n });\n });\n }\n\n writeValue(obj?: Date | string): void {\n const time = this.parseTime(obj);\n if (!time || this.isValidDate(time)) {\n this.time = time;\n this.updateUI(this.time);\n }\n }\n\n /** @internal */\n isPM(): boolean {\n return this.use12HourClock() && this.meridian() === 'pm';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledNgControl.set(isDisabled);\n }\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n const childErrors = this.units()\n .map(u => this.timeControls.controls[u.name].errors)\n .reduce((prevObj, field) => ({ ...prevObj, ...field }), {} as ValidationErrors);\n if (childErrors && Object.keys(childErrors).length) {\n return childErrors;\n }\n const errors: ValidationErrors = {\n ...this.validateMin(control),\n ...this.validateMax(control)\n };\n return Object.keys(errors).length ? errors : null;\n }\n\n /**\n * Handle Enter, Arrow up/down and Space key press events.\n */\n protected handleKeyPressEvent(event: KeyboardEvent): void {\n const target = event.target as HTMLInputElement;\n switch (event.key) {\n case 'Enter':\n this.focusNext(event);\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n if (!this.readonly()) {\n this.changeTimeComponent(target.name, event.key === 'ArrowUp');\n } else {\n event.preventDefault();\n }\n break;\n case ' ':\n if (this.readonly()) {\n event.preventDefault();\n }\n break;\n default:\n break;\n }\n }\n\n protected toHtmlInputElement = (target?: EventTarget | null): HTMLInputElement =>\n target as HTMLInputElement;\n\n protected updateField(name: keyof Value, value: string): void {\n this.timeControls.get(name)?.setValue(value, { emitEvent: false });\n this.updateTime();\n this.onTouched();\n }\n\n protected toggleMeridian(): void {\n const time = this.changeTime(this.time, { hours: 12 });\n this.setTime(time);\n }\n\n /**\n * Takes the current UI values and updates the time object value\n * accordingly, if they UI input values are valid.\n */\n private updateTime(): void {\n if (this.hasInvalidUnit()) {\n this.isValid.emit(false);\n this.onChange(null);\n return;\n }\n\n this.setTime(this.createDateUpdate(this.time));\n }\n\n /**\n * Sets a new time object as model value, updates the user interface\n * and invokes onChange to let timepicker clients know about the update.\n * @param time - The new time to be set.\n */\n private setTime(time?: Date | undefined): void {\n if (this.time?.getTime() !== time?.getTime()) {\n this.time = time;\n this.updateUI(this.time);\n this.onChange(this.time);\n }\n }\n\n /**\n * Updates the user interface by filling the time components\n * into the time input fields. Sets empty values if the date\n * is undefined or invalid.\n *\n * @param value - The date object or string from with the time components are taken.\n */\n private updateUI(value?: string | Date): void {\n if (!value || !this.isValidDate(value)) {\n this.timeControls.setValue(\n {\n hours: '',\n minutes: '',\n seconds: '',\n milliseconds: ''\n },\n { emitEvent: false }\n );\n this.meridian.set('am');\n this.meridianChange.emit(this.meridian());\n } else {\n const time = this.parseTime(value);\n if (!time) {\n return;\n }\n\n let hours = time.getHours();\n if (this.use12HourClock()) {\n // 12:00 am is midnight while 12:00 pm is noon when users enter a value greater than 12 we can assume it's pm\n this.meridian.set(hours > 12 ? 'pm' : 'am');\n this.meridianChange.emit(this.meridian());\n hours = hours % 12;\n if (hours === 0) {\n hours = 12;\n }\n }\n this.timeControls.setValue(\n {\n hours: hours.toString().padStart(2, '0'),\n minutes: time.getMinutes().toString().padStart(2, '0'),\n seconds: time.getUTCSeconds().toString().padStart(2, '0'),\n milliseconds: time.getUTCMilliseconds().toString().padStart(3, '0')\n },\n { emitEvent: false }\n );\n }\n }\n\n private isValidDate(value?: string | Date): boolean {\n if (!value) {\n return false;\n }\n\n if (typeof value === 'string') {\n return this.isValidDate(new Date(value));\n }\n\n if (value instanceof Date && isNaN(value.getHours())) {\n return false;\n }\n\n return true;\n }\n\n private parseTime(value?: string | Date): Date | undefined {\n if (typeof value === 'string') {\n return new Date(value);\n }\n return value;\n }\n\n private createDateUpdate(date: Date | undefined): Date | undefined {\n const units = this.units();\n const value = this.timeControls.value;\n let hour = this.toNumber(value.hours, units.find(u => u.name === 'hours')?.max);\n const minute = this.toNumber(value.minutes, units.find(u => u.name === 'minutes')?.max);\n const seconds = this.toNumber(value.seconds, units.find(u => u.name === 'seconds')?.max) || 0;\n const milliseconds =\n this.toNumber(value.milliseconds, units.find(u => u.name === 'milliseconds')?.max) || 0;\n\n if (this.isPM() && hour !== 12) {\n hour += 12;\n } else if (this.use12HourClock() && !this.isPM() && hour === 12) {\n hour = 0;\n }\n\n if (!date) {\n if (!isNaN(hour) && !isNaN(minute)) {\n return createDate(new Date(), hour, minute, seconds, milliseconds);\n } else {\n return date;\n }\n } else if (isNaN(hour) || isNaN(minute)) {\n return date;\n } else {\n return createDate(date, hour, minute, seconds, milliseconds);\n }\n }\n\n private toNumber(value?: string | number, limit?: number): number {\n if (typeof value === 'undefined') {\n return NaN;\n } else if (typeof value === 'string') {\n value = parseInt(value, 10);\n }\n\n if (limit !== undefined && (isNaN(value) || value < 0 || value > limit)) {\n return NaN;\n }\n return value;\n }\n\n private changeTimeComponent(key: string, up: boolean): void {\n const change = up ? 1 : -1;\n const date = this.createDateUpdate(new Date());\n switch (key) {\n case 'hours': {\n const newTime = this.changeTime(date, { hours: change });\n let hour = newTime!.getHours();\n if (this.use12HourClock()) {\n hour = hour % 12;\n if (hour === 0 && !this.isPM()) {\n hour = 12;\n } else if (hour === 0 && this.isPM()) {\n this.toggleMeridian();\n }\n }\n this.updateField('hours', hour.toString());\n break;\n }\n case 'minutes': {\n const newTime = this.changeTime(date, { minutes: change });\n this.updateField('minutes', newTime.getMinutes().toString());\n break;\n }\n case 'seconds': {\n const newTime = this.changeTime(date, { seconds: change });\n this.updateField('seconds', newTime.getSeconds().toString());\n break;\n }\n case 'milliseconds': {\n const newTime = this.changeTime(date, { milliseconds: change });\n this.updateField('milliseconds', newTime.getMilliseconds().toString());\n break;\n }\n default:\n break;\n }\n }\n\n private changeTime(value?: Date, diff?: TimeComponents): Date {\n if (!value) {\n return this.changeTime(createDate(new Date(), 0, 0, 0, 0), diff);\n }\n\n if (!diff) {\n return value;\n }\n\n let hour = value.getHours();\n let minutes = value.getMinutes();\n let seconds = value.getSeconds();\n let milliseconds = value.getMilliseconds();\n\n if (diff.hours) {\n hour = hour + this.toNumber(diff.hours);\n }\n\n if (diff.minutes) {\n minutes = minutes + this.toNumber(diff.minutes);\n }\n\n if (diff.seconds) {\n seconds = seconds + this.toNumber(diff.seconds);\n }\n if (diff.milliseconds) {\n milliseconds = milliseconds + this.toNumber(diff.milliseconds);\n }\n\n return createDate(value, hour, minutes, seconds, milliseconds);\n }\n\n /**\n * Focuses the next available input/select field or emit inputCompleted event.\n */\n protected focusNext(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n const targets = this.inputParts();\n const position = targets?.findIndex(ref => ref.nativeElement === target);\n if (position === undefined || position === -1) {\n return;\n }\n\n if (position < targets!.length - 1) {\n targets![position + 1].nativeElement.focus();\n } else {\n this.inputCompleted.emit();\n }\n }\n\n protected focusChange(event: FocusOrigin): void {\n if (event === null) {\n this.onTouched();\n }\n }\n\n protected formatTime(time: Date): string {\n const options: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: this.showMinutes() ? '2-digit' : undefined,\n second: this.showSeconds() ? '2-digit' : undefined,\n hour12: this.use12HourClock(),\n fractionalSecondDigits: this.showMilliseconds() ? 3 : undefined\n };\n return new Intl.DateTimeFormat(this.locale, options).format(time);\n }\n protected validateMin(control: AbstractControl): ValidationErrors | null {\n const current = control.value;\n let min = this.min();\n if (control.value instanceof Date && min) {\n min = dateWithTime(current, min);\n if (current < min) {\n return { minTime: { actual: current, min: min, minString: this.formatTime(min) } };\n }\n }\n return null;\n }\n\n protected validateMax(control: AbstractControl): ValidationErrors | null {\n const error: ValidationErrors = {};\n const current = control.value;\n let max = this.max();\n if (control.value instanceof Date && max) {\n max = dateWithTime(current, max);\n if (current > max) {\n error.maxTime = { actual: current, max: max, maxString: this.formatTime(max) };\n }\n }\n return Object.keys(error).length ? error : null;\n }\n\n protected validateTime(name: string): ValidatorFn {\n return (c: AbstractControl): ValidationErrors | null => {\n const max = this.units().find(u => u.name === name)?.max;\n if (max !== undefined && c.value && parseInt(c.value, 10) > max) {\n return { [name]: { max } };\n }\n return null;\n };\n }\n}\n","<div\n class=\"d-flex flex-row flex-wrap\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"focusChange($event)\"\n>\n @for (config of units(); track $index) {\n @if (!$first) {\n <ng-container *ngTemplateOutlet=\"separator; context: { separator: config.separator }\" />\n }\n <label class=\"min-width\">\n @if (!hideLabels()) {\n <span class=\"form-label\">{{ (config.label | translate) || ' ' }}</span>\n }\n <input\n #inputPart\n autocomplete=\"off\"\n class=\"form-control hide-feedback-icon\"\n type=\"text\"\n inputmode=\"numeric\"\n [attr.aria-label]=\"config.ariaLabel | translate\"\n [attr.aria-describedby]=\"errormessageId()\"\n [attr.maxlength]=\"config.maxLength\"\n [formControl]=\"timeControls.controls[config.name]\"\n [name]=\"config.name\"\n [placeholder]=\"config.placeholder\"\n [readonly]=\"readonly()\"\n (blur)=\"updateField(config.name, toHtmlInputElement($event.target).value)\"\n (keydown)=\"handleKeyPressEvent($event)\"\n />\n </label>\n }\n @if (use12HourClock()) {\n <label class=\"ms-2\">\n @if (!hideLabels()) {\n <span class=\"form-label\">{{ (meridiansLabel() | translate) || ' ' }}</span>\n }\n <select\n #inputPart\n class=\"form-control\"\n [attr.aria-label]=\"meridiansAriaLabel() | translate\"\n [attr.aria-describedby]=\"errormessageId()\"\n [class.readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (change)=\"toggleMeridian()\"\n (keydown)=\"handleKeyPressEvent($event)\"\n >\n <option value=\"am\" [selected]=\"meridian() === 'am'\">{{ periods()[0] }}</option>\n <option value=\"pm\" [selected]=\"meridian() === 'pm'\">{{ periods()[1] }}</option>\n </select>\n </label>\n }\n</div>\n\n<ng-template #separator let-separator=\"separator\">\n <div class=\"align-self-end pb-3 px-1\" aria-hidden=\"true\">{{ separator ? separator : ':' }}</div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { getLocaleFirstDayOfWeek, WeekDay } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n OnInit,\n signal,\n SimpleChange,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n ReactiveFormsModule,\n ValidationErrors\n} from '@angular/forms';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { Cell } from './components/si-calendar-body.component';\nimport { SiDaySelectionComponent } from './components/si-day-selection.component';\nimport { SiMonthSelectionComponent } from './components/si-month-selection.component';\nimport { SiYearSelectionComponent } from './components/si-year-selection.component';\nimport {\n changeDay,\n createDate,\n getDateSameOrBetween,\n getDateWithoutTime,\n getLocaleMonthNames,\n isAfter,\n isSameDate,\n isSameOrBetween,\n isValid,\n today\n} from './date-time-helper';\nimport { DatepickerConfig, DateRange, WeekStart } from './si-datepicker.model';\nimport { SiTimepickerComponent } from './si-timepicker.component';\n\nlet idCounter = 1;\n\n/**\n * Choose which view shall be shown.\n * @internal\n */\ntype ViewType = 'week' | 'month' | 'year' | undefined;\n\nexport type RangeType = 'START' | 'END' | undefined;\n\n@Component({\n selector: 'si-datepicker',\n imports: [\n ReactiveFormsModule,\n SiYearSelectionComponent,\n SiMonthSelectionComponent,\n SiDaySelectionComponent,\n SiTimepickerComponent,\n SiTranslatePipe\n ],\n templateUrl: './si-datepicker.component.html',\n styleUrl: './si-datepicker.component.scss'\n})\nexport class SiDatepickerComponent implements OnInit, OnChanges, AfterViewInit {\n private readonly locale = inject(LOCALE_ID).toString();\n /**\n * The date which is currently focused\n * Compare to the selected date or range the calendar requires to have one element to focus.\n */\n readonly focusedDate = model<Date>();\n /**\n * The selected date of the datepicker. Use for\n * initialization and for bidirectional binding.\n */\n readonly date = model<Date>();\n /**\n * The selected date range of the datepicker. Use for\n * initialization and for bidirectional binding.\n */\n readonly dateRange = model<DateRange | undefined>();\n /** @internal */\n readonly dateRangeRole = input<RangeType>();\n /**\n * Set initial focus to calendar body.\n *\n * @defaultValue false\n */\n readonly initialFocus = input(false);\n /**\n * Disabled the optional visible time picker.\n *\n * @defaultValue false\n */\n readonly disabledTime = model(false);\n /**\n * Object to configure the datepicker.\n *\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly config = model<DatepickerConfig>({});\n /**\n * Aria label for the previous button. Needed for a11y.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.PREVIOUS:Previous`)\n * ```\n */\n readonly previousLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.PREVIOUS:Previous`)\n );\n /**\n * Aria label for the next button. Needed for a11y.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.NEXT:Next`)\n * ```\n */\n readonly nextLabel = input<TranslatableString>(t(() => $localize`:@@SI_DATEPICKER.NEXT:Next`));\n /**\n * Aria label for week number column\n *\n * @deprecated Use `calendarWeekLabel` instead.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_WEEK_LABEL:Calendar week`)\n * ```\n */\n readonly calenderWeekLabel = input<TranslatableString>();\n /**\n * Aria label for week number column\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_WEEK_LABEL:Calendar week`)\n * ```\n */\n readonly calendarWeekLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.CALENDAR_WEEK_LABEL:Calendar week`)\n );\n protected readonly derivedWeekLabel = computed(\n () => this.calenderWeekLabel() ?? this.calendarWeekLabel()\n );\n /**\n * Enable/disable 12H mode in timepicker. Defaults to locale\n *\n * @defaultValue undefined\n */\n readonly time12h = input<boolean | undefined, unknown>(undefined, {\n transform: booleanAttribute\n });\n /**\n * Use this to force date range operation to select either start date or end date.\n *\n * @defaultValue 'START'\n */\n readonly rangeType = model<RangeType>('START');\n\n /**\n * Optional input to control the minimum month the datepicker can show and the user can navigate.\n * The `minMonth` can be larger than the `minDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows a earlier month the the more right one.\n * @internal\n */\n readonly minMonth = input<Date>();\n /**\n * Optional input to control the maximum month the datepicker can show and the user can navigate.\n * The `maxMonth` can be smaller than the `maxDate` This option enables the usage of multiple\n * datepickers next to each other while the more left calendar always\n * shows a earlier month the the more right one.\n * @internal\n */\n readonly maxMonth = input<Date>();\n /**\n * Option to hide the time switch.\n *\n * @defaultValue false\n */\n readonly hideTimeToggle = input(false);\n /** @internal */\n readonly hideCalendar = input(false);\n /**\n * Optional timepicker label.\n */\n readonly timepickerLabel = input<string>();\n\n protected get startDate(): Date | undefined {\n return this.config().enableDateRange ? this.dateRange()?.start : this.date();\n }\n\n protected get endDate(): Date | undefined {\n return this.config().enableDateRange ? this.dateRange()?.end : undefined;\n }\n /**\n * Returns the date object if not range selection is enabled. Otherwise, if\n * the date range role is 'END', the date range end date is returned. If\n * date range role is not 'END', the date range start date is returned.\n */\n private getRelevantDate(): Date | undefined {\n return !this.config().enableDateRange\n ? this.date()\n : this.dateRangeRole() === 'END'\n ? this.dateRange()?.end\n : this.dateRange()?.start;\n }\n\n private readonly defaultDisabledTimeText = t(\n () => $localize`:@@SI_DATEPICKER.DISABLED_TIME_TEXT:Ignore time`\n );\n private readonly defaultEnableTimeText = t(\n () => $localize`:@@SI_DATEPICKER.ENABLED_TIME_TEXT:Consider time`\n );\n\n protected readonly includeTimeLabel = computed(() =>\n this.disabledTime()\n ? (this.config().disabledTimeText ?? this.defaultDisabledTimeText)\n : (this.config().enabledTimeText ?? this.defaultEnableTimeText)\n );\n\n protected get weekStartDay(): WeekStart {\n return this.config().weekStartDay ?? this.localeWeekStart;\n }\n\n protected get hideWeekNumbers(): boolean {\n return this.config().hideWeekNumbers ?? false;\n }\n\n /**\n * The active view\n */\n protected readonly view = signal<ViewType>('week');\n /**\n * Get the current shown view.\n */\n private readonly activeView = computed(() => {\n switch (this.view()) {\n case 'month':\n return this.monthSelection();\n case 'year':\n return this.yearSelection();\n default:\n return this.daySelection();\n }\n });\n\n protected readonly actualFocusedDate = computed(() => this.focusedDate() ?? today());\n protected readonly requireFocus = signal(this.initialFocus());\n /** When the user switch from the year or month view via keyboard selection we force the focus. */\n protected readonly forceFocus = computed(() => this.requireFocus() || this.initialFocus());\n protected months: string[] = [];\n protected switchId = `__si-datepicker-switch-id-${idCounter++}`;\n protected timepickerId = `__si-datepicker-timepicker-id-${idCounter++}`;\n\n /**\n * Configuration which view shall be shown after year selection,\n * when onlyMonthSelection is enabled the month view is shown otherwise the week view.\n */\n protected yearViewSwitchTo: 'month' | 'week' = 'week';\n protected monthViewSwitchTo: 'month' | 'week' = 'week';\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly localeWeekStart: WeekStart;\n /**\n * Date object to track and change the time. Keeping time and date\n * in separate objects to not change the date when flipping time.\n * After change, a new date object is created with an adapted time.\n */\n protected time = new FormControl<Date | undefined>(undefined, {\n validators: [control => this.validateTime(control)],\n nonNullable: true\n });\n /**\n * Used to hold the last time when setting the time to disabled.\n * Value will be reset on enabling the time again.\n */\n private previousTime?: Date;\n\n /** Reference to the current day selection component. Shown when view === 'week' */\n private readonly daySelection = viewChild(SiDaySelectionComponent);\n /** Reference to the current month selection component. Shown when view === 'month' */\n private readonly monthSelection = viewChild(SiMonthSelectionComponent);\n /** Reference to the current year selection component. Shown when view === 'year' */\n private readonly yearSelection = viewChild(SiYearSelectionComponent);\n\n /**\n * The cell which which has the mouse hover.\n * @internal\n */\n readonly activeHover = model<Cell>();\n\n constructor() {\n this.initCalendarLabels();\n\n const weekStart = getLocaleFirstDayOfWeek(this.locale);\n this.localeWeekStart =\n weekStart === WeekDay.Sunday\n ? 'sunday'\n : weekStart === WeekDay.Saturday\n ? 'saturday'\n : 'monday';\n effect(() => {\n if (this.disabledTime()) {\n this.time.disable({ emitEvent: false });\n } else {\n this.time.enable({ emitEvent: false });\n }\n });\n this.time.valueChanges.subscribe((newTime?: Date) => this.timeSelected(newTime));\n }\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n const config = this.config();\n if (changes.date && !config.enableDateRange) {\n if (this.date() && !isValid(this.date())) {\n this.date.set(undefined);\n }\n const date = this.date();\n if (date) {\n if (changes.date.isFirstChange()) {\n this.previousTime = new Date(date);\n this.time.setValue(date, { emitEvent: false });\n }\n if (this.time.value?.getTime() !== date?.getTime()) {\n this.time.setValue(date, { emitEvent: false });\n }\n this.focusedDate.set(date);\n }\n }\n\n if (changes.config?.currentValue?.disabledTime) {\n this.disabledTime.set(changes.config?.currentValue?.disabledTime);\n this.onDisabledTimeChanged();\n }\n\n if (changes.config?.firstChange) {\n if (config.onlyMonthSelection) {\n this.yearViewSwitchTo = 'month';\n this.monthViewSwitchTo = 'month';\n this.view.set('month');\n }\n }\n\n // Date-range input field has changed\n if (changes.dateRange) {\n // Ensure the dateRange object only contain valid start/end dates\n const dateRange = this.dateRange();\n if (dateRange) {\n if (!isValid(dateRange?.start)) {\n dateRange!.start = undefined;\n }\n if (!isValid(dateRange?.end)) {\n dateRange!.end = undefined;\n }\n }\n\n // Only one calendar is used when no dateRangeRole is available.\n const dateRangeRole = this.dateRangeRole();\n if (!dateRangeRole) {\n const previous: DateRange | undefined = changes.dateRange.previousValue;\n if (dateRange?.end && !isSameDate(dateRange.end, previous?.end)) {\n this.focusedDate.set(dateRange.end);\n }\n if (dateRange?.start && !isSameDate(dateRange.start, previous?.start)) {\n this.focusedDate.set(dateRange!.start);\n }\n } else {\n // Date range selection with two calendars\n const newDate = dateRangeRole === 'START' ? dateRange?.start : dateRange?.end;\n\n if (newDate && changes.dateRange.isFirstChange()) {\n this.previousTime = new Date(newDate);\n this.time.setValue(newDate, { emitEvent: false });\n }\n }\n }\n if (\n changes.minMonth?.currentValue &&\n isAfter(changes.minMonth.currentValue, this.actualFocusedDate())\n ) {\n this.focusedDate.set(changes.minMonth.currentValue);\n }\n if (\n changes.maxMonth?.currentValue &&\n isAfter(this.actualFocusedDate(), changes.maxMonth.currentValue)\n ) {\n this.focusedDate.set(changes.maxMonth.currentValue);\n }\n }\n\n ngOnInit(): void {\n const config = this.config();\n const dateRange = this.dateRange();\n const dateRangeRole = this.dateRangeRole();\n if (config.enableDateRange && this.rangeType() === 'END' && dateRange?.end && !dateRangeRole) {\n // The user chose to trigger the datepicker from the date-range end, in this\n // case we\n this.focusedDate.set(dateRange.end);\n } else if (config.enableDateRange && dateRangeRole === 'START') {\n const maxMonth = config?.onlyMonthSelection ? this.maxMonth() : config.maxDate;\n this.focusedDate.set(\n getDateSameOrBetween(\n dateRange?.start ? dateRange!.start : (this.focusedDate() ?? today()),\n config.minDate,\n maxMonth\n )\n );\n } else if (config.enableDateRange && dateRangeRole === 'END') {\n const minMonth = config?.onlyMonthSelection ? this.minMonth() : config.minDate;\n this.focusedDate.set(\n getDateSameOrBetween(\n dateRange?.end ? dateRange!.end : (this.focusedDate() ?? today()),\n minMonth,\n config.maxDate\n )\n );\n } else {\n this.focusedDate.set(\n getDateSameOrBetween(\n isValid(this.startDate) ? this.startDate : (this.focusedDate() ?? today()),\n config.minDate,\n config.maxDate\n )\n );\n }\n }\n\n ngAfterViewInit(): void {\n // After the view is created the first time we want that the children components set\n // the focus to the calendarBody. Means when we select a date in month-selection,\n // the day selection shall focus automatically the day in calendarBody.\n setTimeout(() => this.requireFocus.set(true));\n }\n\n /** Initialize day and month labels */\n private initCalendarLabels(): void {\n this.months = getLocaleMonthNames(this.locale.toString());\n }\n\n /**\n * Validates and sets a new date to the this.date model object of this component\n * and fires the related events. The model object shall not be updated elsewhere\n * with a new date object. Shall only be called on simple date selection and not\n * on date range selection.\n *\n * @param newDate - The new date to be set.\n */\n private setDate(newDate: Date): void {\n const dateWithoutTime = getDateWithoutTime(newDate);\n const config = this.config();\n const validForMinDate = !(\n config?.minDate && dateWithoutTime < getDateWithoutTime(config.minDate)\n );\n const configValue = this.config();\n const validForMaxDate = !(\n configValue?.maxDate && dateWithoutTime > getDateWithoutTime(configValue.maxDate)\n );\n const date = this.date();\n if (date !== newDate && validForMinDate && validForMaxDate) {\n const previousValue = date;\n this.date.set(newDate);\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.ngOnChanges({\n date: new SimpleChange(previousValue, date, previousValue === undefined)\n } as SimpleChanges<this>);\n //this.dateChange.emit(date);\n } else if (!validForMinDate || !validForMaxDate) {\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.ngOnChanges({ date: new SimpleChange(undefined, date, true) } as SimpleChanges<this>);\n }\n\n this.cdRef.markForCheck();\n }\n\n /**\n * Validates and sets the new date range to the dateRange model\n * object.\n * @param newDateRange - The new range to be set.\n * @returns True if the new range is valid and set. Otherwise false.\n */\n private setDateRange(newDateRange: DateRange): boolean {\n const config = this.config();\n if (newDateRange.start) {\n const isValidRange = isSameOrBetween(newDateRange.start, config?.minDate, config?.maxDate);\n if (!isValidRange) {\n return false;\n }\n }\n if (newDateRange.end) {\n const isValidRange = isSameOrBetween(newDateRange.end, config?.minDate, config?.maxDate);\n if (!isValidRange) {\n return false;\n }\n }\n\n this.dateRange.set(newDateRange);\n return true;\n }\n\n protected timeSelected(newTime?: Date): void {\n if (newTime == null) {\n return;\n }\n\n this.previousTime = this.time.value;\n this.time.setValue(newTime, { emitEvent: false });\n\n const oldDate = this.getRelevantDate() ?? new Date();\n let newDate: Date;\n if (this.disabledTime()) {\n // if time is disabled, ensure that 00:00:00 is displayed in any timezone\n newDate = createDate(oldDate);\n this.time.setValue(newDate, { emitEvent: false });\n } else {\n newDate = createDate(\n oldDate,\n newTime.getHours(),\n newTime.getMinutes(),\n newTime.getSeconds(),\n newTime.getMilliseconds()\n );\n }\n if (!this.config().enableDateRange) {\n this.setDate(newDate);\n } else {\n const newDateRange =\n this.dateRangeRole() === 'START'\n ? { start: newDate, end: this.dateRange()?.end }\n : { start: this.dateRange()?.start, end: newDate };\n this.setDateRange(newDateRange);\n }\n }\n\n protected toggleDisabledTime(): void {\n this.disabledTime.update(previous => !previous);\n this.config.update(c => {\n c.disabledTime = this.disabledTime();\n return c;\n });\n this.onDisabledTimeChanged();\n }\n\n private onDisabledTimeChanged(): void {\n if (!this.config().enableDateRange) {\n if (this.disabledTime()) {\n const date = this.date() ?? new Date();\n const newTime = new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0)\n );\n this.timeSelected(newTime);\n } else if (this.previousTime) {\n this.timeSelected(this.previousTime);\n } else {\n this.timeSelected(new Date());\n }\n }\n }\n\n private validateTime(control: AbstractControl): ValidationErrors | null {\n const config = this.config();\n const errors: ValidationErrors = {};\n if (!this.disabledTime() && config.enableTimeValidation && control.value) {\n if (config.minDate && control.value < config.minDate) {\n errors.minDate = { requiredDate: config.minDate, actual: control.value };\n } else if (config.maxDate && control.value > config.maxDate) {\n errors.maxDate = { requiredDate: config.maxDate, actual: control.value };\n }\n }\n\n return Object.keys(errors).length ? errors : null;\n }\n\n /**\n * Handle selection in the day view.\n * @param selection - selected date.\n */\n protected selectionChange(selection: Date): void {\n const time = this.time.value;\n const newDate = createDate(\n selection,\n time?.getHours(),\n time?.getMinutes(),\n time?.getSeconds(),\n time?.getMilliseconds()\n );\n if (this.config().enableDateRange) {\n const rangeType = this.rangeType();\n let newDateRange: DateRange =\n !rangeType || rangeType === 'START'\n ? { start: newDate, end: undefined }\n : { start: this.dateRange()?.start, end: newDate };\n let newRangeType: RangeType = !rangeType || rangeType === 'START' ? 'START' : 'END';\n\n // The user selected a date before the current range start. Now the clicked day\n // is used as new start and the end is cleared\n if (newDateRange.start && newDateRange.end && newDateRange.end < newDateRange.start) {\n newDateRange = { start: newDateRange.end, end: undefined };\n newRangeType = 'START'; // Switch back to start so that the next selection is end\n }\n\n // Reset end range when we started start\n if (newRangeType === 'START' && newDateRange.end) {\n newDateRange.end = undefined;\n }\n\n const rangeValid = this.setDateRange(newDateRange);\n\n if (rangeValid) {\n // Toggle rangeType every time the user uses the datepicker to change the range\n this.rangeType.set(newRangeType === 'START' ? 'END' : 'START');\n }\n } else {\n this.focusedDate.set(newDate);\n this.setDate(newDate);\n }\n }\n\n /**\n * Handle month/year changes\n * @param selection - the selected month or null of cancelled.\n */\n protected activeMonthChange(selection: Date | null): void {\n if (selection) {\n this.focusedDate.set(changeDay(selection, this.actualFocusedDate().getDate()));\n const config = this.config();\n if (config.onlyMonthSelection) {\n if (config.enableDateRange) {\n this.selectionChange(selection);\n } else {\n this.setDate(selection);\n }\n }\n }\n this.view.set(this.monthViewSwitchTo);\n }\n\n /**\n * Handle year changes\n * @param selection - the selected year or null of cancelled.\n */\n protected activeYearChange(selection: Date | null): void {\n if (selection) {\n selection.setMonth(this.actualFocusedDate().getMonth());\n this.focusedDate.set(changeDay(selection, this.actualFocusedDate().getDate()));\n }\n this.view.set(this.yearViewSwitchTo);\n }\n\n /**\n * Focus the active cell in view.\n * The function is required to transfer the focus from input to the active date cell.\n */\n focusActiveCell(): void {\n this.activeView()?.focusActiveCell();\n }\n\n protected onActiveHoverChange(event?: Cell): void {\n this.activeHover.set(event);\n }\n}\n","@if (!hideCalendar()) {\n <div class=\"text-center pb-6 calendar\">\n @switch (view()) {\n @case ('year') {\n <si-year-selection\n [focusedDate]=\"actualFocusedDate()\"\n [startDate]=\"startDate\"\n [endDate]=\"endDate\"\n [minDate]=\"config().minDate\"\n [maxDate]=\"config().maxDate\"\n [minMonth]=\"minMonth()\"\n [maxMonth]=\"maxMonth()\"\n [isRangeSelection]=\"config().enableDateRange!\"\n [previousLabel]=\"previousLabel() | translate\"\n [nextLabel]=\"nextLabel() | translate\"\n (selectedValueChange)=\"activeYearChange($event)\"\n />\n }\n @case ('month') {\n <si-month-selection\n [startDate]=\"startDate\"\n [endDate]=\"endDate\"\n [months]=\"months\"\n [minDate]=\"config().minDate\"\n [maxDate]=\"config().maxDate\"\n [minMonth]=\"minMonth()\"\n [maxMonth]=\"maxMonth()\"\n [isRangeSelection]=\"config().enableDateRange!\"\n [previewRange]=\"rangeType() === 'END'\"\n [previousLabel]=\"previousLabel() | translate\"\n [nextLabel]=\"nextLabel() | translate\"\n [activeHover]=\"activeHover()\"\n [focusedDate]=\"actualFocusedDate()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (focusedDateChange)=\"focusedDate.set($event)\"\n (selectedValueChange)=\"activeMonthChange($event)\"\n (viewChange)=\"view.set($event)\"\n />\n }\n @case ('week') {\n <si-day-selection\n [initialFocus]=\"forceFocus()\"\n [startDate]=\"startDate\"\n [endDate]=\"dateRange()?.end\"\n [isRangeSelection]=\"config().enableDateRange!\"\n [previewRange]=\"rangeType() === 'END'\"\n [hideWeekNumbers]=\"hideWeekNumbers\"\n [minDate]=\"config().minDate\"\n [maxDate]=\"config().maxDate\"\n [minMonth]=\"minMonth()\"\n [weekStartDay]=\"weekStartDay\"\n [calendarWeekLabel]=\"derivedWeekLabel()\"\n [previousLabel]=\"previousLabel() | translate\"\n [nextLabel]=\"nextLabel() | translate\"\n [todayLabel]=\"config().todayText\"\n [activeHover]=\"activeHover()\"\n [focusedDate]=\"actualFocusedDate()\"\n (activeHoverChange)=\"onActiveHoverChange($event)\"\n (focusedDateChange)=\"focusedDate.set($event)\"\n (selectedValueChange)=\"selectionChange($event!)\"\n (viewChange)=\"view.set($event)\"\n />\n }\n }\n </div>\n}\n@if (this.config().showTime) {\n <div\n class=\"timepicker-container px-9 pb-6\"\n [class.pt-6]=\"!hideCalendar()\"\n [class.border-top]=\"!hideCalendar()\"\n >\n @if (!config().mandatoryTime && !hideTimeToggle()) {\n <div class=\"mb-5 form-check form-switch\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n role=\"switch\"\n [id]=\"switchId\"\n [checked]=\"!disabledTime()\"\n (change)=\"toggleDisabledTime()\"\n />\n <label class=\"form-check-label\" [for]=\"switchId\">{{\n includeTimeLabel() | translate\n }}</label>\n </div>\n }\n <div class=\"mt-auto\">\n @if (timepickerLabel()) {\n <label class=\"form-label\" [for]=\"timepickerId\">{{ timepickerLabel() | translate }}</label>\n }\n <si-timepicker\n #timePicker\n [id]=\"timepickerId\"\n [formControl]=\"time\"\n [hoursLabel]=\"config().hoursLabel ?? timePicker.hoursLabel()\"\n [minutesLabel]=\"config().minutesLabel ?? timePicker.minutesLabel()\"\n [secondsLabel]=\"config().secondsLabel ?? timePicker.secondsLabel()\"\n [millisecondsLabel]=\"config().millisecondsLabel ?? timePicker.millisecondsLabel()\"\n [hideLabels]=\"config().hideLabels ?? timePicker.hideLabels()\"\n [hoursAriaLabel]=\"config().hoursAriaLabel ?? timePicker.hoursAriaLabel()\"\n [minutesAriaLabel]=\"config().minutesAriaLabel ?? timePicker.minutesAriaLabel()\"\n [secondsAriaLabel]=\"config().secondsAriaLabel ?? timePicker.secondsAriaLabel()\"\n [millisecondsAriaLabel]=\"\n config().millisecondsAriaLabel ?? timePicker.millisecondsAriaLabel()\n \"\n [hoursPlaceholder]=\"config().hoursPlaceholder ?? timePicker.hoursPlaceholder()\"\n [minutesPlaceholder]=\"config().minutesPlaceholder ?? timePicker.minutesPlaceholder()\"\n [secondsPlaceholder]=\"config().secondsPlaceholder ?? timePicker.secondsPlaceholder()\"\n [millisecondsPlaceholder]=\"\n config().millisecondsPlaceholder ?? timePicker.millisecondsPlaceholder()\n \"\n [meridians]=\"config().meridians ?? timePicker.meridians()\"\n [meridiansLabel]=\"config().meridiansLabel ?? timePicker.meridiansLabel()\"\n [meridiansAriaLabel]=\"config().meridiansAriaLabel ?? timePicker.meridiansAriaLabel()\"\n [showMinutes]=\"config().showMinutes ?? true\"\n [showSeconds]=\"config().showSeconds ?? false\"\n [showMilliseconds]=\"config().showMilliseconds ?? false\"\n [showMeridian]=\"time12h()\"\n />\n </div>\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n A11yModule,\n ConfigurableFocusTrap,\n ConfigurableFocusTrapFactory,\n FocusMonitor\n} from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n signal,\n SimpleChanges,\n viewChild,\n DOCUMENT\n} from '@angular/core';\n\nimport { Cell } from './components/si-calendar-body.component';\nimport { isValid, nextMonth, previousMonth } from './date-time-helper';\nimport { SiDatepickerComponent } from './si-datepicker.component';\nimport { DatepickerConfig, DateRange } from './si-datepicker.model';\n\n@Component({\n selector: 'si-datepicker-overlay',\n imports: [SiDatepickerComponent, A11yModule],\n template: `\n <si-datepicker\n #datepicker\n tabindex=\"-1\"\n [initialFocus]=\"initialFocus()\"\n [config]=\"firstDatepickerConfig()\"\n [class.first-datepicker]=\"isTwoMonthDateRange() && !isMobile()\"\n [class.first-datepicker-mobile]=\"isTwoMonthDateRange() && isMobile()\"\n [date]=\"date()\"\n [dateRange]=\"dateRange()\"\n [dateRangeRole]=\"isTwoMonthDateRange() ? 'START' : undefined\"\n [time12h]=\"time12h()\"\n [timepickerLabel]=\"firstDatepickerConfig().startTimeLabel\"\n [maxMonth]=\"maxMonth()\"\n [rangeType]=\"rangeType()\"\n [(activeHover)]=\"activeHover\"\n (dateChange)=\"date.set($event)\"\n (dateRangeChange)=\"dateRange.set($event)\"\n (disabledTimeChange)=\"disableTime.set($event); disabledTimeChange.emit($event)\"\n (focusedDateChange)=\"firstDatepickerFocusDateChange($event)\"\n (rangeTypeChange)=\"rangeType.set($event)\"\n />\n @if (isTwoMonthDateRange()) {\n <si-datepicker\n #datepickerTwo\n class=\"mh-100 overflow-auto\"\n tabindex=\"-1\"\n dateRangeRole=\"END\"\n [class.second-datepicker]=\"!isMobile()\"\n [class.second-datepicker-mobile]=\"isMobile()\"\n [hideTimeToggle]=\"true\"\n [initialFocus]=\"initialFocus()\"\n [config]=\"secondDatepickerConfig()\"\n [date]=\"date()\"\n [hideCalendar]=\"isMobile()\"\n [minMonth]=\"minMonth()\"\n [dateRange]=\"dateRange()\"\n [disabledTime]=\"disableTime()\"\n [time12h]=\"time12h()\"\n [timepickerLabel]=\"secondDatepickerConfig().endTimeLabel\"\n [rangeType]=\"rangeType()\"\n [(activeHover)]=\"activeHover\"\n (dateRangeChange)=\"dateRange.set($event)\"\n (focusedDateChange)=\"secondDatepickerFocusDateChange($event)\"\n (rangeTypeChange)=\"rangeType.set($event)\"\n />\n }\n `,\n styleUrl: './si-datepicker-overlay.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mt-md-1 d-flex elevation-2 rounded-2 overflow-auto align-items-stretch',\n '[class.flex-wrap]': 'isMobile()',\n '[class.mobile-datepicker-overlay]': 'isMobile()',\n '[class.fade]': 'isMobile()',\n '[class.show]': 'completeAnimation()'\n }\n})\nexport class SiDatepickerOverlayComponent implements OnChanges, OnInit, OnDestroy {\n protected readonly minMonth = signal<Date | undefined>(undefined);\n protected readonly maxMonth = signal<Date | undefined>(undefined);\n\n protected readonly datepicker = viewChild.required(SiDatepickerComponent);\n /**\n * {@inheritDoc SiDatepickerComponent#initialFocus}\n * @defaultValue false\n */\n readonly initialFocus = input(false, { transform: booleanAttribute });\n /**\n * {@inheritDoc SiDatepickerComponent#config}\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly config = input<DatepickerConfig>({});\n /**\n * {@inheritDoc SiDatepickerComponent#date}\n */\n readonly date = model<Date>();\n /**\n * {@inheritDoc SiDatepickerComponent#dateRange}\n */\n readonly dateRange = model<DateRange>();\n /**\n * {@inheritDoc SiDatepickerComponent#rangeType}\n */\n readonly rangeType = model<'START' | 'END'>();\n /**\n * {@inheritDoc SiDatepickerComponent#time12h}\n * @defaultValue false\n */\n readonly time12h = input(false, { transform: booleanAttribute });\n /**\n * Emits an event to notify about disabling the time from the datepicker.\n * When time is disable, we construct a pure date object in UTC 00:00:00 time.\n */\n readonly disabledTimeChange = output<boolean>();\n\n private readonly document = inject(DOCUMENT);\n private readonly elementRef = inject(ElementRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n private focusTrap?: ConfigurableFocusTrap;\n private previousActiveElement?: Element | HTMLElement;\n protected readonly disableTime = signal(false);\n protected readonly activeHover = signal<Cell | undefined>(undefined);\n protected readonly isTwoMonthDateRange = computed(\n () =>\n !!this.config().enableDateRange &&\n (!!this.config().enableTwoMonthDateRange || !!this.config().showTime)\n );\n protected readonly firstDatepickerConfig = signal<DatepickerConfig>({});\n protected readonly secondDatepickerConfig = signal<DatepickerConfig>({});\n /**\n * Indicate that the overlay is opened in small screen.\n * A modal dialog animation display when true and a wrapped two month calendar layout is displayed.\n *\n * @defaultValue false\n */\n readonly isMobile = input(false);\n\n protected readonly completeAnimation = signal(false);\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.config) {\n const config = this.config();\n\n this.firstDatepickerConfig.set(\n !this.isTwoMonthDateRange() ? config : { ...config, hideLabels: true }\n );\n\n this.secondDatepickerConfig.set({ ...config, hideLabels: true });\n }\n\n const dateRange = this.dateRange();\n if (\n changes.config?.currentValue?.onlyMonthSelection &&\n this.isTwoMonthDateRange() &&\n dateRange?.start\n ) {\n this.minMonth.set(new Date(dateRange?.start.getFullYear(), 0, 1));\n }\n\n this.rangeType.set('START');\n if (\n isValid(changes.dateRange?.currentValue?.start) &&\n !isValid(changes.dateRange?.currentValue?.end)\n ) {\n this.rangeType.set('END');\n }\n }\n\n ngOnInit(): void {\n this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);\n this.previousActiveElement = this.document.activeElement ?? undefined;\n if (this.isMobile()) {\n setTimeout(() => this.completeAnimation.set(true), 150);\n }\n }\n\n ngOnDestroy(): void {\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.focusTrap?.destroy();\n if (this.initialFocus() && this.previousActiveElement && 'focus' in this.previousActiveElement)\n this.previousActiveElement.focus();\n }\n\n /**\n * Focus active cell in the current datepicker view.\n */\n focusActiveCell(): void {\n this.datepicker().focusActiveCell();\n }\n\n protected firstDatepickerFocusDateChange(newFocusedDate?: Date): void {\n if (!newFocusedDate) {\n return;\n }\n if (this.config()?.onlyMonthSelection) {\n this.minMonth.set(new Date(newFocusedDate.getFullYear() + 1, 0, 1));\n } else if (newFocusedDate !== this.maxMonth()) {\n this.minMonth.set(nextMonth(newFocusedDate));\n }\n }\n\n protected secondDatepickerFocusDateChange(newFocusedDate?: Date): void {\n if (newFocusedDate && newFocusedDate !== this.minMonth()) {\n if (this.config()?.onlyMonthSelection) {\n this.maxMonth.set(new Date(newFocusedDate.getFullYear() - 1, 11, 31));\n } else {\n this.maxMonth.set(previousMonth(newFocusedDate));\n }\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { BreakpointObserver, MediaMatcher } from '@angular/cdk/layout';\nimport { ConnectionPositionPair, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n OnDestroy,\n output,\n signal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';\nimport { asapScheduler, merge, Observable, Subject } from 'rxjs';\nimport { filter, map, observeOn, skip, takeUntil, tap } from 'rxjs/operators';\n\nimport { SiDatepickerOverlayComponent } from './si-datepicker-overlay.component';\nimport { DatepickerConfig, DateRange } from './si-datepicker.model';\n\n// eslint-disable-next-line no-restricted-syntax\nexport enum CloseCause {\n Backdrop = 'backdrop',\n Detach = 'detach',\n Escape = 'escape',\n Select = 'select'\n}\n\nexport type DatepickerInput = {\n config: DatepickerConfig;\n date: Date;\n dateRange: DateRange;\n rangeType: 'START' | 'END';\n time12h: boolean;\n showTime: true;\n};\n\n/** Partial datepicker inputs */\nexport type DatepickerInputPartial = Partial<DatepickerInput>;\n\n/**\n * Directive with the responsibility to open/close datepicker overlay.\n */\n@Directive({\n selector: '[siDatepickerOverlay]',\n exportAs: 'siDatepickerOverlay'\n})\nexport class SiDatepickerOverlayDirective implements OnDestroy {\n /**\n * Position of the datepicker overlay. Accepts an array of positions or a single position.\n * The position will be chosen based on the first position that fits into the viewport.\n * The input is necessary since the positions between the siDatepicker directive and si-date-range\n * component are different.\n * @internal\n */\n readonly placement = signal<ConnectionPositionPair[]>([\n {\n overlayX: 'start',\n overlayY: 'top',\n originX: 'start',\n originY: 'bottom'\n },\n {\n overlayX: 'start',\n overlayY: 'bottom',\n originX: 'start',\n originY: 'top'\n }\n ]);\n /**\n * Output event on closing datepicker e.g. by clicking backdrop or escape key.\n */\n readonly siDatepickerClose = output<CloseCause>();\n\n private overlayRef?: OverlayRef;\n private datepickerRef?: ComponentRef<SiDatepickerOverlayComponent>;\n private autoCloseSelection = new Subject<void>();\n /** Guard for siDatepickerClose event emitter to make sure the cause is emitter just once */\n private ignoreClose = false;\n private readonly overlay = inject(Overlay);\n private readonly triggerElementRef = inject(ElementRef);\n private readonly mediaMatcher = inject(MediaMatcher);\n private readonly breakpointObserver = inject(BreakpointObserver);\n private readonly destroyRef = inject(DestroyRef);\n /**\n * When the media query matches on open the overlay is displayed like a modal dialog.\n * In case, users change the screen size to the matching media query we close the overlay\n * if it is open with a connected overlay strategy.\n */\n private readonly smallScreenQuery = `(max-width: ${BOOTSTRAP_BREAKPOINTS.mdMinimum}px) or (max-height: ${BOOTSTRAP_BREAKPOINTS.smMinimum}px)`;\n\n ngOnDestroy(): void {\n this.overlayRef?.dispose();\n this.datepickerRef = undefined;\n }\n\n /**\n * Show datepicker overlay.\n * @param focus - move focus to the datepicker.\n * @returns create datepicker overlay instance\n */\n showOverlay(\n focus = false,\n inputs?: DatepickerInputPartial\n ): ComponentRef<SiDatepickerOverlayComponent> {\n return this.showDatepicker().setInputs(inputs).focus(focus).datepickerRef!;\n }\n\n /**\n * Close datepicker.\n */\n closeOverlay(): undefined {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef?.detach();\n this.overlayRef?.dispose();\n }\n this.datepickerRef = undefined;\n return undefined;\n }\n\n /**\n * Focus active cell in datepicker.\n * @param focus - show transfer focus.\n * @returns current instance.\n */\n focus(focus = true): this {\n if (focus) {\n this.datepickerRef?.setInput('initialFocus', true);\n this.datepickerRef?.instance.focusActiveCell();\n this.datepickerRef?.changeDetectorRef.markForCheck();\n }\n return this;\n }\n\n /**\n * Indicate the datepicker is visible.\n * @returns is visible.\n */\n isShown(): ComponentRef<SiDatepickerOverlayComponent> | undefined {\n return this.datepickerRef;\n }\n\n /** Set datepicker inputs */\n setInputs(inputs?: DatepickerInputPartial): this {\n if (this.datepickerRef && inputs) {\n Object.entries(inputs).forEach(([key, value]) => {\n this.datepickerRef!.setInput(key.toString(), value);\n });\n }\n return this;\n }\n\n /** Close overlay with cause select, which will recover the focus */\n closeAfterSelection(): void {\n this.autoCloseSelection.next();\n }\n\n /** Indicate whether the HTML element is a child of the datepicker overlay. */\n contains(element: HTMLElement): boolean {\n if (!element) {\n return false;\n }\n return this.overlayRef?.overlayElement?.contains(element) ?? false;\n }\n\n private showDatepicker(): this {\n if (this.overlayRef?.hasAttached()) {\n return this;\n }\n\n // Since the connected overlay strategy has some limitations in small screens e.g.\n // the overlay is moved via style top without recalculating the (max)height which\n // can result in a cut of time picker.\n // To overcome this issue the overlay use the global position strategy in small screens.\n const smallScreen = this.mediaMatcher.matchMedia(this.smallScreenQuery).matches;\n if (smallScreen) {\n this.createMobileOverlay();\n } else {\n this.createDesktopOverlay();\n }\n\n this.closeStream(this.overlayRef!)\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n takeUntil(outputToObservable(this.siDatepickerClose))\n )\n .subscribe(cause => {\n // The handler is called multiple times since we need to listen to detach events\n if (this.datepickerRef && !this.ignoreClose) {\n this.ignoreClose = true;\n this.closeOverlay();\n this.ignoreClose = false;\n this.siDatepickerClose.emit(cause);\n }\n });\n\n const portal = new ComponentPortal(SiDatepickerOverlayComponent);\n this.datepickerRef = this.overlayRef!.attach(portal);\n if (smallScreen) {\n this.datepickerRef.setInput('isMobile', true);\n }\n\n // Automatically close the overlay if we reach the small screen breakpoint\n // and the picker does not use the global position strategy.\n this.breakpointObserver\n .observe(this.smallScreenQuery)\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n takeUntil(outputToObservable(this.siDatepickerClose)),\n skip(1)\n )\n .subscribe(() => this.closeOverlay());\n return this;\n }\n\n protected createMobileOverlay(): void {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n direction: isRTL() ? 'rtl' : 'ltr',\n hasBackdrop: true,\n backdropClass: 'modal-backdrop'\n });\n }\n\n protected createDesktopOverlay(): void {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.triggerElementRef)\n .withPositions(this.placement())\n .withPush(true)\n .withGrowAfterOpen(true)\n .withFlexibleDimensions(true)\n .withViewportMargin(4),\n direction: isRTL() ? 'rtl' : 'ltr',\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n }\n /**\n * Merge events which shall close the overlay\n * @param overlayRef - source for backdrop, detach or escape events.\n * @returns merged observable\n */\n private closeStream(overlayRef: OverlayRef): Observable<CloseCause> {\n return merge(\n this.autoCloseSelection.pipe(\n // We have to queue the close in the another cycle since other output event\n // emitters like rangeTypeChange can complete before we destroy the overlay.\n observeOn(asapScheduler),\n map(() => CloseCause.Select)\n ),\n overlayRef.backdropClick().pipe(map(() => CloseCause.Backdrop)),\n overlayRef.detachments().pipe(map(() => CloseCause.Detach)),\n overlayRef.keydownEvents().pipe(\n filter(event => event.key === 'Escape'),\n tap(event => event.stopPropagation()), // ESC handled, prevent closing modal, etc.\n map(() => CloseCause.Escape)\n )\n );\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterViewInit,\n booleanAttribute,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n inject,\n input\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SI_FORM_ITEM_CONTROL } from '@siemens/element-ng/form';\nimport { Subscription } from 'rxjs';\n\nimport { is12HourFormat } from './date-time-helper';\nimport { SiDateInputDirective } from './si-date-input.directive';\nimport { SiDatepickerOverlayComponent } from './si-datepicker-overlay.component';\nimport { SiDatepickerOverlayDirective } from './si-datepicker-overlay.directive';\n\n@Directive({\n selector: '[siDatepicker]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiDatepickerDirective,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiDatepickerDirective,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiDatepickerDirective\n }\n ],\n hostDirectives: [\n {\n directive: SiDatepickerOverlayDirective,\n outputs: ['siDatepickerClose']\n }\n ],\n exportAs: 'siDatepicker'\n})\nexport class SiDatepickerDirective extends SiDateInputDirective implements AfterViewInit {\n /**\n * Automatically close overlay on date selection.\n * Do not use this behavior with config showTime = true, because it\n * will close the overlay when the user change one of the time units.\n *\n * @defaultValue false\n */\n readonly autoClose = input(false, { transform: booleanAttribute });\n\n /**\n * During focus on close the datepicker will not show since we recover the focus on element.\n * The focus on close is only relevant when the directive is configured without a calendar button.\n */\n private overlaySubscriptions?: Subscription[];\n private externalTrigger?: ElementRef<HTMLElement>;\n private readonly overlayToggle = inject(SiDatepickerOverlayDirective);\n\n ngAfterViewInit(): void {\n // Update datepicker with new date value\n this.dateChange.subscribe(date => this.overlayToggle.setInputs({ date }));\n }\n\n /** @internal */\n touch(): void {\n this.onTouched();\n }\n\n /**\n * On click shall show datepicker.\n */\n @HostListener('click')\n protected onClick(): void {\n if (!this.externalTrigger) {\n this.show();\n }\n }\n\n /**\n * Focus out shall close the datepicker except we are moving the focus to the datepicker.\n * @param event - focus out event with the related target\n */\n protected override onBlur(event: FocusEvent): void {\n const target = event.relatedTarget as HTMLElement;\n if (!this.externalTrigger && !this.overlayToggle.contains(target)) {\n this.overlayToggle.closeOverlay();\n this.onTouched();\n }\n }\n\n @HostListener('keydown.tab')\n protected onTab(): void {\n if (this.overlayToggle.isShown()) {\n this.overlayToggle.closeOverlay();\n }\n }\n\n /**\n * @internal\n */\n public show(initialFocus = false): void {\n if (this.disabled() || this.readonly() || this.overlayToggle.isShown()) {\n return;\n }\n\n this.subscribeDateChanges(\n this.overlayToggle.showOverlay(initialFocus, {\n config: this.siDatepickerConfig(),\n date: this.date,\n time12h: is12HourFormat(this.locale, this.siDatepickerConfig() ?? {})\n })\n );\n }\n\n /**\n * @internal\n */\n public useExternalTrigger(element: ElementRef<HTMLElement>): void {\n this.externalTrigger = element;\n }\n\n @HostListener('focus')\n protected focusChange(): void {\n if (!this.externalTrigger) {\n this.show();\n }\n }\n\n private subscribeDateChanges(overlay?: ComponentRef<SiDatepickerOverlayComponent>): void {\n this.overlaySubscriptions?.forEach(s => s.unsubscribe());\n\n overlay?.instance.date.subscribe(d => this.onDateChanged(d));\n overlay?.instance.disabledTimeChange.subscribe(d => this.onDisabledTime(d));\n }\n\n /**\n * Callback when the datepicker changes his value.\n * @param date - updated date\n */\n protected override onDateChanged(date?: Date): void {\n // While typing a date can be invalid and the datepicker component will automatically change the date to undefined.\n // Since we don't want to reset the current input value it is necessary to ignore those updates.\n if (!date) {\n return;\n }\n super.onDateChanged(date);\n if (this.autoClose()) {\n this.overlayToggle.closeAfterSelection();\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n computed,\n ElementRef,\n HostAttributeToken,\n HostListener,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgModel,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { elementCalendar } from '@siemens/element-icons';\nimport {\n positionBottomCenter,\n positionBottomEnd,\n positionBottomStart,\n positionTopCenter,\n positionTopEnd,\n positionTopStart\n} from '@siemens/element-ng/common';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '@siemens/element-ng/form';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { is12HourFormat } from './date-time-helper';\nimport { SiDateInputDirective } from './si-date-input.directive';\nimport { SiDatepickerOverlayComponent } from './si-datepicker-overlay.component';\nimport { CloseCause, SiDatepickerOverlayDirective } from './si-datepicker-overlay.directive';\nimport { DatepickerInputConfig, DateRange } from './si-datepicker.model';\n\n@Component({\n selector: 'si-date-range',\n imports: [FormsModule, SiDateInputDirective, SiIconComponent, SiTranslatePipe, A11yModule],\n templateUrl: './si-date-range.component.html',\n styleUrl: './si-date-range.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiDateRangeComponent,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiDateRangeComponent,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiDateRangeComponent\n }\n ],\n host: {\n class: 'form-control d-flex align-items-center pe-2',\n role: 'group',\n '[class.disabled]': 'disabled()',\n '[class.readonly]': 'readonly()',\n '[attr.aria-labelledby]': 'labelledby'\n },\n hostDirectives: [\n {\n directive: SiDatepickerOverlayDirective,\n outputs: ['siDatepickerClose']\n }\n ]\n})\nexport class SiDateRangeComponent\n implements ControlValueAccessor, Validator, AfterViewInit, OnChanges, SiFormItemControl\n{\n private static idCounter = 0;\n private readonly inputDirectives = viewChildren(SiDateInputDirective);\n private readonly startInput = viewChild.required<NgModel>('startInput');\n private readonly endInput = viewChild.required<NgModel>('endInput');\n private readonly button = viewChild.required<ElementRef>('button');\n /**\n * @defaultValue\n * ```\n * `__si-date-range-${SiDateRangeComponent.idCounter++}`\n * ```\n */\n readonly id = input(`__si-date-range-${SiDateRangeComponent.idCounter++}`);\n\n readonly labelledby =\n inject(new HostAttributeToken('aria-labelledby'), {\n optional: true\n }) ?? `${this.id()}-label`;\n\n /**\n * Date range component configuration.\n *\n * @defaultValue\n * ```\n * { enableDateRange: true }\n * ```\n */\n readonly siDatepickerConfig = model<DatepickerInputConfig>({ enableDateRange: true });\n /**\n * Placeholder of the start date input.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.START_DATE_PLACEHOLDER:Start date`)\n * ```\n */\n readonly startDatePlaceholder = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.START_DATE_PLACEHOLDER:Start date`)\n );\n /**\n * Placeholder of the end date input.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.END_DATE_PLACEHOLDER:End date`)\n * ```\n */\n readonly endDatePlaceholder = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.END_DATE_PLACEHOLDER:End date`)\n );\n /**\n * Aria label of the date-range calendar toggle button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n * ```\n */\n readonly ariaLabelCalendarButton = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n );\n /**\n * Form label of the start timepicker.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.START_TIME_LABEL:from`)\n * ```\n */\n readonly startTimeLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.START_TIME_LABEL:from`)\n );\n /**\n * Form label of the start timepicker.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.END_TIME_LABEL:to`)\n * ```\n */\n readonly endTimeLabel = input<TranslatableString>(\n t(() => $localize`:@@SI_DATEPICKER.END_TIME_LABEL:to`)\n );\n /**\n * Automatically close overlay on date selection.\n *\n * @defaultValue false\n */\n readonly autoClose = input(false, { transform: booleanAttribute });\n /** Emits on the date range value changes. */\n readonly siDatepickerRangeChange = output<DateRange | undefined>();\n /**\n * Emits an event to notify about disabling the time from the range picker.\n * When time is disable, we construct a pure date objects in UTC 00:00:00 time.\n */\n readonly disabledTimeChange = output<boolean>();\n\n /**\n * Whether the date range input is disabled.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly disabledInput = input(false, { alias: 'disabled' });\n\n /**\n * Whether the date range input is readonly.\n *\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Set the date-range object displayed in the control.\n * The input can be used if the control is used outside Angular forms.\n */\n readonly value = model<DateRange>();\n\n /**\n * This ID will be bound to the `aria-describedby` attribute of the date-range.\n * Use this to reference the element containing the error message(s) for the date-range.\n * It will be picked by the {@link SiFormItemComponent} if the date-range is used inside a form item.\n *\n * @defaultValue\n * ```\n * `${this.id()}-errormessage`\n * ```\n */\n readonly errormessageId = input(`${this.id()}-errormessage`);\n\n private validator!: ValidatorFn;\n private onChange = (val: any): void => {};\n private onTouch = (): void => {};\n\n protected readonly icons = addIcons({ elementCalendar });\n protected readonly disabled = computed(() => this.disabledInput() || this.disabledNgControl());\n private readonly disabledNgControl = signal(false);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly locale = inject(LOCALE_ID).toString();\n private readonly overlayToggle = inject(SiDatepickerOverlayDirective);\n private readonly elementRef = inject(ElementRef);\n private readonly defaultPlacement = [\n positionBottomCenter,\n positionBottomStart,\n positionBottomEnd,\n positionTopCenter,\n positionTopStart,\n positionTopEnd\n ];\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.siDatepickerConfig) {\n this.siDatepickerConfig.set({\n ...changes.siDatepickerConfig.currentValue,\n enableDateRange: true,\n startTimeLabel:\n changes.siDatepickerConfig.currentValue.startTimeLabel ?? this.startTimeLabel(),\n endTimeLabel: changes.siDatepickerConfig.currentValue.endTimeLabel ?? this.endTimeLabel()\n });\n if (changes.value) {\n this.updateValue(this.value());\n }\n }\n this.overlayToggle.setInputs({ config: this.siDatepickerConfig(), dateRange: this.value() });\n }\n\n ngAfterViewInit(): void {\n this.validator = Validators.compose([\n () => this.endAfterStartValidator(),\n this.childValidation\n ])!;\n\n this.overlayToggle.placement.set(this.defaultPlacement);\n this.overlayToggle.siDatepickerClose.subscribe(cause => {\n if ([CloseCause.Escape, CloseCause.Select].includes(cause)) {\n this.button().nativeElement.focus();\n } else {\n // Mark component as touch when the focus isn't recovered on input\n this.onTouch();\n this.cdRef.markForCheck();\n }\n });\n }\n\n writeValue(dateRange: DateRange): void {\n this.updateValue(dateRange);\n this.overlayToggle.setInputs({ dateRange });\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledNgControl.set(isDisabled);\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n return this.validator ? this.validator(c) : null;\n }\n\n /**\n * Focus out shall close the datepicker except we are moving the focus to the datepicker or one of the input elements.\n * @param event - focus out event with the related target\n */\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n const target = event.relatedTarget as HTMLInputElement;\n if (!this.overlayToggle.contains(target)) {\n this.overlayToggle.closeOverlay();\n\n // Only mark the component as touched when the focus is not moved to the datepicker or one of the input elements.\n if (!this.elementRef.nativeElement.contains(target)) {\n this.onTouch();\n }\n }\n }\n\n /** Forward date range input changes to datepicker overlay */\n protected onInputChanged(dateRange: DateRange): void {\n this.updateValue(dateRange);\n\n this.onChange(this.value());\n this.siDatepickerRangeChange.emit(this.value());\n }\n\n protected show(): void {\n if (this.readonly() || this.disabled()) {\n return;\n }\n this.subscribeRangeChanges(\n this.overlayToggle.showOverlay(true, {\n config: this.siDatepickerConfig(),\n dateRange: this.value(),\n time12h: is12HourFormat(this.locale, this.siDatepickerConfig())\n })\n );\n }\n\n private subscribeRangeChanges(overlay?: ComponentRef<SiDatepickerOverlayComponent>): void {\n overlay?.instance.dateRange.subscribe(d => this.onRangeChanged(d));\n overlay?.instance.disabledTimeChange.subscribe(disabledTime => {\n this.inputDirectives().forEach(inputDirective => inputDirective.onDisabledTime(disabledTime));\n this.disabledTimeChange.emit(disabledTime);\n });\n }\n\n private onRangeChanged(range?: DateRange): void {\n this.updateValue(range);\n this.onChange(range);\n this.siDatepickerRangeChange.emit(range);\n this.validateChildren();\n\n if (this.autoClose() && this.value()?.start && this.value()?.end) {\n this.overlayToggle.closeAfterSelection();\n }\n }\n\n /** Run validators on the start/end inputs. */\n private validateChildren(): void {\n this.inputDirectives().forEach(d => d.validatorOnChange());\n }\n\n /** The form control validator for the end date is greater equal start date. */\n private endAfterStartValidator(): ValidationErrors | null {\n const endDate = this.endInput().value;\n const startDate = this.startInput().value;\n\n return !endDate || !startDate || endDate >= startDate\n ? null\n : {\n endBeforeStart: {\n start: startDate,\n end: endDate\n }\n };\n }\n\n private readonly childValidation: ValidatorFn = () => {\n const errors: Record<string, any> = {};\n this.readErrorsFromInnerControl(this.startInput(), 'Start', errors);\n this.readErrorsFromInnerControl(this.endInput(), 'End', errors);\n\n if (Object.keys(errors).length) {\n return errors;\n }\n\n return null;\n };\n\n private readErrorsFromInnerControl(\n control: NgModel,\n type: 'Start' | 'End',\n errors: Record<string, any>\n ): void {\n if (control.invalid) {\n const formatError = control.getError('dateFormat');\n if (formatError) {\n errors[`invalid${type}DateFormat`] = formatError;\n }\n const minError = control.getError('minDate');\n if (minError) {\n errors.rangeBeforeMinDate = {\n min: minError.min,\n minString: minError.minString,\n start: this.startInput().value,\n end: this.endInput().value\n };\n }\n const maxError = control.getError('maxDate');\n if (maxError) {\n errors.rangeAfterMaxDate = {\n max: maxError.max,\n maxString: maxError.maxString,\n start: this.startInput().value,\n end: this.endInput().value\n };\n }\n }\n }\n\n private updateValue(value?: DateRange): void {\n // this allows angular's built in required validator to work correctly\n if (!value?.start && !value?.end) {\n this.value.set(undefined);\n } else {\n this.value.set(value);\n }\n }\n}\n","<input\n #startInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none\"\n siDateInput\n [ngModel]=\"value()?.start ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"startDatePlaceholder() | translate\"\n [attr.aria-label]=\"startDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: $event, end: value()?.end })\"\n/>\n<span class=\"mx-3\">-</span>\n<input\n #endInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none text-end\"\n siDateInput\n [ngModel]=\"value()?.end ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"endDatePlaceholder() | translate\"\n [attr.aria-label]=\"endDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: value()?.start, end: $event })\"\n/>\n<button\n #button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary btn-sm\"\n [attr.aria-label]=\"ariaLabelCalendarButton() | translate\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"show()\"\n>\n <si-icon [icon]=\"icons.elementCalendar\" />\n</button>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n ElementRef,\n inject,\n input,\n OnInit,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl } from '@angular/forms';\nimport { elementCalendar } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\nimport { filter } from 'rxjs';\n\nimport { SiDatepickerOverlayDirective } from './si-datepicker-overlay.directive';\nimport { SiDatepickerDirective } from './si-datepicker.directive';\n\n/**\n * Calendar toggle button used in combination with a datepicker directive.\n *\n * @example\n * ```\n * <si-calendar-button class=\"w-100\">\n * <input\n * class=\"form-control\"\n * type=\"text\"\n * siDatepicker\n * [siDatepickerConfig]=\"config\"\n * />\n * </si-calendar-button>\n * ```\n */\n@Component({\n selector: 'si-calendar-button',\n imports: [SiIconComponent, SiTranslatePipe],\n template: `<ng-content />\n <button\n #calendarButton\n name=\"open-calendar\"\n type=\"button\"\n class=\"btn btn-icon btn-tertiary btn-sm position-absolute end-0 top-0 me-2 mt-2\"\n [attr.aria-label]=\"ariaLabel() | translate\"\n [disabled]=\"disabled()\"\n (click)=\"show()\"\n >\n <si-icon [icon]=\"icons.elementCalendar\" />\n </button>`,\n styles: ':host {--si-action-icon-offset: 24px;}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'd-inline-block position-relative form-control-wrapper'\n }\n})\nexport class SiCalendarButtonComponent implements OnInit, AfterContentInit {\n /**\n * Aria label for the calendar toggle button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n * ```\n */\n readonly ariaLabel = input(\n t(() => $localize`:@@SI_DATEPICKER.CALENDAR_TOGGLE_BUTTON:Open calendar`)\n );\n\n protected readonly button = viewChild.required<ElementRef<HTMLButtonElement>>('calendarButton');\n /** Datepicker input directive instance used to watch for state changes and required to open the calendar. */\n protected readonly datepicker = contentChild.required(SiDatepickerDirective);\n protected readonly datepickerOverlay = contentChild.required(SiDatepickerOverlayDirective);\n protected readonly ngControl = contentChild(NgControl);\n protected readonly disabled = signal(false);\n protected readonly icons = addIcons({ elementCalendar });\n private readonly destroyerRef = inject(DestroyRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n ngOnInit(): void {\n // Monitor input state changes and update the button accordingly\n this.datepicker().stateChange.subscribe(() => this.updateState());\n this.focusMonitor\n .monitor(this.elementRef, true)\n .pipe(\n takeUntilDestroyed(this.destroyerRef),\n filter(origin => origin === null)\n )\n .subscribe(() => {\n if (!this.datepickerOverlay().isShown()) {\n this.datepicker().touch();\n }\n });\n }\n\n ngAfterContentInit(): void {\n this.datepicker().useExternalTrigger(this.button());\n this.updateState();\n }\n\n protected show(): void {\n this.datepicker().show(true);\n }\n\n private updateState(): void {\n const datepicker = this.datepicker();\n this.disabled.set(datepicker.disabled() || datepicker.readonly());\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiCalendarButtonComponent } from './si-calendar-button.component';\nimport { SiDateInputDirective } from './si-date-input.directive';\nimport { SiDateRangeComponent } from './si-date-range.component';\nimport { SiDatepickerComponent } from './si-datepicker.component';\nimport { SiDatepickerDirective } from './si-datepicker.directive';\nimport { SiTimepickerComponent } from './si-timepicker.component';\n\n@NgModule({\n imports: [\n SiCalendarButtonComponent,\n SiDateInputDirective,\n SiDatepickerComponent,\n SiDatepickerDirective,\n SiDateRangeComponent,\n SiTimepickerComponent\n ],\n exports: [\n SiCalendarButtonComponent,\n SiDateInputDirective,\n SiDatepickerComponent,\n SiDatepickerDirective,\n SiDateRangeComponent,\n SiTimepickerComponent\n ]\n})\nexport class SiDatepickerModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-datepicker.model';\nexport * from './si-date-input.directive';\nexport * from './si-datepicker.directive';\nexport * from './si-datepicker.component';\n// included as output property siDatepickerClose is public\nexport * from './si-datepicker-overlay.directive';\nexport * from './si-timepicker.component';\nexport * from './si-date-range.component';\nexport * from './si-datepicker-overlay.component';\nexport * from './si-calendar-button.component';\nexport * from './si-datepicker.module';\nexport * from './date-time-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["today","getToday","minDate","getMinDate","i1","i1.SiDatepickerOverlayDirective","filter"],"mappings":"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"}
|