q2-tecton-elements 1.56.8 → 1.56.9
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/dist/bundle-report.json +4 -4
- package/dist/cjs/q2-calendar.cjs.entry.js +2 -2
- package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar.js +2 -2
- package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
- package/dist/components/q2-calendar.js +2 -2
- package/dist/components/q2-calendar.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +2 -2
- package/dist/esm/q2-calendar.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-calendar.entry.js +4 -3
- package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"q2-calendar.entry.cjs.js","mappings":"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","names":["isValidDate","formatISO","setMinutes","loc","getDaysInMonth","isSameDay","isAfter","isBefore","addDays","handleAriaLabel","overrideFocus","isEventFromElement","waitForNextPaint","handleRenamedProp","format","h"],"sources":["src/components/q2-calendar/q2-calendar-helpers.ts","src/components/q2-calendar/q2-calendar-validation.ts","src/components/q2-calendar/q2-calendar.scss?tag=q2-calendar&encapsulation=shadow","src/components/q2-calendar/q2-calendar.tsx"],"sourcesContent":["import { isValid as isValidDate, formatISO, setMinutes } from 'date-fns';\nimport { loc } from '../../utils';\nimport { ISelectedMonthYear, InputValidation } from './q2-calendar-types';\n\nexport interface IMomentLikeObject {\n toDate(): Date;\n}\n\nexport function formatDateISO(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n return formatISO(date, { representation: 'date' });\n}\n\nlet memoizedFormatDateShort: Intl.DateTimeFormat;\nexport function formatDateShort(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n const isoDate = date.toISOString();\n if (!memoizedFormatDateShort) {\n memoizedFormatDateShort = new Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateShort.format(new Date(isoDate));\n}\n\nlet memoizedFormatDateLong: Intl.DateTimeFormat;\nexport function formatDateLong(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateLong) {\n memoizedFormatDateLong = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n }\n\n return memoizedFormatDateLong.format(date);\n}\n\nlet memoizedFormatDateFull: Intl.DateTimeFormat;\nexport function formatDateFull(value: string | Date) {\n if (!value) return;\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateFull) {\n memoizedFormatDateFull = new Intl.DateTimeFormat('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n weekday: 'long',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateFull.format(date);\n}\n\nexport function convertMomentFormat(stringFormat: string) {\n return stringFormat\n .replace(/[d]/g, 'E')\n .replace(/[D]/g, 'd')\n .replace(/[Y]/g, 'y')\n .replace(/[l]/g, 'P')\n .replace(/[W]/g, 'I');\n}\n\nexport function stringToDate(date: string | null | void): Date | undefined {\n const isString = typeof date === 'string';\n if (!isString && date && isValidDate(new Date(date || undefined))) {\n date = formatDateISO(date);\n } else if (!date || !isValidDate(new Date(date))) {\n return undefined;\n }\n\n let result: Date;\n const dateParts = date.split(/[\\/\\-]/).map(part => part.padStart(2, '0'));\n const isIsoString = isString && date.length >= 24 && date[10] === 'T';\n const isCompleteDate = dateParts.length === 3;\n const isPartialDate = dateParts.length < 3;\n if (isIsoString) {\n date = date.split('T')[0];\n result = new Date(date);\n } else if (isCompleteDate) {\n const isStandardSlashDate = date.includes('/') && dateParts[2].length === 4;\n\n // Reorder mm/dd/yyyy dates for ISO formatting\n // [mm, dd, yyyy] -> [yyyy, mm, dd]\n if (isStandardSlashDate) dateParts.unshift(dateParts.pop());\n\n result = new Date(Date.UTC(parseInt(dateParts[0]), parseInt(dateParts[1]) - 1, parseInt(dateParts[2])));\n } else if (isPartialDate) {\n const now = new Date();\n\n let yearNumber: number;\n let monthNumber: string;\n let dayNumber: string;\n switch (dateParts.length) {\n case 1:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = '01';\n break;\n\n case 2:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = dateParts[1];\n break;\n }\n\n result = new Date(`${yearNumber}-${monthNumber}-${dayNumber}`);\n }\n\n if (!isValidDate(result)) return undefined;\n\n // result = setHours(result, 0);\n result = removeTimezoneOffset(result);\n\n return isValidDate(result) ? result : undefined;\n}\n\nexport function removeTimezoneOffset(date: Date) {\n const timeZoneOffset = date.getTimezoneOffset();\n // Minutes compensation for some timezones like India, Central Australia and etc use GMT+5:30, GMT+9:30\n return setMinutes(date, timeZoneOffset + Math.abs(timeZoneOffset % 60));\n}\n\nexport function stringArrayToDate(dateArray: string[]): Date[] {\n if (!Array.isArray(dateArray) || dateArray.length === 0) {\n return [];\n }\n return dateArray.map(date => stringToDate(date));\n}\n\nexport function setupMonthYear(value: Date | undefined = new Date()): ISelectedMonthYear {\n return {\n monthIndex: value.getMonth(),\n selectedYear: value.getFullYear(),\n };\n}\n\nexport function validateInput(\n input: string = '',\n validDays: number[] = [],\n validDates: string[] = [], // white list\n invalidDates: string[] = [], // black list\n startDate: string,\n endDate: string,\n formatString: string = 'mm/dd/yyyy',\n assume: string\n): InputValidation {\n let isValid: boolean = true;\n let isAvailable: boolean = false;\n let messageType: string = 'info';\n let message: string = `${loc('tecton.element.calendar.hint.format')}: ${formatString}`;\n if (!input) {\n return { isValid, inputDate: new Date(''), isAvailable, messageType, message };\n }\n\n const inputDate = buildInputDate(input, assume);\n const month = inputDate.getMonth() + 1;\n const date = inputDate.getDate();\n const year = inputDate.getFullYear();\n const calendarPosition = [month, date, year];\n\n if (isValidDate(inputDate)) {\n const monthName = getMonths()[inputDate.getMonth()];\n\n if (input.length === 10) {\n isValid = true;\n messageType = null;\n message = null;\n }\n\n isAvailable = validDays.includes(inputDate.getDay());\n const isoString = formatDateISO(inputDate);\n\n if (isAvailable) {\n const isNotValidDate = validDates.length && !validDates.includes(isoString);\n const isInvalidDate = invalidDates.length && invalidDates.includes(isoString);\n const isBeforeStartDate = startDate && startDate > isoString;\n const isAfterEndDate = endDate && endDate < isoString;\n\n if (isNotValidDate || isInvalidDate || isBeforeStartDate || isAfterEndDate) {\n isAvailable = false;\n }\n }\n\n if (input.length >= 5 && !isAvailable) {\n isValid = false;\n messageType = 'error';\n const isInvalid = !monthName || !date || !year;\n message = isInvalid\n ? `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`\n : loc('tecton.element.calendar.hint.notAvailableDate', [formatDateLong(inputDate)]);\n }\n } else {\n isValid = false;\n messageType = 'error';\n message = `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`;\n }\n\n return {\n isValid,\n messageType,\n message,\n inputDate,\n isAvailable,\n calendarPosition,\n };\n}\n\nexport function buildInputDate(input: string, assume: string) {\n const now = new Date();\n // eslint-disable-next-line prefer-const\n let [month, day, year] = input.split('/');\n if (month === '0') month = '01';\n if (day === '0') day = '01';\n if (input.length === 10) {\n return new Date(input);\n } else if (month && day && Number(day) > 0) {\n const twoDigitDay = Number(day) < 10 ? `0${Number(day)}` : day;\n const fourDigitYear = !year || year.length < 4 ? assumeYear(month, day, assume) : year;\n return new Date(`${month}/${twoDigitDay}/${fourDigitYear}`);\n } else if (month) {\n return new Date(`${month}/01/${now.getFullYear()}`);\n }\n}\n\nfunction assumeYear(month: string, day: string, assume: string): string {\n const monthDay = `${month}/${day}`;\n const now = new Date();\n const mm: string = now.getMonth() < 9 ? `0${now.getMonth() + 1}` : `${now.getMonth() + 1}`;\n const dd: string = now.getDate() < 10 ? `0${now.getDate()}` : `${now.getDate()}`;\n const nowLocal = `${mm}/${dd}/${now.getFullYear()}`;\n let assumedYear = now.getFullYear();\n if (assume === 'future' && nowLocal.slice(0, 5) > monthDay) {\n assumedYear = now.getFullYear() + 1;\n } else if (assume === 'past' && nowLocal.slice(0, 5) < monthDay) {\n assumedYear = now.getFullYear() - 1;\n }\n return assumedYear.toString();\n}\n\nexport function handleMissingZeros(input): string {\n if (!input) {\n return '';\n }\n if (input.match(/^[1-9]\\/$/)) {\n return `0${input}/`;\n } else if (input.match(/^[0-9]{2}\\/[1-9]{1}\\/$/)) {\n const sp = input.split('/');\n return `${sp[0]}/0${sp[1]}/`;\n }\n return input;\n}\n\nexport function reorderDateString(input: string): string {\n const dateParts = (input || '').split('-');\n if (dateParts.length !== 3) return '';\n return `${dateParts[1]}/${dateParts[2]}/${dateParts[0]}`;\n}\n\nexport function firstDayOfWeekInMonth(month: number, year: number): number {\n return new Date(year, month, 1, 1, 1, 1, 1).getDay();\n}\n\nexport function getDays(): string[] {\n return [\n loc('tecton.element.calendar.days.short.Sunday'),\n loc('tecton.element.calendar.days.short.Monday'),\n loc('tecton.element.calendar.days.short.Tuesday'),\n loc('tecton.element.calendar.days.short.Wednesday'),\n loc('tecton.element.calendar.days.short.Thursday'),\n loc('tecton.element.calendar.days.short.Friday'),\n loc('tecton.element.calendar.days.short.Saturday'),\n ];\n}\n\nexport function getDaysOfWeek(): string[] {\n return [\n loc('tecton.element.calendar.days.Sunday'),\n loc('tecton.element.calendar.days.Monday'),\n loc('tecton.element.calendar.days.Tuesday'),\n loc('tecton.element.calendar.days.Wednesday'),\n loc('tecton.element.calendar.days.Thursday'),\n loc('tecton.element.calendar.days.Friday'),\n loc('tecton.element.calendar.days.Saturday'),\n ];\n}\n\nexport function getMonths(): string[] {\n return [\n loc('tecton.element.calendar.months.January'),\n loc('tecton.element.calendar.months.February'),\n loc('tecton.element.calendar.months.March'),\n loc('tecton.element.calendar.months.April'),\n loc('tecton.element.calendar.months.May'),\n loc('tecton.element.calendar.months.June'),\n loc('tecton.element.calendar.months.July'),\n loc('tecton.element.calendar.months.August'),\n loc('tecton.element.calendar.months.September'),\n loc('tecton.element.calendar.months.October'),\n loc('tecton.element.calendar.months.November'),\n loc('tecton.element.calendar.months.December'),\n ];\n}\n","import { firstDayOfWeekInMonth } from './q2-calendar-helpers';\nimport { getDaysInMonth, isSameDay, isBefore, isAfter, isValid as isValidDate } from 'date-fns';\nimport { CalendarDay, DateEmpty, Year, IDateValidators, ISelectedMonthYear } from './q2-calendar-types';\n\n// Validation Helpers\nexport type DateList = CalendarDay[];\nexport type IsValid = boolean;\nexport type IsActivityDate = boolean;\nexport type DateValidation = (date: Date) => IsValid;\n\nexport function generateDatesFromMonthYear(month: number, year: Year): Date[] {\n const daysInMonth = getDaysInMonth(new Date(year, month));\n\n return [...Array(daysInMonth).keys()].reduce((acc, stepIndex) => {\n acc.push(new Date(year, month, stepIndex + 1));\n return acc;\n }, []);\n}\n\nexport function getValidDaysOfWeek(checksum: number = 127): number[] {\n /* tslint:disable:no-bitwise */\n const sunValid = checksum & 1;\n const monValid = checksum & 2;\n const tuesValid = checksum & 4;\n const wedsValid = checksum & 8;\n const thursValid = checksum & 16;\n const friValid = checksum & 32;\n const satValid = checksum & 64;\n /* tslint:enable:no-bitwise */\n const ret = [];\n\n if (checksum <= 0) return ret;\n if (sunValid) ret.push(0);\n if (monValid) ret.push(1);\n if (tuesValid) ret.push(2);\n if (wedsValid) ret.push(3);\n if (thursValid) ret.push(4);\n if (friValid) ret.push(5);\n if (satValid) ret.push(6);\n\n return ret;\n}\n\nexport function validateAgainstChecksum(validDaysOfWeek: number[], newDate: Date): IsValid {\n return validDaysOfWeek.includes(newDate.getDay());\n}\n\nexport function validateAgainstBlacklist(invalidDates: Date[], newDate: Date): IsValid {\n return !validateAgainstWhitelist(invalidDates, newDate);\n}\n\nexport function validateAgainstWhitelist(validDates: Date[], newDate: Date): IsValid {\n return validDates.some(validDate => isSameDay(validDate, newDate));\n}\n\nexport function buildDates(\n validDaysOfWeek: number[],\n validDates: Date[],\n invalidDates: Date[],\n selectedMonthYear: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n typedValue: string\n): DateList {\n const validationFns = [baseValidation.bind(null, dateValidators, new Date())];\n if (validDates?.length) {\n validationFns.push(validateAgainstWhitelist.bind(null, validDates));\n } else {\n validationFns.push(validateAgainstChecksum.bind(null, validDaysOfWeek));\n }\n validationFns.push(validateAgainstBlacklist.bind(null, invalidDates));\n\n return generateDateList(selectedMonthYear, currentSelection, dateValidators, validationFns, typedValue);\n}\n\nexport function generateDateList(\n { monthIndex, selectedYear }: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n validationFns: DateValidation[],\n typedValue: string\n): DateList {\n const isIncompleteDate = !isValidDate(new Date(typedValue));\n const datesInMonth = generateDatesFromMonthYear(monthIndex, selectedYear).map((dayInMonth, dateIndex) => {\n const isInvalid = validationFns.some(fn => !fn(dayInMonth));\n const dayState = getDayState(dayInMonth, dateValidators, currentSelection);\n const classList = generateClassesForCalDay({\n ...dayState,\n isInvalid,\n isIncompleteDate,\n });\n\n return {\n ...dayState,\n isValid: !isInvalid,\n date: dayInMonth,\n integer: dateIndex + 1,\n isEmpty: false,\n isActivity: false,\n classList,\n };\n });\n\n const startOfMonthEmpties = addEmptiesMonthStart(firstDayOfWeekInMonth(monthIndex, selectedYear));\n const endOfMonthEmpties = addEmptiesMonthEnd((startOfMonthEmpties.length + datesInMonth.length) % 7);\n\n return [...startOfMonthEmpties, ...datesInMonth, ...endOfMonthEmpties] as CalendarDay[];\n}\n\nexport function baseValidation(dateValidators: IDateValidators, now: Date, newDate: Date): boolean {\n const isNewDateBeforeStartDate = isAfter(dateValidators?.startDate, newDate);\n const isNewDateAfterEndDate = isBefore(dateValidators?.endDate, newDate);\n const isNowAfterCutoffTime = isSameDay(now, newDate) && isAfter(now, dateValidators?.cutOffTime);\n\n return !(isNewDateBeforeStartDate || isNowAfterCutoffTime || isNewDateAfterEndDate);\n}\n\nexport function getDayState(dayInMonth: Date, dateValidators: IDateValidators, currentDate: Date | undefined) {\n if (!currentDate) currentDate = new Date();\n const isSelected = currentDate && isSameDay(currentDate, dayInMonth);\n const isToday = isSameDay(dayInMonth, new Date());\n const isStartDate = isSameDay(dayInMonth, dateValidators?.startDate);\n const isEndDate = isSameDay(dayInMonth, dateValidators?.endDate);\n\n return { isSelected, isToday, isStartDate, isEndDate };\n}\n\nexport function generateClassesForCalDay({\n isInvalid,\n isSelected,\n isEndDate,\n isStartDate,\n isToday,\n isIncompleteDate,\n}: {\n isInvalid: boolean;\n isSelected: boolean;\n isEndDate: boolean;\n isStartDate: boolean;\n isToday: boolean;\n isIncompleteDate: boolean;\n}): string {\n const classes = [];\n if (!isInvalid) classes.push('is-valid');\n if (isSelected) classes.push('is-selected');\n if (isEndDate) classes.push('is-end-date');\n if (isStartDate) classes.push('is-start-date');\n if (isToday) classes.push('is-today');\n if (isSelected && isInvalid && !isIncompleteDate) classes.push('is-unavailable');\n\n return classes.join(' ');\n}\n\nexport function addEmptiesMonthStart(monthStartDayOfWeek: number): DateEmpty[] {\n return addEmptyDates(0, monthStartDayOfWeek);\n}\n\nexport function addEmptiesMonthEnd(monthEndDayOfWeek: number): DateEmpty[] {\n if (monthEndDayOfWeek === 0) return [];\n return addEmptyDates(monthEndDayOfWeek, 7);\n}\n\nexport const emptyDate: DateEmpty = {\n date: null,\n integer: null,\n isActivity: false,\n isEmpty: true,\n isValid: false,\n isToday: false,\n isSelected: false,\n isStartDate: false,\n isEndDate: false,\n classList: '',\n};\n\nexport function addEmptyDates(from: number, to: number): DateEmpty[] {\n if (from === 7) from = 0;\n return [...Array(to - from).keys()].map(() => ({ ...emptyDate }) as DateEmpty);\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n --comp-default-calendar-margin: #{var-list(var-prefixer(calendar-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(calendar-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-calendar-margin, --comp-default-calendar-margin);\n}\n\n:host[hidden] {\n display: none;\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n\nq2-input {\n margin: 0;\n cursor: pointer;\n}\n\nq2-popover {\n --comp-min-tappable-size: 44px;\n --comp-table-border-spacing: 2px;\n --comp-min-tappable-size-and-spacing: calc(var(--comp-min-tappable-size) + var(--comp-table-border-spacing));\n --comp-popover-padding: #{var-list(var-prefixer(calendar-popover-padding), --app-scale-1x, 5px)};\n --comp-min-table-width: calc(var(--comp-min-tappable-size-and-spacing) * 7);\n --comp-table-container-border-spacing: calc(var(--comp-table-border-spacing) * 2);\n --comp-popover-total-padding: calc(var(--comp-popover-padding) * 2);\n\n --tct-popover-min-width: calc(\n var(--comp-min-table-width) + var(--comp-table-container-border-spacing) + var(--comp-popover-total-padding)\n );\n}\n\n.calendar-field-popup {\n padding: var(--comp-popover-padding);\n}\n\n.calendar-label {\n --comp-label-padding: #{var-list(\n --tct-calendar-label-padding,\n unquote('#{var-list(var-prefixer(calendar-label-vertical-padding), --tct-scale-2, --app-scale-2x, 10px)} 0')\n )};\n font-size: var-list(var-prefixer(calendar-label-font-size), 16px);\n flex: 1 1;\n flex-basis: calc(100% - var-list(--tct-btn-icon-width, 44px));\n margin: 0;\n padding: var(--comp-label-padding);\n}\n\n.cal-month-heading {\n padding: 0 0 0.75rem;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(var-prefixer(calendar-month-font-size), 16px);\n font-weight: var-list(var-prefixer(calendar-month-font-weight), 600);\n text-align: center;\n}\n\n.cal-month-text {\n min-width: 82px;\n display: inline-block;\n}\n\n.cal-year-text {\n min-width: 50px;\n display: inline-block;\n}\n\ntable {\n width: 100%;\n margin-bottom: 2px;\n text-align: center;\n border-spacing: var(--comp-table-border-spacing);\n}\n\nth {\n font-size: var-list(var-prefixer(calendar-day-heading-font-size), inherit);\n font-weight: var-list(var-prefixer(calendar-day-heading-font-weight), 600);\n width: 14.285714%;\n}\n\ntd {\n height: var(--comp-min-tappable-size);\n cursor: pointer;\n border: var-list(var-prefixer(calendar-day-border), 0);\n border-radius: var-list(var-prefixer(calendar-day-border-radius));\n\n &.is-unavailable {\n border: 1px solid var-list(--tct-input-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n\n &.is-valid:hover {\n border: var-list(var-prefixer(calendar-day-hover-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-hover-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n\n background: var-list(\n --tct-calendar-day-hover-background,\n var-prefixer(calendar-day-hover-bg),\n --tct-gray-14,\n --app-gray14,\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(var-prefixer(calendar-day-hover-font-color), inherit);\n }\n\n &[aria-hidden],\n &[aria-disabled] {\n pointer-events: none;\n cursor: not-allowed;\n }\n\n &[aria-disabled] {\n opacity: var-list(var-prefixer(calendar-day-disabled-opacity), --app-disabled-opacity, 0.4);\n }\n\n &[aria-selected] {\n border: var-list(var-prefixer(calendar-day-selected-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-selected-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n background: var-list(\n --tct-calendar-day-selected-background,\n var-prefixer(calendar-day-selected-bg),\n --tct-calendar-day-hover-background,\n var-prefixer(calendar-day-hover-bg),\n var-prefixer(gray-14),\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(\n var-prefixer(calendar-day-selected-font-color),\n var-prefixer(calendar-day-hover-font-color),\n inherit\n );\n box-shadow: 0 0 0 2px\n var-list(\n var-prefixer(calendar-day-selected-outline-color),\n --tct-stoplight-info,\n --const-stoplight-info,\n #0079c1\n );\n }\n &[aria-selected]:focus {\n box-shadow:\n 0 0 0 2px\n var-list(\n var-prefixer(calendar-day-selected-outline-color),\n --tct-stoplight-info,\n --const-stoplight-info,\n #0079c1\n ),\n 0 0 0 4px var(--const-focus-color, #0066cc);\n }\n}\n\n.today-decorator {\n text-transform: uppercase;\n font-weight: 700;\n font-size: 10px;\n height: 12px;\n}\n\n.calendar-disclaimer {\n font-size: var-list(\n var-prefixer(calendar-disclaimer-font-size),\n --tct-font-size-small,\n --app-font-size-small,\n 12px\n );\n border-style: solid;\n border-width: var-list(var-prefixer(calendar-disclaimer-border-width), unquote('1px 0 0 0'));\n border-color: var-list(\n var-prefixer(calendar-disclaimer-border-color),\n var-prefixer(gray-13),\n --tct-gray-l3,\n --app-gray-l3,\n #e6e6e6\n );\n padding: var-list(--tct-calendar-disclaimer-padding, --tct-scale-2, --app-scale-2x, 10px);\n text-align: left;\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n Listen,\n Watch,\n Method,\n h,\n} from '@stencil/core';\nimport { ISelectedMonthYear, CalendarDay, IDateValidators } from './q2-calendar-types';\nimport { addDays, isSameDay, format, isValid as isValidDate } from 'date-fns';\nimport {\n stringToDate,\n setupMonthYear,\n getMonths,\n getDays,\n getDaysOfWeek,\n stringArrayToDate,\n convertMomentFormat,\n validateInput,\n handleMissingZeros,\n formatDateISO,\n formatDateShort,\n IMomentLikeObject,\n removeTimezoneOffset,\n reorderDateString,\n formatDateFull,\n} from './q2-calendar-helpers';\nimport { buildDates, getValidDaysOfWeek, DateList } from './q2-calendar-validation';\nimport {\n handleAriaLabel,\n loc,\n overrideFocus,\n isEventFromElement,\n handleRenamedProp,\n waitForNextPaint,\n} from '../../utils';\nimport { IEventDetail } from '../q2-input/q2-input-types';\nimport { Q2InputCustomEvent } from 'src/components';\n\n@Component({ tag: 'q2-calendar', shadow: true, styleUrl: 'q2-calendar.scss' })\nexport class Q2Calendar implements ComponentInterface {\n // #region Own Properties\n\n btnCalendarToggle: HTMLQ2BtnElement;\n btnNextMonth: HTMLQ2BtnElement;\n btnNextYear: HTMLQ2BtnElement;\n btnPrevMonth: HTMLQ2BtnElement;\n btnPrevYear: HTMLQ2BtnElement;\n calendarBody: HTMLDivElement;\n calendarTable: HTMLTableElement;\n controlElement: HTMLQ2InputElement;\n dayAbbrStrings = getDays();\n dayStrings = getDaysOfWeek();\n defaultFormatString = 'mm/dd/yyyy';\n formatModifier: string = 'M/D/YYYY'; // To allow missing leading zero, 4/3/2021 => converts into 04/03/2021\n hintMessageElement: HTMLQ2MessageElement;\n internalError: string = '';\n monthStrings = getMonths();\n popoverElement?: HTMLQ2PopoverElement;\n scheduledAfterRender: (() => void)[] = [];\n selectedMonthYear: ISelectedMonthYear;\n valueOnBlur: string | { toDate(): Date };\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n dateList: CalendarDay[];\n\n @State()\n hintMessage: string = this.defaultHintMessage;\n\n @State()\n hintMessageType: 'info' | 'error' = 'info';\n\n @State()\n keyboardSelection: boolean = false;\n\n @State()\n typedValue: string = '';\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Detects the year automatically based on today's date when the user presses the `Escape` key or the `Blur` mouse event occurs.\n * Setting `future` or `past` as the value will increase or decrease the year by one, respectively.\n */\n @Prop({ reflect: true })\n assume: 'current' | 'future' | 'past' = 'current';\n\n /** @deprecated */\n @Prop({ reflect: true })\n buttonLabel: string;\n\n /** A label shown at the top of the popover date picker. */\n @Prop({ reflect: true })\n calendarLabel: string;\n\n /** Display a button in the input field allowing the user to clear their selection. */\n @Prop({ reflect: true })\n clearable: boolean;\n\n /**\n * Specifies a time of day after which a date is no longer valid.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n cutoffTime: string;\n\n /**\n * The most concise way to define valid days of the week for calendar. Each day of the week has a checksum value:\n *\n * - Sunday = 1\n * - Monday = 2\n * - Tuesday = 4\n * - Wednesday = 8\n * - Thursday = 16\n * - Friday = 32\n * - Saturday = 64\n *\n * Add the checksum values of your desired valid days together, and set `daysOfWeekChecksum` to that summed value.\n *\n * **Example:**\n * @snippet\n * element.daysOfWeekChecksum = 127 // All days of the week are valid\n * element.daysOfWeekChecksum = 62; // Only weekdays are valid\n * element.daysOfWeekChecksum = 65; // Only Saturday and Sunday are valid\n *\n */\n @Prop({ reflect: true })\n daysOfWeekChecksum: number;\n\n /** Disable the input field. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Text that displays as the placeholder when the field is marked `disabled`.\n * @localizable\n */\n @Prop({ reflect: true })\n disabledMsg: string;\n\n /** Text that appears at the bottom of the popover date picker. */\n @Prop({ reflect: true })\n disclaimer: string;\n\n /**\n * Determines the display format of the date field value.\n *\n * Must follow the [date-fns](https://date-fns.org/v2.28.0/docs/format) token specification.\n */\n @Prop({ reflect: true })\n displayFormat: string;\n\n /**\n * Defines the last selectable date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n endDate: string;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused and `typeable` is `true`.\n * @localizable\n */\n @Prop({ mutable: true })\n errors: string[];\n\n /** Hide the input field's ` <label> ` element from view. */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused and `typeable` is true.\n * @localizable\n */\n @Prop({ mutable: true })\n hints: string[];\n\n /** Show error styles when the calendar is in an errant state. */\n @Prop({ reflect: true, mutable: true })\n invalid: boolean;\n\n /**\n * Defines an explicit date blacklist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `invalidDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop()\n invalidDates: string[];\n\n /** The visible label for the `q2-calendar` input field. */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** @deprecated */\n @Prop()\n onsuccess: (e: CustomEvent) => void;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** Appends \"(optional)\" to the label and sets `aria-required=\"false\"`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * Text that appears within the input field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /** @deprecated */\n @Prop({ reflect: true })\n popDirection: 'up' | 'down';\n\n /** Aligns the popover date picker to the left or right side of the input field. */\n @Prop()\n popoverAlignment: 'left' | 'right';\n\n /**\n * Force the direction of the popover date picker when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ mutable: true })\n popoverDirection: 'up' | 'down';\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number = 355;\n\n /**\n * Determines the display mode of the popover.\n *\n * Providing a value of `legacy` instructs the popover to use absolute positioning instead of fixed positioning.\n *\n * @info\n * This is a temporary solution to work around styling issues related to using fixed positioning for the popover\n * when nested inside of elements with transform properties. This will be removed once the popover API is available\n * for use.\n */\n @Prop({ mutable: true })\n popoverMode: 'legacy' = null;\n\n /**\n * The field's content is not editable, but the field remains focusable.\n *\n * Appends \"(readonly)\" to the field label. Supersedes `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /**\n * Defines the first selectabe date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n startDate: string;\n\n /** The user can type in the field. Only available in desktop browsers. */\n @Prop({ reflect: true })\n typeable: boolean;\n\n /**\n * Defines an explicit date whitelist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `validDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop()\n validDates: string[];\n\n /**\n * The value of the `q2-calendar` element, e.g. the selected date.\n *\n * **How to change or clear the value with javascript:**\n * @snippet\n * // change date\n * element.value = '2022-12-21';\n * // clear date\n * element.value = null;\n */\n @Prop({ mutable: true, reflect: true })\n value: string | { toDate(): Date };\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a date is selected or typed in the input field.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{\n // ISO formatted date\n value: string | null;\n }>;\n\n /**\n * Emitted when an invalid date is entered into the field.\n */\n @Event()\n error: EventEmitter<{ errors: { message: string; errorCode: string }[] }>;\n\n /**\n * Emitted when a valid date is entered or selected.\n */\n @Event()\n success: EventEmitter<{\n // ISO formatted date\n value: string;\n }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n connectedCallback() {\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n if (this.value && this.isTypeable && !this.typedValue) {\n this.typedValue = reorderDateString(this.value as string);\n }\n this.validateDate();\n }\n\n componentWillLoad() {\n this.popDirectionHandler();\n handleAriaLabel(this);\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n setTimeout(() => {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }, 25);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange && !!event.detail) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('clear')\n handleClear() {\n this.change.emit({ value: null });\n this.value = null;\n this.typedValue = '';\n }\n\n @Listen('error')\n defaultErrorHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onerror) {\n if (this.hintMessageType === 'error' && this.hintMessage) {\n this.internalError = this.hintMessage;\n } else {\n this.internalError = loc('tecton.element.calendar.hint.invalidDate');\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.controlElement.shadowRoot.querySelector<HTMLElement>('.input-field').focus();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n }\n\n @Listen('success')\n defaultSuccessHandler(event: CustomEvent) {\n if (event.target !== this.hostElement) {\n return;\n }\n\n if (typeof this.onsuccess === 'function') {\n this.onsuccess(event);\n } else {\n this.internalError = '';\n if (this.hintMessageType === 'error' && this.hintMessage) {\n this.hintMessage = null;\n this.hintMessageType = null;\n this.invalid = false;\n }\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<input>` to hide the popover if it is visible.\n *\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover if it is hidden.\n *\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover, moving to the correct month and year, and clicking the\n * provided date.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @testOnly\n */\n @Method()\n async setValue(value: string | Date) {\n const date = typeof value === 'string' ? stringToDate(value) : value;\n if (!isValidDate(date)) return;\n\n await this.openPopover();\n await waitForNextPaint();\n\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n await waitForNextPaint();\n const tableCell = this.calendarTable?.querySelector<HTMLTableCellElement>(\n `td[data-date=\"${formatDateISO(date)}\"]`\n );\n tableCell?.click();\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @warning\n * Only applicable when the input is typeable.\n *\n * @testOnly\n */\n @Method()\n async typeValue(value: string | Date) {\n if (!this.typeable) return;\n\n const date = typeof value === 'string' ? stringToDate(value) : value;\n const formattedDate = formatDateShort(date);\n if (!isValidDate(date)) return;\n\n const { innerInputField, controlElement } = this;\n innerInputField.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n innerInputField.value = formattedDate;\n innerInputField.dispatchEvent(new InputEvent('input'));\n controlElement.dispatchEvent(new KeyboardEvent('keyup'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('cutoffTime')\n cutoffTimeObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('daysOfWeekChecksum')\n daysOfWeekChecksumObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('endDate')\n endDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('invalidDates')\n invalidDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('popDirection')\n popDirectionHandler() {\n handleRenamedProp(this, 'popDirection', 'popoverDirection');\n }\n\n @Watch('startDate')\n startDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('typeable')\n typeableChanged() {\n this.valueObserver(this.value);\n }\n\n @Watch('validDates')\n validDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('value')\n valueObserver(newValue: string | IMomentLikeObject) {\n // resetting by empty string\n if (newValue === '') {\n this.value = undefined;\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n return;\n }\n const isMoment = newValue && typeof newValue !== 'string' && 'toDate' in newValue;\n const newDate = isMoment ? (newValue as IMomentLikeObject).toDate() : stringToDate(newValue as string);\n const shortFormattedValue = formatDateShort(newDate);\n if (this.isTypeable) {\n this.typedValue = shortFormattedValue;\n } else {\n this.controlElement.value = shortFormattedValue;\n this.selectedMonthYear = setupMonthYear(newDate);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n // reset hint when value is cleared\n if (this.invalid) return;\n\n if (shortFormattedValue) {\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n } else {\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get canClear() {\n if (this.isTypeable) {\n return this.clearable && !!this.typedValue;\n } else {\n return this.clearable && !!this.value;\n }\n }\n\n get computedPlaceholder(): string {\n if (this.disabled && this.disabledMsg) {\n return loc(this.disabledMsg);\n }\n\n if (this.buttonLabel && (this.disabled || this.placeholder)) {\n return loc(this.buttonLabel);\n }\n\n return (this.placeholder && loc(this.placeholder)) || '';\n }\n\n get currentWeeks() {\n const weeks = this.dateList.reduce<CalendarDay[][]>((accum, item, index) => {\n const chunkIndex = Math.floor(index / 7);\n\n if (!accum[chunkIndex]) {\n accum[chunkIndex] = [];\n }\n\n accum[chunkIndex].push(item);\n\n return accum;\n }, []);\n\n return weeks;\n }\n\n get dateValidators(): IDateValidators {\n const ct = new Date(this.cutoffTime || ''); // should fallback to InvalidDate\n return {\n startDate: stringToDate(this.startDate),\n endDate: stringToDate(this.endDate),\n cutOffTime: isValidDate(ct) ? ct : undefined,\n };\n }\n\n get dateValue(): Date | undefined {\n if (this.isTypeable) {\n return stringToDate(this.typedValue);\n } else {\n let { value } = this;\n const isMoment = value && typeof value !== 'string' && 'toDate' in value;\n if (isMoment) return (value as IMomentLikeObject).toDate();\n\n // stringified moment value assigned in html template e.g.) handlebar\n const isMomentString =\n typeof value === 'string' && value.split(' ').length === 6 && /GMT-\\d{4}/g.test(value);\n if (isMomentString) {\n value = formatDateISO(value as string);\n }\n\n return stringToDate(value as string);\n }\n }\n\n get defaultHintMessage() {\n return this.typeable\n ? loc('tecton.element.calendar.hint.format') + ': ' + this.defaultFormatString\n : loc('tecton.element.calendar.hint.select');\n }\n\n get errorList() {\n const { errors, internalError, invalid } = this;\n let list = [];\n if (internalError) {\n list = [internalError];\n }\n if (Array.isArray(errors) && errors.length) {\n list = errors\n .filter(error => !!error)\n .map(error => loc(error))\n .concat(list);\n } else if (!internalError && invalid) {\n return ['tecton.element.calendar.invalid'];\n }\n return list;\n }\n\n get formattedValue() {\n const { typedValue, dateValue, displayFormat, isTypeable } = this;\n if (isTypeable) return typedValue;\n\n if (dateValue === undefined) return '';\n if (displayFormat) return format(dateValue, convertMomentFormat(displayFormat));\n\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n }).format(dateValue);\n }\n\n get hintList() {\n const { hints, hintMessageType, hintMessage } = this;\n if (Array.isArray(hints) && hints.length) return hints.filter(hint => !!hint).map(hint => loc(hint));\n if (hintMessageType === 'info' && hintMessage) return [hintMessage];\n return [];\n }\n\n get innerInputContainer(): HTMLElement {\n return this.controlElement?.shadowRoot?.querySelector('.input-container');\n }\n\n get innerInputField(): HTMLInputElement | HTMLButtonElement {\n return this.controlElement?.shadowRoot?.querySelector('.input-field');\n }\n\n get isTypeable(): boolean {\n return this.typeable;\n }\n\n get selectedDate() {\n const selectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n return selectedCell ? removeTimezoneOffset(new Date(selectedCell.dataset.date)) : null;\n }\n\n _togglePopover() {\n const toggleElement = this.typeable ? this.btnCalendarToggle : this.innerInputField;\n toggleElement?.click();\n toggleElement?.focus();\n toggleElement.dispatchEvent(new FocusEvent('focus'));\n }\n\n activateDay(date: Date) {\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n this.scheduledAfterRender.push(() => this.focusDay(date));\n }\n\n buildDateList(monthYear: ISelectedMonthYear): DateList {\n const invalidDates = stringArrayToDate(this.invalidDates);\n const validDaysOfWeek = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const validDates = stringArrayToDate(this.validDates);\n return buildDates(\n validDaysOfWeek,\n validDates,\n invalidDates,\n monthYear,\n this.dateValue,\n this.dateValidators,\n this.typedValue\n );\n }\n\n calendarDays() {\n return (\n <table\n role=\"grid\"\n aria-labelledby=\"table-label\"\n ref={ref => (this.calendarTable = ref)}\n >\n <thead>\n <tr>\n {[...Array(7).keys()].map(index => (\n <th\n scope=\"col\"\n aria-label={this.dayStrings[index]}\n >\n {this.dayAbbrStrings[index]}\n </th>\n ))}\n </tr>\n </thead>\n <tbody\n onClick={this.onDateSelection}\n onKeyDown={this.onDateKeydown}\n ref={elm => (this.calendarBody = elm)}\n test-id=\"calendarTableBody\"\n >\n {this.currentWeeks.map(week => (\n <tr>\n {week.map(day => {\n let ariaLabel = '';\n if (day.isToday) ariaLabel = `${loc('tecton.element.calendar.today')}, `;\n ariaLabel += formatDateFull(day.date);\n if (day.isSelected) ariaLabel += ` (${loc('tecton.element.calendar.selected')})`;\n return (\n <td\n class={day.classList}\n aria-hidden={day.isEmpty ? 'true' : undefined}\n tabindex={day.isSelected ? 0 : -1}\n role={day.isSelected ? 'gridcell' : undefined}\n aria-selected={day.isSelected ? 'true' : undefined}\n aria-disabled={day.isValid ? undefined : 'true'}\n data-day={day.integer || undefined}\n data-date={day.date ? formatDateISO(day.date) : undefined}\n >\n {day?.isToday && (\n <div\n class=\"today-decorator\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.calendar.today')}\n </div>\n )}\n <div aria-label={ariaLabel}>{day?.integer ?? ''}</div>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n renderCalendarPopover() {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return (\n <div\n class=\"calendar-field-popup\"\n onKeyUp={this.onPopupKeyup}\n >\n {this.calendarLabel && <p class=\"calendar-label\">{loc(this.calendarLabel)}</p>}\n <div class=\"cal-month-heading\">\n <q2-btn\n label={loc('tecton.element.calendar.previousMonth')}\n hide-label\n ref={elm => (this.btnPrevMonth = elm)}\n class=\"cal-nav-btn prev-month\"\n test-id=\"previousMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex - 1, selectedYear)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-month-text\">{this.monthStrings[monthIndex]}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextMonth')}\n hide-label\n class=\"cal-nav-btn next-month\"\n ref={elm => (this.btnNextMonth = elm)}\n test-id=\"nextMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex + 1, selectedYear)}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n <q2-btn\n label={loc('tecton.element.calendar.previousYear')}\n hide-label\n class=\"cal-nav-btn prev-year\"\n ref={elm => (this.btnPrevYear = elm)}\n test-id=\"previousYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear - 1)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-year-text\">{this.selectedMonthYear.selectedYear}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextYear')}\n hide-label\n class=\"cal-nav-btn next-year\"\n ref={elm => (this.btnNextYear = elm)}\n test-id=\"nextYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear + 1)}\n onKeyDown={this.onHeaderControlKeydown}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n </div>\n <div\n class=\"sr\"\n aria-live=\"polite\"\n id=\"table-label\"\n >\n {`${this.monthStrings[monthIndex]} ${selectedYear}`}\n </div>\n {this.calendarDays()}\n {this.disclaimer && <div class=\"calendar-disclaimer\">{loc(this.disclaimer)}</div>}\n <q2-btn\n class=\"sr refocus-popup\"\n onFocus={this.onRefocus}\n />\n </div>\n );\n }\n\n checkActiveCellForBlankness() {\n const activeElement = this.hostElement.shadowRoot.activeElement;\n if (!activeElement || activeElement.tagName !== 'TD' || !activeElement.hasAttribute('aria-hidden')) return;\n\n const { calendarBody } = this;\n const calendarCells = Array.from(calendarBody.querySelectorAll<Element>('td'));\n const indexOfCell = Array.from(calendarCells).indexOf(activeElement);\n\n const dayToFocus =\n indexOfCell < 15 ? 1 : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;\n\n this.focusDay(this.generateDateFromDay(dayToFocus));\n }\n\n closeCalendar = () => {\n if (!this.open) return;\n this.open = false;\n this.focusInput();\n };\n\n async focusDay(date: Date) {\n if (!date) return;\n await waitForNextPaint();\n this.calendarBody.querySelector<HTMLElement>(`td[data-day=\"${date.getDate()}\"]`)?.focus();\n }\n\n focusInput() {\n this.controlElement?.focus();\n }\n\n generateDateFromDay(day: number) {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return new Date(selectedYear, monthIndex, day);\n }\n\n goToMonthYear = (monthIndex: number, year: number) => {\n if (monthIndex < 0) {\n monthIndex = 11;\n year--;\n } else if (monthIndex > 11) {\n monthIndex = 0;\n year++;\n }\n this.selectedMonthYear = {\n monthIndex,\n selectedYear: year,\n };\n this.dateList = this.buildDateList(this.selectedMonthYear);\n\n this.scheduledAfterRender.push(() => this.checkActiveCellForBlankness());\n };\n\n renderHintField() {\n if (!this.hintMessage) return;\n\n return (\n <q2-message\n class=\"calendar-hint sr\"\n ref={el => (this.hintMessageElement = el)}\n type={this.hintMessageType}\n >\n {this.hintMessage}\n </q2-message>\n );\n }\n\n renderInputField() {\n const { isTypeable } = this;\n return (\n <q2-input\n ref={el => (this.controlElement = el)}\n class=\"calendar-input-field\"\n value={this.formattedValue}\n label={loc(this.label)}\n hideLabel={this.hideLabel}\n disabled={!!this.disabled}\n readonly={!!this.readonly}\n clearable={this.canClear}\n placeholder={this.computedPlaceholder}\n optional={!!this.optional}\n ariaExpanded={`${!!this.open}`}\n hints={this.hintList}\n errors={this.errorList}\n onClick={isTypeable ? undefined : this.onInputClick}\n onChange={this.onInputChange}\n onInput={this.onInputInput}\n onKeyDown={this.onInputKeydown}\n onKeyUp={this.onInputKeyup}\n onBlur={this.onInputBlur}\n onFocus={this.onInputFocus}\n icon-right={isTypeable ? undefined : 'calendar'}\n format-modifier={isTypeable ? this.formatModifier : this.displayFormat || this.formatModifier}\n type=\"date\"\n hide-messages={!isTypeable}\n test-id=\"inputAndCalendarToggle\"\n _role=\"combobox\"\n _preventEntry={!isTypeable}\n >\n {isTypeable && (\n <q2-btn\n ref={el => (this.btnCalendarToggle = el)}\n slot=\"input-right\"\n onClick={this.onInputClick}\n test-id=\"calendarToggle\"\n label=\"tecton.element.calendar.toggleAriaLabel\"\n hide-label\n >\n <q2-icon type=\"calendar\" />\n </q2-btn>\n )}\n </q2-input>\n );\n }\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n this.closeCalendar();\n }\n };\n\n onDateKeydown = (event: KeyboardEvent) => {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n const currentDay = parseInt((event.target as HTMLElement).dataset.day);\n const currentDate = this.generateDateFromDay(currentDay);\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -7));\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 7));\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 1));\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -1));\n break;\n\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear - 1);\n else this.goToMonthYear(monthIndex - 1, selectedYear);\n break;\n\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear + 1);\n else this.goToMonthYear(monthIndex + 1, selectedYear);\n break;\n\n case 'Home':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -currentDate.getDay()));\n break;\n\n case 'End':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 6 - currentDate.getDay()));\n break;\n\n case 'Escape':\n event.preventDefault();\n this.closeCalendar();\n this.focusInput();\n break;\n\n case 'Enter':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.closeCalendar();\n this.focusInput();\n break;\n\n case ' ':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.closeCalendar();\n this.focusInput();\n break;\n }\n };\n\n onDateSelection = (event: MouseEvent) => {\n const dateCell = (event.target as HTMLElement).closest<HTMLElement>('td:not([aria-hidden])');\n if (!dateCell) return;\n const clickedDate = removeTimezoneOffset(new Date(dateCell.dataset.date));\n this.selectDate(clickedDate);\n this.closeCalendar();\n };\n\n onHeaderControlKeydown = (event: KeyboardEvent) => {\n const currentDate = this.generateDateFromDay(1);\n const hasSelectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n\n if (event.key === 'Tab' && !hasSelectedCell) {\n event.preventDefault();\n this.activateDay(currentDate);\n }\n };\n\n onInputBlur = () => {\n if (!this.isTypeable) return;\n\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { typedValue } = this;\n const { isValid, inputDate, isAvailable } = validateInput(\n this.typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (!typedValue && inputDate?.toString() === 'Invalid Date') {\n // initial/clear state\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n } else if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.valueOnBlur = this.value;\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n };\n\n onInputChange = (event: Event) => {\n event.stopPropagation();\n };\n\n onInputClick = () => {\n if (this.disabled) return;\n this.toggleCalendar();\n };\n\n onInputFocus = (event: FocusEvent) => {\n if (!this.isTypeable) return;\n if (event.target === this.controlElement) {\n if (this.valueOnBlur && !this.value) {\n const tmpTypedValue = this.typedValue;\n this.value = this.valueOnBlur;\n this.typedValue = tmpTypedValue;\n this.valueOnBlur = null;\n }\n this.closeCalendar();\n }\n };\n\n onInputInput = ({ detail: { value } }: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n this.typedValue = value;\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const { dateValue } = this;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.openCalendar();\n this.activateDay(dateValue || new Date());\n break;\n\n case 'Enter':\n case ' ':\n if (this.typeable) break;\n event.preventDefault();\n if (this.open) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n this.activateDay(dateValue || new Date());\n }\n break;\n }\n };\n\n onInputKeyup = (event: KeyboardEvent) => {\n if (this.disabled) {\n return;\n }\n\n switch (event.key) {\n case 'Escape':\n this.onInputBlur();\n this.closeCalendar();\n break;\n }\n\n if (!this.isTypeable) return;\n\n // handle missing zero in month and date\n this.typedValue = handleMissingZeros(this.typedValue);\n const { typedValue } = this;\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { isValid, message, messageType, inputDate, isAvailable, calendarPosition } = validateInput(\n typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (calendarPosition) {\n const [mm, dd, yyyy] = calendarPosition;\n const date = new Date(yyyy, mm - 1, dd);\n if (isValidDate(date)) {\n this.selectedMonthYear = setupMonthYear(date);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n }\n\n if (event.key === 'Enter') {\n if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n\n if (this.keyboardSelection) {\n this.keyboardSelection = false;\n this.closeCalendar();\n } else {\n this.toggleCalendar();\n }\n } else {\n this.setHints({ isValid, message, messageType });\n }\n };\n\n onPopupKeyup = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.onInputBlur();\n this.closeCalendar();\n }\n };\n\n onRefocus = () => {\n this.btnPrevMonth?.dispatchEvent(new FocusEvent('focus'));\n };\n\n openCalendar = () => {\n if (this.readonly || this.open) return;\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.open = true;\n };\n\n selectDate = (newDate: Date) => {\n const { isValid } = this.dateList.find(({ date }) => isSameDay(date, newDate));\n if (!isValid) return;\n this.change.emit({ value: formatDateISO(newDate) });\n this.typedValue = formatDateShort(newDate);\n this.invalid = false;\n this.success.emit({ value: formatDateISO(newDate) });\n };\n\n setCompleteInput(inputDate: Date) {\n const formattedDate = formatDateShort(inputDate);\n this.change.emit({ value: formatDateISO(inputDate) });\n this.typedValue = formattedDate;\n this.internalError = null;\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n }\n\n setHints({ isValid, message, messageType }) {\n if (message === this.hintMessage) return this.hintMessageElement?.present();\n this.invalid = !isValid;\n this.hintMessage = message;\n this.hintMessageType = messageType;\n if (messageType === 'error' && message) {\n this.internalError = message;\n this.error.emit({\n errors: [\n {\n message,\n errorCode: 'generalInvalid',\n },\n ],\n });\n }\n }\n\n toggleCalendar = () => {\n if (this.readonly) return;\n if (this.open) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n }\n };\n\n validateDate() {\n try {\n if (!!this.value) {\n const { dateValue } = this;\n const month = dateValue?.getMonth() ?? undefined;\n const year = dateValue?.getFullYear() ?? undefined;\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n\n const isSelectedMonthAndYear = month === monthIndex && year === selectedYear;\n let calculationDateList = [];\n\n if (!dateValue) {\n calculationDateList = [];\n } else if (isSelectedMonthAndYear) {\n calculationDateList = this.dateList;\n } else {\n calculationDateList = this.buildDateList({\n monthIndex: month,\n selectedYear: year,\n });\n }\n\n const dateValueDayOfMonth = dateValue?.getDate() ?? undefined;\n const isDateValueInvalid = dateValueDayOfMonth\n ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth).isValid\n : true;\n if (isDateValueInvalid) {\n this.error.emit({\n errors: [\n {\n message: `Value passed is invalid: The date ${this.value} is not valid`,\n errorCode: 'generalInvalid',\n },\n ],\n });\n } else {\n this.success.emit({ value: formatDateISO(dateValue) });\n }\n }\n } catch (error) {\n console.warn('Invalid moment value ', this.dateValue);\n }\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <click-elsewhere\n class={this.open ? 'dropdown-open' : undefined}\n onChange={this.onClickElsewhere}\n >\n {this.renderInputField()}\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.innerInputContainer}\n open={this.open}\n direction={this.popoverDirection}\n minHeight={this.popoverMinHeight}\n align={this.popoverAlignment}\n mode={this.popoverMode || undefined}\n block\n >\n {this.renderHintField()}\n {this.renderCalendarPopover()}\n </q2-popover>\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n"],"version":3}
|
|
1
|
+
{"file":"q2-calendar.entry.cjs.js","mappings":"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","names":["isValidDate","formatISO","setMinutes","loc","getDaysInMonth","isSameDay","isAfter","isBefore","addDays","handleAriaLabel","overrideFocus","isEventFromElement","waitForNextPaint","handleRenamedProp","format","h"],"sources":["src/components/q2-calendar/q2-calendar-helpers.ts","src/components/q2-calendar/q2-calendar-validation.ts","src/components/q2-calendar/q2-calendar.scss?tag=q2-calendar&encapsulation=shadow","src/components/q2-calendar/q2-calendar.tsx"],"sourcesContent":["import { isValid as isValidDate, formatISO, setMinutes } from 'date-fns';\nimport { loc } from '../../utils';\nimport { ISelectedMonthYear, InputValidation } from './q2-calendar-types';\n\nexport interface IMomentLikeObject {\n toDate(): Date;\n}\n\nexport function formatDateISO(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n return formatISO(date, { representation: 'date' });\n}\n\nlet memoizedFormatDateShort: Intl.DateTimeFormat;\nexport function formatDateShort(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n const isoDate = date.toISOString();\n if (!memoizedFormatDateShort) {\n memoizedFormatDateShort = new Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateShort.format(new Date(isoDate));\n}\n\nlet memoizedFormatDateLong: Intl.DateTimeFormat;\nexport function formatDateLong(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateLong) {\n memoizedFormatDateLong = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n }\n\n return memoizedFormatDateLong.format(date);\n}\n\nlet memoizedFormatDateFull: Intl.DateTimeFormat;\nexport function formatDateFull(value: string | Date) {\n if (!value) return;\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateFull) {\n memoizedFormatDateFull = new Intl.DateTimeFormat('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n weekday: 'long',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateFull.format(date);\n}\n\nexport function convertMomentFormat(stringFormat: string) {\n return stringFormat\n .replace(/[d]/g, 'E')\n .replace(/[D]/g, 'd')\n .replace(/[Y]/g, 'y')\n .replace(/[l]/g, 'P')\n .replace(/[W]/g, 'I');\n}\n\nexport function stringToDate(date: string | null | void): Date | undefined {\n const isString = typeof date === 'string';\n if (!isString && date && isValidDate(new Date(date || undefined))) {\n date = formatDateISO(date);\n } else if (!date || !isValidDate(new Date(date))) {\n return undefined;\n }\n\n let result: Date;\n const dateParts = date.split(/[\\/\\-]/).map(part => part.padStart(2, '0'));\n const isIsoString = isString && date.length >= 24 && date[10] === 'T';\n const isCompleteDate = dateParts.length === 3;\n const isPartialDate = dateParts.length < 3;\n if (isIsoString) {\n date = date.split('T')[0];\n result = new Date(date);\n } else if (isCompleteDate) {\n const isStandardSlashDate = date.includes('/') && dateParts[2].length === 4;\n\n // Reorder mm/dd/yyyy dates for ISO formatting\n // [mm, dd, yyyy] -> [yyyy, mm, dd]\n if (isStandardSlashDate) dateParts.unshift(dateParts.pop());\n\n result = new Date(Date.UTC(parseInt(dateParts[0]), parseInt(dateParts[1]) - 1, parseInt(dateParts[2])));\n } else if (isPartialDate) {\n const now = new Date();\n\n let yearNumber: number;\n let monthNumber: string;\n let dayNumber: string;\n switch (dateParts.length) {\n case 1:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = '01';\n break;\n\n case 2:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = dateParts[1];\n break;\n }\n\n result = new Date(`${yearNumber}-${monthNumber}-${dayNumber}`);\n }\n\n if (!isValidDate(result)) return undefined;\n\n // result = setHours(result, 0);\n result = removeTimezoneOffset(result);\n\n return isValidDate(result) ? result : undefined;\n}\n\nexport function removeTimezoneOffset(date: Date) {\n const timeZoneOffset = date.getTimezoneOffset();\n // Minutes compensation for some timezones like India, Central Australia and etc use GMT+5:30, GMT+9:30\n return setMinutes(date, timeZoneOffset + Math.abs(timeZoneOffset % 60));\n}\n\nexport function stringArrayToDate(dateArray: string[]): Date[] {\n if (!Array.isArray(dateArray) || dateArray.length === 0) {\n return [];\n }\n return dateArray.map(date => stringToDate(date));\n}\n\nexport function setupMonthYear(value: Date | undefined = new Date()): ISelectedMonthYear {\n return {\n monthIndex: value.getMonth(),\n selectedYear: value.getFullYear(),\n };\n}\n\nexport function validateInput(\n input: string = '',\n validDays: number[] = [],\n validDates: string[] = [], // white list\n invalidDates: string[] = [], // black list\n startDate: string,\n endDate: string,\n formatString: string = 'mm/dd/yyyy',\n assume: string\n): InputValidation {\n let isValid: boolean = true;\n let isAvailable: boolean = false;\n let messageType: string = 'info';\n let message: string = `${loc('tecton.element.calendar.hint.format')}: ${formatString}`;\n if (!input) {\n return { isValid, inputDate: new Date(''), isAvailable, messageType, message };\n }\n\n const inputDate = buildInputDate(input, assume);\n const month = inputDate.getMonth() + 1;\n const date = inputDate.getDate();\n const year = inputDate.getFullYear();\n const calendarPosition = [month, date, year];\n\n if (isValidDate(inputDate)) {\n const monthName = getMonths()[inputDate.getMonth()];\n\n if (input.length === 10) {\n isValid = true;\n messageType = null;\n message = null;\n }\n\n isAvailable = validDays.includes(inputDate.getDay());\n const isoString = formatDateISO(inputDate);\n\n if (isAvailable) {\n const isNotValidDate = validDates.length && !validDates.includes(isoString);\n const isInvalidDate = invalidDates.length && invalidDates.includes(isoString);\n const isBeforeStartDate = startDate && startDate > isoString;\n const isAfterEndDate = endDate && endDate < isoString;\n\n if (isNotValidDate || isInvalidDate || isBeforeStartDate || isAfterEndDate) {\n isAvailable = false;\n }\n }\n\n if (input.length >= 5 && !isAvailable) {\n isValid = false;\n messageType = 'error';\n const isInvalid = !monthName || !date || !year;\n message = isInvalid\n ? `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`\n : loc('tecton.element.calendar.hint.notAvailableDate', [formatDateLong(inputDate)]);\n }\n } else {\n isValid = false;\n messageType = 'error';\n message = `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`;\n }\n\n return {\n isValid,\n messageType,\n message,\n inputDate,\n isAvailable,\n calendarPosition,\n };\n}\n\nexport function buildInputDate(input: string, assume: string) {\n const now = new Date();\n // eslint-disable-next-line prefer-const\n let [month, day, year] = input.split('/');\n if (month === '0') month = '01';\n if (day === '0') day = '01';\n if (input.length === 10) {\n return new Date(input);\n } else if (month && day && Number(day) > 0) {\n const twoDigitDay = Number(day) < 10 ? `0${Number(day)}` : day;\n const fourDigitYear = !year || year.length < 4 ? assumeYear(month, day, assume) : year;\n return new Date(`${month}/${twoDigitDay}/${fourDigitYear}`);\n } else if (month) {\n return new Date(`${month}/01/${now.getFullYear()}`);\n }\n}\n\nfunction assumeYear(month: string, day: string, assume: string): string {\n const monthDay = `${month}/${day}`;\n const now = new Date();\n const mm: string = now.getMonth() < 9 ? `0${now.getMonth() + 1}` : `${now.getMonth() + 1}`;\n const dd: string = now.getDate() < 10 ? `0${now.getDate()}` : `${now.getDate()}`;\n const nowLocal = `${mm}/${dd}/${now.getFullYear()}`;\n let assumedYear = now.getFullYear();\n if (assume === 'future' && nowLocal.slice(0, 5) > monthDay) {\n assumedYear = now.getFullYear() + 1;\n } else if (assume === 'past' && nowLocal.slice(0, 5) < monthDay) {\n assumedYear = now.getFullYear() - 1;\n }\n return assumedYear.toString();\n}\n\nexport function handleMissingZeros(input): string {\n if (!input) {\n return '';\n }\n if (input.match(/^[1-9]\\/$/)) {\n return `0${input}/`;\n } else if (input.match(/^[0-9]{2}\\/[1-9]{1}\\/$/)) {\n const sp = input.split('/');\n return `${sp[0]}/0${sp[1]}/`;\n }\n return input;\n}\n\nexport function reorderDateString(input: string): string {\n const dateParts = (input || '').split('-');\n if (dateParts.length !== 3) return '';\n return `${dateParts[1]}/${dateParts[2]}/${dateParts[0]}`;\n}\n\nexport function firstDayOfWeekInMonth(month: number, year: number): number {\n return new Date(year, month, 1, 1, 1, 1, 1).getDay();\n}\n\nexport function getDays(): string[] {\n return [\n loc('tecton.element.calendar.days.short.Sunday'),\n loc('tecton.element.calendar.days.short.Monday'),\n loc('tecton.element.calendar.days.short.Tuesday'),\n loc('tecton.element.calendar.days.short.Wednesday'),\n loc('tecton.element.calendar.days.short.Thursday'),\n loc('tecton.element.calendar.days.short.Friday'),\n loc('tecton.element.calendar.days.short.Saturday'),\n ];\n}\n\nexport function getDaysOfWeek(): string[] {\n return [\n loc('tecton.element.calendar.days.Sunday'),\n loc('tecton.element.calendar.days.Monday'),\n loc('tecton.element.calendar.days.Tuesday'),\n loc('tecton.element.calendar.days.Wednesday'),\n loc('tecton.element.calendar.days.Thursday'),\n loc('tecton.element.calendar.days.Friday'),\n loc('tecton.element.calendar.days.Saturday'),\n ];\n}\n\nexport function getMonths(): string[] {\n return [\n loc('tecton.element.calendar.months.January'),\n loc('tecton.element.calendar.months.February'),\n loc('tecton.element.calendar.months.March'),\n loc('tecton.element.calendar.months.April'),\n loc('tecton.element.calendar.months.May'),\n loc('tecton.element.calendar.months.June'),\n loc('tecton.element.calendar.months.July'),\n loc('tecton.element.calendar.months.August'),\n loc('tecton.element.calendar.months.September'),\n loc('tecton.element.calendar.months.October'),\n loc('tecton.element.calendar.months.November'),\n loc('tecton.element.calendar.months.December'),\n ];\n}\n","import { firstDayOfWeekInMonth } from './q2-calendar-helpers';\nimport { getDaysInMonth, isSameDay, isBefore, isAfter, isValid as isValidDate } from 'date-fns';\nimport { CalendarDay, DateEmpty, Year, IDateValidators, ISelectedMonthYear } from './q2-calendar-types';\n\n// Validation Helpers\nexport type DateList = CalendarDay[];\nexport type IsValid = boolean;\nexport type IsActivityDate = boolean;\nexport type DateValidation = (date: Date) => IsValid;\n\nexport function generateDatesFromMonthYear(month: number, year: Year): Date[] {\n const daysInMonth = getDaysInMonth(new Date(year, month));\n\n return [...Array(daysInMonth).keys()].reduce((acc, stepIndex) => {\n acc.push(new Date(year, month, stepIndex + 1));\n return acc;\n }, []);\n}\n\nexport function getValidDaysOfWeek(checksum: number = 127): number[] {\n /* tslint:disable:no-bitwise */\n const sunValid = checksum & 1;\n const monValid = checksum & 2;\n const tuesValid = checksum & 4;\n const wedsValid = checksum & 8;\n const thursValid = checksum & 16;\n const friValid = checksum & 32;\n const satValid = checksum & 64;\n /* tslint:enable:no-bitwise */\n const ret = [];\n\n if (checksum <= 0) return ret;\n if (sunValid) ret.push(0);\n if (monValid) ret.push(1);\n if (tuesValid) ret.push(2);\n if (wedsValid) ret.push(3);\n if (thursValid) ret.push(4);\n if (friValid) ret.push(5);\n if (satValid) ret.push(6);\n\n return ret;\n}\n\nexport function validateAgainstChecksum(validDaysOfWeek: number[], newDate: Date): IsValid {\n return validDaysOfWeek.includes(newDate.getDay());\n}\n\nexport function validateAgainstBlacklist(invalidDates: Date[], newDate: Date): IsValid {\n return !validateAgainstWhitelist(invalidDates, newDate);\n}\n\nexport function validateAgainstWhitelist(validDates: Date[], newDate: Date): IsValid {\n return validDates.some(validDate => isSameDay(validDate, newDate));\n}\n\nexport function buildDates(\n validDaysOfWeek: number[],\n validDates: Date[],\n invalidDates: Date[],\n selectedMonthYear: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n typedValue: string\n): DateList {\n const validationFns = [baseValidation.bind(null, dateValidators, new Date())];\n if (validDates?.length) {\n validationFns.push(validateAgainstWhitelist.bind(null, validDates));\n } else {\n validationFns.push(validateAgainstChecksum.bind(null, validDaysOfWeek));\n }\n validationFns.push(validateAgainstBlacklist.bind(null, invalidDates));\n\n return generateDateList(selectedMonthYear, currentSelection, dateValidators, validationFns, typedValue);\n}\n\nexport function generateDateList(\n { monthIndex, selectedYear }: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n validationFns: DateValidation[],\n typedValue: string\n): DateList {\n const isIncompleteDate = !isValidDate(new Date(typedValue));\n const datesInMonth = generateDatesFromMonthYear(monthIndex, selectedYear).map((dayInMonth, dateIndex) => {\n const isInvalid = validationFns.some(fn => !fn(dayInMonth));\n const dayState = getDayState(dayInMonth, dateValidators, currentSelection);\n const classList = generateClassesForCalDay({\n ...dayState,\n isInvalid,\n isIncompleteDate,\n });\n\n return {\n ...dayState,\n isValid: !isInvalid,\n date: dayInMonth,\n integer: dateIndex + 1,\n isEmpty: false,\n isActivity: false,\n classList,\n };\n });\n\n const startOfMonthEmpties = addEmptiesMonthStart(firstDayOfWeekInMonth(monthIndex, selectedYear));\n const endOfMonthEmpties = addEmptiesMonthEnd((startOfMonthEmpties.length + datesInMonth.length) % 7);\n\n return [...startOfMonthEmpties, ...datesInMonth, ...endOfMonthEmpties] as CalendarDay[];\n}\n\nexport function baseValidation(dateValidators: IDateValidators, now: Date, newDate: Date): boolean {\n const isNewDateBeforeStartDate = isAfter(dateValidators?.startDate, newDate);\n const isNewDateAfterEndDate = isBefore(dateValidators?.endDate, newDate);\n const isNowAfterCutoffTime = isSameDay(now, newDate) && isAfter(now, dateValidators?.cutOffTime);\n\n return !(isNewDateBeforeStartDate || isNowAfterCutoffTime || isNewDateAfterEndDate);\n}\n\nexport function getDayState(dayInMonth: Date, dateValidators: IDateValidators, currentDate: Date | undefined) {\n if (!currentDate) currentDate = new Date();\n const isSelected = currentDate && isSameDay(currentDate, dayInMonth);\n const isToday = isSameDay(dayInMonth, new Date());\n const isStartDate = isSameDay(dayInMonth, dateValidators?.startDate);\n const isEndDate = isSameDay(dayInMonth, dateValidators?.endDate);\n\n return { isSelected, isToday, isStartDate, isEndDate };\n}\n\nexport function generateClassesForCalDay({\n isInvalid,\n isSelected,\n isEndDate,\n isStartDate,\n isToday,\n isIncompleteDate,\n}: {\n isInvalid: boolean;\n isSelected: boolean;\n isEndDate: boolean;\n isStartDate: boolean;\n isToday: boolean;\n isIncompleteDate: boolean;\n}): string {\n const classes = [];\n if (!isInvalid) classes.push('is-valid');\n if (isSelected) classes.push('is-selected');\n if (isEndDate) classes.push('is-end-date');\n if (isStartDate) classes.push('is-start-date');\n if (isToday) classes.push('is-today');\n if (isSelected && isInvalid && !isIncompleteDate) classes.push('is-unavailable');\n\n return classes.join(' ');\n}\n\nexport function addEmptiesMonthStart(monthStartDayOfWeek: number): DateEmpty[] {\n return addEmptyDates(0, monthStartDayOfWeek);\n}\n\nexport function addEmptiesMonthEnd(monthEndDayOfWeek: number): DateEmpty[] {\n if (monthEndDayOfWeek === 0) return [];\n return addEmptyDates(monthEndDayOfWeek, 7);\n}\n\nexport const emptyDate: DateEmpty = {\n date: null,\n integer: null,\n isActivity: false,\n isEmpty: true,\n isValid: false,\n isToday: false,\n isSelected: false,\n isStartDate: false,\n isEndDate: false,\n classList: '',\n};\n\nexport function addEmptyDates(from: number, to: number): DateEmpty[] {\n if (from === 7) from = 0;\n return [...Array(to - from).keys()].map(() => ({ ...emptyDate }) as DateEmpty);\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n --comp-default-calendar-margin: #{var-list(var-prefixer(calendar-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(calendar-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-calendar-margin, --comp-default-calendar-margin);\n}\n\n:host[hidden] {\n display: none;\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n\nq2-input {\n margin: 0;\n cursor: pointer;\n}\n\nq2-popover {\n --comp-min-tappable-size: 44px;\n --comp-table-border-spacing: 2px;\n --comp-min-tappable-size-and-spacing: calc(var(--comp-min-tappable-size) + var(--comp-table-border-spacing));\n --comp-popover-padding: #{var-list(var-prefixer(calendar-popover-padding), --app-scale-1x, 5px)};\n --comp-min-table-width: calc(var(--comp-min-tappable-size-and-spacing) * 7);\n --comp-table-container-border-spacing: calc(var(--comp-table-border-spacing) * 2);\n --comp-popover-total-padding: calc(var(--comp-popover-padding) * 2);\n\n --tct-popover-min-width: calc(\n var(--comp-min-table-width) + var(--comp-table-container-border-spacing) + var(--comp-popover-total-padding)\n );\n}\n\n.calendar-field-popup {\n padding: var(--comp-popover-padding);\n}\n\n.calendar-label {\n --comp-label-padding: #{var-list(\n --tct-calendar-label-padding,\n unquote('#{var-list(var-prefixer(calendar-label-vertical-padding), --tct-scale-2, --app-scale-2x, 10px)} 0')\n )};\n font-size: var-list(var-prefixer(calendar-label-font-size), 16px);\n flex: 1 1;\n flex-basis: calc(100% - var-list(--tct-btn-icon-width, 44px));\n margin: 0;\n padding: var(--comp-label-padding);\n}\n\n.cal-month-heading {\n padding: 0 0 0.75rem;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(var-prefixer(calendar-month-font-size), 16px);\n font-weight: var-list(var-prefixer(calendar-month-font-weight), 600);\n text-align: center;\n}\n\n.cal-month-text {\n min-width: 82px;\n display: inline-block;\n}\n\n.cal-year-text {\n min-width: 50px;\n display: inline-block;\n}\n\ntable {\n width: 100%;\n margin-bottom: 2px;\n text-align: center;\n border-spacing: var(--comp-table-border-spacing);\n}\n\nth {\n font-size: var-list(var-prefixer(calendar-day-heading-font-size), inherit);\n font-weight: var-list(var-prefixer(calendar-day-heading-font-weight), 600);\n width: 14.285714%;\n}\n\ntd {\n height: var(--comp-min-tappable-size);\n cursor: pointer;\n border: var-list(var-prefixer(calendar-day-border), 0);\n border-radius: var-list(var-prefixer(calendar-day-border-radius));\n\n &.is-unavailable {\n border: 1px solid var-list(--tct-input-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n\n &.is-valid:hover {\n border: var-list(var-prefixer(calendar-day-hover-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-hover-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n\n background: var-list(\n --tct-calendar-day-hover-background,\n var-prefixer(calendar-day-hover-bg),\n --tct-gray-14,\n --app-gray14,\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(var-prefixer(calendar-day-hover-font-color), inherit);\n }\n\n &[aria-hidden],\n &[aria-disabled] {\n pointer-events: none;\n cursor: not-allowed;\n }\n\n &[aria-disabled] {\n opacity: var-list(var-prefixer(calendar-day-disabled-opacity), --app-disabled-opacity, 0.4);\n }\n\n &[aria-selected] {\n border: var-list(var-prefixer(calendar-day-selected-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-selected-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n background: var-list(\n --tct-calendar-day-selected-background,\n var-prefixer(calendar-day-selected-bg),\n --tct-calendar-day-hover-background,\n var-prefixer(calendar-day-hover-bg),\n var-prefixer(gray-14),\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(\n var-prefixer(calendar-day-selected-font-color),\n var-prefixer(calendar-day-hover-font-color),\n inherit\n );\n box-shadow: 0 0 0 2px\n var-list(\n var-prefixer(calendar-day-selected-outline-color),\n --tct-stoplight-info,\n --const-stoplight-info,\n #0079c1\n );\n }\n &[aria-selected]:focus {\n box-shadow:\n 0 0 0 2px\n var-list(\n var-prefixer(calendar-day-selected-outline-color),\n --tct-stoplight-info,\n --const-stoplight-info,\n #0079c1\n ),\n 0 0 0 4px var(--const-focus-color, #0066cc);\n }\n}\n\n.today-decorator {\n text-transform: uppercase;\n font-weight: 700;\n font-size: 10px;\n height: 12px;\n}\n\n.calendar-disclaimer {\n font-size: var-list(\n var-prefixer(calendar-disclaimer-font-size),\n --tct-font-size-small,\n --app-font-size-small,\n 12px\n );\n border-style: solid;\n border-width: var-list(var-prefixer(calendar-disclaimer-border-width), unquote('1px 0 0 0'));\n border-color: var-list(\n var-prefixer(calendar-disclaimer-border-color),\n var-prefixer(gray-13),\n --tct-gray-l3,\n --app-gray-l3,\n #e6e6e6\n );\n padding: var-list(--tct-calendar-disclaimer-padding, --tct-scale-2, --app-scale-2x, 10px);\n text-align: left;\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n Listen,\n Watch,\n Method,\n h,\n} from '@stencil/core';\nimport { ISelectedMonthYear, CalendarDay, IDateValidators } from './q2-calendar-types';\nimport { addDays, isSameDay, format, isValid as isValidDate } from 'date-fns';\nimport {\n stringToDate,\n setupMonthYear,\n getMonths,\n getDays,\n getDaysOfWeek,\n stringArrayToDate,\n convertMomentFormat,\n validateInput,\n handleMissingZeros,\n formatDateISO,\n formatDateShort,\n IMomentLikeObject,\n removeTimezoneOffset,\n reorderDateString,\n formatDateFull,\n} from './q2-calendar-helpers';\nimport { buildDates, getValidDaysOfWeek, DateList } from './q2-calendar-validation';\nimport {\n handleAriaLabel,\n loc,\n overrideFocus,\n isEventFromElement,\n handleRenamedProp,\n waitForNextPaint,\n} from '../../utils';\nimport { IEventDetail } from '../q2-input/q2-input-types';\nimport { Q2InputCustomEvent } from 'src/components';\n\n@Component({ tag: 'q2-calendar', shadow: true, styleUrl: 'q2-calendar.scss' })\nexport class Q2Calendar implements ComponentInterface {\n // #region Own Properties\n\n btnCalendarToggle: HTMLQ2BtnElement;\n btnNextMonth: HTMLQ2BtnElement;\n btnNextYear: HTMLQ2BtnElement;\n btnPrevMonth: HTMLQ2BtnElement;\n btnPrevYear: HTMLQ2BtnElement;\n calendarBody: HTMLDivElement;\n calendarTable: HTMLTableElement;\n controlElement: HTMLQ2InputElement;\n dayAbbrStrings = getDays();\n dayStrings = getDaysOfWeek();\n defaultFormatString = 'mm/dd/yyyy';\n formatModifier: string = 'M/D/YYYY'; // To allow missing leading zero, 4/3/2021 => converts into 04/03/2021\n hintMessageElement: HTMLQ2MessageElement;\n internalError: string = '';\n monthStrings = getMonths();\n popoverElement?: HTMLQ2PopoverElement;\n scheduledAfterRender: (() => void)[] = [];\n selectedMonthYear: ISelectedMonthYear;\n valueOnBlur: string | { toDate(): Date };\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n dateList: CalendarDay[];\n\n @State()\n hintMessage: string = this.defaultHintMessage;\n\n @State()\n hintMessageType: 'info' | 'error' = 'info';\n\n @State()\n keyboardSelection: boolean = false;\n\n @State()\n typedValue: string = '';\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Detects the year automatically based on today's date when the user presses the `Escape` key or the `Blur` mouse event occurs.\n * Setting `future` or `past` as the value will increase or decrease the year by one, respectively.\n */\n @Prop({ reflect: true })\n assume: 'current' | 'future' | 'past' = 'current';\n\n /** @deprecated */\n @Prop({ reflect: true })\n buttonLabel: string;\n\n /** A label shown at the top of the popover date picker. */\n @Prop({ reflect: true })\n calendarLabel: string;\n\n /** Display a button in the input field allowing the user to clear their selection. */\n @Prop({ reflect: true })\n clearable: boolean;\n\n /**\n * Specifies a time of day after which a date is no longer valid.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n cutoffTime: string;\n\n /**\n * The most concise way to define valid days of the week for calendar. Each day of the week has a checksum value:\n *\n * - Sunday = 1\n * - Monday = 2\n * - Tuesday = 4\n * - Wednesday = 8\n * - Thursday = 16\n * - Friday = 32\n * - Saturday = 64\n *\n * Add the checksum values of your desired valid days together, and set `daysOfWeekChecksum` to that summed value.\n *\n * **Example:**\n * @snippet\n * element.daysOfWeekChecksum = 127 // All days of the week are valid\n * element.daysOfWeekChecksum = 62; // Only weekdays are valid\n * element.daysOfWeekChecksum = 65; // Only Saturday and Sunday are valid\n *\n */\n @Prop({ reflect: true })\n daysOfWeekChecksum: number;\n\n /** Disable the input field. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Text that displays as the placeholder when the field is marked `disabled`.\n * @localizable\n */\n @Prop({ reflect: true })\n disabledMsg: string;\n\n /** Text that appears at the bottom of the popover date picker. */\n @Prop({ reflect: true })\n disclaimer: string;\n\n /**\n * Determines the display format of the date field value.\n *\n * Must follow the [date-fns](https://date-fns.org/v2.28.0/docs/format) token specification.\n */\n @Prop({ reflect: true })\n displayFormat: string;\n\n /**\n * Defines the last selectable date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n endDate: string;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused and `typeable` is `true`.\n * @localizable\n */\n @Prop({ mutable: true })\n errors: string[];\n\n /** Hide the input field's ` <label> ` element from view. */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused and `typeable` is true.\n * @localizable\n */\n @Prop({ mutable: true })\n hints: string[];\n\n /** Show error styles when the calendar is in an errant state. */\n @Prop({ reflect: true, mutable: true })\n invalid: boolean;\n\n /**\n * Defines an explicit date blacklist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `invalidDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop()\n invalidDates: string[];\n\n /** The visible label for the `q2-calendar` input field. */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** @deprecated */\n @Prop()\n onsuccess: (e: CustomEvent) => void;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** Appends \"(optional)\" to the label and sets `aria-required=\"false\"`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * Text that appears within the input field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /** @deprecated */\n @Prop({ reflect: true })\n popDirection: 'up' | 'down';\n\n /** Aligns the popover date picker to the left or right side of the input field. */\n @Prop()\n popoverAlignment: 'left' | 'right';\n\n /**\n * Force the direction of the popover date picker when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ mutable: true })\n popoverDirection: 'up' | 'down';\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number = 355;\n\n /**\n * Determines the display mode of the popover.\n *\n * Providing a value of `legacy` instructs the popover to use absolute positioning instead of fixed positioning.\n *\n * @info\n * This is a temporary solution to work around styling issues related to using fixed positioning for the popover\n * when nested inside of elements with transform properties. This will be removed once the popover API is available\n * for use.\n */\n @Prop({ mutable: true })\n popoverMode: 'legacy' = null;\n\n /**\n * The field's content is not editable, but the field remains focusable.\n *\n * Appends \"(readonly)\" to the field label. Supersedes `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /**\n * Defines the first selectabe date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n startDate: string;\n\n /** The user can type in the field. Only available in desktop browsers. */\n @Prop({ reflect: true })\n typeable: boolean;\n\n /**\n * Defines an explicit date whitelist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `validDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop()\n validDates: string[];\n\n /**\n * The value of the `q2-calendar` element, e.g. the selected date.\n *\n * **How to change or clear the value with javascript:**\n * @snippet\n * // change date\n * element.value = '2022-12-21';\n * // clear date\n * element.value = null;\n */\n @Prop({ mutable: true, reflect: true })\n value: string | { toDate(): Date };\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a date is selected or typed in the input field.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{\n // ISO formatted date\n value: string | null;\n }>;\n\n /**\n * Emitted when an invalid date is entered into the field.\n */\n @Event()\n error: EventEmitter<{ errors: { message: string; errorCode: string }[] }>;\n\n /**\n * Emitted when a valid date is entered or selected.\n */\n @Event()\n success: EventEmitter<{\n // ISO formatted date\n value: string;\n }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n connectedCallback() {\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n if (this.value && this.isTypeable && !this.typedValue) {\n this.typedValue = reorderDateString(this.value as string);\n }\n this.validateDate();\n }\n\n componentWillLoad() {\n this.popDirectionHandler();\n handleAriaLabel(this);\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n setTimeout(() => {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }, 25);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange && !!event.detail) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('clear')\n handleClear() {\n this.change.emit({ value: null });\n this.value = null;\n this.typedValue = '';\n }\n\n @Listen('error')\n defaultErrorHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onerror) {\n if (this.hintMessageType === 'error' && this.hintMessage) {\n this.internalError = this.hintMessage;\n } else {\n this.internalError = loc('tecton.element.calendar.hint.invalidDate');\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.controlElement.shadowRoot.querySelector<HTMLElement>('.input-field').focus();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n }\n\n @Listen('success')\n defaultSuccessHandler(event: CustomEvent) {\n if (event.target !== this.hostElement) {\n return;\n }\n\n if (typeof this.onsuccess === 'function') {\n this.onsuccess(event);\n } else {\n this.internalError = '';\n if (this.hintMessageType === 'error' && this.hintMessage) {\n this.hintMessage = null;\n this.hintMessageType = null;\n this.invalid = false;\n }\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<input>` to hide the popover if it is visible.\n *\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover if it is hidden.\n *\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover, moving to the correct month and year, and clicking the\n * provided date.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @testOnly\n */\n @Method()\n async setValue(value: string | Date) {\n const date = typeof value === 'string' ? stringToDate(value) : value;\n if (!isValidDate(date)) return;\n\n await this.openPopover();\n await waitForNextPaint();\n\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n await waitForNextPaint();\n const tableCell = this.calendarTable?.querySelector<HTMLTableCellElement>(\n `td[data-date=\"${formatDateISO(date)}\"]`\n );\n tableCell?.click();\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @warning\n * Only applicable when the input is typeable.\n *\n * @testOnly\n */\n @Method()\n async typeValue(value: string | Date) {\n if (!this.typeable) return;\n\n const date = typeof value === 'string' ? stringToDate(value) : value;\n const formattedDate = formatDateShort(date);\n if (!isValidDate(date)) return;\n\n const { innerInputField, controlElement } = this;\n innerInputField.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n innerInputField.value = formattedDate;\n innerInputField.dispatchEvent(new InputEvent('input'));\n controlElement.dispatchEvent(new KeyboardEvent('keyup'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('cutoffTime')\n cutoffTimeObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('daysOfWeekChecksum')\n daysOfWeekChecksumObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('endDate')\n endDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('invalidDates')\n invalidDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('popDirection')\n popDirectionHandler() {\n handleRenamedProp(this, 'popDirection', 'popoverDirection');\n }\n\n @Watch('startDate')\n startDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('typeable')\n typeableChanged() {\n this.valueObserver(this.value);\n }\n\n @Watch('validDates')\n validDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('value')\n valueObserver(newValue: string | IMomentLikeObject) {\n // resetting by empty string\n if (newValue === '') {\n this.value = undefined;\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n return;\n }\n const isMoment = newValue && typeof newValue !== 'string' && 'toDate' in newValue;\n const newDate = isMoment ? (newValue as IMomentLikeObject).toDate() : stringToDate(newValue as string);\n const shortFormattedValue = formatDateShort(newDate);\n if (this.isTypeable) {\n this.typedValue = shortFormattedValue;\n } else {\n this.controlElement.value = shortFormattedValue;\n this.selectedMonthYear = setupMonthYear(newDate);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n // reset hint when value is cleared\n if (this.invalid) return;\n\n if (shortFormattedValue) {\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n } else {\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get canClear() {\n if (this.isTypeable) {\n return this.clearable && !!this.typedValue;\n } else {\n return this.clearable && !!this.value;\n }\n }\n\n get computedPlaceholder(): string {\n if (this.disabled && this.disabledMsg) {\n return loc(this.disabledMsg);\n }\n\n if (this.buttonLabel && (this.disabled || this.placeholder)) {\n return loc(this.buttonLabel);\n }\n\n return (this.placeholder && loc(this.placeholder)) || '';\n }\n\n get currentWeeks() {\n const weeks = this.dateList.reduce<CalendarDay[][]>((accum, item, index) => {\n const chunkIndex = Math.floor(index / 7);\n\n if (!accum[chunkIndex]) {\n accum[chunkIndex] = [];\n }\n\n accum[chunkIndex].push(item);\n\n return accum;\n }, []);\n\n return weeks;\n }\n\n get dateValidators(): IDateValidators {\n const ct = new Date(this.cutoffTime || ''); // should fallback to InvalidDate\n return {\n startDate: stringToDate(this.startDate),\n endDate: stringToDate(this.endDate),\n cutOffTime: isValidDate(ct) ? ct : undefined,\n };\n }\n\n get dateValue(): Date | undefined {\n if (this.isTypeable) {\n return stringToDate(this.typedValue);\n } else {\n let { value } = this;\n const isMoment = value && typeof value !== 'string' && 'toDate' in value;\n if (isMoment) return (value as IMomentLikeObject).toDate();\n\n // stringified moment value assigned in html template e.g.) handlebar\n const isMomentString =\n typeof value === 'string' && value.split(' ').length === 6 && /GMT-\\d{4}/g.test(value);\n if (isMomentString) {\n value = formatDateISO(value as string);\n }\n\n return stringToDate(value as string);\n }\n }\n\n get defaultHintMessage() {\n return this.typeable\n ? loc('tecton.element.calendar.hint.format') + ': ' + this.defaultFormatString\n : loc('tecton.element.calendar.hint.select');\n }\n\n get errorList() {\n const { errors, internalError, invalid } = this;\n let list = [];\n if (internalError) {\n list = [internalError];\n }\n if (Array.isArray(errors) && errors.length) {\n list = errors\n .filter(error => !!error)\n .map(error => loc(error))\n .concat(list);\n } else if (!internalError && invalid) {\n return ['tecton.element.calendar.invalid'];\n }\n return list;\n }\n\n get formattedValue() {\n const { typedValue, dateValue, displayFormat, isTypeable } = this;\n if (isTypeable) return typedValue;\n\n if (dateValue === undefined) return '';\n if (displayFormat) return format(dateValue, convertMomentFormat(displayFormat));\n\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n }).format(dateValue);\n }\n\n get hintList() {\n const { hints, hintMessageType, hintMessage } = this;\n if (Array.isArray(hints) && hints.length) return hints.filter(hint => !!hint).map(hint => loc(hint));\n if (hintMessageType === 'info' && hintMessage) return [hintMessage];\n return [];\n }\n\n get innerInputContainer(): HTMLElement {\n return this.controlElement?.shadowRoot?.querySelector('.input-container');\n }\n\n get innerInputField(): HTMLInputElement | HTMLButtonElement {\n return this.controlElement?.shadowRoot?.querySelector('.input-field');\n }\n\n get isTypeable(): boolean {\n return this.typeable;\n }\n\n get selectedDate() {\n const selectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n return selectedCell ? removeTimezoneOffset(new Date(selectedCell.dataset.date)) : null;\n }\n\n _togglePopover() {\n const toggleElement = this.typeable ? this.btnCalendarToggle : this.innerInputField;\n toggleElement?.click();\n toggleElement?.focus();\n toggleElement.dispatchEvent(new FocusEvent('focus'));\n }\n\n activateDay(date: Date) {\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n this.scheduledAfterRender.push(() => this.focusDay(date));\n }\n\n buildDateList(monthYear: ISelectedMonthYear): DateList {\n const invalidDates = stringArrayToDate(this.invalidDates);\n const validDaysOfWeek = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const validDates = stringArrayToDate(this.validDates);\n return buildDates(\n validDaysOfWeek,\n validDates,\n invalidDates,\n monthYear,\n this.dateValue,\n this.dateValidators,\n this.typedValue\n );\n }\n\n calendarDays() {\n return (\n <table\n role=\"grid\"\n aria-labelledby=\"table-label\"\n ref={ref => (this.calendarTable = ref)}\n >\n <thead>\n <tr>\n {[...Array(7).keys()].map(index => (\n <th\n scope=\"col\"\n aria-label={this.dayStrings[index]}\n >\n {this.dayAbbrStrings[index]}\n </th>\n ))}\n </tr>\n </thead>\n <tbody\n onClick={this.onDateSelection}\n onKeyDown={this.onDateKeydown}\n ref={elm => (this.calendarBody = elm)}\n test-id=\"calendarTableBody\"\n >\n {this.currentWeeks.map(week => (\n <tr>\n {week.map(day => {\n let ariaLabel = '';\n if (day.isToday) ariaLabel = `${loc('tecton.element.calendar.today')}, `;\n ariaLabel += formatDateFull(day.date);\n if (day.isSelected) ariaLabel += ` (${loc('tecton.element.calendar.selected')})`;\n return (\n <td\n class={day.classList}\n aria-hidden={day.isEmpty ? 'true' : undefined}\n tabindex={day.isSelected ? 0 : -1}\n role={day.isSelected ? 'gridcell' : undefined}\n aria-selected={day.isSelected ? 'true' : undefined}\n aria-disabled={day.isValid ? undefined : 'true'}\n data-day={day.integer || undefined}\n data-date={day.date ? formatDateISO(day.date) : undefined}\n >\n {day?.isToday && (\n <div\n class=\"today-decorator\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.calendar.today')}\n </div>\n )}\n <div\n aria-label={ariaLabel}\n role=\"text\"\n >\n {day?.integer ?? ''}\n </div>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n renderCalendarPopover() {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return (\n <div\n class=\"calendar-field-popup\"\n onKeyUp={this.onPopupKeyup}\n >\n {this.calendarLabel && <p class=\"calendar-label\">{loc(this.calendarLabel)}</p>}\n <div class=\"cal-month-heading\">\n <q2-btn\n label={loc('tecton.element.calendar.previousMonth')}\n hide-label\n ref={elm => (this.btnPrevMonth = elm)}\n class=\"cal-nav-btn prev-month\"\n test-id=\"previousMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex - 1, selectedYear)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-month-text\">{this.monthStrings[monthIndex]}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextMonth')}\n hide-label\n class=\"cal-nav-btn next-month\"\n ref={elm => (this.btnNextMonth = elm)}\n test-id=\"nextMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex + 1, selectedYear)}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n <q2-btn\n label={loc('tecton.element.calendar.previousYear')}\n hide-label\n class=\"cal-nav-btn prev-year\"\n ref={elm => (this.btnPrevYear = elm)}\n test-id=\"previousYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear - 1)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-year-text\">{this.selectedMonthYear.selectedYear}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextYear')}\n hide-label\n class=\"cal-nav-btn next-year\"\n ref={elm => (this.btnNextYear = elm)}\n test-id=\"nextYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear + 1)}\n onKeyDown={this.onHeaderControlKeydown}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n </div>\n <div\n class=\"sr\"\n aria-live=\"polite\"\n id=\"table-label\"\n >\n {`${this.monthStrings[monthIndex]} ${selectedYear}`}\n </div>\n {this.calendarDays()}\n {this.disclaimer && <div class=\"calendar-disclaimer\">{loc(this.disclaimer)}</div>}\n <q2-btn\n class=\"sr refocus-popup\"\n onFocus={this.onRefocus}\n />\n </div>\n );\n }\n\n checkActiveCellForBlankness() {\n const activeElement = this.hostElement.shadowRoot.activeElement;\n if (!activeElement || activeElement.tagName !== 'TD' || !activeElement.hasAttribute('aria-hidden')) return;\n\n const { calendarBody } = this;\n const calendarCells = Array.from(calendarBody.querySelectorAll<Element>('td'));\n const indexOfCell = Array.from(calendarCells).indexOf(activeElement);\n\n const dayToFocus =\n indexOfCell < 15 ? 1 : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;\n\n this.focusDay(this.generateDateFromDay(dayToFocus));\n }\n\n closeCalendar = () => {\n if (!this.open) return;\n this.open = false;\n this.focusInput();\n };\n\n async focusDay(date: Date) {\n if (!date) return;\n await waitForNextPaint();\n this.calendarBody.querySelector<HTMLElement>(`td[data-day=\"${date.getDate()}\"]`)?.focus();\n }\n\n focusInput() {\n this.controlElement?.focus();\n }\n\n generateDateFromDay(day: number) {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return new Date(selectedYear, monthIndex, day);\n }\n\n goToMonthYear = (monthIndex: number, year: number) => {\n if (monthIndex < 0) {\n monthIndex = 11;\n year--;\n } else if (monthIndex > 11) {\n monthIndex = 0;\n year++;\n }\n this.selectedMonthYear = {\n monthIndex,\n selectedYear: year,\n };\n this.dateList = this.buildDateList(this.selectedMonthYear);\n\n this.scheduledAfterRender.push(() => this.checkActiveCellForBlankness());\n };\n\n renderHintField() {\n if (!this.hintMessage) return;\n\n return (\n <q2-message\n class=\"calendar-hint sr\"\n ref={el => (this.hintMessageElement = el)}\n type={this.hintMessageType}\n >\n {this.hintMessage}\n </q2-message>\n );\n }\n\n renderInputField() {\n const { isTypeable } = this;\n return (\n <q2-input\n ref={el => (this.controlElement = el)}\n class=\"calendar-input-field\"\n value={this.formattedValue}\n label={loc(this.label)}\n hideLabel={this.hideLabel}\n disabled={!!this.disabled}\n readonly={!!this.readonly}\n clearable={this.canClear}\n placeholder={this.computedPlaceholder}\n optional={!!this.optional}\n ariaExpanded={`${!!this.open}`}\n hints={this.hintList}\n errors={this.errorList}\n onClick={isTypeable ? undefined : this.onInputClick}\n onChange={this.onInputChange}\n onInput={this.onInputInput}\n onKeyDown={this.onInputKeydown}\n onKeyUp={this.onInputKeyup}\n onBlur={this.onInputBlur}\n onFocus={this.onInputFocus}\n icon-right={isTypeable ? undefined : 'calendar'}\n format-modifier={isTypeable ? this.formatModifier : this.displayFormat || this.formatModifier}\n type=\"date\"\n hide-messages={!isTypeable}\n test-id=\"inputAndCalendarToggle\"\n _role=\"combobox\"\n _preventEntry={!isTypeable}\n >\n {isTypeable && (\n <q2-btn\n ref={el => (this.btnCalendarToggle = el)}\n slot=\"input-right\"\n onClick={this.onInputClick}\n test-id=\"calendarToggle\"\n label=\"tecton.element.calendar.toggleAriaLabel\"\n hide-label\n >\n <q2-icon type=\"calendar\" />\n </q2-btn>\n )}\n </q2-input>\n );\n }\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n this.closeCalendar();\n }\n };\n\n onDateKeydown = (event: KeyboardEvent) => {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n const currentDay = parseInt((event.target as HTMLElement).dataset.day);\n const currentDate = this.generateDateFromDay(currentDay);\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -7));\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 7));\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 1));\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -1));\n break;\n\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear - 1);\n else this.goToMonthYear(monthIndex - 1, selectedYear);\n break;\n\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear + 1);\n else this.goToMonthYear(monthIndex + 1, selectedYear);\n break;\n\n case 'Home':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -currentDate.getDay()));\n break;\n\n case 'End':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 6 - currentDate.getDay()));\n break;\n\n case 'Escape':\n event.preventDefault();\n this.closeCalendar();\n this.focusInput();\n break;\n\n case 'Enter':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.closeCalendar();\n this.focusInput();\n break;\n\n case ' ':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.closeCalendar();\n this.focusInput();\n break;\n }\n };\n\n onDateSelection = (event: MouseEvent) => {\n const dateCell = (event.target as HTMLElement).closest<HTMLElement>('td:not([aria-hidden])');\n if (!dateCell) return;\n const clickedDate = removeTimezoneOffset(new Date(dateCell.dataset.date));\n this.selectDate(clickedDate);\n this.closeCalendar();\n };\n\n onHeaderControlKeydown = (event: KeyboardEvent) => {\n const currentDate = this.generateDateFromDay(1);\n const hasSelectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n\n if (event.key === 'Tab' && !hasSelectedCell) {\n event.preventDefault();\n this.activateDay(currentDate);\n }\n };\n\n onInputBlur = () => {\n if (!this.isTypeable) return;\n\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { typedValue } = this;\n const { isValid, inputDate, isAvailable } = validateInput(\n this.typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (!typedValue && inputDate?.toString() === 'Invalid Date') {\n // initial/clear state\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n } else if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.valueOnBlur = this.value;\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n };\n\n onInputChange = (event: Event) => {\n event.stopPropagation();\n };\n\n onInputClick = () => {\n if (this.disabled) return;\n this.toggleCalendar();\n };\n\n onInputFocus = (event: FocusEvent) => {\n if (!this.isTypeable) return;\n if (event.target === this.controlElement) {\n if (this.valueOnBlur && !this.value) {\n const tmpTypedValue = this.typedValue;\n this.value = this.valueOnBlur;\n this.typedValue = tmpTypedValue;\n this.valueOnBlur = null;\n }\n this.closeCalendar();\n }\n };\n\n onInputInput = ({ detail: { value } }: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n this.typedValue = value;\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const { dateValue } = this;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.openCalendar();\n this.activateDay(dateValue || new Date());\n break;\n\n case 'Enter':\n case ' ':\n if (this.typeable) break;\n event.preventDefault();\n if (this.open) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n this.activateDay(dateValue || new Date());\n }\n break;\n }\n };\n\n onInputKeyup = (event: KeyboardEvent) => {\n if (this.disabled) {\n return;\n }\n\n switch (event.key) {\n case 'Escape':\n this.onInputBlur();\n this.closeCalendar();\n break;\n }\n\n if (!this.isTypeable) return;\n\n // handle missing zero in month and date\n this.typedValue = handleMissingZeros(this.typedValue);\n const { typedValue } = this;\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { isValid, message, messageType, inputDate, isAvailable, calendarPosition } = validateInput(\n typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (calendarPosition) {\n const [mm, dd, yyyy] = calendarPosition;\n const date = new Date(yyyy, mm - 1, dd);\n if (isValidDate(date)) {\n this.selectedMonthYear = setupMonthYear(date);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n }\n\n if (event.key === 'Enter') {\n if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n\n if (this.keyboardSelection) {\n this.keyboardSelection = false;\n this.closeCalendar();\n } else {\n this.toggleCalendar();\n }\n } else {\n this.setHints({ isValid, message, messageType });\n }\n };\n\n onPopupKeyup = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.onInputBlur();\n this.closeCalendar();\n }\n };\n\n onRefocus = () => {\n this.btnPrevMonth?.dispatchEvent(new FocusEvent('focus'));\n };\n\n openCalendar = () => {\n if (this.readonly || this.open) return;\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.open = true;\n };\n\n selectDate = (newDate: Date) => {\n const { isValid } = this.dateList.find(({ date }) => isSameDay(date, newDate));\n if (!isValid) return;\n this.change.emit({ value: formatDateISO(newDate) });\n this.typedValue = formatDateShort(newDate);\n this.invalid = false;\n this.success.emit({ value: formatDateISO(newDate) });\n };\n\n setCompleteInput(inputDate: Date) {\n const formattedDate = formatDateShort(inputDate);\n this.change.emit({ value: formatDateISO(inputDate) });\n this.typedValue = formattedDate;\n this.internalError = null;\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n }\n\n setHints({ isValid, message, messageType }) {\n if (message === this.hintMessage) return this.hintMessageElement?.present();\n this.invalid = !isValid;\n this.hintMessage = message;\n this.hintMessageType = messageType;\n if (messageType === 'error' && message) {\n this.internalError = message;\n this.error.emit({\n errors: [\n {\n message,\n errorCode: 'generalInvalid',\n },\n ],\n });\n }\n }\n\n toggleCalendar = () => {\n if (this.readonly) return;\n if (this.open) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n }\n };\n\n validateDate() {\n try {\n if (!!this.value) {\n const { dateValue } = this;\n const month = dateValue?.getMonth() ?? undefined;\n const year = dateValue?.getFullYear() ?? undefined;\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n\n const isSelectedMonthAndYear = month === monthIndex && year === selectedYear;\n let calculationDateList = [];\n\n if (!dateValue) {\n calculationDateList = [];\n } else if (isSelectedMonthAndYear) {\n calculationDateList = this.dateList;\n } else {\n calculationDateList = this.buildDateList({\n monthIndex: month,\n selectedYear: year,\n });\n }\n\n const dateValueDayOfMonth = dateValue?.getDate() ?? undefined;\n const isDateValueInvalid = dateValueDayOfMonth\n ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth).isValid\n : true;\n if (isDateValueInvalid) {\n this.error.emit({\n errors: [\n {\n message: `Value passed is invalid: The date ${this.value} is not valid`,\n errorCode: 'generalInvalid',\n },\n ],\n });\n } else {\n this.success.emit({ value: formatDateISO(dateValue) });\n }\n }\n } catch (error) {\n console.warn('Invalid moment value ', this.dateValue);\n }\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <click-elsewhere\n class={this.open ? 'dropdown-open' : undefined}\n onChange={this.onClickElsewhere}\n >\n {this.renderInputField()}\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.innerInputContainer}\n open={this.open}\n direction={this.popoverDirection}\n minHeight={this.popoverMinHeight}\n align={this.popoverAlignment}\n mode={this.popoverMode || undefined}\n block\n >\n {this.renderHintField()}\n {this.renderCalendarPopover()}\n </q2-popover>\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n"],"version":3}
|
|
@@ -669,7 +669,7 @@ export class Q2Calendar {
|
|
|
669
669
|
ariaLabel += formatDateFull(day.date);
|
|
670
670
|
if (day.isSelected)
|
|
671
671
|
ariaLabel += ` (${loc('tecton.element.calendar.selected')})`;
|
|
672
|
-
return (h("td", { class: day.classList, "aria-hidden": day.isEmpty ? 'true' : undefined, tabindex: day.isSelected ? 0 : -1, role: day.isSelected ? 'gridcell' : undefined, "aria-selected": day.isSelected ? 'true' : undefined, "aria-disabled": day.isValid ? undefined : 'true', "data-day": day.integer || undefined, "data-date": day.date ? formatDateISO(day.date) : undefined }, (day === null || day === void 0 ? void 0 : day.isToday) && (h("div", { class: "today-decorator", "aria-hidden": "true" }, loc('tecton.element.calendar.today'))), h("div", { "aria-label": ariaLabel }, (_a = day === null || day === void 0 ? void 0 : day.integer) !== null && _a !== void 0 ? _a : '')));
|
|
672
|
+
return (h("td", { class: day.classList, "aria-hidden": day.isEmpty ? 'true' : undefined, tabindex: day.isSelected ? 0 : -1, role: day.isSelected ? 'gridcell' : undefined, "aria-selected": day.isSelected ? 'true' : undefined, "aria-disabled": day.isValid ? undefined : 'true', "data-day": day.integer || undefined, "data-date": day.date ? formatDateISO(day.date) : undefined }, (day === null || day === void 0 ? void 0 : day.isToday) && (h("div", { class: "today-decorator", "aria-hidden": "true" }, loc('tecton.element.calendar.today'))), h("div", { "aria-label": ariaLabel, role: "text" }, (_a = day === null || day === void 0 ? void 0 : day.integer) !== null && _a !== void 0 ? _a : '')));
|
|
673
673
|
})))))));
|
|
674
674
|
}
|
|
675
675
|
renderCalendarPopover() {
|
|
@@ -788,7 +788,7 @@ export class Q2Calendar {
|
|
|
788
788
|
// #endregion
|
|
789
789
|
// #region Render Methods
|
|
790
790
|
render() {
|
|
791
|
-
return (h("click-elsewhere", { key: '
|
|
791
|
+
return (h("click-elsewhere", { key: '3f895c730a202a9373dd8e83924aca1c1270a847', class: this.open ? 'dropdown-open' : undefined, onChange: this.onClickElsewhere }, this.renderInputField(), h("q2-popover", { key: '083d55f59852c9c94e14b12a5aa57d70905babd6', ref: el => (this.popoverElement = el), controlElement: this.innerInputContainer, open: this.open, direction: this.popoverDirection, minHeight: this.popoverMinHeight, align: this.popoverAlignment, mode: this.popoverMode || undefined, block: true }, this.renderHintField(), this.renderCalendarPopover())));
|
|
792
792
|
}
|
|
793
793
|
static get is() { return "q2-calendar"; }
|
|
794
794
|
static get encapsulation() { return "shadow"; }
|