@stenajs-webui/calendar 17.28.1 → 17.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/util/date/DateFormats.ts","../src/util/calendar/StateModifier.ts","../src/features/today-state/UseHighlightToday.ts","../src/util/calendar/CalendarDataFactory.ts","../src/util/calendar/StateHelper.ts","../src/components/calendar/CalendarTheme.tsx","../src/util/date/DateMinMaxValidator.ts","../src/components/calendar/DisabledDayWrapper.tsx","../src/components/calendar/renderers/WeekNumberCell.tsx","../src/components/calendar/CalendarWeek.tsx","../src/components/calendar/renderers/WeekDayCell.tsx","../src/components/calendar/renderers/CalendarDay.tsx","../src/components/calendar/CalendarMonth.tsx","../src/components/calendar/Calendar.tsx","../src/features/month-switcher/hooks/UseSelectedMonthStepperLogic.ts","../src/features/month-switcher/MonthSwitcherBelow.tsx","../src/features/month-picker/MonthPickerCell.tsx","../src/features/month-picker/MonthPicker.tsx","../src/features/preset-picker/PresetFactory.ts","../src/features/preset-picker/PresetPicker.tsx","../src/features/year-picker/YearPickerCell.tsx","../src/features/year-picker/YearPicker.tsx","../src/features/calendar-with-month-year-pickers/CalendarWithMonthYearPickers.tsx","../src/features/month-switcher/CalendarWithMonthSwitcher.tsx","../src/util/date-range/DateRangeTransformer.ts","../src/util/date-range/DateRangeValidator.ts","../src/features/date-range/hooks/UseDateRangeOnClickDayHandler.ts","../src/features/internal-panel-state/UseInternalPanelState.tsx","../src/components/calendar-types/date-range-calendar/hooks/UseDateRangeSelection.ts","../src/components/calendar-types/date-range-calendar/DateRangeCalendar.tsx","../src/components/calendar-types/date-range-calendar/hooks/UseDateRangeCalendarState.ts","../src/components/calendar-types/single-date-calendar/UseSingleDateSelection.ts","../src/components/calendar-types/single-date-calendar/SingleDateCalendar.tsx","../src/components/calendar-types/multi-date-calendar/UseMultiDateSelection.ts","../src/components/calendar-types/multi-date-calendar/MultiDateCalendar.tsx","../src/components/calendar-types/single-week-calendar/UseSingleWeekSelection.ts","../src/components/calendar-types/single-week-calendar/SingleWeekCalendar.tsx","../src/util/date/DateListTools.ts","../src/components/calendar-types/date-range-exclusion-calendar/UseDateRangeExclusionSelection.ts","../src/components/calendar-types/date-range-exclusion-calendar/DateRangeExclusionCalendar.tsx","../src/config/DefaultPopoverPlacement.ts","../src/features/internal-panel-state/UseCalendarPopoverUpdater.ts","../src/components/input-types/date-input/UseDateInput.tsx","../src/config/DefaultMaxDate.ts","../src/components/input-types/date-input/DateInput.tsx","../src/components/input-types/date-range-input/hooks/UseDateRangeInput.tsx","../src/components/input-types/date-range-input/DateRangeInput.tsx","../src/components/input-types/date-text-input/DateTextInput.tsx","../src/util/time/TimeStringFormatValidator.ts","../src/components/input-types/time-text-input/TimeTextInput.tsx","../src/features/dual-text-input/DualTextInput.tsx","../src/util/time/TimeTransformer.ts","../src/features/time-picker/TimePickerCell.tsx","../src/features/time-picker/TimePickerColumn.tsx","../src/features/time-picker/TimePicker.tsx","../src/components/input-types/date-time-input/hooks/UseDateRangeEffects.ts","../src/components/input-types/date-time-input/hooks/UseDateRangeHandlers.ts","../src/components/input-types/date-time-input/hooks/UseInputStates.ts","../src/components/input-types/date-time-input/hooks/UseUserInputHandlers.ts","../src/components/input-types/date-time-input/DateTimeInput.tsx","../src/components/input-types/date-range-dual-text-input/hooks/UseDateRangeEffects.ts","../src/components/input-types/date-range-dual-text-input/hooks/UseDateRangeHandlers.ts","../src/components/input-types/date-range-dual-text-input/hooks/UseInputStates.ts","../src/components/input-types/date-range-dual-text-input/hooks/UseUserInputHandlers.ts","../src/components/input-types/date-range-dual-text-input/DateRangeDualTextInput.tsx"],"sourcesContent":["export const DateFormats = {\n yearAndMonth: \"yyyy-MM\",\n fullDate: \"yyyy-MM-dd\",\n fullMonthName: \"LLLL\",\n fullDateAndTime: \"yyyy-MM-dd HH:mm\",\n fullDateAndTimeSystem: \"yyyy-MM-ddTHH:MM\",\n weekDayName: \"EEEE\", // Tuesday\n weekDayNameShort: \"EEE\", // Tue\n dateAndMonth: \"d MMM\", // 2 Jan\n monthAndDate: \"MMM do\", // Jan 2nd\n};\n","import {\n addDays,\n eachDayOfInterval,\n endOfMonth,\n format,\n getDate,\n getISOWeek,\n isAfter,\n isSameDay,\n max,\n min,\n startOfMonth,\n subDays,\n} from \"date-fns\";\nimport { last } from \"lodash\";\nimport {\n CalendarState,\n CalendarUserData,\n DayState,\n DayStateHighlight,\n StateForWeek,\n} from \"../../types/CalendarTypes\";\nimport { DateFormats } from \"../date/DateFormats\";\nimport { WeekData } from \"./CalendarDataFactory\";\n\nexport const buildDayStateForDateRange = (\n statePerMonth: CalendarUserData<DayState> = {},\n start?: Date,\n end?: Date\n): CalendarUserData<DayState> | undefined => {\n if (start && end && isAfter(end, start)) {\n return eachDayOfInterval({ start, end }).reduce(\n (result: CalendarUserData<DayState>, date: Date) => {\n const isFirstInRange = isSameDay(date, start);\n const isLastInRange = isSameDay(date, end);\n const highlights = isFirstInRange\n ? [\"selected\", \"selectedStart\", \"range\"]\n : isLastInRange\n ? [\"selected\", \"selectedEnd\", \"range\"]\n : [\"range\"];\n return addDayStateHighlights(result, date, highlights);\n },\n statePerMonth\n );\n }\n\n let state = statePerMonth;\n\n if (start) {\n state = addDayStateHighlights(state, start, [\"selected\", \"singleSelected\"]);\n }\n\n if (end) {\n state = addDayStateHighlights(state, end, [\"selected\", \"singleSelected\"]);\n }\n\n return state;\n};\n\nexport const buildDayStateForSingleMonth = (\n statePerMonth: CalendarUserData<DayState> = {},\n start: Date | undefined,\n end: Date | undefined,\n dateInFocus: Date\n): CalendarUserData<DayState> | undefined =>\n buildDayStateForRange(\n statePerMonth,\n start,\n end,\n startOfMonth(dateInFocus),\n endOfMonth(dateInFocus)\n );\n\nexport const buildDayStateForRange = (\n statePerMonth: CalendarUserData<DayState> = {},\n start: Date | undefined,\n end: Date | undefined,\n startLimit: Date,\n endLimit: Date\n): CalendarUserData<DayState> | undefined => {\n if (start && end) {\n return buildDayStateForDateRange(\n statePerMonth,\n max([start, subDays(startLimit, 1)]),\n min([end, addDays(endLimit, 1)])\n );\n } else {\n return buildDayStateForDateRange(statePerMonth, start, end);\n }\n};\n\nexport const setDayStateValue = (\n state: CalendarUserData<DayState> | undefined,\n date: Date,\n values: Partial<DayState>\n): CalendarUserData<DayState> => {\n const monthString = format(date, DateFormats.yearAndMonth);\n const weekNumber = getISOWeek(date);\n const dayInMonth = getDate(date);\n return {\n ...state,\n [monthString]: {\n ...(state && state[monthString]),\n [weekNumber]: {\n ...(state && state[monthString] && state[monthString][weekNumber]),\n [dayInMonth]: {\n ...(state &&\n state[monthString] &&\n state[monthString][weekNumber] &&\n state[monthString][weekNumber][dayInMonth]),\n ...values,\n },\n },\n },\n };\n};\n\nexport const setDayStateValueFunction = (\n state: CalendarUserData<DayState> | undefined,\n date: Date,\n setter: (dayState: DayState | undefined) => Partial<DayState>\n): CalendarUserData<DayState> => {\n const monthString = format(date, DateFormats.yearAndMonth);\n const weekNumber = getISOWeek(date);\n const dayInMonth = getDate(date);\n return {\n ...state,\n [monthString]: {\n ...(state && state[monthString]),\n [weekNumber]: {\n ...(state && state[monthString] && state[monthString][weekNumber]),\n [dayInMonth]: {\n ...(state &&\n state[monthString] &&\n state[monthString][weekNumber] &&\n state[monthString][weekNumber][dayInMonth]),\n ...setter(\n state &&\n state[monthString] &&\n state[monthString][weekNumber] &&\n state[monthString][weekNumber][dayInMonth]\n ),\n },\n },\n },\n };\n};\n\nexport const addDayStateHighlights = (\n calendarState: CalendarState | undefined,\n date: Date,\n highlights: Array<DayStateHighlight>\n): CalendarUserData<DayState> => {\n const month = date.getMonth() + 1;\n const monthString = `${date.getFullYear()}-${month < 10 ? \"0\" : \"\"}${month}`;\n const weekNumber = getISOWeek(date);\n const dayInMonth = getDate(date);\n const dayState: DayState | undefined =\n calendarState &&\n calendarState[monthString] &&\n calendarState[monthString][weekNumber] &&\n calendarState[monthString][weekNumber][dayInMonth];\n\n return {\n ...calendarState,\n [monthString]: {\n ...(calendarState && calendarState[monthString]),\n [weekNumber]: {\n ...(calendarState &&\n calendarState[monthString] &&\n calendarState[monthString][weekNumber]),\n [dayInMonth]: addDayStateHighlightsOnSingleDay(dayState, highlights),\n },\n },\n };\n};\n\nexport const addDayStateHighlightsOnSingleDay = (\n dayState: DayState | undefined,\n highlights: Array<DayStateHighlight>\n): DayState => {\n return {\n ...dayState,\n highlights: [...(dayState?.highlights ?? []), ...highlights],\n };\n};\n\nexport const addWeekStateHighlights = (\n calendarState: CalendarState | undefined,\n week: WeekData,\n highlights: Array<DayStateHighlight>\n): CalendarUserData<DayState> => {\n const date = week.days[0].date;\n const month = date.getMonth() + 1;\n const monthString = `${date.getFullYear()}-${month < 10 ? \"0\" : \"\"}${month}`;\n const weekNumber = week.weekNumber;\n\n let state = calendarState;\n week.days.forEach((day) => {\n state = addDayStateHighlights(state, day.date, highlights);\n });\n\n const weekState =\n state && state[monthString] ? state[monthString][weekNumber] : undefined;\n\n const newHighlights: Array<DayStateHighlight> =\n weekState && weekState.highlights\n ? [...weekState.highlights, ...highlights]\n : highlights;\n\n const newWeekState: StateForWeek = {\n ...weekState,\n highlights: newHighlights,\n };\n\n return {\n ...state,\n [monthString]: {\n ...(calendarState && calendarState[monthString]),\n [weekNumber]: newWeekState,\n },\n };\n};\n\nexport const addWeekRangeHighlights = (\n calendarState: CalendarState | undefined,\n week: WeekData\n): CalendarUserData<DayState> => {\n if (!week.days.length) {\n return { ...calendarState };\n }\n const startDate = week.days[0].date;\n const endDate = last(week.days)?.date;\n return {\n ...buildDayStateForDateRange(calendarState, startDate, endDate),\n };\n};\n","import { useMemo } from \"react\";\nimport { CalendarState } from \"../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../util/calendar/StateModifier\";\n\nexport const useHighlightToday = (\n enabled: boolean | undefined,\n statePerMonth: CalendarState | undefined\n) => {\n return useMemo(() => {\n return enabled\n ? addDayStateHighlights(statePerMonth, new Date(), [\"today\"])\n : statePerMonth;\n }, [enabled, statePerMonth]);\n};\n","import {\n addDays,\n addHours,\n addWeeks,\n eachDayOfInterval,\n endOfMonth,\n format,\n getDate,\n getISODay,\n getISOWeek,\n getMonth,\n getYear,\n isSameDay,\n startOfISOWeek,\n startOfMonth,\n} from \"date-fns\";\nimport { DateFormats } from \"../date/DateFormats\";\n\nexport enum Month {\n JANUARY = 0,\n FEBRUARY,\n MARCH,\n APRIL,\n MAY,\n JUNE,\n JULY,\n AUGUST,\n SEPTEMBER,\n OCTOBER,\n NOVEMBER,\n DECEMBER,\n}\n\nexport enum WeekDay {\n SUNDAY = 0,\n MONDAY,\n TUESDAY,\n WEDNESDAY,\n THURSDAY,\n FRIDAY,\n SATURDAY,\n}\n\nexport interface DayData {\n name: string;\n date: Date; // YYYY-MM\n dateString: string; // YYYY-MM\n weekNumber: number;\n year: number; // 2018\n month: number; // 0-11\n dayOfMonth: number; // 1-31\n dayOfWeek: number; // 1-7\n isFirstDayOfWeek: boolean;\n isLastDayOfWeek: boolean;\n isFirstDayOfMonth: boolean;\n isLastDayOfMonth: boolean;\n}\n\nexport interface WeekData {\n weekNumber: number;\n startMonth: number;\n startYear: number;\n endMonth: number;\n endYear: number;\n isLastWeekOfMonth: boolean;\n days: Array<DayData>;\n}\n\nexport interface MonthData {\n monthString: string;\n name: string;\n year: number;\n monthInYear: number;\n weeks: Array<WeekData>;\n}\n\nexport const getMonthsInYear = (\n year: number,\n startMonth: number,\n numMonths: number\n): Array<MonthData> => {\n const months = [];\n for (let i = 0; i < numMonths; i++) {\n months.push(getMonthInYear(year, startMonth + i));\n }\n return months;\n};\n\nexport const getMonthInYear = (year: number, month: number): MonthData => {\n const yearToUse = year + Math.floor(month / 12);\n const monthToUse = month % 12;\n const firstDayOfMonth = new Date(yearToUse, monthToUse, 1);\n return {\n monthString: format(firstDayOfMonth, DateFormats.yearAndMonth),\n name: format(firstDayOfMonth, DateFormats.fullMonthName),\n year: yearToUse,\n monthInYear: monthToUse,\n weeks: getWeeksForMonth(yearToUse, monthToUse),\n };\n};\n\nexport const getWeeksForMonth = (\n year: number,\n month: number,\n forceSixWeeks: boolean = true\n): Array<WeekData> => {\n const firstDayOfMonth = new Date(year, month, 1);\n const firstDayOfFirstWeek = startOfISOWeek(firstDayOfMonth);\n const weeks = [];\n for (let i = 0; i < 6; i++) {\n const week = getWeekForDate(addWeeks(firstDayOfFirstWeek, i));\n if (i > 0 && week.startMonth !== month && !forceSixWeeks) {\n return weeks;\n }\n weeks.push(week);\n }\n return weeks;\n};\n\nexport const getWeekForDate = (firstDayOfWeek: Date): WeekData => {\n const isLastWeekOfMonth =\n getMonth(addDays(firstDayOfWeek, 7)) !== getMonth(firstDayOfWeek);\n return {\n weekNumber: getISOWeek(firstDayOfWeek),\n startMonth: getMonth(firstDayOfWeek),\n startYear: getYear(firstDayOfWeek),\n endMonth: getMonth(addDays(firstDayOfWeek, 6)),\n endYear: getYear(addDays(firstDayOfWeek, 6)),\n days: getDaysForWeekForDate(firstDayOfWeek),\n isLastWeekOfMonth,\n };\n};\n\nexport const createDay = (date: Date): DayData => {\n const dayOfWeek = getISODay(date);\n return {\n date,\n name: format(date, \"EEE\"),\n dateString: format(addHours(date, 12), DateFormats.fullDate),\n weekNumber: getISOWeek(date),\n year: getYear(date),\n month: getMonth(date),\n dayOfMonth: getDate(date),\n dayOfWeek,\n isFirstDayOfWeek: dayOfWeek === 1,\n isLastDayOfWeek: dayOfWeek === 7,\n isFirstDayOfMonth: isSameDay(startOfMonth(date), date),\n isLastDayOfMonth: isSameDay(endOfMonth(date), date),\n };\n};\n\nexport const getDaysForWeekForDate = (firstDayOfWeek: Date): Array<DayData> => {\n return eachDayOfInterval({\n start: firstDayOfWeek,\n end: addDays(firstDayOfWeek, 6),\n }).map(createDay);\n};\n\nexport const getStartDateOfISOWeek = (\n weekNumber: number,\n year: number\n): Date => {\n const simple = new Date(year, 0, 1 + (weekNumber - 1) * 7);\n const dayOfWeek = simple.getDay();\n const isoWeekStart = simple;\n if (dayOfWeek <= 4) {\n isoWeekStart.setDate(simple.getDate() - simple.getDay() + 1);\n } else {\n isoWeekStart.setDate(simple.getDate() + 8 - simple.getDay());\n }\n return isoWeekStart;\n};\n\nexport const calculateOverflowingMonth = (\n year: number,\n month: number\n): { year: number; month: number } => {\n if (month > Month.DECEMBER) {\n return { year: year + Math.floor(month / 12), month: month % 12 };\n }\n if (month < Month.JANUARY) {\n return { year: year + Math.floor(month / 12), month: 12 + (month % 12) };\n }\n return { year, month };\n};\n","import { DayState, DayStateHighlight } from \"../../types/CalendarTypes\";\n\nexport const dayHasHighlight = (\n dayState: DayState | undefined,\n defaultHighlights: Array<DayStateHighlight> | undefined,\n highlight: string\n): boolean => {\n if (defaultHighlights && defaultHighlights.indexOf(highlight) >= 0) {\n return true;\n }\n if (\n dayState &&\n dayState.highlights &&\n dayState.highlights.indexOf(highlight) >= 0\n ) {\n return true;\n }\n return false;\n};\n\nexport const dayHighlightSelect = <T>(\n dayState: DayState | undefined,\n defaultHighlights: Array<DayStateHighlight> | undefined,\n highlightsOrBoolean: Array<string | boolean>,\n returnValues: Array<T>,\n fallbackValue?: T\n): T | undefined => {\n if (highlightsOrBoolean.length !== returnValues.length) {\n throw new Error(\n \"Select highlight failed, number of values do not equal number of highlights.\"\n );\n }\n if (highlightsOrBoolean.length === 0) {\n return fallbackValue;\n }\n for (let i = 0; i < highlightsOrBoolean.length; i++) {\n if (typeof highlightsOrBoolean[i] === \"boolean\" && highlightsOrBoolean[i]) {\n return returnValues[i];\n }\n if (\n typeof highlightsOrBoolean[i] === \"string\" &&\n dayHasHighlight(\n dayState,\n defaultHighlights,\n highlightsOrBoolean[i] as string\n )\n ) {\n return returnValues[i];\n }\n }\n return fallbackValue;\n};\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { TextProps } from \"@stenajs-webui/core\";\nimport { CSSProperties } from \"react\";\nimport { DayState, DayStateHighlight } from \"../../types/CalendarTypes\";\n\nimport {\n DayData,\n MonthData,\n WeekData,\n} from \"../../util/calendar/CalendarDataFactory\";\nimport { dayHighlightSelect } from \"../../util/calendar/StateHelper\";\n\nexport interface CalendarTheme<TUserData = unknown> {\n width: string;\n height: string;\n WeekNumber: WeekNumberTheme;\n WeekDay: WeekDayTheme;\n CalendarDay: CalendarDayTheme<TUserData>;\n CalendarMonth: CalendarMonthTheme;\n}\n\nexport interface WeekNumberTheme {\n backgroundColor: string;\n textColor?: string;\n clickableTextColor?: string;\n show?: boolean;\n}\n\nexport interface CalendarMonthTheme {\n headerTextColor?: string;\n cellSpacing?: string;\n headerLeftIcon?: IconDefinition;\n headerRightIcon?: IconDefinition;\n}\n\nexport interface WeekDayTheme {\n textColor?: string;\n clickableTextColor?: string;\n}\n\nexport type CalendarStyleProvider<TUserData, TResult> = (\n defaultHighlights: Array<DayStateHighlight> | undefined,\n dayState: DayState | undefined,\n day: DayData,\n week: WeekData,\n month: MonthData,\n userData?: TUserData\n) => TResult;\n\nexport type CalendarWrapperStyleProvider<TUserData> = CalendarStyleProvider<\n TUserData,\n CSSProperties | undefined\n>;\n\ntype TextPropsProvider<TUserData> = CalendarStyleProvider<\n TUserData,\n TextProps | undefined\n>;\n\nexport interface CalendarDayTheme<TUserData> {\n tdStyle?: CalendarWrapperStyleProvider<TUserData>;\n innerWrapperStyle?: CalendarWrapperStyleProvider<TUserData>;\n cellWrapperStyle?: CalendarWrapperStyleProvider<TUserData>;\n textProps?: TextPropsProvider<TUserData>;\n}\n\nexport interface CalendarDefaultWrapperColors {\n selectedBackground: string;\n rangeBackground: string;\n todayBackground: string;\n borderColor?: string;\n borderRadius?: string;\n rangeBorderRadius?: string;\n}\n\nexport const defaultWrapperStyleProvider =\n ({\n selectedBackground,\n todayBackground,\n rangeBackground,\n borderColor = \"transparent\",\n }: CalendarDefaultWrapperColors): CalendarWrapperStyleProvider<unknown> =>\n (defaultHighlights, dayState, day, _, month) => {\n let style = {};\n\n const backgroundColor = dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selected\", \"range\", \"today\", day.month === month.monthInYear],\n [selectedBackground, rangeBackground, todayBackground, \"#fff\"],\n \"transparent\"\n );\n\n return {\n ...style,\n backgroundColor,\n borderTopLeftRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedStart\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n borderBottomLeftRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedStart\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n borderTopRightRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedEnd\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n borderBottomRightRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedEnd\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n boxSizing: \"border-box\",\n };\n };\n\ninterface DefaultTextColors {\n disabledColor: string;\n inOtherMonthColor: string;\n selectedColor: string;\n rangeTextColor?: string;\n}\n\nexport const defaultTextPropsProvider = ({\n selectedColor,\n disabledColor,\n inOtherMonthColor,\n rangeTextColor,\n}: DefaultTextColors): TextPropsProvider<unknown> => {\n return (defaultHighlights, dayState, day, _, month) => {\n const isOtherMonth = day.month !== month.monthInYear;\n const color = dayHighlightSelect(\n dayState,\n defaultHighlights,\n [isOtherMonth, \"selected\", \"range\", \"enabled\", \"disabled\"],\n [\n inOtherMonthColor,\n selectedColor,\n rangeTextColor,\n undefined,\n disabledColor,\n ]\n );\n return {\n color,\n };\n };\n};\n\nexport const defaultCalendarTheme: CalendarTheme = {\n width: \"var(--swui-calendar-day-width)\",\n height: \"var(--swui-calendar-day-height)\",\n WeekNumber: {\n backgroundColor: \"var(--swui-calendar-week-number-bg-color)\",\n textColor: \"var(--swui-calendar-week-number-text-color)\",\n clickableTextColor: \"var(--swui-calendar-week-number-clickable-text-color)\",\n show: true,\n },\n WeekDay: {\n textColor: \"var(--swui-calendar-week-day-text-color)\",\n clickableTextColor: \"var(--swui-calendar-week-day-clickable-text-color)\",\n },\n CalendarDay: {\n tdStyle: defaultWrapperStyleProvider({\n selectedBackground: \"var(--swui-calendar-wrapper-selected-background)\",\n rangeBackground: \"var(--swui-calendar-wrapper-range-background)\",\n todayBackground: \"var(--swui-calendar-wrapper-today-background)\",\n }),\n textProps: defaultTextPropsProvider({\n selectedColor: \"var(--swui-calendar-text-selected-color)\",\n disabledColor: \"var(--swui-calendar-text-disabled-color)\",\n inOtherMonthColor: \"var(--swui-calendar-text-in-other-month-color)\",\n }),\n },\n CalendarMonth: {\n headerTextColor: \"var(--swui-calendar-week-day-text-color)\",\n },\n};\n\nexport const extranetCalendarTheme: CalendarTheme = {\n ...defaultCalendarTheme,\n width: \"37px\",\n height: \"37px\",\n};\n","import { isAfter, isBefore, isSameDay } from \"date-fns\";\n\nexport const isDateInMinMaxRange = (\n date: Date,\n min: Date | undefined,\n max: Date | undefined\n): boolean => {\n if (min && isBefore(date, min)) {\n return isSameDay(date, min);\n }\n if (max && isAfter(date, max)) {\n return isSameDay(date, max);\n }\n return true;\n};\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport {\n CalendarDayProps,\n OptionalMinMaxDates,\n} from \"../../types/CalendarTypes\";\nimport { addDayStateHighlightsOnSingleDay } from \"../../util/calendar/StateModifier\";\nimport { isDateInMinMaxRange } from \"../../util/date/DateMinMaxValidator\";\n\ninterface DisabledDayWrapperProps<T>\n extends CalendarDayProps<T>,\n OptionalMinMaxDates {\n dayComponent: React.ComponentType<CalendarDayProps<T>>;\n}\n\nexport const DisabledDayWrapper = function DisabledDayWrapper<T>({\n dayComponent: DayComponent,\n minDate,\n maxDate,\n dayState,\n day,\n ...props\n}: DisabledDayWrapperProps<T>) {\n const activeDayState = useMemo(\n () =>\n !isDateInMinMaxRange(day.date, minDate, maxDate)\n ? addDayStateHighlightsOnSingleDay(dayState, [\"disabled\"])\n : dayState,\n [day.date, dayState, maxDate, minDate]\n );\n\n return <DayComponent day={day} {...props} dayState={activeDayState} />;\n};\n","import { Box, Clickable, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { OnClickWeek } from \"../../../types/CalendarTypes\";\nimport { WeekData } from \"../../../util/calendar/CalendarDataFactory\";\nimport { CalendarTheme } from \"../CalendarTheme\";\n\nexport interface WeekNumberCellProps {\n week: WeekData;\n onClickWeek?: OnClickWeek;\n theme: CalendarTheme;\n background?: JSX.Element;\n prefix?: string;\n backgroundColor?: string;\n}\n\nexport const WeekNumberCell: React.FC<WeekNumberCellProps> = ({\n onClickWeek,\n theme,\n week,\n background,\n backgroundColor,\n prefix,\n}) => {\n const content = (\n <Box\n width={theme.width}\n height={theme.height}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n {background && <Box position={\"absolute\"}>{background}</Box>}\n <Box position={\"absolute\"}>\n <Text\n color={\n onClickWeek\n ? theme.WeekNumber.clickableTextColor\n : theme.WeekNumber.textColor\n }\n >\n {prefix}\n {week.weekNumber}\n </Text>\n </Box>\n </Box>\n );\n return (\n <Box\n background={backgroundColor || theme.WeekNumber.backgroundColor}\n position={\"relative\"}\n >\n {onClickWeek ? (\n <Clickable\n borderRadius={\"var(--swui-calendar-day-border-radius)\"}\n onClick={(ev) => onClickWeek(week, ev)}\n disableFocusHighlight={!onClickWeek}\n >\n {content}\n </Clickable>\n ) : (\n content\n )}\n </Box>\n );\n};\n","import * as React from \"react\";\nimport {\n CalendarDayProps,\n CalendarUserWeekData,\n DayState,\n DayStateHighlight,\n ExtraDayContentProps,\n OnClickDay,\n OnClickWeek,\n OptionalMinMaxDates,\n RenderWeekNumber,\n} from \"../../types/CalendarTypes\";\nimport { MonthData, WeekData } from \"../../util/calendar/CalendarDataFactory\";\n\nimport { CalendarTheme } from \"./CalendarTheme\";\nimport { DisabledDayWrapper } from \"./DisabledDayWrapper\";\nimport { WeekNumberCell } from \"./renderers/WeekNumberCell\";\n\nexport interface CalendarWeekProps<T> extends OptionalMinMaxDates {\n dayComponent: React.ComponentType<CalendarDayProps<T>>;\n week: WeekData;\n month: MonthData;\n statePerWeekDay?: CalendarUserWeekData<DayState>;\n userDataPerWeekDay?: CalendarUserWeekData<T>;\n onClickWeek?: OnClickWeek;\n onClickDay?: OnClickDay<T>;\n theme: CalendarTheme;\n renderWeekNumber?: RenderWeekNumber;\n extraDayContent?: React.ComponentType<ExtraDayContentProps<T>>;\n defaultHighlights?: Array<DayStateHighlight>;\n}\n\nexport function CalendarWeek<T>({\n week,\n month,\n dayComponent,\n statePerWeekDay,\n userDataPerWeekDay,\n minDate,\n maxDate,\n onClickWeek,\n onClickDay,\n theme,\n renderWeekNumber,\n extraDayContent,\n defaultHighlights,\n}: CalendarWeekProps<T>) {\n return (\n <tr key={week.weekNumber}>\n {theme.WeekNumber.show && (\n <td>\n {renderWeekNumber ? (\n renderWeekNumber(week, theme, onClickWeek)\n ) : (\n <WeekNumberCell\n week={week}\n onClickWeek={onClickWeek}\n theme={theme}\n />\n )}\n </td>\n )}\n {week.days.map((day) => (\n <DisabledDayWrapper\n dayComponent={dayComponent}\n key={day.dateString}\n day={day}\n week={week}\n month={month}\n dayState={statePerWeekDay && statePerWeekDay[day.dayOfMonth]}\n userData={userDataPerWeekDay && userDataPerWeekDay[day.dayOfMonth]}\n onClickDay={onClickDay}\n theme={theme}\n extraDayContent={extraDayContent}\n defaultHighlights={defaultHighlights}\n minDate={minDate}\n maxDate={maxDate}\n />\n ))}\n </tr>\n );\n}\n","import { Box, Clickable, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { OnClickWeekDay } from \"../../../types/CalendarTypes\";\nimport { DayData } from \"../../../util/calendar/CalendarDataFactory\";\nimport { CalendarTheme } from \"../CalendarTheme\";\n\nexport interface WeekDayCellProps {\n onClickWeekDay?: OnClickWeekDay;\n day: DayData;\n theme: CalendarTheme;\n}\n\nexport const WeekDayCell = ({\n onClickWeekDay,\n day,\n theme,\n}: WeekDayCellProps) => {\n const content = (\n <Box\n width={theme.width}\n height={theme.height}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n <Text\n size={\"small\"}\n color={\n onClickWeekDay\n ? theme.WeekDay.clickableTextColor\n : theme.WeekDay.textColor\n }\n >\n {day.name}\n </Text>\n </Box>\n );\n\n if (onClickWeekDay) {\n return (\n <Clickable\n borderRadius={\"var(--swui-calendar-day-border-radius)\"}\n onClick={(ev) => onClickWeekDay(day.dayOfWeek, ev)}\n disableFocusHighlight={!onClickWeekDay}\n >\n {content}\n </Clickable>\n );\n }\n\n return content;\n};\n","import styled from \"@emotion/styled\";\nimport { Box, Clickable, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport {\n CalendarDayProps,\n DayState,\n DayStateHighlight,\n} from \"../../../types/CalendarTypes\";\nimport { dayHighlightSelect } from \"../../../util/calendar/StateHelper\";\n\nexport const CalendarDay = function CalendarDay<T>({\n day,\n week,\n month,\n dayState,\n userData,\n onClickDay,\n theme,\n extraDayContent: ExtraDayContent,\n defaultHighlights,\n}: CalendarDayProps<T>) {\n const content = (\n <Box\n width={\"100%\"}\n height={\"100%\"}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n <Text\n {...(theme.CalendarDay.textProps &&\n theme.CalendarDay.textProps(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n ))}\n >\n {day.dayOfMonth}\n </Text>\n </Box>\n );\n\n const WrapperTd = styled.td({\n ...(theme.CalendarDay.tdStyle &&\n theme.CalendarDay.tdStyle(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n )),\n });\n\n const InnerWrapperDiv = styled.div({\n ...(theme.CalendarDay.innerWrapperStyle &&\n theme.CalendarDay.innerWrapperStyle(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n )),\n width: \"100%\",\n height: \"100%\",\n });\n\n const CellWrapperDiv = styled.div({\n ...(theme.CalendarDay.cellWrapperStyle &&\n theme.CalendarDay.cellWrapperStyle(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n )),\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n });\n\n return (\n <WrapperTd>\n <InnerWrapperDiv>\n <CellWrapperDiv>\n {day.month === month.monthInYear && (\n <>\n {ExtraDayContent && (\n <ExtraDayContent\n week={week}\n month={month}\n day={day}\n dayState={dayState}\n theme={theme}\n userData={userData}\n />\n )}\n {onClickDay && isClickable(defaultHighlights, dayState) ? (\n <Clickable\n onClick={(ev) => onClickDay(day, userData, ev)}\n style={{ width: \"100%\", height: \"100%\" }}\n borderRadius={\"var(--swui-calendar-day-border-radius)\"}\n >\n {content}\n </Clickable>\n ) : (\n <>{content}</>\n )}\n </>\n )}\n </CellWrapperDiv>\n </InnerWrapperDiv>\n </WrapperTd>\n );\n};\n\nconst isClickable = (\n defaultHighlights: Array<DayStateHighlight> | undefined,\n dayState: DayState | undefined\n): boolean =>\n !!dayHighlightSelect<boolean>(\n dayState,\n defaultHighlights,\n [\"enabled\", \"disabled\"],\n [true, false],\n true\n );\n","import { Box, Row, Space, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport {\n CalendarDayProps,\n CalendarOnClicks,\n CalendarUserMonthData,\n DayState,\n DayStateHighlight,\n ExtraDayContentProps,\n OptionalMinMaxDates,\n Renderers,\n} from \"../../types/CalendarTypes\";\nimport {\n DayData,\n MonthData,\n WeekData,\n} from \"../../util/calendar/CalendarDataFactory\";\nimport { CalendarTheme, defaultCalendarTheme } from \"./CalendarTheme\";\nimport { CalendarWeek } from \"./CalendarWeek\";\nimport { WeekDayCell } from \"./renderers/WeekDayCell\";\nimport { CalendarDay } from \"./renderers/CalendarDay\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\n\nexport interface CalendarMonthProps<T>\n extends CalendarOnClicks<T>,\n Renderers,\n OptionalMinMaxDates {\n month: MonthData;\n dayComponent?: React.ComponentType<CalendarDayProps<T>>;\n userDataPerWeek?: CalendarUserMonthData<T>;\n statePerWeek?: CalendarUserMonthData<DayState>;\n theme?: CalendarTheme;\n headerLeftContent?: React.ReactElement<{}>;\n headerRightContent?: React.ReactElement<{}>;\n extraDayContent?: React.ComponentType<ExtraDayContentProps<T>>;\n defaultHighlights?: Array<DayStateHighlight>;\n}\n\nexport function CalendarMonth<T>({\n month,\n dayComponent = CalendarDay,\n statePerWeek,\n userDataPerWeek,\n minDate,\n maxDate,\n onClickDay,\n onClickWeek,\n onClickWeekDay,\n onClickMonth,\n onClickYear,\n renderWeekNumber,\n renderWeekDay,\n headerLeftContent,\n headerRightContent,\n theme = defaultCalendarTheme,\n extraDayContent,\n defaultHighlights,\n}: CalendarMonthProps<T>) {\n const showWeekNumber = theme.WeekNumber.show;\n\n return (\n <>\n <Box alignItems={\"stretch\"}>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"32px\"}\n >\n <Box alignItems={\"center\"}>{headerLeftContent}</Box>\n\n <Row alignItems={\"center\"}>\n <Row width={\"104px\"} justifyContent={\"center\"}>\n {onClickMonth ? (\n <FlatButton\n onClick={() => onClickMonth(month)}\n label={month.name}\n />\n ) : (\n <Text>{month.name}</Text>\n )}\n </Row>\n <Space />\n <Row width={\"64px\"} justifyContent={\"center\"}>\n {onClickYear ? (\n <FlatButton\n onClick={() => onClickYear(month.year)}\n label={String(month.year)}\n />\n ) : (\n <Text>{month.year}</Text>\n )}\n </Row>\n </Row>\n\n <Box alignItems={\"center\"}>{headerRightContent}</Box>\n </Row>\n\n <table>\n <tbody>\n <tr>\n {showWeekNumber && (\n <td>\n <Box\n width={theme.width}\n height={theme.height}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n <Text\n size={\"small\"}\n color={theme.CalendarMonth.headerTextColor}\n >\n W\n </Text>\n </Box>\n </td>\n )}\n {month.weeks[0].days.map((day: DayData) => (\n <td key={day.name}>\n {renderWeekDay ? (\n renderWeekDay(day.name, theme, onClickWeekDay)\n ) : (\n <WeekDayCell\n day={day}\n onClickWeekDay={onClickWeekDay}\n theme={theme}\n />\n )}\n </td>\n ))}\n </tr>\n {month.weeks.map((week: WeekData) => (\n <CalendarWeek<T>\n key={week.weekNumber}\n month={month}\n week={week}\n dayComponent={dayComponent}\n statePerWeekDay={statePerWeek && statePerWeek[week.weekNumber]}\n userDataPerWeekDay={\n userDataPerWeek && userDataPerWeek[week.weekNumber]\n }\n onClickDay={onClickDay}\n onClickWeek={onClickWeek}\n theme={theme}\n renderWeekNumber={renderWeekNumber}\n extraDayContent={extraDayContent}\n defaultHighlights={defaultHighlights}\n minDate={minDate}\n maxDate={maxDate}\n />\n ))}\n </tbody>\n </table>\n </Box>\n </>\n );\n}\n","import { Row, Space, Spacing } from \"@stenajs-webui/core\";\nimport { getMonth, getYear, parse } from \"date-fns\";\nimport { chunk } from \"lodash\";\nimport * as React from \"react\";\nimport { useHighlightToday } from \"../../features/today-state/UseHighlightToday\";\nimport {\n CalendarOnClicks,\n CalendarProps,\n CalendarUserData,\n DayState,\n Renderers,\n} from \"../../types/CalendarTypes\";\nimport {\n calculateOverflowingMonth,\n getMonthInYear,\n getMonthsInYear,\n MonthData,\n} from \"../../util/calendar/CalendarDataFactory\";\n\nimport { CalendarMonth } from \"./CalendarMonth\";\nimport { CalendarTheme, defaultCalendarTheme } from \"./CalendarTheme\";\nimport { CalendarDay } from \"./renderers/CalendarDay\";\nimport styles from \"./Calendar.module.css\";\nimport { useMemo } from \"react\";\n\ninterface CalendarPanelProps<T>\n extends CalendarProps<T>,\n CalendarOnClicks<T>,\n Renderers {\n year: number;\n month: number;\n monthRows: Array<Array<MonthData>>;\n userDataPerMonth?: CalendarUserData<T>;\n statePerMonth?: CalendarUserData<DayState>;\n width?: string;\n height?: string;\n theme?: CalendarTheme;\n}\n\nfunction CalendarPanel<T>({\n monthRows,\n dayComponent = CalendarDay,\n userDataPerMonth,\n statePerMonth,\n minDate,\n maxDate,\n onClickDay,\n onClickWeekDay,\n onClickWeek,\n onClickMonth,\n onClickYear,\n renderWeekDay,\n renderWeekNumber,\n headerLeftContent,\n headerRightContent,\n extraDayContent,\n defaultHighlights,\n theme = defaultCalendarTheme,\n}: CalendarPanelProps<T>) {\n const minDateObj = useMemo(\n () => (minDate ? parse(minDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [minDate]\n );\n\n const maxDateObj = useMemo(\n () => (maxDate ? parse(maxDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [maxDate]\n );\n\n return (\n <div className={styles.calendar}>\n {monthRows.map((monthRow, rowIndex) => (\n <Spacing key={rowIndex}>\n <Row>\n {monthRow.map((month, index) => (\n <React.Fragment key={month.name}>\n {index > 0 && <Space />}\n <CalendarMonth<T>\n month={month}\n dayComponent={dayComponent}\n userDataPerWeek={\n userDataPerMonth && userDataPerMonth[month.monthString]\n }\n statePerWeek={\n statePerMonth && statePerMonth[month.monthString]\n }\n onClickDay={onClickDay}\n onClickWeekDay={onClickWeekDay}\n onClickWeek={onClickWeek}\n onClickMonth={onClickMonth}\n onClickYear={onClickYear}\n theme={theme}\n renderWeekNumber={renderWeekNumber}\n renderWeekDay={renderWeekDay}\n headerLeftContent={headerLeftContent}\n headerRightContent={headerRightContent}\n extraDayContent={extraDayContent}\n defaultHighlights={defaultHighlights}\n minDate={minDateObj}\n maxDate={maxDateObj}\n />\n </React.Fragment>\n ))}\n </Row>\n </Spacing>\n ))}\n </div>\n );\n}\n\nexport function Calendar<T>(props: CalendarProps<T>) {\n const initialDate = getInitialDate(props.year, props.month, props.date);\n const { year, month } = calculateOverflowingMonth(\n initialDate.year,\n initialDate.month\n );\n const monthRows = getMonthRows(\n year,\n month,\n props.numMonths,\n props.monthsPerRow\n );\n\n const statePerMonth = useHighlightToday(\n props.highlightToday,\n props.statePerMonth\n );\n\n return (\n <CalendarPanel<T>\n year={year}\n month={month}\n monthRows={monthRows}\n {...props}\n statePerMonth={statePerMonth}\n />\n );\n}\n\nconst getInitialDate = (year?: number, month?: number, date?: Date) => {\n if (month && year) {\n return {\n month,\n year,\n };\n }\n if (date) {\n return {\n month: getMonth(date),\n year: getYear(date),\n };\n }\n const now = new Date();\n return {\n month: getMonth(now),\n year: getYear(now),\n };\n};\n\nconst getMonthRows = (\n year: number,\n month: number,\n numMonths?: number,\n monthsPerRow?: number\n): Array<Array<MonthData>> => {\n if (numMonths == null) {\n return [[getMonthInYear(year, month)]];\n }\n if (monthsPerRow == null) {\n return [getMonthsInYear(year, month, numMonths)];\n }\n return chunk(getMonthsInYear(year, month, numMonths), monthsPerRow);\n};\n","import { addMonths, addYears, subMonths, subYears } from \"date-fns\";\nimport { useCallback } from \"react\";\n\nexport const useSelectedMonthStepperLogic = (\n dateInFocus: Date,\n setDateInFocus?: (dateInFocus: Date) => void,\n monthsPerRow?: number,\n numMonths?: number\n) => {\n const nextMonth = useCallback(() => {\n const d = addMonths(dateInFocus, monthsPerRow ?? numMonths ?? 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus, monthsPerRow, numMonths]);\n\n const nextYear = useCallback(() => {\n const d = addYears(dateInFocus, 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus]);\n\n const prevMonth = useCallback(() => {\n const d = subMonths(dateInFocus, monthsPerRow ?? numMonths ?? 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus, monthsPerRow, numMonths]);\n\n const prevYear = useCallback(() => {\n const d = subYears(dateInFocus, 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus]);\n\n return {\n nextMonth,\n prevMonth,\n nextYear,\n prevYear,\n };\n};\n","import { Indent, Row, Space } from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n stenaAngleLeft,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { CalendarTheme } from \"../../components/calendar/CalendarTheme\";\nimport { faAngleDoubleLeft } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleLeft\";\nimport { faAngleDoubleRight } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleRight\";\nimport { ReactNode } from \"react\";\n\nexport interface WithMonthSwitcherBelowProps {\n theme: CalendarTheme;\n nextMonth: () => void;\n prevMonth: () => void;\n nextYear: () => void;\n prevYear: () => void;\n children?: ReactNode;\n}\n\nexport const WithMonthSwitcherBelow: React.FC<WithMonthSwitcherBelowProps> = ({\n children,\n prevMonth,\n nextMonth,\n prevYear,\n nextYear,\n}) => (\n <div>\n {children}\n <Indent>\n <Row>\n <FlatButton onClick={prevYear} leftIcon={faAngleDoubleLeft} />\n <Space />\n <FlatButton onClick={prevMonth} leftIcon={stenaAngleLeft} />\n <Indent num={2} />\n <FlatButton onClick={nextMonth} leftIcon={stenaAngleRight} />\n <Space />\n <FlatButton onClick={nextYear} leftIcon={faAngleDoubleRight} />\n </Row>\n </Indent>\n <Space />\n </div>\n);\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, PrimaryButton } from \"@stenajs-webui/elements\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { Month } from \"../../util/calendar/CalendarDataFactory\";\nimport { format } from \"date-fns\";\n\ninterface Props extends ValueAndOnValueChangeProps<Month> {\n month: Month;\n}\n\nexport const MonthPickerCell: React.FC<Props> = ({\n value,\n onValueChange,\n month,\n}) => {\n const label = useMemo(() => {\n const now = new Date(2000, month, 1);\n return format(now, \"MMM\");\n }, [month]);\n\n return (\n <Row width={\"64px\"} justifyContent={\"center\"} spacing={0.5} indent={0.5}>\n {value === month ? (\n <PrimaryButton\n label={label}\n onClick={() => onValueChange && onValueChange(month)}\n />\n ) : (\n <FlatButton\n label={label}\n onClick={() => onValueChange && onValueChange(month)}\n />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { Month } from \"../../util/calendar/CalendarDataFactory\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport { MonthPickerCell } from \"./MonthPickerCell\";\n\nexport interface MonthPickerProps extends ValueAndOnValueChangeProps<Month> {}\n\nconst monthMatrix = [\n [Month.JANUARY, Month.FEBRUARY, Month.MARCH],\n [Month.APRIL, Month.MAY, Month.JUNE],\n [Month.JULY, Month.AUGUST, Month.SEPTEMBER],\n [Month.OCTOBER, Month.NOVEMBER, Month.DECEMBER],\n];\n\nexport const MonthPicker: React.FC<MonthPickerProps> = ({\n value,\n onValueChange,\n}) => {\n return (\n <Column>\n {monthMatrix.map((monthRow) => (\n <Row key={monthRow[0]}>\n {monthRow.map((month) => (\n <MonthPickerCell\n key={month}\n month={month}\n onValueChange={onValueChange}\n value={value}\n />\n ))}\n </Row>\n ))}\n </Column>\n );\n};\n","import { PresetPage } from \"./CalendarPreset\";\nimport { addDays, subDays } from \"date-fns\";\n\nexport const createStandardDateRangePresets = (\n now: Date\n): Array<PresetPage> => [\n {\n label: \"Past\",\n presets: [\n { label: \"Last 3 days\", startDate: now, endDate: subDays(now, 2) },\n { label: \"Last 7 days\", startDate: now, endDate: subDays(now, 6) },\n { label: \"Last 30 days\", startDate: now, endDate: subDays(now, 29) },\n { label: \"Last 45 days\", startDate: now, endDate: subDays(now, 44) },\n ],\n },\n {\n label: \"Future\",\n presets: [\n { label: \"Next 3 days\", startDate: now, endDate: addDays(now, 2) },\n { label: \"Next 7 days\", startDate: now, endDate: addDays(now, 6) },\n { label: \"Next 30 days\", startDate: now, endDate: addDays(now, 29) },\n { label: \"Next 45 days\", startDate: now, endDate: addDays(now, 44) },\n ],\n },\n];\n","import * as React from \"react\";\nimport { useMemo, useState } from \"react\";\nimport { createStandardDateRangePresets } from \"./PresetFactory\";\nimport { Column, Row, Space, Text } from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n PrimaryButton,\n stenaAngleLeft,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport { CalendarPreset } from \"./CalendarPreset\";\n\nexport interface PresetPickerProps {\n onClickPreset: (preset: CalendarPreset) => void;\n}\n\nexport const PresetPicker: React.FC<PresetPickerProps> = ({\n onClickPreset,\n}) => {\n const [pageIndex, setPageIndex] = useState(0);\n const pages = useMemo(() => createStandardDateRangePresets(new Date()), []);\n\n const currentPage = pages[pageIndex] ?? pages[0];\n\n return (\n <Column>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n width={\"200px\"}\n >\n <FlatButton\n size={\"small\"}\n leftIcon={stenaAngleLeft}\n disabled={pageIndex === 0}\n onClick={() => setPageIndex(pageIndex - 1)}\n />\n <Text>{currentPage.label}</Text>\n <FlatButton\n size={\"small\"}\n leftIcon={stenaAngleRight}\n disabled={pageIndex === pages.length - 1}\n onClick={() => setPageIndex(pageIndex + 1)}\n />\n </Row>\n <Space />\n <Column alignItems={\"center\"}>\n {currentPage.presets.map((preset) => (\n <React.Fragment key={preset.label}>\n <PrimaryButton\n label={preset.label}\n onClick={() => onClickPreset(preset)}\n />\n <Space />\n </React.Fragment>\n ))}\n </Column>\n </Column>\n );\n};\n","import * as React from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, PrimaryButton } from \"@stenajs-webui/elements\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\n\ninterface Props extends ValueAndOnValueChangeProps<number> {\n year: number;\n}\n\nexport const YearPickerCell: React.FC<Props> = ({\n value,\n onValueChange,\n year,\n}) => {\n const label = String(year);\n return (\n <Row width={\"64px\"} justifyContent={\"center\"} spacing={0.5} indent={0.5}>\n {value === year ? (\n <PrimaryButton label={label} onClick={() => onValueChange?.(year)} />\n ) : (\n <FlatButton label={label} onClick={() => onValueChange?.(year)} />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport { YearPickerCell } from \"./YearPickerCell\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { faCaretLeft } from \"@fortawesome/free-solid-svg-icons/faCaretLeft\";\nimport { faCaretRight } from \"@fortawesome/free-solid-svg-icons/faCaretRight\";\nimport { chunk, range } from \"lodash\";\n\nexport interface YearPickerProps extends ValueAndOnValueChangeProps<number> {\n initialLastYear?: number;\n}\n\nexport const YearPicker: React.FC<YearPickerProps> = ({\n value,\n onValueChange,\n initialLastYear,\n}) => {\n const [lastYear, setLastYear] = useState(() => {\n if (value) {\n return value + 4;\n }\n return initialLastYear ?? new Date().getFullYear() + 4;\n });\n\n const yearRows = useMemo(() => {\n const startYear = lastYear - 11;\n return chunk(range(startYear, lastYear + 1), 3);\n }, [lastYear]);\n\n useEffect(() => {\n setLastYear((prev) => calculateLastYearInFocus(value, prev));\n }, [value]);\n\n return (\n <Row>\n <Column justifyContent={\"center\"}>\n <FlatButton\n leftIcon={faCaretLeft}\n onClick={() => setLastYear(lastYear - 3)}\n />\n </Column>\n <Column>\n {yearRows.map((yearRow) => (\n <Row key={yearRow[0]}>\n {yearRow.map((year) => (\n <YearPickerCell\n key={year}\n year={year}\n onValueChange={onValueChange}\n value={value}\n />\n ))}\n </Row>\n ))}\n </Column>\n <Column justifyContent={\"center\"}>\n <FlatButton\n leftIcon={faCaretRight}\n onClick={() => setLastYear(lastYear + 3)}\n />\n </Column>\n </Row>\n );\n};\n\nconst calculateLastYearInFocus = (\n value: number | undefined,\n lastYear: number\n): number => {\n if (value == null) {\n return lastYear;\n }\n if (value > lastYear) {\n const yearDiff = value - lastYear;\n const remaining = yearDiff % 3;\n const yearsToAdd = yearDiff - remaining + 3;\n return lastYear + yearsToAdd;\n }\n const startYear = lastYear - 11;\n if (value < startYear) {\n const yearDiff = startYear - value;\n const remaining = yearDiff % 3;\n const yearsToSubtract = yearDiff - remaining + 3;\n return lastYear - yearsToSubtract;\n }\n\n return lastYear;\n};\n","import { Box } from \"@stenajs-webui/core\";\nimport { PrimaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Calendar } from \"../../components/calendar/Calendar\";\nimport { CalendarProps } from \"../../types/CalendarTypes\";\nimport { Month } from \"../../util/calendar/CalendarDataFactory\";\nimport { MonthPicker } from \"../month-picker/MonthPicker\";\nimport { CalendarPreset } from \"../preset-picker/CalendarPreset\";\nimport { PresetPicker } from \"../preset-picker/PresetPicker\";\nimport { YearPicker } from \"../year-picker/YearPicker\";\nimport { CalendarPanelType } from \"./CalendarPanelType\";\n\ninterface CalendarWithMonthYearPickersProps<T>\n extends Omit<CalendarProps<T>, \"date\" | \"year\" | \"month\"> {\n dateInFocus: Date;\n setDateInFocus: (dateInFocus: Date) => void;\n currentPanel: CalendarPanelType;\n setCurrentPanel: (currentPanel: CalendarPanelType) => void;\n onSelectPreset: (preset: CalendarPreset) => void;\n}\n\nexport const CalendarWithMonthYearPickers =\n function CalendarWithMonthYearPickers<T>({\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n ...props\n }: CalendarWithMonthYearPickersProps<T>) {\n const onChangeSelectedMonth = useCallback(\n (selectedMonth: Month) => {\n const newDate = dateInFocus ? new Date(dateInFocus) : new Date();\n newDate.setMonth(selectedMonth);\n if (setDateInFocus) {\n setDateInFocus(newDate);\n }\n setCurrentPanel(\"calendar\");\n },\n [dateInFocus, setDateInFocus, setCurrentPanel]\n );\n\n const onChangeSelectedYear = useCallback(\n (selectedYear: number) => {\n const newDate = dateInFocus ? new Date(dateInFocus) : new Date();\n newDate.setFullYear(selectedYear);\n if (setDateInFocus) {\n setDateInFocus(newDate);\n }\n setCurrentPanel(\"calendar\");\n },\n [dateInFocus, setDateInFocus, setCurrentPanel]\n );\n\n const onClickYear = useCallback(() => {\n setCurrentPanel(\"year\");\n }, [setCurrentPanel]);\n\n const onClickMonth = useCallback(() => {\n setCurrentPanel(\"month\");\n }, [setCurrentPanel]);\n\n switch (currentPanel) {\n case \"calendar\":\n return (\n <>\n <Calendar<T>\n {...props}\n date={dateInFocus}\n onClickYear={onClickYear}\n onClickMonth={onClickMonth}\n />\n </>\n );\n case \"month\":\n return (\n <MonthPicker\n value={dateInFocus.getMonth()}\n onValueChange={onChangeSelectedMonth}\n />\n );\n case \"year\":\n return (\n <YearPicker\n value={dateInFocus.getFullYear()}\n onValueChange={onChangeSelectedYear}\n />\n );\n case \"presets\":\n return <PresetPicker onClickPreset={() => {}} />;\n\n default:\n return (\n <Box>\n <PrimaryButton\n label={\"Show calendar\"}\n onClick={() => setCurrentPanel(\"calendar\")}\n />\n </Box>\n );\n }\n };\n","import {\n FlatButton,\n stenaAngleLeft,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { Calendar } from \"../../components/calendar/Calendar\";\nimport { defaultCalendarTheme } from \"../../components/calendar/CalendarTheme\";\nimport { CalendarProps } from \"../../types/CalendarTypes\";\nimport { useSelectedMonthStepperLogic } from \"./hooks/UseSelectedMonthStepperLogic\";\nimport { WithMonthSwitcherBelow } from \"./MonthSwitcherBelow\";\nimport { CalendarWithMonthYearPickers } from \"../calendar-with-month-year-pickers/CalendarWithMonthYearPickers\";\nimport { Column, Row, Space } from \"@stenajs-webui/core\";\nimport { faAngleDoubleLeft } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleLeft\";\nimport { faAngleDoubleRight } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleRight\";\nimport { CalendarPanelType } from \"../calendar-with-month-year-pickers/CalendarPanelType\";\nimport { CalendarPreset } from \"../preset-picker/CalendarPreset\";\n\nexport type MonthSwitcherPlacement = \"header\" | \"below\";\n\nexport interface CalendarWithMonthSwitcherProps<T> extends CalendarProps<T> {\n monthSwitcherPlacement?: MonthSwitcherPlacement;\n dateInFocus: Date;\n setDateInFocus: (dateInFocus: Date) => void;\n currentPanel: CalendarPanelType;\n setCurrentPanel: (currentPanel: CalendarPanelType) => void;\n onSelectPreset?: (preset: CalendarPreset) => void;\n hideYearPagination?: boolean;\n}\n\nconst noop = () => {};\n\nexport function CalendarWithMonthSwitcher<T>({\n monthSwitcherPlacement,\n theme = defaultCalendarTheme,\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n onSelectPreset = noop,\n hideYearPagination = false,\n ...calendarProps\n}: CalendarWithMonthSwitcherProps<T>) {\n const { nextMonth, prevMonth, nextYear, prevYear } =\n useSelectedMonthStepperLogic(\n dateInFocus,\n setDateInFocus,\n calendarProps.monthsPerRow,\n calendarProps.numMonths\n );\n\n const placement = fallbackIfNoPlacement(\n monthSwitcherPlacement,\n calendarProps.numMonths\n );\n\n switch (placement) {\n case \"below\": {\n return (\n <WithMonthSwitcherBelow\n theme={theme}\n nextMonth={nextMonth}\n prevMonth={prevMonth}\n nextYear={nextYear}\n prevYear={prevYear}\n >\n <Calendar<T> {...calendarProps} theme={theme} date={dateInFocus} />\n </WithMonthSwitcherBelow>\n );\n }\n case \"header\": {\n return (\n <Column>\n <CalendarWithMonthYearPickers<T>\n {...calendarProps}\n theme={theme}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n onSelectPreset={onSelectPreset}\n headerLeftContent={\n <Row alignItems={\"center\"}>\n {!hideYearPagination && (\n <FlatButton\n size={\"small\"}\n onClick={prevYear}\n leftIcon={faAngleDoubleLeft}\n />\n )}\n <Space />\n <FlatButton\n size={\"small\"}\n onClick={prevMonth}\n leftIcon={stenaAngleLeft}\n />\n </Row>\n }\n headerRightContent={\n <Row alignItems={\"center\"}>\n <FlatButton\n size={\"small\"}\n onClick={nextMonth}\n leftIcon={stenaAngleRight}\n />\n <Space />\n {!hideYearPagination && (\n <FlatButton\n size={\"small\"}\n onClick={nextYear}\n leftIcon={faAngleDoubleRight}\n />\n )}\n </Row>\n }\n />\n </Column>\n );\n }\n default: {\n return (\n <Calendar<T> {...calendarProps} theme={theme} date={dateInFocus} />\n );\n }\n }\n}\n\nconst fallbackIfNoPlacement = (\n monthSwitcherPlacement: MonthSwitcherPlacement | undefined,\n numMonths: number | undefined\n): MonthSwitcherPlacement => {\n return monthSwitcherPlacement || (numMonths || 1) > 1 ? \"below\" : \"header\";\n};\n","import { DateRange, DateStringRange } from \"../../types/DateRange\";\nimport { format, parse } from \"date-fns\";\n\nexport const dateRangeToStrings = (dateRange: DateRange): DateStringRange => ({\n startDate: dateRange.startDate\n ? format(dateRange.startDate, \"yyyy-MM-dd\")\n : undefined,\n endDate: dateRange.endDate\n ? format(dateRange.endDate, \"yyyy-MM-dd\")\n : undefined,\n});\n\nexport const stringsToDateRange = ({\n startDate,\n endDate,\n}: DateStringRange): DateRange => {\n const now = new Date();\n return {\n startDate: startDate ? parse(startDate, \"yyyy-MM-dd\", now) : undefined,\n endDate: endDate ? parse(endDate, \"yyyy-MM-dd\", now) : undefined,\n };\n};\n","import { isAfter, isSameDay } from \"date-fns\";\nimport { DateRange, DateStringRange } from \"../../types/DateRange\";\nimport { dateRangeToStrings, stringsToDateRange } from \"./DateRangeTransformer\";\n\nexport const isDateRangeInvalid = ({\n startDate,\n endDate,\n}: DateRange): boolean =>\n Boolean(\n startDate &&\n endDate &&\n !isSameDay(startDate, endDate) &&\n isAfter(startDate, endDate)\n );\n\nexport const toggleDatesIfEndIsEarlierThanStart = (\n dateRange: DateRange\n): DateRange => {\n if (isDateRangeInvalid(dateRange)) {\n return {\n startDate: dateRange.endDate,\n endDate: dateRange.startDate,\n };\n }\n return dateRange;\n};\n\nexport const toggleDateStringsIfEndIsEarlierThanStart = (\n dateRange: DateStringRange\n): DateStringRange => {\n if (dateRange.startDate && dateRange.endDate) {\n return dateRangeToStrings(\n toggleDatesIfEndIsEarlierThanStart(stringsToDateRange(dateRange))\n );\n }\n return dateRange;\n};\n","import { useCallback } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../components/calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { OnClickDay } from \"../../../types/CalendarTypes\";\nimport { DayData } from \"../../../util/calendar/CalendarDataFactory\";\nimport {\n isDateRangeInvalid,\n toggleDatesIfEndIsEarlierThanStart,\n} from \"../../../util/date-range/DateRangeValidator\";\nimport { DateRange } from \"../../../types/DateRange\";\n\nexport const useDateRangeOnClickDayHandler = <T>(\n value: DateRange | undefined,\n onValueChange: ((dateRange: DateRange) => void) | undefined,\n focusedInput: DateRangeFocusedInput,\n setFocusedInput: (focusedInput: DateRangeFocusedInput) => void\n): OnClickDay<T> => {\n return useCallback(\n (day: DayData) => {\n const dateRange = {\n startDate: focusedInput === \"startDate\" ? day.date : value?.startDate,\n endDate: focusedInput === \"endDate\" ? day.date : value?.endDate,\n };\n\n if (!isDateRangeInvalid(dateRange)) {\n setFocusedInput(focusedInput === \"startDate\" ? \"endDate\" : \"startDate\");\n }\n onValueChange?.(toggleDatesIfEndIsEarlierThanStart(dateRange));\n },\n [\n focusedInput,\n onValueChange,\n setFocusedInput,\n value?.endDate,\n value?.startDate,\n ]\n );\n};\n","import { CalendarPanelType } from \"../calendar-with-month-year-pickers/CalendarPanelType\";\nimport { useCallback, useState } from \"react\";\n\nexport type OnChangePanel = (panel: CalendarPanelType) => void;\n\nexport interface UseInternalPanelStateProps {\n onChangePanel?: OnChangePanel;\n}\n\nexport const useInternalPanelState = (\n onChangePanel: OnChangePanel | undefined\n) => {\n const [currentPanel, _setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n const setCurrentPanel = useCallback(\n (currentPanel: CalendarPanelType) => {\n _setCurrentPanel(currentPanel);\n onChangePanel?.(currentPanel);\n },\n [onChangePanel]\n );\n\n return {\n currentPanel,\n setCurrentPanel,\n };\n};\n","import { useMemo, useState } from \"react\";\nimport { useDateRangeOnClickDayHandler } from \"../../../../features/date-range/hooks/UseDateRangeOnClickDayHandler\";\nimport { DateRangeCalendarProps } from \"../DateRangeCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { buildDayStateForDateRange } from \"../../../../util/calendar/StateModifier\";\nimport { useInternalPanelState } from \"../../../../features/internal-panel-state/UseInternalPanelState\";\n\nexport const useDateRangeSelection = <T>({\n focusedInput,\n value,\n onValueChange,\n setFocusedInput,\n statePerMonth,\n onChangePanel,\n}: DateRangeCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n const [dateInFocus, setDateInFocus] = useState(() => new Date());\n\n const onClickDay = useDateRangeOnClickDayHandler(\n value,\n onValueChange,\n focusedInput,\n setFocusedInput\n );\n\n const statePerMonthWithSelection = useMemo(\n () =>\n buildDayStateForDateRange(\n statePerMonth,\n value?.startDate,\n value?.endDate\n ),\n [statePerMonth, value?.endDate, value?.startDate]\n );\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelection,\n currentPanel,\n setCurrentPanel,\n setDateInFocus,\n dateInFocus,\n };\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useDateRangeSelection } from \"./hooks/UseDateRangeSelection\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { DateRange } from \"../../../types/DateRange\";\n\nexport type DateRangeFocusedInput = \"startDate\" | \"endDate\" | undefined;\n\nexport interface DateRangeCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T>,\n ValueAndOnValueChangeProps<DateRange> {\n focusedInput?: DateRangeFocusedInput;\n setFocusedInput: (focusedInput: DateRangeFocusedInput) => void;\n}\n\nexport function DateRangeCalendar<T>(props: DateRangeCalendarProps<T>) {\n const dateRangeSelectionProps = useDateRangeSelection(props);\n return (\n <CalendarWithMonthSwitcher<T> {...props} {...dateRangeSelectionProps} />\n );\n}\n\nexport type DateRangeInputCalendarProps<T> = Omit<\n DateRangeCalendarProps<T>,\n | \"startDateInFocus\"\n | \"value\"\n | \"onValueChange\"\n | \"focusedInput\"\n | \"setFocusedInput\"\n | \"theme\"\n | \"currentPanel\"\n | \"setCurrentPanel\"\n>;\n","import { useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../DateRangeCalendar\";\n\nexport const useDateRangeCalendarState = () => {\n const [startDate, setStartDate] = useState<Date | undefined>();\n const [endDate, setEndDate] = useState<Date | undefined>();\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n return {\n startDate,\n setStartDate,\n endDate,\n setEndDate,\n focusedInput,\n setFocusedInput,\n };\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { OnClickDay } from \"../../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport { SingleDateCalendarProps } from \"./SingleDateCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\n\nexport const useSingleDateSelection = <T>({\n onChange,\n value,\n statePerMonth,\n onChangePanel,\n}: SingleDateCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const [dateInFocus, setDateInFocus] = useState(() => value ?? new Date());\n\n const onClickDay: OnClickDay<T> = useCallback(\n (day) => {\n if (onChange) {\n onChange(day.date);\n }\n },\n [onChange]\n );\n\n const statePerMonthWithSelectedDate = useMemo(\n () =>\n value\n ? addDayStateHighlights(statePerMonth, value, [\n \"selected\",\n \"singleSelected\",\n ])\n : statePerMonth,\n [statePerMonth, value]\n );\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelectedDate,\n date: value,\n currentPanel,\n setCurrentPanel,\n dateInFocus,\n setDateInFocus,\n };\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\n\nimport { useSingleDateSelection } from \"./UseSingleDateSelection\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\n\nexport interface SingleDateCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T> {\n value: Date | undefined;\n onChange: (value: Date | undefined) => void;\n}\n\nexport function SingleDateCalendar<T>(props: SingleDateCalendarProps<T>) {\n const singleDateSelectionProps = useSingleDateSelection(props);\n return (\n <CalendarWithMonthSwitcher<T> {...props} {...singleDateSelectionProps} />\n );\n}\n","import { isSameDay } from \"date-fns\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { OnClickDay } from \"../../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport { MultiDateCalendarProps } from \"./MultiDateCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\n\nexport const useMultiDateSelection = <T>({\n onChange,\n value,\n statePerMonth,\n onChangePanel,\n}: MultiDateCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const [dateInFocus, setDateInFocus] = useState(() => new Date());\n\n const onClickDay: OnClickDay<T> = useCallback(\n (day) => {\n if (!onChange) {\n return;\n }\n const isSelected = value && value.find((d) => isSameDay(d, day.date));\n if (value && isSelected) {\n onChange(value.filter((v) => !isSameDay(v, day.date)));\n } else {\n onChange([...(value || []), day.date]);\n }\n },\n [onChange, value]\n );\n const statePerMonthWithSelectedDate = useMemo(() => {\n if (!value) {\n return statePerMonth;\n }\n return value.reduce(\n (stateSum, date) => addDayStateHighlights(stateSum, date, [\"selected\"]),\n statePerMonth\n );\n }, [statePerMonth, value]);\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelectedDate,\n currentPanel,\n setCurrentPanel,\n dateInFocus,\n setDateInFocus,\n };\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useMultiDateSelection } from \"./UseMultiDateSelection\";\nimport { UseInternalPanelStateProps } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\n\nexport interface MultiDateCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T>,\n UseInternalPanelStateProps {\n value?: Array<Date>;\n onChange?: (value: Array<Date>) => void;\n}\n\nexport function MultiDateCalendar<T>(props: MultiDateCalendarProps<T>) {\n const selectionProps = useMultiDateSelection(props);\n return <CalendarWithMonthSwitcher<T> {...props} {...selectionProps} />;\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport {\n getStartDateOfISOWeek,\n getWeekForDate,\n WeekData,\n} from \"../../../util/calendar/CalendarDataFactory\";\nimport { addWeekRangeHighlights } from \"../../../util/calendar/StateModifier\";\nimport { SingleWeekCalendarProps } from \"./SingleWeekCalendar\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { OnClickDay, OnClickWeek } from \"../../../types/CalendarTypes\";\n\nexport const useSingleWeekSelection = <T>({\n onChange,\n value,\n statePerMonth,\n onChangePanel,\n}: SingleWeekCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const [dateInFocus, setDateInFocus] = useState(() => {\n const week = getWeekDataFromWeekString(value);\n if (!week) {\n return new Date();\n }\n return week.days[0].date;\n });\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const onClickDay = useCallback<OnClickDay<T>>(\n (day) => {\n if (onChange) {\n onChange(getWeekStringFromWeekData(getWeekForDate(day.date)));\n }\n },\n [onChange]\n );\n const onClickWeek = useCallback<OnClickWeek>(\n (week) => {\n if (onChange) {\n onChange(getWeekStringFromWeekData(week));\n }\n },\n [onChange]\n );\n\n const statePerMonthWithSelection = useMemo(() => {\n const weekData = getWeekDataFromWeekString(value);\n return weekData\n ? addWeekRangeHighlights(statePerMonth, weekData)\n : statePerMonth;\n }, [value, statePerMonth]);\n\n const date = useMemo(() => {\n const week = getWeekDataFromWeekString(value);\n if (!week) {\n return new Date();\n }\n return week.days[0].date;\n }, [value]);\n\n return {\n statePerMonth: statePerMonthWithSelection,\n date,\n dateInFocus,\n setDateInFocus,\n onClickDay,\n onClickWeek,\n currentPanel,\n setCurrentPanel,\n };\n};\n\nconst getWeekStringFromWeekData = (\n week: WeekData | undefined\n): string | undefined => {\n if (!week) {\n return undefined;\n }\n return `${week.endYear}-${week.weekNumber}`;\n};\n\nconst getWeekDataFromWeekString = (\n week: string | undefined\n): WeekData | undefined => {\n if (!week) {\n return undefined;\n }\n const parts = week.split(\"-\");\n const weekNumber = parseInt(parts[1], 10);\n const year = parseInt(parts[0], 10);\n return getWeekForDate(getStartDateOfISOWeek(weekNumber, year));\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useSingleWeekSelection } from \"./UseSingleWeekSelection\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\n\nexport type SingleWeekValue = string;\n\nexport interface SingleWeekCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T> {\n value: SingleWeekValue | undefined;\n onChange: (value: SingleWeekValue | undefined) => void;\n}\n\nexport function SingleWeekCalendar<T>(props: SingleWeekCalendarProps<T>) {\n const singleWeekSelectionProps = useSingleWeekSelection(props);\n return (\n <CalendarWithMonthSwitcher<T> {...props} {...singleWeekSelectionProps} />\n );\n}\n","import { isSameDay } from \"date-fns\";\n\nexport const addDateIfNotExists = (\n list: Array<Date>,\n date: Date\n): Array<Date> => {\n if (list.filter((item) => isSameDay(item, date)).length >= 1) {\n return list;\n }\n return [...list, date];\n};\n\nexport const removeDateIfExist = (list: Array<Date>, date: Date): Array<Date> =>\n list.filter((item) => !isSameDay(item, date));\n\nexport const listContainsDate = (list: Array<Date>, date: Date): boolean =>\n !!list.find((item) => isSameDay(item, date));\n","import { eachDayOfInterval } from \"date-fns\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useDateRangeOnClickDayHandler } from \"../../../features/date-range/hooks/UseDateRangeOnClickDayHandler\";\nimport { CalendarState, OnClickDay } from \"../../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport {\n listContainsDate,\n removeDateIfExist,\n} from \"../../../util/date/DateListTools\";\nimport { DateRangeFocusedInput } from \"../date-range-calendar/DateRangeCalendar\";\nimport { DateRangeExclusionCalendarProps } from \"./DateRangeExclusionCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { DateRange } from \"../../../types/DateRange\";\n\nexport const useDateRangeExclusionSelection = <T>({\n value,\n onValueChange,\n statePerMonth,\n onChangePanel,\n}: DateRangeExclusionCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const [dateRange, setDateRange] = useState<DateRange | undefined>();\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const [dateInFocus, setDateInFocus] = useState(\n () => (focusedInput && value?.[focusedInput]) ?? new Date()\n );\n\n const onChangeHandler = useCallback(\n (value: DateRange) => {\n setDateRange(value);\n const { startDate, endDate } = value;\n if (onValueChange) {\n if (startDate && endDate) {\n const dates = eachDayOfInterval({ start: startDate, end: endDate });\n onValueChange(dates);\n } else if (startDate) {\n onValueChange([startDate]);\n } else if (endDate) {\n onValueChange([endDate]);\n }\n }\n },\n [onValueChange]\n );\n\n const onClickDayRange = useDateRangeOnClickDayHandler(\n dateRange,\n onChangeHandler,\n focusedInput,\n setFocusedInput\n );\n\n const onClickDay: OnClickDay<T> = useCallback(\n (day, userData, ev) => {\n if (onValueChange) {\n if (ev.ctrlKey || ev.metaKey) {\n if (!value) {\n onValueChange([day.date]);\n } else if (listContainsDate(value, day.date)) {\n onValueChange(removeDateIfExist(value, day.date));\n } else {\n onValueChange([...value, day.date]);\n }\n } else {\n onClickDayRange(day, userData, ev);\n }\n }\n },\n [onValueChange, onClickDayRange, value]\n );\n const statePerMonthWithSelectedDate = useMemo(() => {\n return addHighlighting(statePerMonth, value);\n }, [statePerMonth, value]);\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelectedDate,\n currentPanel,\n setCurrentPanel,\n dateInFocus,\n setDateInFocus,\n };\n};\n\nconst addHighlighting = (\n statePerMonth: CalendarState | undefined,\n dateList: Array<Date> | undefined\n): CalendarState | undefined => {\n if (!dateList) {\n return statePerMonth;\n }\n return dateList.reduce((statePerMonth, date) => {\n return addDayStateHighlights(statePerMonth, date, [\"selected\"]);\n }, statePerMonth);\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useDateRangeExclusionSelection } from \"./UseDateRangeExclusionSelection\";\nimport { UseInternalPanelStateProps } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\n\nexport interface DateRangeExclusionCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T>,\n UseInternalPanelStateProps,\n ValueAndOnValueChangeProps<Array<Date>> {}\n\nexport function DateRangeExclusionCalendar<T>(\n props: DateRangeExclusionCalendarProps<T>\n) {\n const selectionProps = useDateRangeExclusionSelection(props);\n return <CalendarWithMonthSwitcher<T> {...props} {...selectionProps} />;\n}\n","import { PopoverPlacement } from \"@stenajs-webui/tooltip\";\n\nexport const defaultPopoverPlacement: PopoverPlacement = \"bottom\";\n","import { useTippyInstance } from \"@stenajs-webui/tooltip\";\nimport { useCallback } from \"react\";\n\nexport const useCalendarPopoverUpdater = () => {\n const [tippyRef, tippyInstanceRef] = useTippyInstance();\n\n const onChangePanel = useCallback(() => {\n tippyInstanceRef.current?.popperInstance?.update();\n }, [tippyInstanceRef]);\n\n return {\n onChangePanel,\n tippyRef,\n };\n};\n","import { useCallback, useState } from \"react\";\n\nexport const useDateInput = (\n onChange?: (date: Date | undefined) => void,\n onClose?: () => void,\n openOnMount?: boolean\n) => {\n const [showingCalendar, setShowingCalendar] = useState(openOnMount || false);\n\n const showCalendar = useCallback(() => {\n setShowingCalendar(true);\n return true;\n }, [setShowingCalendar]);\n\n const hideCalendar = useCallback(() => {\n setShowingCalendar(false);\n if (onClose) {\n onClose();\n }\n }, [setShowingCalendar, onClose]);\n\n const onSelectDate = useCallback(\n (date: Date | undefined) => {\n if (onChange) {\n onChange(date);\n }\n setTimeout(hideCalendar, 150);\n },\n [onChange, hideCalendar]\n );\n\n return {\n showCalendar,\n hideCalendar,\n showingCalendar,\n onSelectDate,\n };\n};\n","export const defaultMaxDate = \"2999-12-31\";\n","import { Box, Row } from \"@stenajs-webui/core\";\nimport { TextInput, TextInputProps } from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { format } from \"date-fns\";\nimport * as React from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport { useCalendarPopoverUpdater } from \"../../../features/internal-panel-state/UseCalendarPopoverUpdater\";\nimport { DateFormats } from \"../../../util/date/DateFormats\";\nimport { SingleDateCalendar } from \"../../calendar-types/single-date-calendar/SingleDateCalendar\";\nimport {\n CalendarTheme,\n defaultCalendarTheme,\n} from \"../../calendar/CalendarTheme\";\nimport { DateTextInputCalendarProps } from \"../date-text-input/DateTextInput\";\nimport { useDateInput } from \"./UseDateInput\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\nimport { FlatButton, stenaCalendar } from \"@stenajs-webui/elements\";\n\nexport interface DateInputProps<T = {}> extends OptionalMinMaxDatesAsString {\n /** The current value */\n value?: Date;\n /** onChange handler for when the user selects a date. */\n onChange?: (date: Date | undefined) => void;\n /** Variant of the input field. */\n variant?: TextInputProps[\"variant\"];\n /** If true, calendar will be open when component mounts. */\n openOnMount?: boolean;\n /** Is invoked when user closes the calendar popup. */\n onClose?: () => void;\n /**\n * The date format in the input field. See date-fns docs.\n * @default YYYY-MM-dd\n */\n displayFormat?: string;\n /**\n * Placeholder when no date has been selected.\n * @default Enter date\n */\n placeholder?: string;\n /**\n * Portal target, HTML element. If not set, portal is not used.\n */\n portalTarget?: HTMLElement | null;\n /**\n * Z-index of the calendar overlay.\n * @default 100\n */\n zIndex?: number;\n /**\n * Width of the input element.\n * * @default 125px\n */\n width?: string;\n /**\n * The calendar theme to use.\n */\n calendarTheme?: CalendarTheme;\n /** Props to be passed to Calendar, see SingleDateCalendar. */\n calendarProps?: DateTextInputCalendarProps<T>;\n /**\n * Disables the TextInput, Calendar and Popover.\n */\n disabled?: boolean;\n}\n\nexport const DateInput: React.FC<DateInputProps> = ({\n displayFormat = DateFormats.fullDate,\n placeholder = \"Enter date\",\n value,\n zIndex = 100,\n calendarTheme = defaultCalendarTheme,\n calendarProps,\n openOnMount,\n onClose,\n onChange,\n portalTarget,\n variant,\n width,\n minDate,\n maxDate = defaultMaxDate,\n disabled,\n}) => {\n const { hideCalendar, showingCalendar, onSelectDate, showCalendar } =\n useDateInput(onChange, onClose, openOnMount);\n\n const { tippyRef, onChangePanel } = useCalendarPopoverUpdater();\n\n return (\n <Box width={width}>\n <Popover\n arrow={false}\n lazy\n visible={showingCalendar}\n onClickOutside={hideCalendar}\n placement={defaultPopoverPlacement}\n zIndex={zIndex}\n appendTo={portalTarget ?? \"parent\"}\n tippyRef={tippyRef}\n disabled={disabled}\n content={\n <SingleDateCalendar\n {...calendarProps}\n onChange={onSelectDate}\n value={value}\n theme={calendarTheme}\n onChangePanel={onChangePanel}\n minDate={minDate}\n maxDate={maxDate}\n />\n }\n >\n <TextInput\n type={\"date\"}\n contentRight={\n <Row alignItems={\"center\"}>\n <FlatButton\n size={\"small\"}\n disabled={disabled}\n leftIcon={stenaCalendar}\n onClick={showCalendar}\n />\n </Row>\n }\n onFocus={showCalendar}\n onClickRight={showCalendar}\n value={value ? format(value, displayFormat) : \"\"}\n placeholder={placeholder}\n size={9}\n disabled={disabled}\n autoFocus={openOnMount}\n variant={variant}\n min={minDate}\n max={maxDate}\n />\n </Popover>\n </Box>\n );\n};\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { DayData } from \"../../../../util/calendar/CalendarDataFactory\";\nimport { isAfter } from \"date-fns\";\nimport { DateRange } from \"../../../../types/DateRange\";\n\nexport const useDateRangeInput = (\n value: DateRange | undefined,\n onValueChange: ((dateRange: DateRange) => void) | undefined\n) => {\n const startDateInputRef = useRef<HTMLInputElement>(null);\n const endDateInputRef = useRef<HTMLInputElement>(null);\n\n const [showingCalendar, setShowingCalendar] = useState(false);\n const [focusedInput, setFocusedInput] = useState<\n DateRangeFocusedInput | undefined\n >(undefined);\n\n const showCalendarStartDate = useCallback(() => {\n setFocusedInput(\"startDate\");\n setShowingCalendar(true);\n return true;\n }, [setFocusedInput, setShowingCalendar]);\n\n const showCalendarEndDate = useCallback(() => {\n setFocusedInput(\"endDate\");\n setShowingCalendar(true);\n return true;\n }, [setFocusedInput, setShowingCalendar]);\n\n const hideCalendar = useCallback(() => {\n setShowingCalendar(false);\n }, [setShowingCalendar]);\n\n const onClickDay = useCallback(\n (day: DayData) => {\n if (focusedInput === \"startDate\") {\n onValueChange?.({\n startDate: day.date,\n endDate: value?.endDate,\n });\n if (!value?.endDate) {\n setFocusedInput(\"endDate\");\n endDateInputRef.current && endDateInputRef.current.focus();\n } else {\n setTimeout(hideCalendar, 150);\n }\n } else if (focusedInput === \"endDate\") {\n onValueChange?.({\n startDate: value?.startDate,\n endDate: day.date,\n });\n if (!value?.startDate) {\n setFocusedInput(\"startDate\");\n startDateInputRef.current && startDateInputRef.current.focus();\n } else {\n setTimeout(hideCalendar, 150);\n }\n }\n },\n [focusedInput, onValueChange, setFocusedInput, hideCalendar, value]\n );\n\n const startDateIsAfterEnd = useMemo(\n () =>\n value?.startDate &&\n value?.endDate &&\n isAfter(value.startDate, value.endDate),\n [value?.startDate, value?.endDate]\n );\n\n return {\n showingCalendar,\n hideCalendar,\n showCalendarEndDate,\n showCalendarStartDate,\n focusedInput,\n setFocusedInput,\n startDateInputRef,\n endDateInputRef,\n onClickDay,\n startDateIsAfterEnd,\n };\n};\n","import { Row, Space } from \"@stenajs-webui/core\";\nimport { TextInput, ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { format } from \"date-fns\";\nimport * as React from \"react\";\nimport { useMemo, useState } from \"react\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport { DateFormats } from \"../../../util/date/DateFormats\";\nimport { DateRangeInputCalendarProps } from \"../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport {\n CalendarTheme,\n defaultCalendarTheme,\n} from \"../../calendar/CalendarTheme\";\nimport { useDateRangeInput } from \"./hooks/UseDateRangeInput\";\nimport { Icon, stenaCalendar } from \"@stenajs-webui/elements\";\nimport { faLongArrowAltRight } from \"@fortawesome/free-solid-svg-icons/faLongArrowAltRight\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { CalendarPanelType } from \"../../../features/calendar-with-month-year-pickers/CalendarPanelType\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { buildDayStateForDateRange } from \"../../../util/calendar/StateModifier\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { DateRange } from \"../../../types/DateRange\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\n\nexport interface DateRangeInputProps<T>\n extends OptionalMinMaxDatesAsString,\n ValueAndOnValueChangeProps<DateRange> {\n /**\n * The date format in the input field. See date-fns docs.\n * @default YYYY-MM-dd\n */\n displayFormat?: string;\n\n /**\n * Placeholder for start date field when no date has been selected.\n * @default Start date\n */\n placeholderStartDate?: string;\n\n /**\n * Placeholder for end date field when no date has been selected.\n * @default End date\n */\n placeholderEndDate?: string;\n /**\n * Portal target, HTML element. If not set, portal is not used.\n */\n portalTarget?: HTMLElement | null;\n\n /**\n * Z-index of the calendar overlay.\n * @default 100\n */\n zIndex?: number;\n\n /**\n * Width of the input element.\n * * @default 125px\n */\n width?: string;\n\n /**\n * The calendar theme to use.\n */\n calendarTheme?: CalendarTheme;\n\n /** Props to be passed to DateRangeCalendar, see DateRangeCalendar. */\n calendarProps?: DateRangeInputCalendarProps<T>;\n\n /**\n * Disables the Popover and both TextInputs.\n */\n disabled?: boolean;\n}\n\n/**\n * @deprecated Please use DateRangeDualTextInput instead.\n */\nexport function DateRangeInput<T>({\n displayFormat = DateFormats.fullDate,\n placeholderStartDate = \"Start date\",\n placeholderEndDate = \"End date\",\n portalTarget,\n value,\n onValueChange,\n zIndex = 100,\n width,\n calendarTheme = defaultCalendarTheme,\n calendarProps,\n minDate,\n maxDate = defaultMaxDate,\n disabled,\n}: DateRangeInputProps<T>): React.ReactElement<DateRangeInputProps<T>> {\n const [currentPanel, setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n const {\n hideCalendar,\n showCalendarEndDate,\n showCalendarStartDate,\n showingCalendar,\n focusedInput,\n startDateInputRef,\n endDateInputRef,\n onClickDay,\n startDateIsAfterEnd,\n } = useDateRangeInput(value, onValueChange);\n\n const [dateInFocus, setDateInFocus] = useState(\n () => (focusedInput && value?.[focusedInput]) ?? new Date()\n );\n const statePerMonth = useMemo(\n () =>\n buildDayStateForDateRange(undefined, value?.startDate, value?.endDate),\n [value]\n );\n\n return (\n <Popover\n arrow={false}\n lazy\n disabled={disabled}\n visible={showingCalendar}\n zIndex={zIndex}\n placement={defaultPopoverPlacement}\n appendTo={portalTarget ?? \"parent\"}\n onClickOutside={hideCalendar}\n content={\n <CalendarWithMonthSwitcher\n {...calendarProps}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n statePerMonth={statePerMonth}\n theme={calendarTheme}\n onClickDay={onClickDay}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n minDate={minDate}\n maxDate={maxDate}\n />\n }\n >\n <Row alignItems={\"center\"}>\n <TextInput\n iconLeft={stenaCalendar}\n onFocus={showCalendarStartDate}\n value={value?.startDate ? format(value.startDate, displayFormat) : \"\"}\n placeholder={placeholderStartDate}\n width={width}\n disabled={disabled}\n inputRef={startDateInputRef}\n size={9}\n variant={startDateIsAfterEnd ? \"error\" : undefined}\n />\n <Space />\n <Icon\n icon={faLongArrowAltRight}\n color={cssColor(\"--lhds-color-ui-500\")}\n size={14}\n />\n <Space />\n <TextInput\n iconLeft={stenaCalendar}\n onFocus={showCalendarEndDate}\n value={value?.endDate ? format(value.endDate, displayFormat) : \"\"}\n placeholder={placeholderEndDate}\n width={width}\n disabled={disabled}\n inputRef={endDateInputRef}\n size={9}\n variant={startDateIsAfterEnd ? \"error\" : undefined}\n />\n </Row>\n </Popover>\n );\n}\n","import { Box, Omit, Row } from \"@stenajs-webui/core\";\nimport { FlatButton, stenaCalendar } from \"@stenajs-webui/elements\";\nimport { TextInput, TextInputProps } from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { format, isValid, parse } from \"date-fns\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport { useCalendarPopoverUpdater } from \"../../../features/internal-panel-state/UseCalendarPopoverUpdater\";\nimport { DateFormats } from \"../../../util/date/DateFormats\";\nimport {\n SingleDateCalendar,\n SingleDateCalendarProps,\n} from \"../../calendar-types/single-date-calendar/SingleDateCalendar\";\nimport {\n CalendarTheme,\n defaultCalendarTheme,\n} from \"../../calendar/CalendarTheme\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\n\nexport type DateTextInputCalendarProps<T> = Omit<\n SingleDateCalendarProps<T>,\n \"value\" | \"onChange\" | \"theme\"\n>;\n\nexport interface DateTextInputProps<T>\n extends Omit<TextInputProps, \"onChange\" | \"theme\" | \"min\" | \"max\">,\n OptionalMinMaxDatesAsString {\n /** Props to be passed to Calendar, see SingleDateCalendar. */\n calendarProps?: DateTextInputCalendarProps<T>;\n /** Close calendar when date is selected, @default true */\n closeOnCalendarSelectDate?: boolean;\n /** Valid date format, @default YYYY-MM-DD */\n dateFormat?: string;\n /** Make the icon not clickable, @default false */\n disableCalender?: boolean;\n /** Show or hide the calender icon, @default false */\n hideCalenderIcon?: boolean;\n /** Placeholder for the input, @default YYYY-MM-DD */\n placeholder?: string;\n /** Portal target, HTML element. If not set, portal is not used. */\n portalTarget?: HTMLElement | null;\n /** Z-index of the calendar overlay, @default 100 */\n zIndex?: number;\n /** The date text input theme to use. */\n calendarTheme?: CalendarTheme;\n}\n\nexport const DateTextInput: React.FC<DateTextInputProps<{}>> = ({\n calendarProps,\n closeOnCalendarSelectDate = true,\n dateFormat = DateFormats.fullDate,\n disableCalender = false,\n onValueChange,\n placeholder = \"yyyy-mm-dd\",\n portalTarget,\n value,\n width = \"130px\",\n zIndex = 100,\n calendarTheme = defaultCalendarTheme,\n hideCalenderIcon = false,\n minDate,\n maxDate = defaultMaxDate,\n variant,\n ...props\n}) => {\n const [open, setOpen] = useState(false);\n const { tippyRef, onChangePanel } = useCalendarPopoverUpdater();\n\n const toggleCalendar = useCallback(() => {\n setOpen(!open);\n }, [setOpen, open]);\n\n const hideCalendar = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const onValueChangeHandler = useCallback(\n (value: string) => {\n if (onValueChange) {\n onValueChange(value);\n }\n },\n [onValueChange]\n );\n\n const onCalendarSelectDate = useCallback(\n (date: Date | undefined) => {\n if (date) {\n onValueChangeHandler(format(date, dateFormat));\n if (closeOnCalendarSelectDate) {\n setTimeout(() => setOpen(!open), 200);\n }\n }\n },\n [onValueChangeHandler, dateFormat, closeOnCalendarSelectDate, setOpen, open]\n );\n\n const inValidInput = !!value && !/^[-/\\\\.0-9]+$/.test(value);\n\n const dateIsValid = !!value && isValid(parse(value, dateFormat, new Date()));\n\n const userInputCorrectLength = !!value && value.length >= dateFormat.length;\n\n const invalid: boolean =\n (userInputCorrectLength && !dateIsValid) || inValidInput;\n\n return (\n <Box width={width}>\n <Popover\n arrow={false}\n lazy\n visible={open}\n zIndex={zIndex}\n appendTo={portalTarget ?? \"parent\"}\n placement={defaultPopoverPlacement}\n onClickOutside={hideCalendar}\n tippyRef={tippyRef}\n content={\n <SingleDateCalendar\n {...calendarProps}\n onChange={onCalendarSelectDate}\n onChangePanel={onChangePanel}\n value={\n value && dateIsValid\n ? parse(value, dateFormat, new Date())\n : undefined\n }\n minDate={minDate}\n maxDate={maxDate}\n theme={calendarTheme}\n />\n }\n >\n <TextInput\n {...props}\n variant={invalid ? \"error\" : variant}\n disableContentPaddingRight\n contentRight={\n !hideCalenderIcon ? (\n <Row alignItems={\"center\"} indent={0.5}>\n <FlatButton\n size={\"small\"}\n disabled={props.disabled}\n leftIcon={stenaCalendar}\n onClick={toggleCalendar}\n />\n </Row>\n ) : undefined\n }\n onValueChange={onValueChangeHandler}\n placeholder={placeholder}\n value={value || \"\"}\n min={minDate}\n max={maxDate}\n size={10}\n />\n </Popover>\n </Box>\n );\n};\n","export interface FormatTimeStringResult {\n time: string;\n success: boolean;\n}\n\nexport const formatHours = (hours: string): string => {\n if (hours === \"\") {\n return \"00\";\n }\n\n const h = parseInt(hours, 10);\n\n if (isNaN(h)) {\n throw new Error(\"Hours is not a number\");\n }\n\n if (h < 0 || h > 23) {\n throw new Error(\"Hours is an invalid number\");\n }\n\n switch (hours.length) {\n case 1:\n return `0${h}`;\n case 2:\n return hours;\n default:\n throw new Error(\"Invalid hour string\");\n }\n};\n\nexport const formatMinutes = (minutes: string): string => {\n if (minutes === \"\") {\n return \"00\";\n }\n\n const m = parseInt(minutes, 10);\n\n if (isNaN(m)) {\n throw new Error(\"Minutes is not a number\");\n }\n\n if (m < 0 || m > 59) {\n throw new Error(\"Minutes is an invalid number\");\n }\n\n switch (minutes.length) {\n case 1:\n return `0${m}`;\n case 2:\n return minutes;\n default:\n throw new Error(\"Invalid minute string\");\n }\n};\n\nexport const formatTimeString = (time: string): FormatTimeStringResult => {\n if (!validUserInput(time)) {\n return { time, success: false };\n }\n\n const arr = time && time.split(/-|:|,|;|[/]|[.]| /); // consider all these chars as user input separator\n if (arr && arr.length === 2) {\n try {\n const hours = formatHours(arr[0]);\n const minutes = formatMinutes(arr[1]);\n return { time: `${hours}:${minutes}`, success: true };\n } catch {\n return { time, success: false };\n }\n } else if (arr && arr.length === 1) {\n let hours = 0;\n let minutes = 0;\n switch (time.length) {\n case 1:\n return { time: `0${time}:00`, success: true };\n case 2:\n const timeNumber = parseInt(arr[0], 10);\n if (timeNumber >= 0 && timeNumber < 24) {\n return { time: `${time}:00`, success: true };\n } else if (timeNumber >= 24 && timeNumber < 59) {\n return { time: `00:${time}`, success: true };\n }\n return { time, success: false };\n case 3:\n minutes = parseInt(time.substr(1, 2), 10);\n if (minutes >= 0 && minutes <= 59) {\n return {\n time: `0${time.substr(0, 1)}:${time.substr(1, 2)}`,\n success: true,\n };\n }\n return { time, success: false };\n case 4:\n hours = parseInt(time.substr(0, 2), 10);\n minutes = parseInt(time.substr(2, 2), 10);\n if (hours < 0 || hours > 23) {\n return { time, success: false };\n }\n if (minutes < 0 || minutes > 59) {\n return { time, success: false };\n }\n return {\n time: `${time.substr(0, 2)}:${time.substr(2, 2)}`,\n success: true,\n };\n default:\n return { time, success: false };\n }\n }\n\n return { time, success: false };\n};\n\nexport const validUserInput = (input: string | undefined): boolean => {\n if (input) {\n return /^[-:.,/; 0-9]+$/.test(input);\n }\n\n return true;\n};\n","import { Omit } from \"@stenajs-webui/core\";\nimport { TextInput, TextInputProps } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { ChangeEventHandler, useCallback, useState } from \"react\";\nimport {\n formatTimeString,\n validUserInput,\n} from \"../../../util/time/TimeStringFormatValidator\";\n\nimport { stenaClock } from \"@stenajs-webui/elements\";\n\nexport interface TimeTextInputProps extends Omit<TextInputProps, \"onChange\"> {\n /** Show placeholder when true */\n showPlaceholder?: boolean;\n /** Show icon when true */\n useIcon?: boolean;\n /** Variant of the input field. */\n variant?: TextInputProps[\"variant\"];\n}\n\n/**\n * @deprecated\n */\nexport const TimeTextInput: React.FC<TimeTextInputProps> = ({\n onValueChange,\n showPlaceholder = true,\n useIcon = true,\n value,\n width = \"85px\",\n variant,\n ...props\n}) => {\n const [valid, setValid] = useState(() => validUserInput(value));\n\n const timeFormat = \"hh:mm\";\n\n const onBlur = useCallback(() => {\n if (value) {\n const formattedResult = formatTimeString(value);\n setValid(formattedResult.success);\n if (formattedResult.success) {\n if (onValueChange) {\n onValueChange(formattedResult.time);\n }\n }\n }\n }, [value, onValueChange, setValid]);\n\n const onChangeHandler = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (ev) => {\n const time = ev.target.value;\n const validInput = validUserInput(time);\n\n setValid(validInput && time.length <= timeFormat.length);\n\n if (onValueChange) {\n onValueChange(time);\n }\n },\n [onValueChange, setValid]\n );\n\n return (\n <TextInput\n {...props}\n type={\"time\"}\n variant={!valid ? \"error\" : variant}\n iconLeft={useIcon ? stenaClock : undefined}\n value={value}\n placeholder={showPlaceholder ? timeFormat : undefined}\n onChange={onChangeHandler}\n onBlur={onBlur}\n width={width}\n />\n );\n};\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n Box,\n BoxProps,\n ButtonElementProps,\n Indent,\n Row,\n SeparatorLine,\n} from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n Icon,\n stenaCalendar,\n stenaAngleDown,\n} from \"@stenajs-webui/elements\";\nimport {\n TextInput,\n TextInputBox,\n TextInputBoxProps,\n TextInputProps,\n} from \"@stenajs-webui/forms\";\nimport { debounce } from \"lodash\";\nimport * as React from \"react\";\nimport { FocusEventHandler, useCallback, useMemo, useRef } from \"react\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\nexport interface DualTextInputProps {\n onEsc?: TextInputProps[\"onEsc\"];\n onEnter?: TextInputProps[\"onEnter\"];\n widthLeft?: BoxProps[\"width\"];\n widthRight?: BoxProps[\"width\"];\n valueLeft?: TextInputProps[\"value\"];\n valueRight?: TextInputProps[\"value\"];\n minLeft?: string;\n maxLeft?: string;\n minRight?: string;\n maxRight?: string;\n typeLeft?: TextInputProps[\"type\"];\n typeRight?: TextInputProps[\"type\"];\n separatorIcon?: IconDefinition;\n placeholderLeft?: TextInputProps[\"placeholder\"];\n placeholderRight?: TextInputProps[\"placeholder\"];\n onValueChangeLeft?: TextInputProps[\"onValueChange\"];\n onValueChangeRight?: TextInputProps[\"onValueChange\"];\n onChangeLeft?: TextInputProps[\"onChange\"];\n onChangeRight?: TextInputProps[\"onChange\"];\n onClickLeft?: TextInputProps[\"onClick\"];\n onClickRight?: TextInputProps[\"onClick\"];\n onClickCalendar?: ButtonElementProps[\"onClick\"];\n onClickArrowDown?: ButtonElementProps[\"onClick\"];\n onFocusLeft?: TextInputProps[\"onFocus\"];\n onFocusRight?: TextInputProps[\"onFocus\"];\n onBlur?: () => void;\n onBlurLeft?: TextInputProps[\"onBlur\"];\n onBlurRight?: TextInputProps[\"onBlur\"];\n inputRefLeft?: TextInputProps[\"inputRef\"];\n inputRefRight?: TextInputProps[\"inputRef\"];\n variantLeft?: TextInputProps[\"variant\"];\n variantRight?: TextInputProps[\"variant\"];\n variant?: TextInputBoxProps[\"variant\"];\n showPresets?: false;\n autoFocusLeft?: boolean;\n autoFocusRight?: boolean;\n disabled?: boolean;\n}\n\nexport const DualTextInput: React.FC<DualTextInputProps> = ({\n autoFocusLeft,\n autoFocusRight,\n onEsc,\n onEnter,\n onValueChangeLeft,\n onValueChangeRight,\n separatorIcon,\n placeholderLeft,\n placeholderRight,\n typeLeft,\n typeRight,\n onChangeLeft,\n onChangeRight,\n valueLeft,\n valueRight,\n minLeft,\n maxLeft,\n minRight,\n maxRight,\n onClickLeft,\n onClickRight,\n onClickCalendar,\n onClickArrowDown,\n onBlurLeft,\n onBlurRight,\n onFocusLeft,\n onFocusRight,\n inputRefLeft,\n inputRefRight,\n variant,\n variantLeft,\n variantRight,\n onBlur,\n showPresets,\n widthLeft,\n widthRight,\n disabled,\n}) => {\n const focusCounter = useRef(0);\n\n const tryTriggerOnBlur = useMemo(\n () =>\n debounce((focusCounter: number) => {\n if (focusCounter === 0) {\n onBlur?.();\n }\n }, 10),\n [onBlur]\n );\n\n const focusLeftHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current++;\n tryTriggerOnBlur(focusCounter.current);\n if (onFocusLeft) {\n onFocusLeft(ev);\n }\n },\n [onFocusLeft, focusCounter, tryTriggerOnBlur]\n );\n\n const focusRightHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current++;\n tryTriggerOnBlur(focusCounter.current);\n if (onFocusRight) {\n onFocusRight(ev);\n }\n },\n [onFocusRight, focusCounter, tryTriggerOnBlur]\n );\n\n const blurLeftHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current--;\n tryTriggerOnBlur(focusCounter.current);\n if (onBlurLeft) {\n onBlurLeft(ev);\n }\n },\n [onBlurLeft, focusCounter, tryTriggerOnBlur]\n );\n\n const blurRightHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current--;\n tryTriggerOnBlur(focusCounter.current);\n if (onBlurRight) {\n onBlurRight(ev);\n }\n },\n [onBlurRight, focusCounter, tryTriggerOnBlur]\n );\n\n return (\n <Box>\n <TextInputBox\n disableContentPaddingRight\n disabled={disabled}\n variant={variant}\n contentRight={\n <Row alignItems={\"center\"}>\n <Indent num={0.5}>\n <FlatButton\n leftIcon={stenaCalendar}\n onClick={onClickCalendar}\n disabled={disabled}\n size={\"small\"}\n />\n </Indent>\n\n {showPresets ? (\n <>\n <Row height={\"22px\"}>\n <SeparatorLine vertical />\n </Row>\n\n <Indent num={0.5}>\n <FlatButton\n leftIcon={stenaAngleDown}\n onClick={onClickArrowDown}\n disabled={disabled}\n size={\"small\"}\n />\n </Indent>\n </>\n ) : null}\n </Row>\n }\n >\n <Box width={widthLeft}>\n <TextInput\n onEsc={onEsc}\n onEnter={onEnter}\n onClick={onClickLeft}\n disabled={disabled}\n hideBorder\n placeholder={placeholderLeft}\n value={valueLeft}\n onValueChange={onValueChangeLeft}\n onChange={onChangeLeft}\n onBlur={blurLeftHandler}\n onFocus={focusLeftHandler}\n inputRef={inputRefLeft}\n variant={variantLeft}\n type={typeLeft}\n autoFocus={autoFocusLeft}\n min={minLeft}\n max={maxLeft}\n />\n </Box>\n <Row indent={0.5} alignItems={\"center\"} justifyContent={\"center\"}>\n <Icon\n icon={separatorIcon}\n size={12}\n color={cssColor(\"--lhds-color-ui-500\")}\n />\n </Row>\n <Box width={widthRight}>\n <TextInput\n onEsc={onEsc}\n onEnter={onEnter}\n onClick={onClickRight}\n disabled={disabled}\n hideBorder\n placeholder={placeholderRight}\n value={valueRight}\n onValueChange={onValueChangeRight}\n onChange={onChangeRight}\n onBlur={blurRightHandler}\n onFocus={focusRightHandler}\n inputRef={inputRefRight}\n variant={variantRight}\n type={typeRight}\n autoFocus={autoFocusRight}\n min={minRight}\n max={maxRight}\n />\n </Box>\n </TextInputBox>\n </Box>\n );\n};\n","import { parseIntElseUndefined } from \"@stenajs-webui/core\";\nimport { formatHours, formatMinutes } from \"./TimeStringFormatValidator\";\n\nexport const transformNumberTimeToString = (\n time: number | undefined | null\n): string | undefined => {\n if (time == null) {\n return undefined;\n }\n const timeStr = time.toString();\n if (timeStr.length === 3) {\n return `${timeStr.substr(0, 1)}:${timeStr.substr(1, 2)}`;\n }\n if (timeStr.length === 4) {\n return `${timeStr.substr(0, 2)}:${timeStr.substr(2, 2)}`;\n }\n if (timeStr.length === 2) {\n return `0:${timeStr}`;\n }\n if (timeStr.length === 1) {\n return `0:0${timeStr}`;\n }\n throw new Error(\"Invalid time number.\");\n};\n\nexport const transformTimeStringToNumber = (\n time: string | undefined | null\n): number | null => {\n if (time == null) {\n throw new Error(\"Time is not set.\");\n }\n if (time === \"\") {\n throw new Error(\"Time is empty.\");\n }\n const parts = time.split(\":\");\n if (parts.length !== 2) {\n throw new Error(\"Invalid time.\");\n }\n\n if (parts[1].length !== 2) {\n throw new Error(\"Invalid time.\");\n }\n\n if (parts[0].length < 1 || parts[0].length > 2) {\n throw new Error(\"Invalid time.\");\n }\n\n const hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n\n if (isNaN(hours)) {\n throw new Error(\"Invalid time.\");\n }\n if (isNaN(minutes)) {\n throw new Error(\"Invalid time.\");\n }\n if (hours < 0 || hours > 23) {\n throw new Error(\"Invalid time.\");\n }\n if (minutes < 0 || minutes > 59) {\n throw new Error(\"Invalid time.\");\n }\n return hours * 100 + minutes;\n};\n\nexport const isValidTimeString = (time: string | undefined): boolean => {\n try {\n transformTimeStringToNumber(time);\n return true;\n } catch (e) {\n return false;\n }\n};\n\nexport const getHoursAndMinutesFromTimeString = (\n value: string | undefined\n): {\n hour: number | undefined;\n minute: number | undefined;\n} => {\n if (value && isValidTimeString(value)) {\n const p = value.split(\":\");\n return {\n hour: parseIntElseUndefined(p[0]),\n minute: parseIntElseUndefined(p[1]),\n };\n }\n return {\n hour: undefined,\n minute: undefined,\n };\n};\n\nexport const transformTimeInDateToTimeString = (date: Date): string =>\n `${formatHours(String(date.getHours()))}:${formatMinutes(\n String(date.getMinutes())\n )}`;\n","import { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, PrimaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { MutableRefObject, RefObject, useEffect, useRef } from \"react\";\n\nexport interface TimePickerCellProps {\n item: number;\n selected?: boolean;\n onClick: (label: number) => void;\n columnRef: RefObject<HTMLDivElement>;\n canScrollRef: MutableRefObject<boolean>;\n}\n\nexport const TimePickerCell: React.FC<TimePickerCellProps> = ({\n onClick,\n item,\n selected,\n columnRef,\n canScrollRef,\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(\n function scrollToSelectedItem() {\n if (\n selected &&\n columnRef.current &&\n ref.current &&\n canScrollRef.current\n ) {\n const targetScroll = ref.current.scrollHeight * Math.max(item - 2, 0);\n columnRef.current.scrollTo(0, targetScroll);\n canScrollRef.current = false;\n }\n },\n [columnRef, item, selected, canScrollRef]\n );\n\n return (\n <Row\n width={\"64px\"}\n justifyContent={\"center\"}\n spacing={0.5}\n indent={0.5}\n ref={ref}\n >\n {selected ? (\n <PrimaryButton\n label={String(item)}\n onClick={() => onClick && onClick(item)}\n />\n ) : (\n <FlatButton\n label={String(item)}\n onClick={() => onClick && onClick(item)}\n />\n )}\n </Row>\n );\n};\n","import { Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { MutableRefObject, useRef } from \"react\";\nimport styles from \"./TimePicker.module.css\";\nimport { TimePickerCell } from \"./TimePickerCell\";\n\ninterface Props {\n items: Array<number>;\n onClick: (item: number) => void;\n selectedItem: number | undefined;\n canScrollRef: MutableRefObject<boolean>;\n}\n\nexport const TimePickerColumn: React.FC<Props> = ({\n onClick,\n items,\n selectedItem,\n canScrollRef,\n}) => {\n const columnRef = useRef<HTMLDivElement>(null);\n\n return (\n <Column className={styles.timePickerColumn} ref={columnRef}>\n {items.map((item) => (\n <TimePickerCell\n key={item}\n item={item}\n onClick={onClick}\n selected={item === selectedItem}\n columnRef={columnRef}\n canScrollRef={canScrollRef}\n />\n ))}\n </Column>\n );\n};\n","import { Indent, Row } from \"@stenajs-webui/core\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { range } from \"lodash\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n formatHours,\n formatMinutes,\n} from \"../../util/time/TimeStringFormatValidator\";\nimport { getHoursAndMinutesFromTimeString } from \"../../util/time/TimeTransformer\";\nimport styles from \"./TimePicker.module.css\";\nimport { TimePickerColumn } from \"./TimePickerColumn\";\n\nexport interface TimePickerProps extends ValueAndOnValueChangeProps<string> {}\n\nconst hours = range(0, 24);\nconst minutes = range(0, 60);\n\nexport const TimePicker: React.FC<TimePickerProps> = ({\n value,\n onValueChange,\n}) => {\n const canScrollRef = useRef(true);\n const [hour, setHour] = useState<number | undefined>(undefined);\n const [minute, setMinute] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (value) {\n const { minute, hour } = getHoursAndMinutesFromTimeString(value);\n setHour(hour);\n setMinute(minute);\n }\n }, [value]);\n\n const onClickHour = useCallback(\n (h: number) => {\n setHour(h);\n onValueChange?.(\n `${formatHours(String(h ?? 0))}:${formatMinutes(String(minute ?? 0))}`\n );\n },\n [minute, onValueChange]\n );\n\n const onClickMinutes = useCallback(\n (m: number) => {\n setMinute(m);\n onValueChange?.(\n `${formatHours(String(hour ?? 0))}:${formatMinutes(String(m ?? 0))}`\n );\n },\n [hour, onValueChange]\n );\n\n return (\n <Row className={styles.timePicker}>\n <TimePickerColumn\n items={hours}\n onClick={onClickHour}\n selectedItem={hour}\n canScrollRef={canScrollRef}\n />\n <Indent />\n <TimePickerColumn\n items={minutes}\n onClick={onClickMinutes}\n selectedItem={minute}\n canScrollRef={canScrollRef}\n />\n </Row>\n );\n};\n","import { RefObject, useEffect } from \"react\";\n\nexport const useDateRangeEffects = (\n date: Date | undefined | null,\n setDateInFocus: (date: Date) => void,\n dateInputRef: RefObject<HTMLInputElement>\n) => {\n useEffect(\n function moveFocusedDateWhenDateChanges() {\n if (date) {\n setDateInFocus(date);\n }\n },\n [date, setDateInFocus]\n );\n\n useEffect(\n function updateDateFieldWhenValueChanges() {\n if (dateInputRef.current) {\n if (date) {\n dateInputRef.current.valueAsDate = new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())\n );\n } else {\n dateInputRef.current.valueAsDate = null;\n }\n }\n },\n [date, dateInputRef]\n );\n};\n","import { ChangeEvent, RefObject, useCallback } from \"react\";\nimport { getHoursAndMinutesFromTimeString } from \"../../../../util/time/TimeTransformer\";\nimport { DateTimeInputProps } from \"../DateTimeInput\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useDateRangeHandlers = (\n date: Date | undefined | null,\n onValueChange: DateTimeInputProps[\"onValueChange\"],\n {\n setDateInFocus,\n showCalendarInternal,\n hideCalendarInternal,\n setFirstFocusedInput,\n setCurrentPanel,\n localTime,\n setLocalTime,\n localDate,\n setLocalDate,\n }: UseInputStatesResult,\n dateInputRef: RefObject<HTMLInputElement>\n) => {\n const onChangeDate = useCallback(\n (incomingDate: Date | null) => {\n if (!incomingDate) {\n return;\n }\n const newDate = new Date(incomingDate);\n\n if (date) {\n // Full date is available\n\n newDate.setHours(date.getHours());\n newDate.setMinutes(date.getMinutes());\n\n onValueChange?.(newDate);\n setLocalDate(undefined);\n } else if (localTime) {\n // Only time has been selected\n const { minute, hour } = getHoursAndMinutesFromTimeString(localTime);\n\n newDate.setHours(hour ?? 0);\n newDate.setMinutes(minute ?? 0);\n\n onValueChange?.(newDate);\n setLocalDate(undefined);\n } else {\n // Nothing has been selected\n setLocalDate(newDate);\n }\n setDateInFocus(newDate);\n if (dateInputRef.current) {\n dateInputRef.current.valueAsDate = newDate;\n }\n },\n [date, dateInputRef, localTime, onValueChange, setDateInFocus, setLocalDate]\n );\n\n const onChangeTime = useCallback(\n (time: string) => {\n if (!time) {\n return;\n }\n\n if (date) {\n // Full date is available\n const newTime = getHoursAndMinutesFromTimeString(time);\n const newDate = new Date(date);\n\n newDate.setHours(newTime.hour || 0);\n newDate.setMinutes(newTime.minute || 0);\n\n onValueChange?.(newDate);\n setLocalTime(undefined);\n } else if (localDate) {\n // Only date has already been selected\n const newTime = getHoursAndMinutesFromTimeString(time);\n const newDate = new Date(localDate);\n\n newDate.setHours(newTime.hour || 0);\n newDate.setMinutes(newTime.minute || 0);\n\n onValueChange?.(newDate);\n setLocalTime(undefined);\n } else {\n // Nothing has been selected\n setLocalTime(time);\n }\n },\n [onValueChange, date, localDate, setLocalTime]\n );\n\n const inputLeftChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (ev.target.value[0] !== \"0\") {\n onChangeDate(ev.target.valueAsDate);\n }\n },\n [onChangeDate]\n );\n\n const inputRightChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => onChangeTime(ev.target.value),\n [onChangeTime]\n );\n\n const showCalendar = useCallback(() => {\n if (date) {\n setDateInFocus(date);\n } else {\n setDateInFocus(new Date());\n }\n setCurrentPanel(\"calendar\");\n showCalendarInternal();\n }, [date, setCurrentPanel, showCalendarInternal, setDateInFocus]);\n\n const hideCalendar = useCallback(() => {\n setFirstFocusedInput(undefined);\n hideCalendarInternal();\n }, [setFirstFocusedInput, hideCalendarInternal]);\n\n return {\n inputLeftChangeHandler,\n inputRightChangeHandler,\n hideCalendar,\n showCalendar,\n onChangeTime,\n onChangeDate,\n };\n};\n","import { useBoolean } from \"@stenajs-webui/core\";\nimport { useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { CalendarPanelType } from \"../../../../features/calendar-with-month-year-pickers/CalendarPanelType\";\n\nexport type UseInputStatesResult = ReturnType<typeof useInputStates>;\n\nexport const useInputStates = (date: Date | undefined | null) => {\n const [localDate, setLocalDate] = useState<Date | undefined>(undefined);\n const [localTime, setLocalTime] = useState<string | undefined>(undefined);\n\n const [isCalendarVisible, showCalendarInternal, hideCalendarInternal] =\n useBoolean(false);\n\n const [isTimePickerVisible, showTimePicker, hideTimePicker] =\n useBoolean(false);\n\n const [firstFocusedInput, setFirstFocusedInput] = useState<\n DateRangeFocusedInput | undefined\n >(undefined);\n\n const [dateInFocus, setDateInFocus] = useState<Date>(\n () => date ?? new Date()\n );\n\n const [currentPanel, setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n return {\n isCalendarVisible,\n showCalendarInternal,\n hideCalendarInternal,\n firstFocusedInput,\n setFirstFocusedInput,\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n isTimePickerVisible,\n showTimePicker,\n hideTimePicker,\n localDate,\n setLocalDate,\n localTime,\n setLocalTime,\n };\n};\n","import * as React from \"react\";\nimport { RefObject, useCallback } from \"react\";\nimport { DayData } from \"../../../../util/calendar/CalendarDataFactory\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useUserInputHandlers = (\n onChangeDate: (incomingDate: Date | null) => void,\n dateInputRef: RefObject<HTMLInputElement>,\n showCalendar: () => void,\n hideCalendar: () => void,\n {\n isCalendarVisible,\n setCurrentPanel,\n showTimePicker,\n hideTimePicker,\n }: UseInputStatesResult\n) => {\n const onFocusLeft = useCallback(() => {\n if (!isCalendarVisible) {\n showCalendar();\n }\n setCurrentPanel(\"calendar\");\n hideTimePicker();\n }, [hideTimePicker, isCalendarVisible, setCurrentPanel, showCalendar]);\n\n const onFocusRight = useCallback(() => {\n hideCalendar();\n showTimePicker();\n }, [hideCalendar, showTimePicker]);\n\n const onClickDay = useCallback(\n (day: DayData) => {\n onChangeDate(day.date);\n hideCalendar();\n showTimePicker();\n },\n [onChangeDate, hideCalendar, showTimePicker]\n );\n\n const onClickArrowButton = useCallback(() => {\n setCurrentPanel(\"presets\");\n showCalendar();\n }, [setCurrentPanel, showCalendar]);\n\n const onClickCalendarButton = useCallback(() => {\n if (isCalendarVisible) {\n hideCalendar();\n } else {\n dateInputRef.current?.focus();\n setCurrentPanel(\"calendar\");\n showCalendar();\n }\n }, [\n isCalendarVisible,\n hideCalendar,\n dateInputRef,\n setCurrentPanel,\n showCalendar,\n ]);\n\n const onKeyDownHandler = useCallback(\n (ev: React.KeyboardEvent<HTMLDivElement>) => {\n if (ev.key === \"Escape\") {\n hideCalendar();\n }\n },\n [hideCalendar]\n );\n\n return {\n onFocusLeft,\n onFocusRight,\n onClickDay,\n onClickArrowButton,\n onClickCalendarButton,\n onKeyDownHandler,\n };\n};\n","import { Box, Column, Row, Space, useDelayedFalse } from \"@stenajs-webui/core\";\nimport { PrimaryButton } from \"@stenajs-webui/elements\";\nimport {\n TextInputProps,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport {\n DualTextInput,\n DualTextInputProps,\n} from \"../../../features/dual-text-input/DualTextInput\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { TimePicker } from \"../../../features/time-picker/TimePicker\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport { transformTimeInDateToTimeString } from \"../../../util/time/TimeTransformer\";\nimport { useDateRangeEffects } from \"./hooks/UseDateRangeEffects\";\nimport { useDateRangeHandlers } from \"./hooks/UseDateRangeHandlers\";\nimport { useInputStates } from \"./hooks/UseInputStates\";\nimport { useUserInputHandlers } from \"./hooks/UseUserInputHandlers\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\nimport { stenaClock } from \"@stenajs-webui/elements\";\n\nexport interface DateTimeInputProps\n extends ValueAndOnValueChangeProps<Date | null>,\n OptionalMinMaxDatesAsString,\n Pick<DualTextInputProps, \"widthLeft\" | \"widthRight\" | \"variant\"> {\n onEsc?: () => void;\n onEnter?: () => void;\n onBlur?: () => void;\n autoFocus?: boolean;\n disabled?: boolean;\n}\n\nexport const DateTimeInput: React.FC<DateTimeInputProps> = ({\n value,\n onValueChange,\n onEnter,\n onEsc,\n onBlur,\n autoFocus,\n minDate,\n widthLeft = 128,\n widthRight = 80,\n maxDate = defaultMaxDate,\n variant,\n disabled,\n}) => {\n const dateInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n const timeInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n\n const states = useInputStates(value);\n\n const {\n setCurrentPanel,\n currentPanel,\n isCalendarVisible,\n dateInFocus,\n setDateInFocus,\n isTimePickerVisible,\n hideTimePicker,\n localTime,\n localDate,\n } = states;\n\n const {\n showCalendar,\n hideCalendar,\n inputLeftChangeHandler,\n inputRightChangeHandler,\n onChangeTime,\n onChangeDate,\n } = useDateRangeHandlers(value, onValueChange, states, dateInputRef);\n\n const {\n onKeyDownHandler,\n onFocusRight,\n onFocusLeft,\n onClickDay,\n onClickCalendarButton,\n onClickArrowButton,\n } = useUserInputHandlers(\n onChangeDate,\n dateInputRef,\n showCalendar,\n hideCalendar,\n states\n );\n\n useDateRangeEffects(value, setDateInFocus, dateInputRef);\n\n const statePerMonth = useMemo(() => {\n const dateToHighlight = value || localDate;\n if (!dateToHighlight) {\n return {};\n }\n return addDayStateHighlights(undefined, dateToHighlight, [\n \"singleSelected\",\n \"selected\",\n ]);\n }, [localDate, value]);\n\n const hideAll = useCallback(() => {\n hideCalendar();\n hideTimePicker();\n }, [hideCalendar, hideTimePicker]);\n\n const timeValue = useMemo<string | undefined>(\n () => (value ? transformTimeInDateToTimeString(value) : localTime),\n [value, localTime]\n );\n\n const delayedIsCalendarVisible = useDelayedFalse(isCalendarVisible, 300);\n const delayedIsTimePickerVisible = useDelayedFalse(isTimePickerVisible, 300);\n\n return (\n <Box onKeyDown={onKeyDownHandler}>\n <Popover\n arrow={false}\n lazy\n disabled={disabled}\n placement={defaultPopoverPlacement}\n visible={isCalendarVisible || isTimePickerVisible}\n onClickOutside={hideAll}\n content={\n (delayedIsCalendarVisible || delayedIsTimePickerVisible) && (\n <Column>\n {delayedIsCalendarVisible ? (\n <CalendarWithMonthSwitcher\n statePerMonth={statePerMonth}\n onClickDay={onClickDay}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n minDate={minDate}\n maxDate={maxDate}\n />\n ) : delayedIsTimePickerVisible ? (\n <Column>\n <Column overflow={\"hidden\"} height={\"250px\"}>\n <TimePicker\n value={timeValue ?? \"\"}\n onValueChange={onChangeTime}\n />\n </Column>\n <Space />\n <Row justifyContent={\"flex-end\"}>\n <PrimaryButton label={\"Done\"} onClick={hideTimePicker} />\n </Row>\n </Column>\n ) : null}\n </Column>\n )\n }\n >\n <DualTextInput\n autoFocusLeft={autoFocus}\n onEsc={onEsc}\n onEnter={onEnter}\n onBlur={onBlur}\n disabled={disabled}\n separatorIcon={stenaClock}\n typeLeft={\"date\"}\n typeRight={\"time\"}\n placeholderLeft={\"yyyy-mm-dd\"}\n placeholderRight={\"hh:mm\"}\n onChangeLeft={inputLeftChangeHandler}\n onChangeRight={inputRightChangeHandler}\n onClickArrowDown={onClickArrowButton}\n onClickCalendar={onClickCalendarButton}\n onFocusLeft={onFocusLeft}\n onFocusRight={onFocusRight}\n onClickLeft={onFocusLeft}\n onClickRight={onFocusRight}\n inputRefLeft={dateInputRef}\n inputRefRight={timeInputRef}\n valueRight={timeValue ?? \"\"}\n widthLeft={widthLeft}\n widthRight={widthRight}\n minLeft={minDate}\n maxLeft={maxDate}\n variant={variant}\n />\n </Popover>\n </Box>\n );\n};\n","import { RefObject, useEffect } from \"react\";\n\nexport const useDateRangeEffects = (\n startDate: Date | undefined,\n endDate: Date | undefined,\n setDateInFocus: (date: Date) => void,\n startDateInputRef: RefObject<HTMLInputElement>,\n endDateInputRef: RefObject<HTMLInputElement>\n) => {\n useEffect(\n function moveFocusedDateWhenStartDateChanges() {\n if (startDate) {\n setDateInFocus(startDate);\n }\n },\n [startDate, setDateInFocus]\n );\n\n useEffect(\n function moveFocusedDateWhenEndDateChanges() {\n if (endDate) {\n setDateInFocus(endDate);\n }\n },\n [endDate, setDateInFocus]\n );\n\n useEffect(\n function updateStartDateFieldWhenValueChanges() {\n if (startDateInputRef.current) {\n if (startDate) {\n startDateInputRef.current.valueAsDate = new Date(\n Date.UTC(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate()\n )\n );\n } else {\n startDateInputRef.current.valueAsDate = null;\n }\n }\n },\n [startDate, startDateInputRef]\n );\n\n useEffect(\n function updateEndDateFieldWhenValueChanges() {\n if (endDateInputRef.current) {\n if (endDate) {\n endDateInputRef.current.valueAsDate = new Date(\n Date.UTC(\n endDate.getFullYear(),\n endDate.getMonth(),\n endDate.getDate()\n )\n );\n } else {\n endDateInputRef.current.valueAsDate = null;\n }\n }\n },\n [endDate, endDateInputRef]\n );\n};\n","import { ChangeEvent, useCallback } from \"react\";\nimport { DateRangeDualTextInputProps } from \"../DateRangeDualTextInput\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useDateRangeHandlers = (\n startDate: Date | undefined,\n endDate: Date | undefined,\n onValueChange: DateRangeDualTextInputProps[\"onValueChange\"],\n {\n setDateInFocus,\n showCalendarInternal,\n hideCalendarInternal,\n setFirstFocusedInput,\n setCurrentPanel,\n }: UseInputStatesResult\n) => {\n const inputLeftChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (ev.target.value[0] !== \"0\") {\n onValueChange?.({\n startDate: ev.target.valueAsDate ?? undefined,\n endDate,\n });\n }\n },\n [onValueChange, endDate]\n );\n\n const inputRightChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (ev.target.value[0] !== \"0\") {\n onValueChange?.({\n startDate,\n endDate: ev.target.valueAsDate ?? undefined,\n });\n }\n },\n [onValueChange, startDate]\n );\n\n const showCalendar = useCallback(() => {\n if (startDate) {\n setDateInFocus(startDate);\n } else if (endDate) {\n setDateInFocus(endDate);\n } else {\n setDateInFocus(new Date());\n }\n setCurrentPanel(\"calendar\");\n showCalendarInternal();\n }, [\n startDate,\n endDate,\n setCurrentPanel,\n showCalendarInternal,\n setDateInFocus,\n ]);\n\n const hideCalendar = useCallback(() => {\n setFirstFocusedInput(undefined);\n hideCalendarInternal();\n }, [setFirstFocusedInput, hideCalendarInternal]);\n\n return {\n inputLeftChangeHandler,\n inputRightChangeHandler,\n hideCalendar,\n setDateInFocus,\n setCurrentPanel,\n showCalendar,\n };\n};\n","import { useBoolean } from \"@stenajs-webui/core\";\nimport { useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { CalendarPanelType } from \"../../../../features/calendar-with-month-year-pickers/CalendarPanelType\";\n\nexport type UseInputStatesResult = ReturnType<typeof useInputStates>;\n\nexport const useInputStates = (\n startDate: Date | undefined,\n endDate: Date | undefined\n) => {\n const [isCalendarVisible, showCalendarInternal, hideCalendarInternal] =\n useBoolean(false);\n\n const [firstFocusedInput, setFirstFocusedInput] = useState<\n DateRangeFocusedInput | undefined\n >(undefined);\n\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n\n const [dateInFocus, setDateInFocus] = useState<Date>(() => {\n const fromValue =\n focusedInput === \"startDate\"\n ? startDate\n : focusedInput === \"endDate\"\n ? endDate\n : undefined;\n\n return fromValue ?? new Date();\n });\n\n const [currentPanel, setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n return {\n isCalendarVisible,\n showCalendarInternal,\n hideCalendarInternal,\n firstFocusedInput,\n setFirstFocusedInput,\n focusedInput,\n setFocusedInput,\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n };\n};\n","import { isAfter } from \"date-fns\";\nimport * as React from \"react\";\nimport { RefObject, useCallback } from \"react\";\nimport { DayData } from \"../../../../util/calendar/CalendarDataFactory\";\nimport { DateRangeDualTextInputProps } from \"../DateRangeDualTextInput\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useUserInputHandlers = (\n startDate: Date | undefined,\n endDate: Date | undefined,\n onValueChange: DateRangeDualTextInputProps[\"onValueChange\"],\n startDateInputRef: RefObject<HTMLInputElement>,\n endDateInputRef: RefObject<HTMLInputElement>,\n showCalendar: () => void,\n hideCalendar: () => void,\n {\n firstFocusedInput,\n setFirstFocusedInput,\n isCalendarVisible,\n setFocusedInput,\n focusedInput,\n setCurrentPanel,\n }: UseInputStatesResult\n) => {\n const onFocusLeft = useCallback(() => {\n if (firstFocusedInput == null) {\n setFirstFocusedInput(\"startDate\");\n }\n setFocusedInput(\"startDate\");\n if (!isCalendarVisible) {\n showCalendar();\n }\n }, [\n isCalendarVisible,\n setFocusedInput,\n showCalendar,\n setFirstFocusedInput,\n firstFocusedInput,\n ]);\n\n const onFocusRight = useCallback(() => {\n if (firstFocusedInput == null) {\n setFirstFocusedInput(\"endDate\");\n }\n setFocusedInput(\"endDate\");\n if (!isCalendarVisible) {\n showCalendar();\n }\n }, [\n isCalendarVisible,\n setFocusedInput,\n showCalendar,\n setFirstFocusedInput,\n firstFocusedInput,\n ]);\n\n const onClickDay = useCallback(\n (day: DayData) => {\n if (focusedInput === \"startDate\") {\n if (endDate != null && isAfter(day.date, endDate)) {\n onValueChange?.({\n startDate: day.date,\n endDate: undefined,\n });\n setFocusedInput(\"endDate\");\n endDateInputRef.current?.focus();\n } else {\n onValueChange?.({\n startDate: day.date,\n endDate,\n });\n if (firstFocusedInput === \"startDate\") {\n setFocusedInput(\"endDate\");\n endDateInputRef.current?.focus();\n } else {\n setTimeout(hideCalendar, 50);\n }\n }\n } else if (focusedInput === \"endDate\") {\n if (!startDate) {\n onValueChange?.({\n startDate,\n endDate: day.date,\n });\n setFocusedInput(\"startDate\");\n startDateInputRef.current?.focus();\n } else if (isAfter(startDate, day.date)) {\n onValueChange?.({\n startDate: day.date,\n endDate: undefined,\n });\n setFocusedInput(\"endDate\");\n endDateInputRef.current?.focus();\n } else {\n onValueChange?.({\n startDate,\n endDate: day.date,\n });\n setTimeout(hideCalendar, 50);\n }\n }\n },\n [\n focusedInput,\n onValueChange,\n endDate,\n firstFocusedInput,\n setFocusedInput,\n endDateInputRef,\n hideCalendar,\n startDate,\n startDateInputRef,\n ]\n );\n\n const onClickArrowButton = useCallback(() => {\n setCurrentPanel(\"presets\");\n showCalendar();\n }, [setCurrentPanel, showCalendar]);\n\n const onClickCalendarButton = useCallback(() => {\n if (isCalendarVisible) {\n hideCalendar();\n } else {\n setFocusedInput(\"startDate\");\n setFirstFocusedInput(\"startDate\");\n startDateInputRef.current?.focus();\n setCurrentPanel(\"calendar\");\n showCalendar();\n }\n }, [\n isCalendarVisible,\n hideCalendar,\n setFocusedInput,\n setFirstFocusedInput,\n startDateInputRef,\n setCurrentPanel,\n showCalendar,\n ]);\n\n const onKeyDownHandler = useCallback(\n (ev: React.KeyboardEvent<HTMLDivElement>) => {\n if (ev.key === \"Escape\") {\n hideCalendar();\n }\n },\n [hideCalendar]\n );\n\n return {\n onFocusLeft,\n onFocusRight,\n onClickDay,\n onClickArrowButton,\n onClickCalendarButton,\n onKeyDownHandler,\n };\n};\n","import { Box, useDelayedFalse } from \"@stenajs-webui/core\";\nimport { stenaArrowRight } from \"@stenajs-webui/elements\";\nimport {\n TextInputProps,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { isAfter } from \"date-fns\";\nimport * as React from \"react\";\nimport { useMemo, useRef } from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport {\n DualTextInput,\n DualTextInputProps,\n} from \"../../../features/dual-text-input/DualTextInput\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { buildDayStateForSingleMonth } from \"../../../util/calendar/StateModifier\";\nimport { useDateRangeEffects } from \"./hooks/UseDateRangeEffects\";\nimport { useDateRangeHandlers } from \"./hooks/UseDateRangeHandlers\";\nimport { useInputStates } from \"./hooks/UseInputStates\";\nimport { useUserInputHandlers } from \"./hooks/UseUserInputHandlers\";\nimport { DateRangeInputCalendarProps } from \"../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { DateRange } from \"../../../types/DateRange\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\n\nexport interface DateRangeDualTextInputProps<TData = unknown>\n extends ValueAndOnValueChangeProps<DateRange>,\n OptionalMinMaxDatesAsString,\n Pick<DualTextInputProps, \"widthLeft\" | \"widthRight\" | \"variant\"> {\n onEsc?: () => void;\n onEnter?: () => void;\n onBlur?: () => void;\n autoFocus?: boolean;\n calendarProps?: DateRangeInputCalendarProps<TData>;\n disabled?: boolean;\n}\n\nexport function DateRangeDualTextInput<TData>({\n value,\n onValueChange,\n autoFocus,\n onBlur,\n onEnter,\n onEsc,\n minDate,\n maxDate = defaultMaxDate,\n calendarProps,\n widthLeft = 128,\n widthRight = 128,\n variant,\n disabled,\n}: DateRangeDualTextInputProps<TData>) {\n const { startDate, endDate } = value || {};\n\n const startDateInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n const endDateInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n\n const states = useInputStates(startDate, endDate);\n\n const {\n dateInFocus,\n setDateInFocus,\n isCalendarVisible,\n currentPanel,\n setCurrentPanel,\n } = states;\n\n const {\n showCalendar,\n hideCalendar,\n inputLeftChangeHandler,\n inputRightChangeHandler,\n } = useDateRangeHandlers(startDate, endDate, onValueChange, states);\n\n const {\n onKeyDownHandler,\n onFocusRight,\n onFocusLeft,\n onClickDay,\n onClickCalendarButton,\n onClickArrowButton,\n } = useUserInputHandlers(\n startDate,\n endDate,\n onValueChange,\n startDateInputRef,\n endDateInputRef,\n showCalendar,\n hideCalendar,\n states\n );\n\n useDateRangeEffects(\n startDate,\n endDate,\n setDateInFocus,\n startDateInputRef,\n endDateInputRef\n );\n\n const startDateIsAfterEnd = useMemo(\n () => startDate && endDate && isAfter(startDate, endDate),\n [startDate, endDate]\n );\n\n const statePerMonth = useMemo(\n () =>\n buildDayStateForSingleMonth(\n calendarProps?.statePerMonth,\n startDate,\n endDate,\n dateInFocus\n ),\n [calendarProps?.statePerMonth, startDate, endDate, dateInFocus]\n );\n\n const delayedIsCalendarVisible = useDelayedFalse(isCalendarVisible, 300);\n\n return (\n <Box onKeyDown={onKeyDownHandler}>\n <Popover\n arrow={false}\n lazy\n disabled={disabled}\n placement={defaultPopoverPlacement}\n onClickOutside={hideCalendar}\n visible={isCalendarVisible}\n content={\n delayedIsCalendarVisible && (\n <CalendarWithMonthSwitcher\n onClickDay={onClickDay}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n minDate={minDate}\n maxDate={maxDate}\n {...calendarProps}\n statePerMonth={statePerMonth}\n />\n )\n }\n >\n <DualTextInput\n autoFocusLeft={autoFocus}\n onEsc={onEsc}\n onEnter={onEnter}\n onBlur={onBlur}\n disabled={disabled}\n separatorIcon={stenaArrowRight}\n typeLeft={\"date\"}\n typeRight={\"date\"}\n placeholderLeft={\"Start date\"}\n placeholderRight={\"End date\"}\n onChangeLeft={inputLeftChangeHandler}\n onChangeRight={inputRightChangeHandler}\n onClickArrowDown={onClickArrowButton}\n onClickCalendar={onClickCalendarButton}\n onFocusLeft={onFocusLeft}\n onFocusRight={onFocusRight}\n onClickLeft={onFocusLeft}\n onClickRight={onFocusRight}\n inputRefLeft={startDateInputRef}\n inputRefRight={endDateInputRef}\n variant={startDateIsAfterEnd ? \"error\" : variant}\n widthLeft={widthLeft}\n widthRight={widthRight}\n minLeft={minDate}\n maxLeft={maxDate}\n minRight={minDate}\n maxRight={maxDate}\n />\n </Popover>\n </Box>\n );\n}\n"],"names":["DateFormats","buildDayStateForDateRange","statePerMonth","start","end","isAfter","eachDayOfInterval","result","date","isFirstInRange","isSameDay","isLastInRange","addDayStateHighlights","state","buildDayStateForSingleMonth","dateInFocus","buildDayStateForRange","startOfMonth","endOfMonth","startLimit","endLimit","max","subDays","min","addDays","setDayStateValue","values","monthString","format","weekNumber","getISOWeek","dayInMonth","getDate","setDayStateValueFunction","setter","calendarState","highlights","month","dayState","addDayStateHighlightsOnSingleDay","_a","addWeekStateHighlights","week","day","weekState","newHighlights","newWeekState","addWeekRangeHighlights","startDate","endDate","last","useHighlightToday","enabled","useMemo","Month","Month2","WeekDay","WeekDay2","getMonthsInYear","year","startMonth","numMonths","months","i","getMonthInYear","yearToUse","monthToUse","firstDayOfMonth","getWeeksForMonth","forceSixWeeks","firstDayOfFirstWeek","startOfISOWeek","weeks","getWeekForDate","addWeeks","firstDayOfWeek","isLastWeekOfMonth","getMonth","getYear","getDaysForWeekForDate","createDay","dayOfWeek","getISODay","addHours","getStartDateOfISOWeek","simple","isoWeekStart","calculateOverflowingMonth","dayHasHighlight","defaultHighlights","highlight","dayHighlightSelect","highlightsOrBoolean","returnValues","fallbackValue","defaultWrapperStyleProvider","selectedBackground","todayBackground","rangeBackground","borderColor","_","style","backgroundColor","monthInYear","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","boxSizing","defaultTextPropsProvider","selectedColor","disabledColor","inOtherMonthColor","rangeTextColor","isOtherMonth","color","undefined","defaultCalendarTheme","width","height","WeekNumber","textColor","clickableTextColor","show","CalendarDay","tdStyle","textProps","CalendarMonth","headerTextColor","extranetCalendarTheme","isDateInMinMaxRange","isBefore","DisabledDayWrapper","dayComponent","DayComponent","minDate","maxDate","props","activeDayState","WeekNumberCell","onClickWeek","theme","background","prefix","content","Box","_jsx","Text","Clickable","ev","CalendarWeek","statePerWeekDay","userDataPerWeekDay","onClickDay","renderWeekNumber","extraDayContent","days","map","dayOfMonth","dateString","WeekDayCell","onClickWeekDay","name","userData","ExtraDayContent","WrapperTd","styled","td","InnerWrapperDiv","div","innerWrapperStyle","CellWrapperDiv","cellWrapperStyle","position","_Fragment","isClickable","statePerWeek","userDataPerWeek","onClickMonth","onClickYear","renderWeekDay","headerLeftContent","headerRightContent","showWeekNumber","_jsxs","Row","FlatButton","Space","String","CalendarPanel","monthRows","userDataPerMonth","minDateObj","parse","Date","maxDateObj","styles","calendar","monthRow","rowIndex","Spacing","index","React","Calendar","initialDate","getInitialDate","getMonthRows","monthsPerRow","highlightToday","now","chunk","useSelectedMonthStepperLogic","setDateInFocus","nextMonth","useCallback","addMonths","nextYear","addYears","prevMonth","subMonths","prevYear","subYears","WithMonthSwitcherBelow","children","Indent","faAngleDoubleLeft","stenaAngleLeft","stenaAngleRight","faAngleDoubleRight","MonthPickerCell","value","onValueChange","label","PrimaryButton","monthMatrix","JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER","MonthPicker","Column","createStandardDateRangePresets","PresetPicker","onClickPreset","pageIndex","setPageIndex","useState","pages","currentPage","length","presets","preset","YearPickerCell","YearPicker","initialLastYear","lastYear","setLastYear","getFullYear","yearRows","startYear","range","useEffect","prev","calculateLastYearInFocus","faCaretLeft","yearRow","faCaretRight","yearDiff","remaining","yearsToAdd","yearsToSubtract","CalendarWithMonthYearPickers","currentPanel","setCurrentPanel","onChangeSelectedMonth","selectedMonth","newDate","setMonth","onChangeSelectedYear","selectedYear","setFullYear","noop","CalendarWithMonthSwitcher","monthSwitcherPlacement","onSelectPreset","hideYearPagination","calendarProps","placement","fallbackIfNoPlacement","dateRangeToStrings","dateRange","stringsToDateRange","isDateRangeInvalid","toggleDatesIfEndIsEarlierThanStart","toggleDateStringsIfEndIsEarlierThanStart","useDateRangeOnClickDayHandler","focusedInput","setFocusedInput","useInternalPanelState","onChangePanel","_setCurrentPanel","useDateRangeSelection","statePerMonthWithSelection","DateRangeCalendar","dateRangeSelectionProps","useDateRangeCalendarState","setStartDate","setEndDate","useSingleDateSelection","onChange","statePerMonthWithSelectedDate","SingleDateCalendar","singleDateSelectionProps","useMultiDateSelection","isSelected","d","v","stateSum","MultiDateCalendar","selectionProps","useSingleWeekSelection","getWeekDataFromWeekString","getWeekStringFromWeekData","weekData","parts","SingleWeekCalendar","singleWeekSelectionProps","removeDateIfExist","list","item","listContainsDate","useDateRangeExclusionSelection","setDateRange","onChangeHandler","dates","onClickDayRange","addHighlighting","dateList","DateRangeExclusionCalendar","defaultPopoverPlacement","useCalendarPopoverUpdater","tippyRef","tippyInstanceRef","useTippyInstance","_b","useDateInput","onClose","openOnMount","showingCalendar","setShowingCalendar","showCalendar","hideCalendar","onSelectDate","setTimeout","defaultMaxDate","DateInput","displayFormat","fullDate","placeholder","zIndex","calendarTheme","portalTarget","variant","disabled","Popover","TextInput","stenaCalendar","useDateRangeInput","startDateInputRef","useRef","endDateInputRef","showCalendarStartDate","showCalendarEndDate","current","focus","startDateIsAfterEnd","DateRangeInput","placeholderStartDate","placeholderEndDate","Icon","faLongArrowAltRight","cssColor","DateTextInput","closeOnCalendarSelectDate","dateFormat","disableCalender","hideCalenderIcon","open","setOpen","toggleCalendar","onValueChangeHandler","onCalendarSelectDate","inValidInput","test","dateIsValid","isValid","invalid","formatHours","hours","h","formatMinutes","minutes","m","formatTimeString","time","validUserInput","arr","timeNumber","input","TimeTextInput","showPlaceholder","useIcon","valid","setValid","timeFormat","onBlur","formattedResult","success","target","validInput","stenaClock","DualTextInput","autoFocusLeft","autoFocusRight","onEsc","onEnter","onValueChangeLeft","onValueChangeRight","separatorIcon","placeholderLeft","placeholderRight","typeLeft","typeRight","onChangeLeft","onChangeRight","valueLeft","valueRight","minLeft","maxLeft","minRight","maxRight","onClickLeft","onClickRight","onClickCalendar","onClickArrowDown","onBlurLeft","onBlurRight","onFocusLeft","onFocusRight","inputRefLeft","inputRefRight","variantLeft","variantRight","showPresets","widthLeft","widthRight","focusCounter","tryTriggerOnBlur","debounce","focusLeftHandler","focusRightHandler","blurLeftHandler","blurRightHandler","TextInputBox","SeparatorLine","stenaAngleDown","transformTimeStringToNumber","isValidTimeString","getHoursAndMinutesFromTimeString","p","parseIntElseUndefined","transformTimeInDateToTimeString","TimePickerCell","onClick","selected","columnRef","canScrollRef","ref","targetScroll","scrollHeight","Math","scrollTo","TimePickerColumn","items","selectedItem","timePickerColumn","TimePicker","hour","setHour","minute","setMinute","onClickHour","onClickMinutes","timePicker","useDateRangeEffects","dateInputRef","useDateRangeHandlers","showCalendarInternal","hideCalendarInternal","setFirstFocusedInput","localTime","setLocalTime","localDate","setLocalDate","onChangeDate","incomingDate","onChangeTime","newTime","inputLeftChangeHandler","inputRightChangeHandler","useInputStates","isCalendarVisible","useBoolean","isTimePickerVisible","showTimePicker","hideTimePicker","firstFocusedInput","useUserInputHandlers","onClickArrowButton","onClickCalendarButton","onKeyDownHandler","DateTimeInput","autoFocus","timeInputRef","states","dateToHighlight","hideAll","timeValue","delayedIsCalendarVisible","useDelayedFalse","delayedIsTimePickerVisible","fromValue","_d","_c","DateRangeDualTextInput","stenaArrowRight"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/util/date/DateFormats.ts","../src/util/calendar/StateModifier.ts","../src/features/today-state/UseHighlightToday.ts","../src/util/calendar/CalendarDataFactory.ts","../src/util/calendar/StateHelper.ts","../src/components/calendar/CalendarTheme.tsx","../src/util/date/DateMinMaxValidator.ts","../src/components/calendar/DisabledDayWrapper.tsx","../src/components/calendar/renderers/WeekNumberCell.tsx","../src/components/calendar/CalendarWeek.tsx","../src/components/calendar/renderers/WeekDayCell.tsx","../src/components/calendar/renderers/CalendarDay.tsx","../src/components/calendar/CalendarMonth.tsx","../src/components/calendar/Calendar.tsx","../src/features/month-switcher/hooks/UseSelectedMonthStepperLogic.ts","../src/features/month-switcher/MonthSwitcherBelow.tsx","../src/features/month-picker/MonthPickerCell.tsx","../src/features/month-picker/MonthPicker.tsx","../src/features/preset-picker/PresetFactory.ts","../src/features/preset-picker/PresetPicker.tsx","../src/features/year-picker/YearPickerCell.tsx","../src/features/year-picker/YearPicker.tsx","../src/features/calendar-with-month-year-pickers/CalendarWithMonthYearPickers.tsx","../src/features/month-switcher/CalendarWithMonthSwitcher.tsx","../src/util/date-range/DateRangeTransformer.ts","../src/util/date-range/DateRangeValidator.ts","../src/features/date-range/hooks/UseDateRangeOnClickDayHandler.ts","../src/features/internal-panel-state/UseInternalPanelState.tsx","../src/components/calendar-types/date-range-calendar/hooks/UseDateRangeSelection.ts","../src/components/calendar-types/date-range-calendar/DateRangeCalendar.tsx","../src/components/calendar-types/date-range-calendar/hooks/UseDateRangeCalendarState.ts","../src/components/calendar-types/single-date-calendar/UseSingleDateSelection.ts","../src/components/calendar-types/single-date-calendar/SingleDateCalendar.tsx","../src/components/calendar-types/multi-date-calendar/UseMultiDateSelection.ts","../src/components/calendar-types/multi-date-calendar/MultiDateCalendar.tsx","../src/components/calendar-types/single-week-calendar/UseSingleWeekSelection.ts","../src/components/calendar-types/single-week-calendar/SingleWeekCalendar.tsx","../src/util/date/DateListTools.ts","../src/components/calendar-types/date-range-exclusion-calendar/UseDateRangeExclusionSelection.ts","../src/components/calendar-types/date-range-exclusion-calendar/DateRangeExclusionCalendar.tsx","../src/config/DefaultPopoverPlacement.ts","../src/features/internal-panel-state/UseCalendarPopoverUpdater.ts","../src/components/input-types/date-input/UseDateInput.tsx","../src/config/DefaultMaxDate.ts","../src/components/input-types/date-input/DateInput.tsx","../src/components/input-types/date-range-input/hooks/UseDateRangeInput.tsx","../src/components/input-types/date-range-input/DateRangeInput.tsx","../src/components/input-types/date-text-input/DateTextInput.tsx","../src/util/time/TimeStringFormatValidator.ts","../src/components/input-types/time-text-input/TimeTextInput.tsx","../src/features/dual-text-input/DualTextInput.tsx","../src/util/time/TimeTransformer.ts","../src/features/time-picker/TimePickerCell.tsx","../src/features/time-picker/TimePickerColumn.tsx","../src/features/time-picker/TimePicker.tsx","../src/components/input-types/date-time-input/hooks/UseDateRangeEffects.ts","../src/components/input-types/date-time-input/hooks/UseDateRangeHandlers.ts","../src/components/input-types/date-time-input/hooks/UseInputStates.ts","../src/components/input-types/date-time-input/hooks/UseUserInputHandlers.ts","../src/components/input-types/date-time-input/DateTimeInput.tsx","../src/components/input-types/date-range-dual-text-input/hooks/UseDateRangeEffects.ts","../src/components/input-types/date-range-dual-text-input/hooks/UseDateRangeHandlers.ts","../src/components/input-types/date-range-dual-text-input/hooks/UseInputStates.ts","../src/components/input-types/date-range-dual-text-input/hooks/UseUserInputHandlers.ts","../src/components/input-types/date-range-dual-text-input/DateRangeDualTextInput.tsx"],"sourcesContent":["export const DateFormats = {\n yearAndMonth: \"yyyy-MM\",\n fullDate: \"yyyy-MM-dd\",\n fullMonthName: \"LLLL\",\n fullDateAndTime: \"yyyy-MM-dd HH:mm\",\n fullDateAndTimeSystem: \"yyyy-MM-ddTHH:MM\",\n weekDayName: \"EEEE\", // Tuesday\n weekDayNameShort: \"EEE\", // Tue\n dateAndMonth: \"d MMM\", // 2 Jan\n monthAndDate: \"MMM do\", // Jan 2nd\n};\n","import {\n addDays,\n eachDayOfInterval,\n endOfMonth,\n format,\n getDate,\n getISOWeek,\n isAfter,\n isSameDay,\n max,\n min,\n startOfMonth,\n subDays,\n} from \"date-fns\";\nimport { last } from \"lodash\";\nimport {\n CalendarState,\n CalendarUserData,\n DayState,\n DayStateHighlight,\n StateForWeek,\n} from \"../../types/CalendarTypes\";\nimport { DateFormats } from \"../date/DateFormats\";\nimport { WeekData } from \"./CalendarDataFactory\";\n\nexport const buildDayStateForDateRange = (\n statePerMonth: CalendarUserData<DayState> = {},\n start?: Date,\n end?: Date\n): CalendarUserData<DayState> | undefined => {\n if (start && end && isAfter(end, start)) {\n return eachDayOfInterval({ start, end }).reduce(\n (result: CalendarUserData<DayState>, date: Date) => {\n const isFirstInRange = isSameDay(date, start);\n const isLastInRange = isSameDay(date, end);\n const highlights = isFirstInRange\n ? [\"selected\", \"selectedStart\", \"range\"]\n : isLastInRange\n ? [\"selected\", \"selectedEnd\", \"range\"]\n : [\"range\"];\n return addDayStateHighlights(result, date, highlights);\n },\n statePerMonth\n );\n }\n\n let state = statePerMonth;\n\n if (start) {\n state = addDayStateHighlights(state, start, [\"selected\", \"singleSelected\"]);\n }\n\n if (end) {\n state = addDayStateHighlights(state, end, [\"selected\", \"singleSelected\"]);\n }\n\n return state;\n};\n\nexport const buildDayStateForSingleMonth = (\n statePerMonth: CalendarUserData<DayState> = {},\n start: Date | undefined,\n end: Date | undefined,\n dateInFocus: Date\n): CalendarUserData<DayState> | undefined =>\n buildDayStateForRange(\n statePerMonth,\n start,\n end,\n startOfMonth(dateInFocus),\n endOfMonth(dateInFocus)\n );\n\nexport const buildDayStateForRange = (\n statePerMonth: CalendarUserData<DayState> = {},\n start: Date | undefined,\n end: Date | undefined,\n startLimit: Date,\n endLimit: Date\n): CalendarUserData<DayState> | undefined => {\n if (start && end) {\n return buildDayStateForDateRange(\n statePerMonth,\n max([start, subDays(startLimit, 1)]),\n min([end, addDays(endLimit, 1)])\n );\n } else {\n return buildDayStateForDateRange(statePerMonth, start, end);\n }\n};\n\nexport const setDayStateValue = (\n state: CalendarUserData<DayState> | undefined,\n date: Date,\n values: Partial<DayState>\n): CalendarUserData<DayState> => {\n const monthString = format(date, DateFormats.yearAndMonth);\n const weekNumber = getISOWeek(date);\n const dayInMonth = getDate(date);\n return {\n ...state,\n [monthString]: {\n ...(state && state[monthString]),\n [weekNumber]: {\n ...(state && state[monthString] && state[monthString][weekNumber]),\n [dayInMonth]: {\n ...(state &&\n state[monthString] &&\n state[monthString][weekNumber] &&\n state[monthString][weekNumber][dayInMonth]),\n ...values,\n },\n },\n },\n };\n};\n\nexport const setDayStateValueFunction = (\n state: CalendarUserData<DayState> | undefined,\n date: Date,\n setter: (dayState: DayState | undefined) => Partial<DayState>\n): CalendarUserData<DayState> => {\n const monthString = format(date, DateFormats.yearAndMonth);\n const weekNumber = getISOWeek(date);\n const dayInMonth = getDate(date);\n return {\n ...state,\n [monthString]: {\n ...(state && state[monthString]),\n [weekNumber]: {\n ...(state && state[monthString] && state[monthString][weekNumber]),\n [dayInMonth]: {\n ...(state &&\n state[monthString] &&\n state[monthString][weekNumber] &&\n state[monthString][weekNumber][dayInMonth]),\n ...setter(\n state &&\n state[monthString] &&\n state[monthString][weekNumber] &&\n state[monthString][weekNumber][dayInMonth]\n ),\n },\n },\n },\n };\n};\n\nexport const addDayStateHighlights = (\n calendarState: CalendarState | undefined,\n date: Date,\n highlights: Array<DayStateHighlight>\n): CalendarUserData<DayState> => {\n const month = date.getMonth() + 1;\n const monthString = `${date.getFullYear()}-${month < 10 ? \"0\" : \"\"}${month}`;\n const weekNumber = getISOWeek(date);\n const dayInMonth = getDate(date);\n const dayState: DayState | undefined =\n calendarState &&\n calendarState[monthString] &&\n calendarState[monthString][weekNumber] &&\n calendarState[monthString][weekNumber][dayInMonth];\n\n return {\n ...calendarState,\n [monthString]: {\n ...(calendarState && calendarState[monthString]),\n [weekNumber]: {\n ...(calendarState &&\n calendarState[monthString] &&\n calendarState[monthString][weekNumber]),\n [dayInMonth]: addDayStateHighlightsOnSingleDay(dayState, highlights),\n },\n },\n };\n};\n\nexport const addDayStateHighlightsOnSingleDay = (\n dayState: DayState | undefined,\n highlights: Array<DayStateHighlight>\n): DayState => {\n return {\n ...dayState,\n highlights: [...(dayState?.highlights ?? []), ...highlights],\n };\n};\n\nexport const addWeekStateHighlights = (\n calendarState: CalendarState | undefined,\n week: WeekData,\n highlights: Array<DayStateHighlight>\n): CalendarUserData<DayState> => {\n const date = week.days[0].date;\n const month = date.getMonth() + 1;\n const monthString = `${date.getFullYear()}-${month < 10 ? \"0\" : \"\"}${month}`;\n const weekNumber = week.weekNumber;\n\n let state = calendarState;\n week.days.forEach((day) => {\n state = addDayStateHighlights(state, day.date, highlights);\n });\n\n const weekState =\n state && state[monthString] ? state[monthString][weekNumber] : undefined;\n\n const newHighlights: Array<DayStateHighlight> =\n weekState && weekState.highlights\n ? [...weekState.highlights, ...highlights]\n : highlights;\n\n const newWeekState: StateForWeek = {\n ...weekState,\n highlights: newHighlights,\n };\n\n return {\n ...state,\n [monthString]: {\n ...(calendarState && calendarState[monthString]),\n [weekNumber]: newWeekState,\n },\n };\n};\n\nexport const addWeekRangeHighlights = (\n calendarState: CalendarState | undefined,\n week: WeekData\n): CalendarUserData<DayState> => {\n if (!week.days.length) {\n return { ...calendarState };\n }\n const startDate = week.days[0].date;\n const endDate = last(week.days)?.date;\n return {\n ...buildDayStateForDateRange(calendarState, startDate, endDate),\n };\n};\n","import { useMemo } from \"react\";\nimport { CalendarState } from \"../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../util/calendar/StateModifier\";\n\nexport const useHighlightToday = (\n enabled: boolean | undefined,\n statePerMonth: CalendarState | undefined\n) => {\n return useMemo(() => {\n return enabled\n ? addDayStateHighlights(statePerMonth, new Date(), [\"today\"])\n : statePerMonth;\n }, [enabled, statePerMonth]);\n};\n","import {\n addDays,\n addHours,\n addWeeks,\n eachDayOfInterval,\n endOfMonth,\n format,\n getDate,\n getISODay,\n getMonth,\n getWeek,\n getYear,\n isSameDay,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport { DateFormats } from \"../date/DateFormats\";\n\nexport enum Month {\n JANUARY = 0,\n FEBRUARY,\n MARCH,\n APRIL,\n MAY,\n JUNE,\n JULY,\n AUGUST,\n SEPTEMBER,\n OCTOBER,\n NOVEMBER,\n DECEMBER,\n}\n\nexport enum WeekDay {\n SUNDAY = 0,\n MONDAY,\n TUESDAY,\n WEDNESDAY,\n THURSDAY,\n FRIDAY,\n SATURDAY,\n}\n\nexport interface DayData {\n name: string;\n date: Date; // YYYY-MM\n dateString: string; // YYYY-MM\n weekNumber: number;\n year: number; // 2018\n month: number; // 0-11\n dayOfMonth: number; // 1-31\n dayOfWeek: number; // 1-7\n isFirstDayOfWeek: boolean;\n isLastDayOfWeek: boolean;\n isFirstDayOfMonth: boolean;\n isLastDayOfMonth: boolean;\n}\n\nexport interface WeekData {\n weekNumber: number;\n startMonth: number;\n startYear: number;\n endMonth: number;\n endYear: number;\n isLastWeekOfMonth: boolean;\n days: Array<DayData>;\n}\n\nexport interface MonthData {\n monthString: string;\n name: string;\n year: number;\n monthInYear: number;\n weeks: Array<WeekData>;\n}\n\nexport const getMonthsInYear = (\n year: number,\n startMonth: number,\n numMonths: number,\n locale: Locale\n): Array<MonthData> => {\n const months = [];\n for (let i = 0; i < numMonths; i++) {\n months.push(getMonthInYear(year, startMonth + i, locale));\n }\n return months;\n};\n\nexport const getMonthInYear = (\n year: number,\n month: number,\n locale: Locale\n): MonthData => {\n const yearToUse = year + Math.floor(month / 12);\n const monthToUse = month % 12;\n const firstDayOfMonth = new Date(yearToUse, monthToUse, 1);\n return {\n monthString: format(firstDayOfMonth, DateFormats.yearAndMonth),\n name: format(firstDayOfMonth, DateFormats.fullMonthName),\n year: yearToUse,\n monthInYear: monthToUse,\n weeks: getWeeksForMonth(yearToUse, monthToUse, locale),\n };\n};\n\nexport const getWeeksForMonth = (\n year: number,\n month: number,\n locale: Locale,\n forceSixWeeks: boolean = true\n): Array<WeekData> => {\n const firstDayOfMonth = new Date(year, month, 1);\n const firstDayOfFirstWeek = startOfWeek(firstDayOfMonth, { locale });\n\n const weeks = [];\n\n for (let i = 0; i < 6; i++) {\n const week = getWeekForDate(addWeeks(firstDayOfFirstWeek, i), locale);\n if (i > 0 && week.startMonth !== month && !forceSixWeeks) {\n return weeks;\n }\n weeks.push(week);\n }\n return weeks;\n};\n\nexport const getWeekForDate = (\n firstDayOfWeek: Date,\n locale: Locale\n): WeekData => {\n const isLastWeekOfMonth =\n getMonth(addDays(firstDayOfWeek, 7)) !== getMonth(firstDayOfWeek);\n return {\n weekNumber: getWeek(firstDayOfWeek, { locale }),\n startMonth: getMonth(firstDayOfWeek),\n startYear: getYear(firstDayOfWeek),\n endMonth: getMonth(addDays(firstDayOfWeek, 6)),\n endYear: getYear(addDays(firstDayOfWeek, 6)),\n days: getDaysForWeekForDate(firstDayOfWeek, locale),\n isLastWeekOfMonth,\n };\n};\n\nexport const createDay = (date: Date, locale: Locale): DayData => {\n const dayOfWeek = getISODay(date);\n return {\n date,\n name: format(date, \"EEE\", locale ? { locale } : undefined),\n dateString: format(addHours(date, 12), DateFormats.fullDate),\n weekNumber: getWeek(date, { locale }),\n year: getYear(date),\n month: getMonth(date),\n dayOfMonth: getDate(date),\n dayOfWeek,\n isFirstDayOfWeek: dayOfWeek === 1,\n isLastDayOfWeek: dayOfWeek === 7,\n isFirstDayOfMonth: isSameDay(startOfMonth(date), date),\n isLastDayOfMonth: isSameDay(endOfMonth(date), date),\n };\n};\n\nexport const getDaysForWeekForDate = (\n firstDayOfWeek: Date,\n locale: Locale\n): Array<DayData> => {\n return eachDayOfInterval({\n start: firstDayOfWeek,\n end: addDays(firstDayOfWeek, 6),\n }).map((d) => createDay(d, locale));\n};\n\nexport const calculateOverflowingMonth = (\n year: number,\n month: number\n): { year: number; month: number } => {\n if (month > Month.DECEMBER) {\n return { year: year + Math.floor(month / 12), month: month % 12 };\n }\n if (month < Month.JANUARY) {\n return { year: year + Math.floor(month / 12), month: 12 + (month % 12) };\n }\n return { year, month };\n};\n","import { DayState, DayStateHighlight } from \"../../types/CalendarTypes\";\n\nexport const dayHasHighlight = (\n dayState: DayState | undefined,\n defaultHighlights: Array<DayStateHighlight> | undefined,\n highlight: string\n): boolean => {\n if (defaultHighlights && defaultHighlights.indexOf(highlight) >= 0) {\n return true;\n }\n if (\n dayState &&\n dayState.highlights &&\n dayState.highlights.indexOf(highlight) >= 0\n ) {\n return true;\n }\n return false;\n};\n\nexport const dayHighlightSelect = <T>(\n dayState: DayState | undefined,\n defaultHighlights: Array<DayStateHighlight> | undefined,\n highlightsOrBoolean: Array<string | boolean>,\n returnValues: Array<T>,\n fallbackValue?: T\n): T | undefined => {\n if (highlightsOrBoolean.length !== returnValues.length) {\n throw new Error(\n \"Select highlight failed, number of values do not equal number of highlights.\"\n );\n }\n if (highlightsOrBoolean.length === 0) {\n return fallbackValue;\n }\n for (let i = 0; i < highlightsOrBoolean.length; i++) {\n if (typeof highlightsOrBoolean[i] === \"boolean\" && highlightsOrBoolean[i]) {\n return returnValues[i];\n }\n if (\n typeof highlightsOrBoolean[i] === \"string\" &&\n dayHasHighlight(\n dayState,\n defaultHighlights,\n highlightsOrBoolean[i] as string\n )\n ) {\n return returnValues[i];\n }\n }\n return fallbackValue;\n};\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { TextProps } from \"@stenajs-webui/core\";\nimport { CSSProperties } from \"react\";\nimport { DayState, DayStateHighlight } from \"../../types/CalendarTypes\";\n\nimport {\n DayData,\n MonthData,\n WeekData,\n} from \"../../util/calendar/CalendarDataFactory\";\nimport { dayHighlightSelect } from \"../../util/calendar/StateHelper\";\n\nexport interface CalendarTheme<TUserData = unknown> {\n width: string;\n height: string;\n WeekNumber: WeekNumberTheme;\n WeekDay: WeekDayTheme;\n CalendarDay: CalendarDayTheme<TUserData>;\n CalendarMonth: CalendarMonthTheme;\n}\n\nexport interface WeekNumberTheme {\n backgroundColor: string;\n textColor?: string;\n clickableTextColor?: string;\n show?: boolean;\n}\n\nexport interface CalendarMonthTheme {\n headerTextColor?: string;\n cellSpacing?: string;\n headerLeftIcon?: IconDefinition;\n headerRightIcon?: IconDefinition;\n}\n\nexport interface WeekDayTheme {\n textColor?: string;\n clickableTextColor?: string;\n}\n\nexport type CalendarStyleProvider<TUserData, TResult> = (\n defaultHighlights: Array<DayStateHighlight> | undefined,\n dayState: DayState | undefined,\n day: DayData,\n week: WeekData,\n month: MonthData,\n userData?: TUserData\n) => TResult;\n\nexport type CalendarWrapperStyleProvider<TUserData> = CalendarStyleProvider<\n TUserData,\n CSSProperties | undefined\n>;\n\ntype TextPropsProvider<TUserData> = CalendarStyleProvider<\n TUserData,\n TextProps | undefined\n>;\n\nexport interface CalendarDayTheme<TUserData> {\n tdStyle?: CalendarWrapperStyleProvider<TUserData>;\n innerWrapperStyle?: CalendarWrapperStyleProvider<TUserData>;\n cellWrapperStyle?: CalendarWrapperStyleProvider<TUserData>;\n textProps?: TextPropsProvider<TUserData>;\n}\n\nexport interface CalendarDefaultWrapperColors {\n selectedBackground: string;\n rangeBackground: string;\n todayBackground: string;\n borderColor?: string;\n borderRadius?: string;\n rangeBorderRadius?: string;\n}\n\nexport const defaultWrapperStyleProvider =\n ({\n selectedBackground,\n todayBackground,\n rangeBackground,\n borderColor = \"transparent\",\n }: CalendarDefaultWrapperColors): CalendarWrapperStyleProvider<unknown> =>\n (defaultHighlights, dayState, day, _, month) => {\n let style = {};\n\n const backgroundColor = dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selected\", \"range\", \"today\", day.month === month.monthInYear],\n [selectedBackground, rangeBackground, todayBackground, \"#fff\"],\n \"transparent\"\n );\n\n return {\n ...style,\n backgroundColor,\n borderTopLeftRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedStart\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n borderBottomLeftRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedStart\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n borderTopRightRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedEnd\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n borderBottomRightRadius: dayHighlightSelect(\n dayState,\n defaultHighlights,\n [\"selectedEnd\", \"singleSelected\"],\n [\n \"var(--swui-calendar-day-border-radius)\",\n \"var(--swui-calendar-day-border-radius)\",\n ],\n borderColor\n ),\n boxSizing: \"border-box\",\n };\n };\n\ninterface DefaultTextColors {\n disabledColor: string;\n inOtherMonthColor: string;\n selectedColor: string;\n rangeTextColor?: string;\n}\n\nexport const defaultTextPropsProvider = ({\n selectedColor,\n disabledColor,\n inOtherMonthColor,\n rangeTextColor,\n}: DefaultTextColors): TextPropsProvider<unknown> => {\n return (defaultHighlights, dayState, day, _, month) => {\n const isOtherMonth = day.month !== month.monthInYear;\n const color = dayHighlightSelect(\n dayState,\n defaultHighlights,\n [isOtherMonth, \"selected\", \"range\", \"enabled\", \"disabled\"],\n [\n inOtherMonthColor,\n selectedColor,\n rangeTextColor,\n undefined,\n disabledColor,\n ]\n );\n return {\n color,\n };\n };\n};\n\nexport const defaultCalendarTheme: CalendarTheme = {\n width: \"var(--swui-calendar-day-width)\",\n height: \"var(--swui-calendar-day-height)\",\n WeekNumber: {\n backgroundColor: \"var(--swui-calendar-week-number-bg-color)\",\n textColor: \"var(--swui-calendar-week-number-text-color)\",\n clickableTextColor: \"var(--swui-calendar-week-number-clickable-text-color)\",\n show: true,\n },\n WeekDay: {\n textColor: \"var(--swui-calendar-week-day-text-color)\",\n clickableTextColor: \"var(--swui-calendar-week-day-clickable-text-color)\",\n },\n CalendarDay: {\n tdStyle: defaultWrapperStyleProvider({\n selectedBackground: \"var(--swui-calendar-wrapper-selected-background)\",\n rangeBackground: \"var(--swui-calendar-wrapper-range-background)\",\n todayBackground: \"var(--swui-calendar-wrapper-today-background)\",\n }),\n textProps: defaultTextPropsProvider({\n selectedColor: \"var(--swui-calendar-text-selected-color)\",\n disabledColor: \"var(--swui-calendar-text-disabled-color)\",\n inOtherMonthColor: \"var(--swui-calendar-text-in-other-month-color)\",\n }),\n },\n CalendarMonth: {\n headerTextColor: \"var(--swui-calendar-week-day-text-color)\",\n },\n};\n\nexport const extranetCalendarTheme: CalendarTheme = {\n ...defaultCalendarTheme,\n width: \"37px\",\n height: \"37px\",\n};\n","import { isAfter, isBefore, isSameDay } from \"date-fns\";\n\nexport const isDateInMinMaxRange = (\n date: Date,\n min: Date | undefined,\n max: Date | undefined\n): boolean => {\n if (min && isBefore(date, min)) {\n return isSameDay(date, min);\n }\n if (max && isAfter(date, max)) {\n return isSameDay(date, max);\n }\n return true;\n};\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport {\n CalendarDayProps,\n OptionalMinMaxDates,\n} from \"../../types/CalendarTypes\";\nimport { addDayStateHighlightsOnSingleDay } from \"../../util/calendar/StateModifier\";\nimport { isDateInMinMaxRange } from \"../../util/date/DateMinMaxValidator\";\n\ninterface DisabledDayWrapperProps<T>\n extends CalendarDayProps<T>,\n OptionalMinMaxDates {\n dayComponent: React.ComponentType<CalendarDayProps<T>>;\n}\n\nexport const DisabledDayWrapper = function DisabledDayWrapper<T>({\n dayComponent: DayComponent,\n minDate,\n maxDate,\n dayState,\n day,\n ...props\n}: DisabledDayWrapperProps<T>) {\n const activeDayState = useMemo(\n () =>\n !isDateInMinMaxRange(day.date, minDate, maxDate)\n ? addDayStateHighlightsOnSingleDay(dayState, [\"disabled\"])\n : dayState,\n [day.date, dayState, maxDate, minDate]\n );\n\n return <DayComponent day={day} {...props} dayState={activeDayState} />;\n};\n","import { Box, Clickable, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { OnClickWeek } from \"../../../types/CalendarTypes\";\nimport { WeekData } from \"../../../util/calendar/CalendarDataFactory\";\nimport { CalendarTheme } from \"../CalendarTheme\";\n\nexport interface WeekNumberCellProps {\n week: WeekData;\n onClickWeek?: OnClickWeek;\n theme: CalendarTheme;\n background?: JSX.Element;\n prefix?: string;\n backgroundColor?: string;\n}\n\nexport const WeekNumberCell: React.FC<WeekNumberCellProps> = ({\n onClickWeek,\n theme,\n week,\n background,\n backgroundColor,\n prefix,\n}) => {\n const content = (\n <Box\n width={theme.width}\n height={theme.height}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n {background && <Box position={\"absolute\"}>{background}</Box>}\n <Box position={\"absolute\"}>\n <Text\n color={\n onClickWeek\n ? theme.WeekNumber.clickableTextColor\n : theme.WeekNumber.textColor\n }\n >\n {prefix}\n {week.weekNumber}\n </Text>\n </Box>\n </Box>\n );\n return (\n <Box\n background={backgroundColor || theme.WeekNumber.backgroundColor}\n position={\"relative\"}\n >\n {onClickWeek ? (\n <Clickable\n borderRadius={\"var(--swui-calendar-day-border-radius)\"}\n onClick={(ev) => onClickWeek(week, ev)}\n disableFocusHighlight={!onClickWeek}\n >\n {content}\n </Clickable>\n ) : (\n content\n )}\n </Box>\n );\n};\n","import * as React from \"react\";\nimport {\n CalendarDayProps,\n CalendarUserWeekData,\n DayState,\n DayStateHighlight,\n ExtraDayContentProps,\n OnClickDay,\n OnClickWeek,\n OptionalMinMaxDates,\n RenderWeekNumber,\n} from \"../../types/CalendarTypes\";\nimport { MonthData, WeekData } from \"../../util/calendar/CalendarDataFactory\";\n\nimport { CalendarTheme } from \"./CalendarTheme\";\nimport { DisabledDayWrapper } from \"./DisabledDayWrapper\";\nimport { WeekNumberCell } from \"./renderers/WeekNumberCell\";\n\nexport interface CalendarWeekProps<T> extends OptionalMinMaxDates {\n dayComponent: React.ComponentType<CalendarDayProps<T>>;\n week: WeekData;\n month: MonthData;\n statePerWeekDay?: CalendarUserWeekData<DayState>;\n userDataPerWeekDay?: CalendarUserWeekData<T>;\n onClickWeek?: OnClickWeek;\n onClickDay?: OnClickDay<T>;\n theme: CalendarTheme;\n renderWeekNumber?: RenderWeekNumber;\n extraDayContent?: React.ComponentType<ExtraDayContentProps<T>>;\n defaultHighlights?: Array<DayStateHighlight>;\n}\n\nexport function CalendarWeek<T>({\n week,\n month,\n dayComponent,\n statePerWeekDay,\n userDataPerWeekDay,\n minDate,\n maxDate,\n onClickWeek,\n onClickDay,\n theme,\n renderWeekNumber,\n extraDayContent,\n defaultHighlights,\n}: CalendarWeekProps<T>) {\n return (\n <tr key={week.weekNumber}>\n {theme.WeekNumber.show && (\n <td>\n {renderWeekNumber ? (\n renderWeekNumber(week, theme, onClickWeek)\n ) : (\n <WeekNumberCell\n week={week}\n onClickWeek={onClickWeek}\n theme={theme}\n />\n )}\n </td>\n )}\n {week.days.map((day) => (\n <DisabledDayWrapper\n dayComponent={dayComponent}\n key={day.dateString}\n day={day}\n week={week}\n month={month}\n dayState={statePerWeekDay && statePerWeekDay[day.dayOfMonth]}\n userData={userDataPerWeekDay && userDataPerWeekDay[day.dayOfMonth]}\n onClickDay={onClickDay}\n theme={theme}\n extraDayContent={extraDayContent}\n defaultHighlights={defaultHighlights}\n minDate={minDate}\n maxDate={maxDate}\n />\n ))}\n </tr>\n );\n}\n","import { Box, Clickable, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { OnClickWeekDay } from \"../../../types/CalendarTypes\";\nimport { DayData } from \"../../../util/calendar/CalendarDataFactory\";\nimport { CalendarTheme } from \"../CalendarTheme\";\n\nexport interface WeekDayCellProps {\n onClickWeekDay?: OnClickWeekDay;\n day: DayData;\n theme: CalendarTheme;\n}\n\nexport const WeekDayCell = ({\n onClickWeekDay,\n day,\n theme,\n}: WeekDayCellProps) => {\n const content = (\n <Box\n width={theme.width}\n height={theme.height}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n <Text\n size={\"small\"}\n color={\n onClickWeekDay\n ? theme.WeekDay.clickableTextColor\n : theme.WeekDay.textColor\n }\n >\n {day.name}\n </Text>\n </Box>\n );\n\n if (onClickWeekDay) {\n return (\n <Clickable\n borderRadius={\"var(--swui-calendar-day-border-radius)\"}\n onClick={(ev) => onClickWeekDay(day.dayOfWeek, ev)}\n disableFocusHighlight={!onClickWeekDay}\n >\n {content}\n </Clickable>\n );\n }\n\n return content;\n};\n","import styled from \"@emotion/styled\";\nimport { Box, Clickable, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport {\n CalendarDayProps,\n DayState,\n DayStateHighlight,\n} from \"../../../types/CalendarTypes\";\nimport { dayHighlightSelect } from \"../../../util/calendar/StateHelper\";\n\nexport const CalendarDay = function CalendarDay<T>({\n day,\n week,\n month,\n dayState,\n userData,\n onClickDay,\n theme,\n extraDayContent: ExtraDayContent,\n defaultHighlights,\n}: CalendarDayProps<T>) {\n const content = (\n <Box\n width={\"100%\"}\n height={\"100%\"}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n <Text\n {...(theme.CalendarDay.textProps &&\n theme.CalendarDay.textProps(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n ))}\n >\n {day.dayOfMonth}\n </Text>\n </Box>\n );\n\n const WrapperTd = styled.td({\n ...(theme.CalendarDay.tdStyle &&\n theme.CalendarDay.tdStyle(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n )),\n });\n\n const InnerWrapperDiv = styled.div({\n ...(theme.CalendarDay.innerWrapperStyle &&\n theme.CalendarDay.innerWrapperStyle(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n )),\n width: \"100%\",\n height: \"100%\",\n });\n\n const CellWrapperDiv = styled.div({\n ...(theme.CalendarDay.cellWrapperStyle &&\n theme.CalendarDay.cellWrapperStyle(\n defaultHighlights,\n dayState,\n day,\n week,\n month,\n userData\n )),\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n });\n\n return (\n <WrapperTd>\n <InnerWrapperDiv>\n <CellWrapperDiv>\n {day.month === month.monthInYear && (\n <>\n {ExtraDayContent && (\n <ExtraDayContent\n week={week}\n month={month}\n day={day}\n dayState={dayState}\n theme={theme}\n userData={userData}\n />\n )}\n {onClickDay && isClickable(defaultHighlights, dayState) ? (\n <Clickable\n onClick={(ev) => onClickDay(day, userData, ev)}\n style={{ width: \"100%\", height: \"100%\" }}\n borderRadius={\"var(--swui-calendar-day-border-radius)\"}\n >\n {content}\n </Clickable>\n ) : (\n <>{content}</>\n )}\n </>\n )}\n </CellWrapperDiv>\n </InnerWrapperDiv>\n </WrapperTd>\n );\n};\n\nconst isClickable = (\n defaultHighlights: Array<DayStateHighlight> | undefined,\n dayState: DayState | undefined\n): boolean =>\n !!dayHighlightSelect<boolean>(\n dayState,\n defaultHighlights,\n [\"enabled\", \"disabled\"],\n [true, false],\n true\n );\n","import { Box, Row, Space, Text } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport {\n CalendarDayProps,\n CalendarOnClicks,\n CalendarUserMonthData,\n DayState,\n DayStateHighlight,\n ExtraDayContentProps,\n OptionalMinMaxDates,\n Renderers,\n} from \"../../types/CalendarTypes\";\nimport {\n DayData,\n MonthData,\n WeekData,\n} from \"../../util/calendar/CalendarDataFactory\";\nimport { CalendarTheme, defaultCalendarTheme } from \"./CalendarTheme\";\nimport { CalendarWeek } from \"./CalendarWeek\";\nimport { WeekDayCell } from \"./renderers/WeekDayCell\";\nimport { CalendarDay } from \"./renderers/CalendarDay\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\n\nexport interface CalendarMonthProps<T>\n extends CalendarOnClicks<T>,\n Renderers,\n OptionalMinMaxDates {\n month: MonthData;\n dayComponent?: React.ComponentType<CalendarDayProps<T>>;\n userDataPerWeek?: CalendarUserMonthData<T>;\n statePerWeek?: CalendarUserMonthData<DayState>;\n theme?: CalendarTheme;\n headerLeftContent?: React.ReactElement<{}>;\n headerRightContent?: React.ReactElement<{}>;\n extraDayContent?: React.ComponentType<ExtraDayContentProps<T>>;\n defaultHighlights?: Array<DayStateHighlight>;\n}\n\nexport function CalendarMonth<T>({\n month,\n dayComponent = CalendarDay,\n statePerWeek,\n userDataPerWeek,\n minDate,\n maxDate,\n onClickDay,\n onClickWeek,\n onClickWeekDay,\n onClickMonth,\n onClickYear,\n renderWeekNumber,\n renderWeekDay,\n headerLeftContent,\n headerRightContent,\n theme = defaultCalendarTheme,\n extraDayContent,\n defaultHighlights,\n}: CalendarMonthProps<T>) {\n const showWeekNumber = theme.WeekNumber.show;\n\n return (\n <>\n <Box alignItems={\"stretch\"}>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"32px\"}\n >\n <Box alignItems={\"center\"}>{headerLeftContent}</Box>\n\n <Row alignItems={\"center\"}>\n <Row width={\"104px\"} justifyContent={\"center\"}>\n {onClickMonth ? (\n <FlatButton\n onClick={() => onClickMonth(month)}\n label={month.name}\n />\n ) : (\n <Text>{month.name}</Text>\n )}\n </Row>\n <Space />\n <Row width={\"64px\"} justifyContent={\"center\"}>\n {onClickYear ? (\n <FlatButton\n onClick={() => onClickYear(month.year)}\n label={String(month.year)}\n />\n ) : (\n <Text>{month.year}</Text>\n )}\n </Row>\n </Row>\n\n <Box alignItems={\"center\"}>{headerRightContent}</Box>\n </Row>\n\n <table>\n <tbody>\n <tr>\n {showWeekNumber && (\n <td>\n <Box width={theme.width} height={theme.height} />\n </td>\n )}\n {month.weeks[0].days.map((day: DayData) => (\n <td key={day.name}>\n {renderWeekDay ? (\n renderWeekDay(day.name, theme, onClickWeekDay)\n ) : (\n <WeekDayCell\n day={day}\n onClickWeekDay={onClickWeekDay}\n theme={theme}\n />\n )}\n </td>\n ))}\n </tr>\n {month.weeks.map((week: WeekData) => (\n <CalendarWeek<T>\n key={week.weekNumber}\n month={month}\n week={week}\n dayComponent={dayComponent}\n statePerWeekDay={statePerWeek && statePerWeek[week.weekNumber]}\n userDataPerWeekDay={\n userDataPerWeek && userDataPerWeek[week.weekNumber]\n }\n onClickDay={onClickDay}\n onClickWeek={onClickWeek}\n theme={theme}\n renderWeekNumber={renderWeekNumber}\n extraDayContent={extraDayContent}\n defaultHighlights={defaultHighlights}\n minDate={minDate}\n maxDate={maxDate}\n />\n ))}\n </tbody>\n </table>\n </Box>\n </>\n );\n}\n","import { Row, Space, Spacing } from \"@stenajs-webui/core\";\nimport { getMonth, getYear, parse } from \"date-fns\";\nimport { enGB } from \"date-fns/locale\";\nimport { chunk } from \"lodash\";\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { useHighlightToday } from \"../../features/today-state/UseHighlightToday\";\nimport {\n CalendarOnClicks,\n CalendarProps,\n CalendarUserData,\n DayState,\n Renderers,\n} from \"../../types/CalendarTypes\";\nimport {\n calculateOverflowingMonth,\n getMonthInYear,\n getMonthsInYear,\n MonthData,\n} from \"../../util/calendar/CalendarDataFactory\";\nimport styles from \"./Calendar.module.css\";\n\nimport { CalendarMonth } from \"./CalendarMonth\";\nimport { CalendarTheme, defaultCalendarTheme } from \"./CalendarTheme\";\nimport { CalendarDay } from \"./renderers/CalendarDay\";\n\ninterface CalendarPanelProps<T>\n extends CalendarProps<T>,\n CalendarOnClicks<T>,\n Renderers {\n year: number;\n month: number;\n monthRows: Array<Array<MonthData>>;\n userDataPerMonth?: CalendarUserData<T>;\n statePerMonth?: CalendarUserData<DayState>;\n width?: string;\n height?: string;\n theme?: CalendarTheme;\n}\n\nfunction CalendarPanel<T>({\n monthRows,\n dayComponent = CalendarDay,\n userDataPerMonth,\n statePerMonth,\n minDate,\n maxDate,\n onClickDay,\n onClickWeekDay,\n onClickWeek,\n onClickMonth,\n onClickYear,\n renderWeekDay,\n renderWeekNumber,\n headerLeftContent,\n headerRightContent,\n extraDayContent,\n defaultHighlights,\n theme = defaultCalendarTheme,\n}: CalendarPanelProps<T>) {\n const minDateObj = useMemo(\n () => (minDate ? parse(minDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [minDate]\n );\n\n const maxDateObj = useMemo(\n () => (maxDate ? parse(maxDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [maxDate]\n );\n\n return (\n <div className={styles.calendar}>\n {monthRows.map((monthRow, rowIndex) => (\n <Spacing key={rowIndex}>\n <Row>\n {monthRow.map((month, index) => (\n <React.Fragment key={month.name}>\n {index > 0 && <Space />}\n <CalendarMonth<T>\n month={month}\n dayComponent={dayComponent}\n userDataPerWeek={\n userDataPerMonth && userDataPerMonth[month.monthString]\n }\n statePerWeek={\n statePerMonth && statePerMonth[month.monthString]\n }\n onClickDay={onClickDay}\n onClickWeekDay={onClickWeekDay}\n onClickWeek={onClickWeek}\n onClickMonth={onClickMonth}\n onClickYear={onClickYear}\n theme={theme}\n renderWeekNumber={renderWeekNumber}\n renderWeekDay={renderWeekDay}\n headerLeftContent={headerLeftContent}\n headerRightContent={headerRightContent}\n extraDayContent={extraDayContent}\n defaultHighlights={defaultHighlights}\n minDate={minDateObj}\n maxDate={maxDateObj}\n />\n </React.Fragment>\n ))}\n </Row>\n </Spacing>\n ))}\n </div>\n );\n}\n\nexport function Calendar<T>(props: CalendarProps<T>) {\n const initialDate = getInitialDate(props.year, props.month, props.date);\n const { year, month } = calculateOverflowingMonth(\n initialDate.year,\n initialDate.month\n );\n const monthRows = getMonthRows(\n year,\n month,\n props.locale ?? enGB,\n props.numMonths,\n props.monthsPerRow\n );\n\n const statePerMonth = useHighlightToday(\n props.highlightToday,\n props.statePerMonth\n );\n\n return (\n <CalendarPanel<T>\n year={year}\n month={month}\n monthRows={monthRows}\n {...props}\n statePerMonth={statePerMonth}\n />\n );\n}\n\nconst getInitialDate = (year?: number, month?: number, date?: Date) => {\n if (month && year) {\n return {\n month,\n year,\n };\n }\n if (date) {\n return {\n month: getMonth(date),\n year: getYear(date),\n };\n }\n const now = new Date();\n return {\n month: getMonth(now),\n year: getYear(now),\n };\n};\n\nconst getMonthRows = (\n year: number,\n month: number,\n locale: Locale,\n numMonths?: number,\n monthsPerRow?: number\n): Array<Array<MonthData>> => {\n if (numMonths == null) {\n return [[getMonthInYear(year, month, locale)]];\n }\n if (monthsPerRow == null) {\n return [getMonthsInYear(year, month, numMonths, locale)];\n }\n return chunk(getMonthsInYear(year, month, numMonths, locale), monthsPerRow);\n};\n","import { addMonths, addYears, subMonths, subYears } from \"date-fns\";\nimport { useCallback } from \"react\";\n\nexport const useSelectedMonthStepperLogic = (\n dateInFocus: Date,\n setDateInFocus?: (dateInFocus: Date) => void,\n monthsPerRow?: number,\n numMonths?: number\n) => {\n const nextMonth = useCallback(() => {\n const d = addMonths(dateInFocus, monthsPerRow ?? numMonths ?? 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus, monthsPerRow, numMonths]);\n\n const nextYear = useCallback(() => {\n const d = addYears(dateInFocus, 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus]);\n\n const prevMonth = useCallback(() => {\n const d = subMonths(dateInFocus, monthsPerRow ?? numMonths ?? 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus, monthsPerRow, numMonths]);\n\n const prevYear = useCallback(() => {\n const d = subYears(dateInFocus, 1);\n setDateInFocus?.(d);\n }, [setDateInFocus, dateInFocus]);\n\n return {\n nextMonth,\n prevMonth,\n nextYear,\n prevYear,\n };\n};\n","import { Indent, Row, Space } from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n stenaAngleLeft,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { CalendarTheme } from \"../../components/calendar/CalendarTheme\";\nimport { faAngleDoubleLeft } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleLeft\";\nimport { faAngleDoubleRight } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleRight\";\nimport { ReactNode } from \"react\";\n\nexport interface WithMonthSwitcherBelowProps {\n theme: CalendarTheme;\n nextMonth: () => void;\n prevMonth: () => void;\n nextYear: () => void;\n prevYear: () => void;\n children?: ReactNode;\n}\n\nexport const WithMonthSwitcherBelow: React.FC<WithMonthSwitcherBelowProps> = ({\n children,\n prevMonth,\n nextMonth,\n prevYear,\n nextYear,\n}) => (\n <div>\n {children}\n <Indent>\n <Row>\n <FlatButton onClick={prevYear} leftIcon={faAngleDoubleLeft} />\n <Space />\n <FlatButton onClick={prevMonth} leftIcon={stenaAngleLeft} />\n <Indent num={2} />\n <FlatButton onClick={nextMonth} leftIcon={stenaAngleRight} />\n <Space />\n <FlatButton onClick={nextYear} leftIcon={faAngleDoubleRight} />\n </Row>\n </Indent>\n <Space />\n </div>\n);\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, PrimaryButton } from \"@stenajs-webui/elements\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { Month } from \"../../util/calendar/CalendarDataFactory\";\nimport { format } from \"date-fns\";\n\ninterface Props extends ValueAndOnValueChangeProps<Month> {\n month: Month;\n}\n\nexport const MonthPickerCell: React.FC<Props> = ({\n value,\n onValueChange,\n month,\n}) => {\n const label = useMemo(() => {\n const now = new Date(2000, month, 1);\n return format(now, \"MMM\");\n }, [month]);\n\n return (\n <Row width={\"64px\"} justifyContent={\"center\"} spacing={0.5} indent={0.5}>\n {value === month ? (\n <PrimaryButton\n label={label}\n onClick={() => onValueChange && onValueChange(month)}\n />\n ) : (\n <FlatButton\n label={label}\n onClick={() => onValueChange && onValueChange(month)}\n />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { Month } from \"../../util/calendar/CalendarDataFactory\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport { MonthPickerCell } from \"./MonthPickerCell\";\n\nexport interface MonthPickerProps extends ValueAndOnValueChangeProps<Month> {}\n\nconst monthMatrix = [\n [Month.JANUARY, Month.FEBRUARY, Month.MARCH],\n [Month.APRIL, Month.MAY, Month.JUNE],\n [Month.JULY, Month.AUGUST, Month.SEPTEMBER],\n [Month.OCTOBER, Month.NOVEMBER, Month.DECEMBER],\n];\n\nexport const MonthPicker: React.FC<MonthPickerProps> = ({\n value,\n onValueChange,\n}) => {\n return (\n <Column>\n {monthMatrix.map((monthRow) => (\n <Row key={monthRow[0]}>\n {monthRow.map((month) => (\n <MonthPickerCell\n key={month}\n month={month}\n onValueChange={onValueChange}\n value={value}\n />\n ))}\n </Row>\n ))}\n </Column>\n );\n};\n","import { PresetPage } from \"./CalendarPreset\";\nimport { addDays, subDays } from \"date-fns\";\n\nexport const createStandardDateRangePresets = (\n now: Date\n): Array<PresetPage> => [\n {\n label: \"Past\",\n presets: [\n { label: \"Last 3 days\", startDate: now, endDate: subDays(now, 2) },\n { label: \"Last 7 days\", startDate: now, endDate: subDays(now, 6) },\n { label: \"Last 30 days\", startDate: now, endDate: subDays(now, 29) },\n { label: \"Last 45 days\", startDate: now, endDate: subDays(now, 44) },\n ],\n },\n {\n label: \"Future\",\n presets: [\n { label: \"Next 3 days\", startDate: now, endDate: addDays(now, 2) },\n { label: \"Next 7 days\", startDate: now, endDate: addDays(now, 6) },\n { label: \"Next 30 days\", startDate: now, endDate: addDays(now, 29) },\n { label: \"Next 45 days\", startDate: now, endDate: addDays(now, 44) },\n ],\n },\n];\n","import * as React from \"react\";\nimport { useMemo, useState } from \"react\";\nimport { createStandardDateRangePresets } from \"./PresetFactory\";\nimport { Column, Row, Space, Text } from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n PrimaryButton,\n stenaAngleLeft,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport { CalendarPreset } from \"./CalendarPreset\";\n\nexport interface PresetPickerProps {\n onClickPreset: (preset: CalendarPreset) => void;\n}\n\nexport const PresetPicker: React.FC<PresetPickerProps> = ({\n onClickPreset,\n}) => {\n const [pageIndex, setPageIndex] = useState(0);\n const pages = useMemo(() => createStandardDateRangePresets(new Date()), []);\n\n const currentPage = pages[pageIndex] ?? pages[0];\n\n return (\n <Column>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n width={\"200px\"}\n >\n <FlatButton\n size={\"small\"}\n leftIcon={stenaAngleLeft}\n disabled={pageIndex === 0}\n onClick={() => setPageIndex(pageIndex - 1)}\n />\n <Text>{currentPage.label}</Text>\n <FlatButton\n size={\"small\"}\n leftIcon={stenaAngleRight}\n disabled={pageIndex === pages.length - 1}\n onClick={() => setPageIndex(pageIndex + 1)}\n />\n </Row>\n <Space />\n <Column alignItems={\"center\"}>\n {currentPage.presets.map((preset) => (\n <React.Fragment key={preset.label}>\n <PrimaryButton\n label={preset.label}\n onClick={() => onClickPreset(preset)}\n />\n <Space />\n </React.Fragment>\n ))}\n </Column>\n </Column>\n );\n};\n","import * as React from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, PrimaryButton } from \"@stenajs-webui/elements\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\n\ninterface Props extends ValueAndOnValueChangeProps<number> {\n year: number;\n}\n\nexport const YearPickerCell: React.FC<Props> = ({\n value,\n onValueChange,\n year,\n}) => {\n const label = String(year);\n return (\n <Row width={\"64px\"} justifyContent={\"center\"} spacing={0.5} indent={0.5}>\n {value === year ? (\n <PrimaryButton label={label} onClick={() => onValueChange?.(year)} />\n ) : (\n <FlatButton label={label} onClick={() => onValueChange?.(year)} />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport { YearPickerCell } from \"./YearPickerCell\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { faCaretLeft } from \"@fortawesome/free-solid-svg-icons/faCaretLeft\";\nimport { faCaretRight } from \"@fortawesome/free-solid-svg-icons/faCaretRight\";\nimport { chunk, range } from \"lodash\";\n\nexport interface YearPickerProps extends ValueAndOnValueChangeProps<number> {\n initialLastYear?: number;\n}\n\nexport const YearPicker: React.FC<YearPickerProps> = ({\n value,\n onValueChange,\n initialLastYear,\n}) => {\n const [lastYear, setLastYear] = useState(() => {\n if (value) {\n return value + 4;\n }\n return initialLastYear ?? new Date().getFullYear() + 4;\n });\n\n const yearRows = useMemo(() => {\n const startYear = lastYear - 11;\n return chunk(range(startYear, lastYear + 1), 3);\n }, [lastYear]);\n\n useEffect(() => {\n setLastYear((prev) => calculateLastYearInFocus(value, prev));\n }, [value]);\n\n return (\n <Row>\n <Column justifyContent={\"center\"}>\n <FlatButton\n leftIcon={faCaretLeft}\n onClick={() => setLastYear(lastYear - 3)}\n />\n </Column>\n <Column>\n {yearRows.map((yearRow) => (\n <Row key={yearRow[0]}>\n {yearRow.map((year) => (\n <YearPickerCell\n key={year}\n year={year}\n onValueChange={onValueChange}\n value={value}\n />\n ))}\n </Row>\n ))}\n </Column>\n <Column justifyContent={\"center\"}>\n <FlatButton\n leftIcon={faCaretRight}\n onClick={() => setLastYear(lastYear + 3)}\n />\n </Column>\n </Row>\n );\n};\n\nconst calculateLastYearInFocus = (\n value: number | undefined,\n lastYear: number\n): number => {\n if (value == null) {\n return lastYear;\n }\n if (value > lastYear) {\n const yearDiff = value - lastYear;\n const remaining = yearDiff % 3;\n const yearsToAdd = yearDiff - remaining + 3;\n return lastYear + yearsToAdd;\n }\n const startYear = lastYear - 11;\n if (value < startYear) {\n const yearDiff = startYear - value;\n const remaining = yearDiff % 3;\n const yearsToSubtract = yearDiff - remaining + 3;\n return lastYear - yearsToSubtract;\n }\n\n return lastYear;\n};\n","import { Box } from \"@stenajs-webui/core\";\nimport { PrimaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Calendar } from \"../../components/calendar/Calendar\";\nimport { CalendarProps } from \"../../types/CalendarTypes\";\nimport { Month } from \"../../util/calendar/CalendarDataFactory\";\nimport { MonthPicker } from \"../month-picker/MonthPicker\";\nimport { CalendarPreset } from \"../preset-picker/CalendarPreset\";\nimport { PresetPicker } from \"../preset-picker/PresetPicker\";\nimport { YearPicker } from \"../year-picker/YearPicker\";\nimport { CalendarPanelType } from \"./CalendarPanelType\";\n\ninterface CalendarWithMonthYearPickersProps<T>\n extends Omit<CalendarProps<T>, \"date\" | \"year\" | \"month\"> {\n dateInFocus: Date;\n setDateInFocus: (dateInFocus: Date) => void;\n currentPanel: CalendarPanelType;\n setCurrentPanel: (currentPanel: CalendarPanelType) => void;\n onSelectPreset: (preset: CalendarPreset) => void;\n}\n\nexport const CalendarWithMonthYearPickers =\n function CalendarWithMonthYearPickers<T>({\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n ...props\n }: CalendarWithMonthYearPickersProps<T>) {\n const onChangeSelectedMonth = useCallback(\n (selectedMonth: Month) => {\n const newDate = dateInFocus ? new Date(dateInFocus) : new Date();\n newDate.setMonth(selectedMonth);\n if (setDateInFocus) {\n setDateInFocus(newDate);\n }\n setCurrentPanel(\"calendar\");\n },\n [dateInFocus, setDateInFocus, setCurrentPanel]\n );\n\n const onChangeSelectedYear = useCallback(\n (selectedYear: number) => {\n const newDate = dateInFocus ? new Date(dateInFocus) : new Date();\n newDate.setFullYear(selectedYear);\n if (setDateInFocus) {\n setDateInFocus(newDate);\n }\n setCurrentPanel(\"calendar\");\n },\n [dateInFocus, setDateInFocus, setCurrentPanel]\n );\n\n const onClickYear = useCallback(() => {\n setCurrentPanel(\"year\");\n }, [setCurrentPanel]);\n\n const onClickMonth = useCallback(() => {\n setCurrentPanel(\"month\");\n }, [setCurrentPanel]);\n\n switch (currentPanel) {\n case \"calendar\":\n return (\n <>\n <Calendar<T>\n {...props}\n date={dateInFocus}\n onClickYear={onClickYear}\n onClickMonth={onClickMonth}\n />\n </>\n );\n case \"month\":\n return (\n <MonthPicker\n value={dateInFocus.getMonth()}\n onValueChange={onChangeSelectedMonth}\n />\n );\n case \"year\":\n return (\n <YearPicker\n value={dateInFocus.getFullYear()}\n onValueChange={onChangeSelectedYear}\n />\n );\n case \"presets\":\n return <PresetPicker onClickPreset={() => {}} />;\n\n default:\n return (\n <Box>\n <PrimaryButton\n label={\"Show calendar\"}\n onClick={() => setCurrentPanel(\"calendar\")}\n />\n </Box>\n );\n }\n };\n","import {\n FlatButton,\n stenaAngleLeft,\n stenaAngleRight,\n} from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { Calendar } from \"../../components/calendar/Calendar\";\nimport { defaultCalendarTheme } from \"../../components/calendar/CalendarTheme\";\nimport { CalendarProps } from \"../../types/CalendarTypes\";\nimport { useSelectedMonthStepperLogic } from \"./hooks/UseSelectedMonthStepperLogic\";\nimport { WithMonthSwitcherBelow } from \"./MonthSwitcherBelow\";\nimport { CalendarWithMonthYearPickers } from \"../calendar-with-month-year-pickers/CalendarWithMonthYearPickers\";\nimport { Column, Row, Space } from \"@stenajs-webui/core\";\nimport { faAngleDoubleLeft } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleLeft\";\nimport { faAngleDoubleRight } from \"@fortawesome/free-solid-svg-icons/faAngleDoubleRight\";\nimport { CalendarPanelType } from \"../calendar-with-month-year-pickers/CalendarPanelType\";\nimport { CalendarPreset } from \"../preset-picker/CalendarPreset\";\n\nexport type MonthSwitcherPlacement = \"header\" | \"below\";\n\nexport interface CalendarWithMonthSwitcherProps<T> extends CalendarProps<T> {\n monthSwitcherPlacement?: MonthSwitcherPlacement;\n dateInFocus: Date;\n setDateInFocus: (dateInFocus: Date) => void;\n currentPanel: CalendarPanelType;\n setCurrentPanel: (currentPanel: CalendarPanelType) => void;\n onSelectPreset?: (preset: CalendarPreset) => void;\n hideYearPagination?: boolean;\n}\n\nconst noop = () => {};\n\nexport function CalendarWithMonthSwitcher<T>({\n monthSwitcherPlacement,\n theme = defaultCalendarTheme,\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n onSelectPreset = noop,\n hideYearPagination = false,\n ...calendarProps\n}: CalendarWithMonthSwitcherProps<T>) {\n const { nextMonth, prevMonth, nextYear, prevYear } =\n useSelectedMonthStepperLogic(\n dateInFocus,\n setDateInFocus,\n calendarProps.monthsPerRow,\n calendarProps.numMonths\n );\n\n const placement = fallbackIfNoPlacement(\n monthSwitcherPlacement,\n calendarProps.numMonths\n );\n\n switch (placement) {\n case \"below\": {\n return (\n <WithMonthSwitcherBelow\n theme={theme}\n nextMonth={nextMonth}\n prevMonth={prevMonth}\n nextYear={nextYear}\n prevYear={prevYear}\n >\n <Calendar<T> {...calendarProps} theme={theme} date={dateInFocus} />\n </WithMonthSwitcherBelow>\n );\n }\n case \"header\": {\n return (\n <Column>\n <CalendarWithMonthYearPickers<T>\n {...calendarProps}\n theme={theme}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n onSelectPreset={onSelectPreset}\n headerLeftContent={\n <Row alignItems={\"center\"}>\n {!hideYearPagination && (\n <FlatButton\n size={\"small\"}\n onClick={prevYear}\n leftIcon={faAngleDoubleLeft}\n />\n )}\n <Space />\n <FlatButton\n size={\"small\"}\n onClick={prevMonth}\n leftIcon={stenaAngleLeft}\n />\n </Row>\n }\n headerRightContent={\n <Row alignItems={\"center\"}>\n <FlatButton\n size={\"small\"}\n onClick={nextMonth}\n leftIcon={stenaAngleRight}\n />\n <Space />\n {!hideYearPagination && (\n <FlatButton\n size={\"small\"}\n onClick={nextYear}\n leftIcon={faAngleDoubleRight}\n />\n )}\n </Row>\n }\n />\n </Column>\n );\n }\n default: {\n return (\n <Calendar<T> {...calendarProps} theme={theme} date={dateInFocus} />\n );\n }\n }\n}\n\nconst fallbackIfNoPlacement = (\n monthSwitcherPlacement: MonthSwitcherPlacement | undefined,\n numMonths: number | undefined\n): MonthSwitcherPlacement => {\n return monthSwitcherPlacement || (numMonths || 1) > 1 ? \"below\" : \"header\";\n};\n","import { DateRange, DateStringRange } from \"../../types/DateRange\";\nimport { format, parse } from \"date-fns\";\n\nexport const dateRangeToStrings = (dateRange: DateRange): DateStringRange => ({\n startDate: dateRange.startDate\n ? format(dateRange.startDate, \"yyyy-MM-dd\")\n : undefined,\n endDate: dateRange.endDate\n ? format(dateRange.endDate, \"yyyy-MM-dd\")\n : undefined,\n});\n\nexport const stringsToDateRange = ({\n startDate,\n endDate,\n}: DateStringRange): DateRange => {\n const now = new Date();\n return {\n startDate: startDate ? parse(startDate, \"yyyy-MM-dd\", now) : undefined,\n endDate: endDate ? parse(endDate, \"yyyy-MM-dd\", now) : undefined,\n };\n};\n","import { isAfter, isSameDay } from \"date-fns\";\nimport { DateRange, DateStringRange } from \"../../types/DateRange\";\nimport { dateRangeToStrings, stringsToDateRange } from \"./DateRangeTransformer\";\n\nexport const isDateRangeInvalid = ({\n startDate,\n endDate,\n}: DateRange): boolean =>\n Boolean(\n startDate &&\n endDate &&\n !isSameDay(startDate, endDate) &&\n isAfter(startDate, endDate)\n );\n\nexport const toggleDatesIfEndIsEarlierThanStart = (\n dateRange: DateRange\n): DateRange => {\n if (isDateRangeInvalid(dateRange)) {\n return {\n startDate: dateRange.endDate,\n endDate: dateRange.startDate,\n };\n }\n return dateRange;\n};\n\nexport const toggleDateStringsIfEndIsEarlierThanStart = (\n dateRange: DateStringRange\n): DateStringRange => {\n if (dateRange.startDate && dateRange.endDate) {\n return dateRangeToStrings(\n toggleDatesIfEndIsEarlierThanStart(stringsToDateRange(dateRange))\n );\n }\n return dateRange;\n};\n","import { useCallback } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../components/calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { OnClickDay } from \"../../../types/CalendarTypes\";\nimport { DayData } from \"../../../util/calendar/CalendarDataFactory\";\nimport {\n isDateRangeInvalid,\n toggleDatesIfEndIsEarlierThanStart,\n} from \"../../../util/date-range/DateRangeValidator\";\nimport { DateRange } from \"../../../types/DateRange\";\n\nexport const useDateRangeOnClickDayHandler = <T>(\n value: DateRange | undefined,\n onValueChange: ((dateRange: DateRange) => void) | undefined,\n focusedInput: DateRangeFocusedInput,\n setFocusedInput: (focusedInput: DateRangeFocusedInput) => void\n): OnClickDay<T> => {\n return useCallback(\n (day: DayData) => {\n const dateRange = {\n startDate: focusedInput === \"startDate\" ? day.date : value?.startDate,\n endDate: focusedInput === \"endDate\" ? day.date : value?.endDate,\n };\n\n if (!isDateRangeInvalid(dateRange)) {\n setFocusedInput(focusedInput === \"startDate\" ? \"endDate\" : \"startDate\");\n }\n onValueChange?.(toggleDatesIfEndIsEarlierThanStart(dateRange));\n },\n [\n focusedInput,\n onValueChange,\n setFocusedInput,\n value?.endDate,\n value?.startDate,\n ]\n );\n};\n","import { CalendarPanelType } from \"../calendar-with-month-year-pickers/CalendarPanelType\";\nimport { useCallback, useState } from \"react\";\n\nexport type OnChangePanel = (panel: CalendarPanelType) => void;\n\nexport interface UseInternalPanelStateProps {\n onChangePanel?: OnChangePanel;\n}\n\nexport const useInternalPanelState = (\n onChangePanel: OnChangePanel | undefined\n) => {\n const [currentPanel, _setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n const setCurrentPanel = useCallback(\n (currentPanel: CalendarPanelType) => {\n _setCurrentPanel(currentPanel);\n onChangePanel?.(currentPanel);\n },\n [onChangePanel]\n );\n\n return {\n currentPanel,\n setCurrentPanel,\n };\n};\n","import { useMemo, useState } from \"react\";\nimport { useDateRangeOnClickDayHandler } from \"../../../../features/date-range/hooks/UseDateRangeOnClickDayHandler\";\nimport { DateRangeCalendarProps } from \"../DateRangeCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { buildDayStateForDateRange } from \"../../../../util/calendar/StateModifier\";\nimport { useInternalPanelState } from \"../../../../features/internal-panel-state/UseInternalPanelState\";\n\nexport const useDateRangeSelection = <T>({\n focusedInput,\n value,\n onValueChange,\n setFocusedInput,\n statePerMonth,\n onChangePanel,\n}: DateRangeCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n const [dateInFocus, setDateInFocus] = useState(() => new Date());\n\n const onClickDay = useDateRangeOnClickDayHandler(\n value,\n onValueChange,\n focusedInput,\n setFocusedInput\n );\n\n const statePerMonthWithSelection = useMemo(\n () =>\n buildDayStateForDateRange(\n statePerMonth,\n value?.startDate,\n value?.endDate\n ),\n [statePerMonth, value?.endDate, value?.startDate]\n );\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelection,\n currentPanel,\n setCurrentPanel,\n setDateInFocus,\n dateInFocus,\n };\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useDateRangeSelection } from \"./hooks/UseDateRangeSelection\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { DateRange } from \"../../../types/DateRange\";\n\nexport type DateRangeFocusedInput = \"startDate\" | \"endDate\" | undefined;\n\nexport interface DateRangeCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T>,\n ValueAndOnValueChangeProps<DateRange> {\n focusedInput?: DateRangeFocusedInput;\n setFocusedInput: (focusedInput: DateRangeFocusedInput) => void;\n}\n\nexport function DateRangeCalendar<T>(props: DateRangeCalendarProps<T>) {\n const dateRangeSelectionProps = useDateRangeSelection(props);\n return (\n <CalendarWithMonthSwitcher<T> {...props} {...dateRangeSelectionProps} />\n );\n}\n\nexport type DateRangeInputCalendarProps<T> = Omit<\n DateRangeCalendarProps<T>,\n | \"startDateInFocus\"\n | \"value\"\n | \"onValueChange\"\n | \"focusedInput\"\n | \"setFocusedInput\"\n | \"theme\"\n | \"currentPanel\"\n | \"setCurrentPanel\"\n>;\n","import { useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../DateRangeCalendar\";\n\nexport const useDateRangeCalendarState = () => {\n const [startDate, setStartDate] = useState<Date | undefined>();\n const [endDate, setEndDate] = useState<Date | undefined>();\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n return {\n startDate,\n setStartDate,\n endDate,\n setEndDate,\n focusedInput,\n setFocusedInput,\n };\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { OnClickDay } from \"../../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport { SingleDateCalendarProps } from \"./SingleDateCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\n\nexport const useSingleDateSelection = <T>({\n onChange,\n value,\n statePerMonth,\n onChangePanel,\n}: SingleDateCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const [dateInFocus, setDateInFocus] = useState(() => value ?? new Date());\n\n const onClickDay: OnClickDay<T> = useCallback(\n (day) => {\n if (onChange) {\n onChange(day.date);\n }\n },\n [onChange]\n );\n\n const statePerMonthWithSelectedDate = useMemo(\n () =>\n value\n ? addDayStateHighlights(statePerMonth, value, [\n \"selected\",\n \"singleSelected\",\n ])\n : statePerMonth,\n [statePerMonth, value]\n );\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelectedDate,\n date: value,\n currentPanel,\n setCurrentPanel,\n dateInFocus,\n setDateInFocus,\n };\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\n\nimport { useSingleDateSelection } from \"./UseSingleDateSelection\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\n\nexport interface SingleDateCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T> {\n value: Date | undefined;\n onChange: (value: Date | undefined) => void;\n}\n\nexport function SingleDateCalendar<T>(props: SingleDateCalendarProps<T>) {\n const singleDateSelectionProps = useSingleDateSelection(props);\n return (\n <CalendarWithMonthSwitcher<T> {...props} {...singleDateSelectionProps} />\n );\n}\n","import { isSameDay } from \"date-fns\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { OnClickDay } from \"../../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport { MultiDateCalendarProps } from \"./MultiDateCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\n\nexport const useMultiDateSelection = <T>({\n onChange,\n value,\n statePerMonth,\n onChangePanel,\n}: MultiDateCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const [dateInFocus, setDateInFocus] = useState(() => new Date());\n\n const onClickDay: OnClickDay<T> = useCallback(\n (day) => {\n if (!onChange) {\n return;\n }\n const isSelected = value && value.find((d) => isSameDay(d, day.date));\n if (value && isSelected) {\n onChange(value.filter((v) => !isSameDay(v, day.date)));\n } else {\n onChange([...(value || []), day.date]);\n }\n },\n [onChange, value]\n );\n const statePerMonthWithSelectedDate = useMemo(() => {\n if (!value) {\n return statePerMonth;\n }\n return value.reduce(\n (stateSum, date) => addDayStateHighlights(stateSum, date, [\"selected\"]),\n statePerMonth\n );\n }, [statePerMonth, value]);\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelectedDate,\n currentPanel,\n setCurrentPanel,\n dateInFocus,\n setDateInFocus,\n };\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useMultiDateSelection } from \"./UseMultiDateSelection\";\nimport { UseInternalPanelStateProps } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\n\nexport interface MultiDateCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T>,\n UseInternalPanelStateProps {\n value?: Array<Date>;\n onChange?: (value: Array<Date>) => void;\n}\n\nexport function MultiDateCalendar<T>(props: MultiDateCalendarProps<T>) {\n const selectionProps = useMultiDateSelection(props);\n return <CalendarWithMonthSwitcher<T> {...props} {...selectionProps} />;\n}\n","import { setWeek } from \"date-fns\";\nimport { enGB } from \"date-fns/locale\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { OnClickDay, OnClickWeek } from \"../../../types/CalendarTypes\";\nimport {\n getWeekForDate,\n WeekData,\n} from \"../../../util/calendar/CalendarDataFactory\";\nimport { addWeekRangeHighlights } from \"../../../util/calendar/StateModifier\";\nimport { SingleWeekCalendarProps } from \"./SingleWeekCalendar\";\n\nexport const useSingleWeekSelection = <T>({\n onChange,\n value,\n statePerMonth,\n onChangePanel,\n locale = enGB,\n}: SingleWeekCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const [dateInFocus, setDateInFocus] = useState(() => {\n const week = getWeekDataFromWeekString(value, locale);\n if (!week) {\n return new Date();\n }\n return week.days[0].date;\n });\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const onClickDay = useCallback<OnClickDay<T>>(\n (day) => {\n if (onChange) {\n onChange(getWeekStringFromWeekData(getWeekForDate(day.date, locale)));\n }\n },\n [locale, onChange]\n );\n const onClickWeek = useCallback<OnClickWeek>(\n (week) => {\n if (onChange) {\n onChange(getWeekStringFromWeekData(week));\n }\n },\n [onChange]\n );\n\n const statePerMonthWithSelection = useMemo(() => {\n const weekData = getWeekDataFromWeekString(value, locale);\n return weekData\n ? addWeekRangeHighlights(statePerMonth, weekData)\n : statePerMonth;\n }, [value, locale, statePerMonth]);\n\n const date = useMemo(() => {\n const week = getWeekDataFromWeekString(value, locale);\n if (!week) {\n return new Date();\n }\n return week.days[0].date;\n }, [locale, value]);\n\n return {\n statePerMonth: statePerMonthWithSelection,\n date,\n dateInFocus,\n setDateInFocus,\n onClickDay,\n onClickWeek,\n currentPanel,\n setCurrentPanel,\n };\n};\n\nconst getWeekStringFromWeekData = (\n week: WeekData | undefined\n): string | undefined => {\n if (!week) {\n return undefined;\n }\n return `${week.endYear}-${week.weekNumber}`;\n};\n\nconst getWeekDataFromWeekString = (\n week: string | undefined,\n locale: Locale\n): WeekData | undefined => {\n if (!week) {\n return undefined;\n }\n const parts = week.split(\"-\");\n const weekNumber = parseInt(parts[1], 10);\n const year = parseInt(parts[0], 10);\n const date = new Date();\n date.setFullYear(year);\n return getWeekForDate(setWeek(date, weekNumber), locale);\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useSingleWeekSelection } from \"./UseSingleWeekSelection\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\n\nexport type SingleWeekValue = string;\n\nexport interface SingleWeekCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T> {\n value: SingleWeekValue | undefined;\n onChange: (value: SingleWeekValue | undefined) => void;\n}\n\nexport function SingleWeekCalendar<T>(props: SingleWeekCalendarProps<T>) {\n const singleWeekSelectionProps = useSingleWeekSelection(props);\n return (\n <CalendarWithMonthSwitcher<T> {...props} {...singleWeekSelectionProps} />\n );\n}\n","import { isSameDay } from \"date-fns\";\n\nexport const addDateIfNotExists = (\n list: Array<Date>,\n date: Date\n): Array<Date> => {\n if (list.filter((item) => isSameDay(item, date)).length >= 1) {\n return list;\n }\n return [...list, date];\n};\n\nexport const removeDateIfExist = (list: Array<Date>, date: Date): Array<Date> =>\n list.filter((item) => !isSameDay(item, date));\n\nexport const listContainsDate = (list: Array<Date>, date: Date): boolean =>\n !!list.find((item) => isSameDay(item, date));\n","import { eachDayOfInterval } from \"date-fns\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useDateRangeOnClickDayHandler } from \"../../../features/date-range/hooks/UseDateRangeOnClickDayHandler\";\nimport { CalendarState, OnClickDay } from \"../../../types/CalendarTypes\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport {\n listContainsDate,\n removeDateIfExist,\n} from \"../../../util/date/DateListTools\";\nimport { DateRangeFocusedInput } from \"../date-range-calendar/DateRangeCalendar\";\nimport { DateRangeExclusionCalendarProps } from \"./DateRangeExclusionCalendar\";\nimport { CalendarWithMonthSwitcherProps } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useInternalPanelState } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { DateRange } from \"../../../types/DateRange\";\n\nexport const useDateRangeExclusionSelection = <T>({\n value,\n onValueChange,\n statePerMonth,\n onChangePanel,\n}: DateRangeExclusionCalendarProps<T>): CalendarWithMonthSwitcherProps<T> => {\n const [dateRange, setDateRange] = useState<DateRange | undefined>();\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n const { currentPanel, setCurrentPanel } =\n useInternalPanelState(onChangePanel);\n\n const [dateInFocus, setDateInFocus] = useState(\n () => (focusedInput && value?.[focusedInput]) ?? new Date()\n );\n\n const onChangeHandler = useCallback(\n (value: DateRange) => {\n setDateRange(value);\n const { startDate, endDate } = value;\n if (onValueChange) {\n if (startDate && endDate) {\n const dates = eachDayOfInterval({ start: startDate, end: endDate });\n onValueChange(dates);\n } else if (startDate) {\n onValueChange([startDate]);\n } else if (endDate) {\n onValueChange([endDate]);\n }\n }\n },\n [onValueChange]\n );\n\n const onClickDayRange = useDateRangeOnClickDayHandler(\n dateRange,\n onChangeHandler,\n focusedInput,\n setFocusedInput\n );\n\n const onClickDay: OnClickDay<T> = useCallback(\n (day, userData, ev) => {\n if (onValueChange) {\n if (ev.ctrlKey || ev.metaKey) {\n if (!value) {\n onValueChange([day.date]);\n } else if (listContainsDate(value, day.date)) {\n onValueChange(removeDateIfExist(value, day.date));\n } else {\n onValueChange([...value, day.date]);\n }\n } else {\n onClickDayRange(day, userData, ev);\n }\n }\n },\n [onValueChange, onClickDayRange, value]\n );\n const statePerMonthWithSelectedDate = useMemo(() => {\n return addHighlighting(statePerMonth, value);\n }, [statePerMonth, value]);\n\n return {\n onClickDay,\n statePerMonth: statePerMonthWithSelectedDate,\n currentPanel,\n setCurrentPanel,\n dateInFocus,\n setDateInFocus,\n };\n};\n\nconst addHighlighting = (\n statePerMonth: CalendarState | undefined,\n dateList: Array<Date> | undefined\n): CalendarState | undefined => {\n if (!dateList) {\n return statePerMonth;\n }\n return dateList.reduce((statePerMonth, date) => {\n return addDayStateHighlights(statePerMonth, date, [\"selected\"]);\n }, statePerMonth);\n};\n","import * as React from \"react\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { useDateRangeExclusionSelection } from \"./UseDateRangeExclusionSelection\";\nimport { UseInternalPanelStateProps } from \"../../../features/internal-panel-state/UseInternalPanelState\";\nimport { InternalPanelAndFocusStateProps } from \"../../../types/InternalPanelAndFocusStateProps\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\n\nexport interface DateRangeExclusionCalendarProps<T>\n extends InternalPanelAndFocusStateProps<T>,\n UseInternalPanelStateProps,\n ValueAndOnValueChangeProps<Array<Date>> {}\n\nexport function DateRangeExclusionCalendar<T>(\n props: DateRangeExclusionCalendarProps<T>\n) {\n const selectionProps = useDateRangeExclusionSelection(props);\n return <CalendarWithMonthSwitcher<T> {...props} {...selectionProps} />;\n}\n","import { PopoverPlacement } from \"@stenajs-webui/tooltip\";\n\nexport const defaultPopoverPlacement: PopoverPlacement = \"bottom\";\n","import { useTippyInstance } from \"@stenajs-webui/tooltip\";\nimport { useCallback } from \"react\";\n\nexport const useCalendarPopoverUpdater = () => {\n const [tippyRef, tippyInstanceRef] = useTippyInstance();\n\n const onChangePanel = useCallback(() => {\n tippyInstanceRef.current?.popperInstance?.update();\n }, [tippyInstanceRef]);\n\n return {\n onChangePanel,\n tippyRef,\n };\n};\n","import { useCallback, useState } from \"react\";\n\nexport const useDateInput = (\n onChange?: (date: Date | undefined) => void,\n onClose?: () => void,\n openOnMount?: boolean\n) => {\n const [showingCalendar, setShowingCalendar] = useState(openOnMount || false);\n\n const showCalendar = useCallback(() => {\n setShowingCalendar(true);\n return true;\n }, [setShowingCalendar]);\n\n const hideCalendar = useCallback(() => {\n setShowingCalendar(false);\n if (onClose) {\n onClose();\n }\n }, [setShowingCalendar, onClose]);\n\n const onSelectDate = useCallback(\n (date: Date | undefined) => {\n if (onChange) {\n onChange(date);\n }\n setTimeout(hideCalendar, 150);\n },\n [onChange, hideCalendar]\n );\n\n return {\n showCalendar,\n hideCalendar,\n showingCalendar,\n onSelectDate,\n };\n};\n","export const defaultMaxDate = \"2999-12-31\";\n","import { Box, Row } from \"@stenajs-webui/core\";\nimport { TextInput, TextInputProps } from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { format } from \"date-fns\";\nimport * as React from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport { useCalendarPopoverUpdater } from \"../../../features/internal-panel-state/UseCalendarPopoverUpdater\";\nimport { DateFormats } from \"../../../util/date/DateFormats\";\nimport { SingleDateCalendar } from \"../../calendar-types/single-date-calendar/SingleDateCalendar\";\nimport {\n CalendarTheme,\n defaultCalendarTheme,\n} from \"../../calendar/CalendarTheme\";\nimport { DateTextInputCalendarProps } from \"../date-text-input/DateTextInput\";\nimport { useDateInput } from \"./UseDateInput\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\nimport { FlatButton, stenaCalendar } from \"@stenajs-webui/elements\";\n\nexport interface DateInputProps<T = {}> extends OptionalMinMaxDatesAsString {\n /** The current value */\n value?: Date;\n /** onChange handler for when the user selects a date. */\n onChange?: (date: Date | undefined) => void;\n /** Variant of the input field. */\n variant?: TextInputProps[\"variant\"];\n /** If true, calendar will be open when component mounts. */\n openOnMount?: boolean;\n /** Is invoked when user closes the calendar popup. */\n onClose?: () => void;\n /**\n * The date format in the input field. See date-fns docs.\n * @default YYYY-MM-dd\n */\n displayFormat?: string;\n /**\n * Placeholder when no date has been selected.\n * @default Enter date\n */\n placeholder?: string;\n /**\n * Portal target, HTML element. If not set, portal is not used.\n */\n portalTarget?: HTMLElement | null;\n /**\n * Z-index of the calendar overlay.\n * @default 100\n */\n zIndex?: number;\n /**\n * Width of the input element.\n * * @default 125px\n */\n width?: string;\n /**\n * The calendar theme to use.\n */\n calendarTheme?: CalendarTheme;\n /** Props to be passed to Calendar, see SingleDateCalendar. */\n calendarProps?: DateTextInputCalendarProps<T>;\n /**\n * Disables the TextInput, Calendar and Popover.\n */\n disabled?: boolean;\n}\n\nexport const DateInput: React.FC<DateInputProps> = ({\n displayFormat = DateFormats.fullDate,\n placeholder = \"Enter date\",\n value,\n zIndex = 100,\n calendarTheme = defaultCalendarTheme,\n calendarProps,\n openOnMount,\n onClose,\n onChange,\n portalTarget,\n variant,\n width,\n minDate,\n maxDate = defaultMaxDate,\n disabled,\n}) => {\n const { hideCalendar, showingCalendar, onSelectDate, showCalendar } =\n useDateInput(onChange, onClose, openOnMount);\n\n const { tippyRef, onChangePanel } = useCalendarPopoverUpdater();\n\n return (\n <Box width={width}>\n <Popover\n arrow={false}\n lazy\n visible={showingCalendar}\n onClickOutside={hideCalendar}\n placement={defaultPopoverPlacement}\n zIndex={zIndex}\n appendTo={portalTarget ?? \"parent\"}\n tippyRef={tippyRef}\n disabled={disabled}\n content={\n <SingleDateCalendar\n {...calendarProps}\n onChange={onSelectDate}\n value={value}\n theme={calendarTheme}\n onChangePanel={onChangePanel}\n minDate={minDate}\n maxDate={maxDate}\n />\n }\n >\n <TextInput\n type={\"date\"}\n contentRight={\n <Row alignItems={\"center\"}>\n <FlatButton\n size={\"small\"}\n disabled={disabled}\n leftIcon={stenaCalendar}\n onClick={showCalendar}\n />\n </Row>\n }\n onFocus={showCalendar}\n onClickRight={showCalendar}\n value={value ? format(value, displayFormat) : \"\"}\n placeholder={placeholder}\n size={9}\n disabled={disabled}\n autoFocus={openOnMount}\n variant={variant}\n min={minDate}\n max={maxDate}\n />\n </Popover>\n </Box>\n );\n};\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { DayData } from \"../../../../util/calendar/CalendarDataFactory\";\nimport { isAfter } from \"date-fns\";\nimport { DateRange } from \"../../../../types/DateRange\";\n\nexport const useDateRangeInput = (\n value: DateRange | undefined,\n onValueChange: ((dateRange: DateRange) => void) | undefined\n) => {\n const startDateInputRef = useRef<HTMLInputElement>(null);\n const endDateInputRef = useRef<HTMLInputElement>(null);\n\n const [showingCalendar, setShowingCalendar] = useState(false);\n const [focusedInput, setFocusedInput] = useState<\n DateRangeFocusedInput | undefined\n >(undefined);\n\n const showCalendarStartDate = useCallback(() => {\n setFocusedInput(\"startDate\");\n setShowingCalendar(true);\n return true;\n }, [setFocusedInput, setShowingCalendar]);\n\n const showCalendarEndDate = useCallback(() => {\n setFocusedInput(\"endDate\");\n setShowingCalendar(true);\n return true;\n }, [setFocusedInput, setShowingCalendar]);\n\n const hideCalendar = useCallback(() => {\n setShowingCalendar(false);\n }, [setShowingCalendar]);\n\n const onClickDay = useCallback(\n (day: DayData) => {\n if (focusedInput === \"startDate\") {\n onValueChange?.({\n startDate: day.date,\n endDate: value?.endDate,\n });\n if (!value?.endDate) {\n setFocusedInput(\"endDate\");\n endDateInputRef.current && endDateInputRef.current.focus();\n } else {\n setTimeout(hideCalendar, 150);\n }\n } else if (focusedInput === \"endDate\") {\n onValueChange?.({\n startDate: value?.startDate,\n endDate: day.date,\n });\n if (!value?.startDate) {\n setFocusedInput(\"startDate\");\n startDateInputRef.current && startDateInputRef.current.focus();\n } else {\n setTimeout(hideCalendar, 150);\n }\n }\n },\n [focusedInput, onValueChange, setFocusedInput, hideCalendar, value]\n );\n\n const startDateIsAfterEnd = useMemo(\n () =>\n value?.startDate &&\n value?.endDate &&\n isAfter(value.startDate, value.endDate),\n [value?.startDate, value?.endDate]\n );\n\n return {\n showingCalendar,\n hideCalendar,\n showCalendarEndDate,\n showCalendarStartDate,\n focusedInput,\n setFocusedInput,\n startDateInputRef,\n endDateInputRef,\n onClickDay,\n startDateIsAfterEnd,\n };\n};\n","import { Row, Space } from \"@stenajs-webui/core\";\nimport { TextInput, ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { format } from \"date-fns\";\nimport * as React from \"react\";\nimport { useMemo, useState } from \"react\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport { DateFormats } from \"../../../util/date/DateFormats\";\nimport { DateRangeInputCalendarProps } from \"../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport {\n CalendarTheme,\n defaultCalendarTheme,\n} from \"../../calendar/CalendarTheme\";\nimport { useDateRangeInput } from \"./hooks/UseDateRangeInput\";\nimport { Icon, stenaCalendar } from \"@stenajs-webui/elements\";\nimport { faLongArrowAltRight } from \"@fortawesome/free-solid-svg-icons/faLongArrowAltRight\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { CalendarPanelType } from \"../../../features/calendar-with-month-year-pickers/CalendarPanelType\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { buildDayStateForDateRange } from \"../../../util/calendar/StateModifier\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { DateRange } from \"../../../types/DateRange\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\n\nexport interface DateRangeInputProps<T>\n extends OptionalMinMaxDatesAsString,\n ValueAndOnValueChangeProps<DateRange> {\n /**\n * The date format in the input field. See date-fns docs.\n * @default YYYY-MM-dd\n */\n displayFormat?: string;\n\n /**\n * Placeholder for start date field when no date has been selected.\n * @default Start date\n */\n placeholderStartDate?: string;\n\n /**\n * Placeholder for end date field when no date has been selected.\n * @default End date\n */\n placeholderEndDate?: string;\n /**\n * Portal target, HTML element. If not set, portal is not used.\n */\n portalTarget?: HTMLElement | null;\n\n /**\n * Z-index of the calendar overlay.\n * @default 100\n */\n zIndex?: number;\n\n /**\n * Width of the input element.\n * * @default 125px\n */\n width?: string;\n\n /**\n * The calendar theme to use.\n */\n calendarTheme?: CalendarTheme;\n\n /** Props to be passed to DateRangeCalendar, see DateRangeCalendar. */\n calendarProps?: DateRangeInputCalendarProps<T>;\n\n /**\n * Disables the Popover and both TextInputs.\n */\n disabled?: boolean;\n}\n\n/**\n * @deprecated Please use DateRangeDualTextInput instead.\n */\nexport function DateRangeInput<T>({\n displayFormat = DateFormats.fullDate,\n placeholderStartDate = \"Start date\",\n placeholderEndDate = \"End date\",\n portalTarget,\n value,\n onValueChange,\n zIndex = 100,\n width,\n calendarTheme = defaultCalendarTheme,\n calendarProps,\n minDate,\n maxDate = defaultMaxDate,\n disabled,\n}: DateRangeInputProps<T>): React.ReactElement<DateRangeInputProps<T>> {\n const [currentPanel, setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n const {\n hideCalendar,\n showCalendarEndDate,\n showCalendarStartDate,\n showingCalendar,\n focusedInput,\n startDateInputRef,\n endDateInputRef,\n onClickDay,\n startDateIsAfterEnd,\n } = useDateRangeInput(value, onValueChange);\n\n const [dateInFocus, setDateInFocus] = useState(\n () => (focusedInput && value?.[focusedInput]) ?? new Date()\n );\n const statePerMonth = useMemo(\n () =>\n buildDayStateForDateRange(undefined, value?.startDate, value?.endDate),\n [value]\n );\n\n return (\n <Popover\n arrow={false}\n lazy\n disabled={disabled}\n visible={showingCalendar}\n zIndex={zIndex}\n placement={defaultPopoverPlacement}\n appendTo={portalTarget ?? \"parent\"}\n onClickOutside={hideCalendar}\n content={\n <CalendarWithMonthSwitcher\n {...calendarProps}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n statePerMonth={statePerMonth}\n theme={calendarTheme}\n onClickDay={onClickDay}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n minDate={minDate}\n maxDate={maxDate}\n />\n }\n >\n <Row alignItems={\"center\"}>\n <TextInput\n iconLeft={stenaCalendar}\n onFocus={showCalendarStartDate}\n value={value?.startDate ? format(value.startDate, displayFormat) : \"\"}\n placeholder={placeholderStartDate}\n width={width}\n disabled={disabled}\n inputRef={startDateInputRef}\n size={9}\n variant={startDateIsAfterEnd ? \"error\" : undefined}\n />\n <Space />\n <Icon\n icon={faLongArrowAltRight}\n color={cssColor(\"--lhds-color-ui-500\")}\n size={14}\n />\n <Space />\n <TextInput\n iconLeft={stenaCalendar}\n onFocus={showCalendarEndDate}\n value={value?.endDate ? format(value.endDate, displayFormat) : \"\"}\n placeholder={placeholderEndDate}\n width={width}\n disabled={disabled}\n inputRef={endDateInputRef}\n size={9}\n variant={startDateIsAfterEnd ? \"error\" : undefined}\n />\n </Row>\n </Popover>\n );\n}\n","import { Box, Omit, Row } from \"@stenajs-webui/core\";\nimport { FlatButton, stenaCalendar } from \"@stenajs-webui/elements\";\nimport { TextInput, TextInputProps } from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { format, isValid, parse } from \"date-fns\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport { useCalendarPopoverUpdater } from \"../../../features/internal-panel-state/UseCalendarPopoverUpdater\";\nimport { DateFormats } from \"../../../util/date/DateFormats\";\nimport {\n SingleDateCalendar,\n SingleDateCalendarProps,\n} from \"../../calendar-types/single-date-calendar/SingleDateCalendar\";\nimport {\n CalendarTheme,\n defaultCalendarTheme,\n} from \"../../calendar/CalendarTheme\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\n\nexport type DateTextInputCalendarProps<T> = Omit<\n SingleDateCalendarProps<T>,\n \"value\" | \"onChange\" | \"theme\"\n>;\n\nexport interface DateTextInputProps<T>\n extends Omit<TextInputProps, \"onChange\" | \"theme\" | \"min\" | \"max\">,\n OptionalMinMaxDatesAsString {\n /** Props to be passed to Calendar, see SingleDateCalendar. */\n calendarProps?: DateTextInputCalendarProps<T>;\n /** Close calendar when date is selected, @default true */\n closeOnCalendarSelectDate?: boolean;\n /** Valid date format, @default YYYY-MM-DD */\n dateFormat?: string;\n /** Make the icon not clickable, @default false */\n disableCalender?: boolean;\n /** Show or hide the calender icon, @default false */\n hideCalenderIcon?: boolean;\n /** Placeholder for the input, @default YYYY-MM-DD */\n placeholder?: string;\n /** Portal target, HTML element. If not set, portal is not used. */\n portalTarget?: HTMLElement | null;\n /** Z-index of the calendar overlay, @default 100 */\n zIndex?: number;\n /** The date text input theme to use. */\n calendarTheme?: CalendarTheme;\n}\n\nexport const DateTextInput: React.FC<DateTextInputProps<{}>> = ({\n calendarProps,\n closeOnCalendarSelectDate = true,\n dateFormat = DateFormats.fullDate,\n disableCalender = false,\n onValueChange,\n placeholder = \"yyyy-mm-dd\",\n portalTarget,\n value,\n width = \"130px\",\n zIndex = 100,\n calendarTheme = defaultCalendarTheme,\n hideCalenderIcon = false,\n minDate,\n maxDate = defaultMaxDate,\n variant,\n ...props\n}) => {\n const [open, setOpen] = useState(false);\n const { tippyRef, onChangePanel } = useCalendarPopoverUpdater();\n\n const toggleCalendar = useCallback(() => {\n setOpen(!open);\n }, [setOpen, open]);\n\n const hideCalendar = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const onValueChangeHandler = useCallback(\n (value: string) => {\n if (onValueChange) {\n onValueChange(value);\n }\n },\n [onValueChange]\n );\n\n const onCalendarSelectDate = useCallback(\n (date: Date | undefined) => {\n if (date) {\n onValueChangeHandler(format(date, dateFormat));\n if (closeOnCalendarSelectDate) {\n setTimeout(() => setOpen(!open), 200);\n }\n }\n },\n [onValueChangeHandler, dateFormat, closeOnCalendarSelectDate, setOpen, open]\n );\n\n const inValidInput = !!value && !/^[-/\\\\.0-9]+$/.test(value);\n\n const dateIsValid = !!value && isValid(parse(value, dateFormat, new Date()));\n\n const userInputCorrectLength = !!value && value.length >= dateFormat.length;\n\n const invalid: boolean =\n (userInputCorrectLength && !dateIsValid) || inValidInput;\n\n return (\n <Box width={width}>\n <Popover\n arrow={false}\n lazy\n visible={open}\n zIndex={zIndex}\n appendTo={portalTarget ?? \"parent\"}\n placement={defaultPopoverPlacement}\n onClickOutside={hideCalendar}\n tippyRef={tippyRef}\n content={\n <SingleDateCalendar\n {...calendarProps}\n onChange={onCalendarSelectDate}\n onChangePanel={onChangePanel}\n value={\n value && dateIsValid\n ? parse(value, dateFormat, new Date())\n : undefined\n }\n minDate={minDate}\n maxDate={maxDate}\n theme={calendarTheme}\n />\n }\n >\n <TextInput\n {...props}\n variant={invalid ? \"error\" : variant}\n disableContentPaddingRight\n contentRight={\n !hideCalenderIcon ? (\n <Row alignItems={\"center\"} indent={0.5}>\n <FlatButton\n size={\"small\"}\n disabled={props.disabled}\n leftIcon={stenaCalendar}\n onClick={toggleCalendar}\n />\n </Row>\n ) : undefined\n }\n onValueChange={onValueChangeHandler}\n placeholder={placeholder}\n value={value || \"\"}\n min={minDate}\n max={maxDate}\n size={10}\n />\n </Popover>\n </Box>\n );\n};\n","export interface FormatTimeStringResult {\n time: string;\n success: boolean;\n}\n\nexport const formatHours = (hours: string): string => {\n if (hours === \"\") {\n return \"00\";\n }\n\n const h = parseInt(hours, 10);\n\n if (isNaN(h)) {\n throw new Error(\"Hours is not a number\");\n }\n\n if (h < 0 || h > 23) {\n throw new Error(\"Hours is an invalid number\");\n }\n\n switch (hours.length) {\n case 1:\n return `0${h}`;\n case 2:\n return hours;\n default:\n throw new Error(\"Invalid hour string\");\n }\n};\n\nexport const formatMinutes = (minutes: string): string => {\n if (minutes === \"\") {\n return \"00\";\n }\n\n const m = parseInt(minutes, 10);\n\n if (isNaN(m)) {\n throw new Error(\"Minutes is not a number\");\n }\n\n if (m < 0 || m > 59) {\n throw new Error(\"Minutes is an invalid number\");\n }\n\n switch (minutes.length) {\n case 1:\n return `0${m}`;\n case 2:\n return minutes;\n default:\n throw new Error(\"Invalid minute string\");\n }\n};\n\nexport const formatTimeString = (time: string): FormatTimeStringResult => {\n if (!validUserInput(time)) {\n return { time, success: false };\n }\n\n const arr = time && time.split(/-|:|,|;|[/]|[.]| /); // consider all these chars as user input separator\n if (arr && arr.length === 2) {\n try {\n const hours = formatHours(arr[0]);\n const minutes = formatMinutes(arr[1]);\n return { time: `${hours}:${minutes}`, success: true };\n } catch {\n return { time, success: false };\n }\n } else if (arr && arr.length === 1) {\n let hours = 0;\n let minutes = 0;\n switch (time.length) {\n case 1:\n return { time: `0${time}:00`, success: true };\n case 2:\n const timeNumber = parseInt(arr[0], 10);\n if (timeNumber >= 0 && timeNumber < 24) {\n return { time: `${time}:00`, success: true };\n } else if (timeNumber >= 24 && timeNumber < 59) {\n return { time: `00:${time}`, success: true };\n }\n return { time, success: false };\n case 3:\n minutes = parseInt(time.substr(1, 2), 10);\n if (minutes >= 0 && minutes <= 59) {\n return {\n time: `0${time.substr(0, 1)}:${time.substr(1, 2)}`,\n success: true,\n };\n }\n return { time, success: false };\n case 4:\n hours = parseInt(time.substr(0, 2), 10);\n minutes = parseInt(time.substr(2, 2), 10);\n if (hours < 0 || hours > 23) {\n return { time, success: false };\n }\n if (minutes < 0 || minutes > 59) {\n return { time, success: false };\n }\n return {\n time: `${time.substr(0, 2)}:${time.substr(2, 2)}`,\n success: true,\n };\n default:\n return { time, success: false };\n }\n }\n\n return { time, success: false };\n};\n\nexport const validUserInput = (input: string | undefined): boolean => {\n if (input) {\n return /^[-:.,/; 0-9]+$/.test(input);\n }\n\n return true;\n};\n","import { Omit } from \"@stenajs-webui/core\";\nimport { TextInput, TextInputProps } from \"@stenajs-webui/forms\";\nimport * as React from \"react\";\nimport { ChangeEventHandler, useCallback, useState } from \"react\";\nimport {\n formatTimeString,\n validUserInput,\n} from \"../../../util/time/TimeStringFormatValidator\";\n\nimport { stenaClock } from \"@stenajs-webui/elements\";\n\nexport interface TimeTextInputProps extends Omit<TextInputProps, \"onChange\"> {\n /** Show placeholder when true */\n showPlaceholder?: boolean;\n /** Show icon when true */\n useIcon?: boolean;\n /** Variant of the input field. */\n variant?: TextInputProps[\"variant\"];\n}\n\n/**\n * @deprecated\n */\nexport const TimeTextInput: React.FC<TimeTextInputProps> = ({\n onValueChange,\n showPlaceholder = true,\n useIcon = true,\n value,\n width = \"85px\",\n variant,\n ...props\n}) => {\n const [valid, setValid] = useState(() => validUserInput(value));\n\n const timeFormat = \"hh:mm\";\n\n const onBlur = useCallback(() => {\n if (value) {\n const formattedResult = formatTimeString(value);\n setValid(formattedResult.success);\n if (formattedResult.success) {\n if (onValueChange) {\n onValueChange(formattedResult.time);\n }\n }\n }\n }, [value, onValueChange, setValid]);\n\n const onChangeHandler = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (ev) => {\n const time = ev.target.value;\n const validInput = validUserInput(time);\n\n setValid(validInput && time.length <= timeFormat.length);\n\n if (onValueChange) {\n onValueChange(time);\n }\n },\n [onValueChange, setValid]\n );\n\n return (\n <TextInput\n {...props}\n type={\"time\"}\n variant={!valid ? \"error\" : variant}\n iconLeft={useIcon ? stenaClock : undefined}\n value={value}\n placeholder={showPlaceholder ? timeFormat : undefined}\n onChange={onChangeHandler}\n onBlur={onBlur}\n width={width}\n />\n );\n};\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n Box,\n BoxProps,\n ButtonElementProps,\n Indent,\n Row,\n SeparatorLine,\n} from \"@stenajs-webui/core\";\nimport {\n FlatButton,\n Icon,\n stenaCalendar,\n stenaAngleDown,\n} from \"@stenajs-webui/elements\";\nimport {\n TextInput,\n TextInputBox,\n TextInputBoxProps,\n TextInputProps,\n} from \"@stenajs-webui/forms\";\nimport { debounce } from \"lodash\";\nimport * as React from \"react\";\nimport { FocusEventHandler, useCallback, useMemo, useRef } from \"react\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\nexport interface DualTextInputProps {\n onEsc?: TextInputProps[\"onEsc\"];\n onEnter?: TextInputProps[\"onEnter\"];\n widthLeft?: BoxProps[\"width\"];\n widthRight?: BoxProps[\"width\"];\n valueLeft?: TextInputProps[\"value\"];\n valueRight?: TextInputProps[\"value\"];\n minLeft?: string;\n maxLeft?: string;\n minRight?: string;\n maxRight?: string;\n typeLeft?: TextInputProps[\"type\"];\n typeRight?: TextInputProps[\"type\"];\n separatorIcon?: IconDefinition;\n placeholderLeft?: TextInputProps[\"placeholder\"];\n placeholderRight?: TextInputProps[\"placeholder\"];\n onValueChangeLeft?: TextInputProps[\"onValueChange\"];\n onValueChangeRight?: TextInputProps[\"onValueChange\"];\n onChangeLeft?: TextInputProps[\"onChange\"];\n onChangeRight?: TextInputProps[\"onChange\"];\n onClickLeft?: TextInputProps[\"onClick\"];\n onClickRight?: TextInputProps[\"onClick\"];\n onClickCalendar?: ButtonElementProps[\"onClick\"];\n onClickArrowDown?: ButtonElementProps[\"onClick\"];\n onFocusLeft?: TextInputProps[\"onFocus\"];\n onFocusRight?: TextInputProps[\"onFocus\"];\n onBlur?: () => void;\n onBlurLeft?: TextInputProps[\"onBlur\"];\n onBlurRight?: TextInputProps[\"onBlur\"];\n inputRefLeft?: TextInputProps[\"inputRef\"];\n inputRefRight?: TextInputProps[\"inputRef\"];\n variantLeft?: TextInputProps[\"variant\"];\n variantRight?: TextInputProps[\"variant\"];\n variant?: TextInputBoxProps[\"variant\"];\n showPresets?: false;\n autoFocusLeft?: boolean;\n autoFocusRight?: boolean;\n disabled?: boolean;\n}\n\nexport const DualTextInput: React.FC<DualTextInputProps> = ({\n autoFocusLeft,\n autoFocusRight,\n onEsc,\n onEnter,\n onValueChangeLeft,\n onValueChangeRight,\n separatorIcon,\n placeholderLeft,\n placeholderRight,\n typeLeft,\n typeRight,\n onChangeLeft,\n onChangeRight,\n valueLeft,\n valueRight,\n minLeft,\n maxLeft,\n minRight,\n maxRight,\n onClickLeft,\n onClickRight,\n onClickCalendar,\n onClickArrowDown,\n onBlurLeft,\n onBlurRight,\n onFocusLeft,\n onFocusRight,\n inputRefLeft,\n inputRefRight,\n variant,\n variantLeft,\n variantRight,\n onBlur,\n showPresets,\n widthLeft,\n widthRight,\n disabled,\n}) => {\n const focusCounter = useRef(0);\n\n const tryTriggerOnBlur = useMemo(\n () =>\n debounce((focusCounter: number) => {\n if (focusCounter === 0) {\n onBlur?.();\n }\n }, 10),\n [onBlur]\n );\n\n const focusLeftHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current++;\n tryTriggerOnBlur(focusCounter.current);\n if (onFocusLeft) {\n onFocusLeft(ev);\n }\n },\n [onFocusLeft, focusCounter, tryTriggerOnBlur]\n );\n\n const focusRightHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current++;\n tryTriggerOnBlur(focusCounter.current);\n if (onFocusRight) {\n onFocusRight(ev);\n }\n },\n [onFocusRight, focusCounter, tryTriggerOnBlur]\n );\n\n const blurLeftHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current--;\n tryTriggerOnBlur(focusCounter.current);\n if (onBlurLeft) {\n onBlurLeft(ev);\n }\n },\n [onBlurLeft, focusCounter, tryTriggerOnBlur]\n );\n\n const blurRightHandler = useCallback<FocusEventHandler<HTMLInputElement>>(\n (ev) => {\n focusCounter.current--;\n tryTriggerOnBlur(focusCounter.current);\n if (onBlurRight) {\n onBlurRight(ev);\n }\n },\n [onBlurRight, focusCounter, tryTriggerOnBlur]\n );\n\n return (\n <Box>\n <TextInputBox\n disableContentPaddingRight\n disabled={disabled}\n variant={variant}\n contentRight={\n <Row alignItems={\"center\"}>\n <Indent num={0.5}>\n <FlatButton\n leftIcon={stenaCalendar}\n onClick={onClickCalendar}\n disabled={disabled}\n size={\"small\"}\n />\n </Indent>\n\n {showPresets ? (\n <>\n <Row height={\"22px\"}>\n <SeparatorLine vertical />\n </Row>\n\n <Indent num={0.5}>\n <FlatButton\n leftIcon={stenaAngleDown}\n onClick={onClickArrowDown}\n disabled={disabled}\n size={\"small\"}\n />\n </Indent>\n </>\n ) : null}\n </Row>\n }\n >\n <Box width={widthLeft}>\n <TextInput\n onEsc={onEsc}\n onEnter={onEnter}\n onClick={onClickLeft}\n disabled={disabled}\n hideBorder\n placeholder={placeholderLeft}\n value={valueLeft}\n onValueChange={onValueChangeLeft}\n onChange={onChangeLeft}\n onBlur={blurLeftHandler}\n onFocus={focusLeftHandler}\n inputRef={inputRefLeft}\n variant={variantLeft}\n type={typeLeft}\n autoFocus={autoFocusLeft}\n min={minLeft}\n max={maxLeft}\n />\n </Box>\n <Row indent={0.5} alignItems={\"center\"} justifyContent={\"center\"}>\n <Icon\n icon={separatorIcon}\n size={12}\n color={cssColor(\"--lhds-color-ui-500\")}\n />\n </Row>\n <Box width={widthRight}>\n <TextInput\n onEsc={onEsc}\n onEnter={onEnter}\n onClick={onClickRight}\n disabled={disabled}\n hideBorder\n placeholder={placeholderRight}\n value={valueRight}\n onValueChange={onValueChangeRight}\n onChange={onChangeRight}\n onBlur={blurRightHandler}\n onFocus={focusRightHandler}\n inputRef={inputRefRight}\n variant={variantRight}\n type={typeRight}\n autoFocus={autoFocusRight}\n min={minRight}\n max={maxRight}\n />\n </Box>\n </TextInputBox>\n </Box>\n );\n};\n","import { parseIntElseUndefined } from \"@stenajs-webui/core\";\nimport { formatHours, formatMinutes } from \"./TimeStringFormatValidator\";\n\nexport const transformNumberTimeToString = (\n time: number | undefined | null\n): string | undefined => {\n if (time == null) {\n return undefined;\n }\n const timeStr = time.toString();\n if (timeStr.length === 3) {\n return `${timeStr.substr(0, 1)}:${timeStr.substr(1, 2)}`;\n }\n if (timeStr.length === 4) {\n return `${timeStr.substr(0, 2)}:${timeStr.substr(2, 2)}`;\n }\n if (timeStr.length === 2) {\n return `0:${timeStr}`;\n }\n if (timeStr.length === 1) {\n return `0:0${timeStr}`;\n }\n throw new Error(\"Invalid time number.\");\n};\n\nexport const transformTimeStringToNumber = (\n time: string | undefined | null\n): number | null => {\n if (time == null) {\n throw new Error(\"Time is not set.\");\n }\n if (time === \"\") {\n throw new Error(\"Time is empty.\");\n }\n const parts = time.split(\":\");\n if (parts.length !== 2) {\n throw new Error(\"Invalid time.\");\n }\n\n if (parts[1].length !== 2) {\n throw new Error(\"Invalid time.\");\n }\n\n if (parts[0].length < 1 || parts[0].length > 2) {\n throw new Error(\"Invalid time.\");\n }\n\n const hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n\n if (isNaN(hours)) {\n throw new Error(\"Invalid time.\");\n }\n if (isNaN(minutes)) {\n throw new Error(\"Invalid time.\");\n }\n if (hours < 0 || hours > 23) {\n throw new Error(\"Invalid time.\");\n }\n if (minutes < 0 || minutes > 59) {\n throw new Error(\"Invalid time.\");\n }\n return hours * 100 + minutes;\n};\n\nexport const isValidTimeString = (time: string | undefined): boolean => {\n try {\n transformTimeStringToNumber(time);\n return true;\n } catch (e) {\n return false;\n }\n};\n\nexport const getHoursAndMinutesFromTimeString = (\n value: string | undefined\n): {\n hour: number | undefined;\n minute: number | undefined;\n} => {\n if (value && isValidTimeString(value)) {\n const p = value.split(\":\");\n return {\n hour: parseIntElseUndefined(p[0]),\n minute: parseIntElseUndefined(p[1]),\n };\n }\n return {\n hour: undefined,\n minute: undefined,\n };\n};\n\nexport const transformTimeInDateToTimeString = (date: Date): string =>\n `${formatHours(String(date.getHours()))}:${formatMinutes(\n String(date.getMinutes())\n )}`;\n","import { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, PrimaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { MutableRefObject, RefObject, useEffect, useRef } from \"react\";\n\nexport interface TimePickerCellProps {\n item: number;\n selected?: boolean;\n onClick: (label: number) => void;\n columnRef: RefObject<HTMLDivElement>;\n canScrollRef: MutableRefObject<boolean>;\n}\n\nexport const TimePickerCell: React.FC<TimePickerCellProps> = ({\n onClick,\n item,\n selected,\n columnRef,\n canScrollRef,\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(\n function scrollToSelectedItem() {\n if (\n selected &&\n columnRef.current &&\n ref.current &&\n canScrollRef.current\n ) {\n const targetScroll = ref.current.scrollHeight * Math.max(item - 2, 0);\n columnRef.current.scrollTo(0, targetScroll);\n canScrollRef.current = false;\n }\n },\n [columnRef, item, selected, canScrollRef]\n );\n\n return (\n <Row\n width={\"64px\"}\n justifyContent={\"center\"}\n spacing={0.5}\n indent={0.5}\n ref={ref}\n >\n {selected ? (\n <PrimaryButton\n label={String(item)}\n onClick={() => onClick && onClick(item)}\n />\n ) : (\n <FlatButton\n label={String(item)}\n onClick={() => onClick && onClick(item)}\n />\n )}\n </Row>\n );\n};\n","import { Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { MutableRefObject, useRef } from \"react\";\nimport styles from \"./TimePicker.module.css\";\nimport { TimePickerCell } from \"./TimePickerCell\";\n\ninterface Props {\n items: Array<number>;\n onClick: (item: number) => void;\n selectedItem: number | undefined;\n canScrollRef: MutableRefObject<boolean>;\n}\n\nexport const TimePickerColumn: React.FC<Props> = ({\n onClick,\n items,\n selectedItem,\n canScrollRef,\n}) => {\n const columnRef = useRef<HTMLDivElement>(null);\n\n return (\n <Column className={styles.timePickerColumn} ref={columnRef}>\n {items.map((item) => (\n <TimePickerCell\n key={item}\n item={item}\n onClick={onClick}\n selected={item === selectedItem}\n columnRef={columnRef}\n canScrollRef={canScrollRef}\n />\n ))}\n </Column>\n );\n};\n","import { Indent, Row } from \"@stenajs-webui/core\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { range } from \"lodash\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n formatHours,\n formatMinutes,\n} from \"../../util/time/TimeStringFormatValidator\";\nimport { getHoursAndMinutesFromTimeString } from \"../../util/time/TimeTransformer\";\nimport styles from \"./TimePicker.module.css\";\nimport { TimePickerColumn } from \"./TimePickerColumn\";\n\nexport interface TimePickerProps extends ValueAndOnValueChangeProps<string> {}\n\nconst hours = range(0, 24);\nconst minutes = range(0, 60);\n\nexport const TimePicker: React.FC<TimePickerProps> = ({\n value,\n onValueChange,\n}) => {\n const canScrollRef = useRef(true);\n const [hour, setHour] = useState<number | undefined>(undefined);\n const [minute, setMinute] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (value) {\n const { minute, hour } = getHoursAndMinutesFromTimeString(value);\n setHour(hour);\n setMinute(minute);\n }\n }, [value]);\n\n const onClickHour = useCallback(\n (h: number) => {\n setHour(h);\n onValueChange?.(\n `${formatHours(String(h ?? 0))}:${formatMinutes(String(minute ?? 0))}`\n );\n },\n [minute, onValueChange]\n );\n\n const onClickMinutes = useCallback(\n (m: number) => {\n setMinute(m);\n onValueChange?.(\n `${formatHours(String(hour ?? 0))}:${formatMinutes(String(m ?? 0))}`\n );\n },\n [hour, onValueChange]\n );\n\n return (\n <Row className={styles.timePicker}>\n <TimePickerColumn\n items={hours}\n onClick={onClickHour}\n selectedItem={hour}\n canScrollRef={canScrollRef}\n />\n <Indent />\n <TimePickerColumn\n items={minutes}\n onClick={onClickMinutes}\n selectedItem={minute}\n canScrollRef={canScrollRef}\n />\n </Row>\n );\n};\n","import { RefObject, useEffect } from \"react\";\n\nexport const useDateRangeEffects = (\n date: Date | undefined | null,\n setDateInFocus: (date: Date) => void,\n dateInputRef: RefObject<HTMLInputElement>\n) => {\n useEffect(\n function moveFocusedDateWhenDateChanges() {\n if (date) {\n setDateInFocus(date);\n }\n },\n [date, setDateInFocus]\n );\n\n useEffect(\n function updateDateFieldWhenValueChanges() {\n if (dateInputRef.current) {\n if (date) {\n dateInputRef.current.valueAsDate = new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())\n );\n } else {\n dateInputRef.current.valueAsDate = null;\n }\n }\n },\n [date, dateInputRef]\n );\n};\n","import { ChangeEvent, RefObject, useCallback } from \"react\";\nimport { getHoursAndMinutesFromTimeString } from \"../../../../util/time/TimeTransformer\";\nimport { DateTimeInputProps } from \"../DateTimeInput\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useDateRangeHandlers = (\n date: Date | undefined | null,\n onValueChange: DateTimeInputProps[\"onValueChange\"],\n {\n setDateInFocus,\n showCalendarInternal,\n hideCalendarInternal,\n setFirstFocusedInput,\n setCurrentPanel,\n localTime,\n setLocalTime,\n localDate,\n setLocalDate,\n }: UseInputStatesResult,\n dateInputRef: RefObject<HTMLInputElement>\n) => {\n const onChangeDate = useCallback(\n (incomingDate: Date | null) => {\n if (!incomingDate) {\n return;\n }\n const newDate = new Date(incomingDate);\n\n if (date) {\n // Full date is available\n\n newDate.setHours(date.getHours());\n newDate.setMinutes(date.getMinutes());\n\n onValueChange?.(newDate);\n setLocalDate(undefined);\n } else if (localTime) {\n // Only time has been selected\n const { minute, hour } = getHoursAndMinutesFromTimeString(localTime);\n\n newDate.setHours(hour ?? 0);\n newDate.setMinutes(minute ?? 0);\n\n onValueChange?.(newDate);\n setLocalDate(undefined);\n } else {\n // Nothing has been selected\n setLocalDate(newDate);\n }\n setDateInFocus(newDate);\n if (dateInputRef.current) {\n dateInputRef.current.valueAsDate = newDate;\n }\n },\n [date, dateInputRef, localTime, onValueChange, setDateInFocus, setLocalDate]\n );\n\n const onChangeTime = useCallback(\n (time: string) => {\n if (!time) {\n return;\n }\n\n if (date) {\n // Full date is available\n const newTime = getHoursAndMinutesFromTimeString(time);\n const newDate = new Date(date);\n\n newDate.setHours(newTime.hour || 0);\n newDate.setMinutes(newTime.minute || 0);\n\n onValueChange?.(newDate);\n setLocalTime(undefined);\n } else if (localDate) {\n // Only date has already been selected\n const newTime = getHoursAndMinutesFromTimeString(time);\n const newDate = new Date(localDate);\n\n newDate.setHours(newTime.hour || 0);\n newDate.setMinutes(newTime.minute || 0);\n\n onValueChange?.(newDate);\n setLocalTime(undefined);\n } else {\n // Nothing has been selected\n setLocalTime(time);\n }\n },\n [onValueChange, date, localDate, setLocalTime]\n );\n\n const inputLeftChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (ev.target.value[0] !== \"0\") {\n onChangeDate(ev.target.valueAsDate);\n }\n },\n [onChangeDate]\n );\n\n const inputRightChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => onChangeTime(ev.target.value),\n [onChangeTime]\n );\n\n const showCalendar = useCallback(() => {\n if (date) {\n setDateInFocus(date);\n } else {\n setDateInFocus(new Date());\n }\n setCurrentPanel(\"calendar\");\n showCalendarInternal();\n }, [date, setCurrentPanel, showCalendarInternal, setDateInFocus]);\n\n const hideCalendar = useCallback(() => {\n setFirstFocusedInput(undefined);\n hideCalendarInternal();\n }, [setFirstFocusedInput, hideCalendarInternal]);\n\n return {\n inputLeftChangeHandler,\n inputRightChangeHandler,\n hideCalendar,\n showCalendar,\n onChangeTime,\n onChangeDate,\n };\n};\n","import { useBoolean } from \"@stenajs-webui/core\";\nimport { useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { CalendarPanelType } from \"../../../../features/calendar-with-month-year-pickers/CalendarPanelType\";\n\nexport type UseInputStatesResult = ReturnType<typeof useInputStates>;\n\nexport const useInputStates = (date: Date | undefined | null) => {\n const [localDate, setLocalDate] = useState<Date | undefined>(undefined);\n const [localTime, setLocalTime] = useState<string | undefined>(undefined);\n\n const [isCalendarVisible, showCalendarInternal, hideCalendarInternal] =\n useBoolean(false);\n\n const [isTimePickerVisible, showTimePicker, hideTimePicker] =\n useBoolean(false);\n\n const [firstFocusedInput, setFirstFocusedInput] = useState<\n DateRangeFocusedInput | undefined\n >(undefined);\n\n const [dateInFocus, setDateInFocus] = useState<Date>(\n () => date ?? new Date()\n );\n\n const [currentPanel, setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n return {\n isCalendarVisible,\n showCalendarInternal,\n hideCalendarInternal,\n firstFocusedInput,\n setFirstFocusedInput,\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n isTimePickerVisible,\n showTimePicker,\n hideTimePicker,\n localDate,\n setLocalDate,\n localTime,\n setLocalTime,\n };\n};\n","import * as React from \"react\";\nimport { RefObject, useCallback } from \"react\";\nimport { DayData } from \"../../../../util/calendar/CalendarDataFactory\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useUserInputHandlers = (\n onChangeDate: (incomingDate: Date | null) => void,\n dateInputRef: RefObject<HTMLInputElement>,\n showCalendar: () => void,\n hideCalendar: () => void,\n {\n isCalendarVisible,\n setCurrentPanel,\n showTimePicker,\n hideTimePicker,\n }: UseInputStatesResult\n) => {\n const onFocusLeft = useCallback(() => {\n if (!isCalendarVisible) {\n showCalendar();\n }\n setCurrentPanel(\"calendar\");\n hideTimePicker();\n }, [hideTimePicker, isCalendarVisible, setCurrentPanel, showCalendar]);\n\n const onFocusRight = useCallback(() => {\n hideCalendar();\n showTimePicker();\n }, [hideCalendar, showTimePicker]);\n\n const onClickDay = useCallback(\n (day: DayData) => {\n onChangeDate(day.date);\n hideCalendar();\n showTimePicker();\n },\n [onChangeDate, hideCalendar, showTimePicker]\n );\n\n const onClickArrowButton = useCallback(() => {\n setCurrentPanel(\"presets\");\n showCalendar();\n }, [setCurrentPanel, showCalendar]);\n\n const onClickCalendarButton = useCallback(() => {\n if (isCalendarVisible) {\n hideCalendar();\n } else {\n dateInputRef.current?.focus();\n setCurrentPanel(\"calendar\");\n showCalendar();\n }\n }, [\n isCalendarVisible,\n hideCalendar,\n dateInputRef,\n setCurrentPanel,\n showCalendar,\n ]);\n\n const onKeyDownHandler = useCallback(\n (ev: React.KeyboardEvent<HTMLDivElement>) => {\n if (ev.key === \"Escape\") {\n hideCalendar();\n }\n },\n [hideCalendar]\n );\n\n return {\n onFocusLeft,\n onFocusRight,\n onClickDay,\n onClickArrowButton,\n onClickCalendarButton,\n onKeyDownHandler,\n };\n};\n","import { Box, Column, Row, Space, useDelayedFalse } from \"@stenajs-webui/core\";\nimport { PrimaryButton } from \"@stenajs-webui/elements\";\nimport {\n TextInputProps,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport {\n DualTextInput,\n DualTextInputProps,\n} from \"../../../features/dual-text-input/DualTextInput\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { TimePicker } from \"../../../features/time-picker/TimePicker\";\nimport { addDayStateHighlights } from \"../../../util/calendar/StateModifier\";\nimport { transformTimeInDateToTimeString } from \"../../../util/time/TimeTransformer\";\nimport { useDateRangeEffects } from \"./hooks/UseDateRangeEffects\";\nimport { useDateRangeHandlers } from \"./hooks/UseDateRangeHandlers\";\nimport { useInputStates } from \"./hooks/UseInputStates\";\nimport { useUserInputHandlers } from \"./hooks/UseUserInputHandlers\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\nimport { stenaClock } from \"@stenajs-webui/elements\";\n\nexport interface DateTimeInputProps\n extends ValueAndOnValueChangeProps<Date | null>,\n OptionalMinMaxDatesAsString,\n Pick<DualTextInputProps, \"widthLeft\" | \"widthRight\" | \"variant\"> {\n onEsc?: () => void;\n onEnter?: () => void;\n onBlur?: () => void;\n autoFocus?: boolean;\n disabled?: boolean;\n}\n\nexport const DateTimeInput: React.FC<DateTimeInputProps> = ({\n value,\n onValueChange,\n onEnter,\n onEsc,\n onBlur,\n autoFocus,\n minDate,\n widthLeft = 128,\n widthRight = 80,\n maxDate = defaultMaxDate,\n variant,\n disabled,\n}) => {\n const dateInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n const timeInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n\n const states = useInputStates(value);\n\n const {\n setCurrentPanel,\n currentPanel,\n isCalendarVisible,\n dateInFocus,\n setDateInFocus,\n isTimePickerVisible,\n hideTimePicker,\n localTime,\n localDate,\n } = states;\n\n const {\n showCalendar,\n hideCalendar,\n inputLeftChangeHandler,\n inputRightChangeHandler,\n onChangeTime,\n onChangeDate,\n } = useDateRangeHandlers(value, onValueChange, states, dateInputRef);\n\n const {\n onKeyDownHandler,\n onFocusRight,\n onFocusLeft,\n onClickDay,\n onClickCalendarButton,\n onClickArrowButton,\n } = useUserInputHandlers(\n onChangeDate,\n dateInputRef,\n showCalendar,\n hideCalendar,\n states\n );\n\n useDateRangeEffects(value, setDateInFocus, dateInputRef);\n\n const statePerMonth = useMemo(() => {\n const dateToHighlight = value || localDate;\n if (!dateToHighlight) {\n return {};\n }\n return addDayStateHighlights(undefined, dateToHighlight, [\n \"singleSelected\",\n \"selected\",\n ]);\n }, [localDate, value]);\n\n const hideAll = useCallback(() => {\n hideCalendar();\n hideTimePicker();\n }, [hideCalendar, hideTimePicker]);\n\n const timeValue = useMemo<string | undefined>(\n () => (value ? transformTimeInDateToTimeString(value) : localTime),\n [value, localTime]\n );\n\n const delayedIsCalendarVisible = useDelayedFalse(isCalendarVisible, 300);\n const delayedIsTimePickerVisible = useDelayedFalse(isTimePickerVisible, 300);\n\n return (\n <Box onKeyDown={onKeyDownHandler}>\n <Popover\n arrow={false}\n lazy\n disabled={disabled}\n placement={defaultPopoverPlacement}\n visible={isCalendarVisible || isTimePickerVisible}\n onClickOutside={hideAll}\n content={\n (delayedIsCalendarVisible || delayedIsTimePickerVisible) && (\n <Column>\n {delayedIsCalendarVisible ? (\n <CalendarWithMonthSwitcher\n statePerMonth={statePerMonth}\n onClickDay={onClickDay}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n minDate={minDate}\n maxDate={maxDate}\n />\n ) : delayedIsTimePickerVisible ? (\n <Column>\n <Column overflow={\"hidden\"} height={\"250px\"}>\n <TimePicker\n value={timeValue ?? \"\"}\n onValueChange={onChangeTime}\n />\n </Column>\n <Space />\n <Row justifyContent={\"flex-end\"}>\n <PrimaryButton label={\"Done\"} onClick={hideTimePicker} />\n </Row>\n </Column>\n ) : null}\n </Column>\n )\n }\n >\n <DualTextInput\n autoFocusLeft={autoFocus}\n onEsc={onEsc}\n onEnter={onEnter}\n onBlur={onBlur}\n disabled={disabled}\n separatorIcon={stenaClock}\n typeLeft={\"date\"}\n typeRight={\"time\"}\n placeholderLeft={\"yyyy-mm-dd\"}\n placeholderRight={\"hh:mm\"}\n onChangeLeft={inputLeftChangeHandler}\n onChangeRight={inputRightChangeHandler}\n onClickArrowDown={onClickArrowButton}\n onClickCalendar={onClickCalendarButton}\n onFocusLeft={onFocusLeft}\n onFocusRight={onFocusRight}\n onClickLeft={onFocusLeft}\n onClickRight={onFocusRight}\n inputRefLeft={dateInputRef}\n inputRefRight={timeInputRef}\n valueRight={timeValue ?? \"\"}\n widthLeft={widthLeft}\n widthRight={widthRight}\n minLeft={minDate}\n maxLeft={maxDate}\n variant={variant}\n />\n </Popover>\n </Box>\n );\n};\n","import { RefObject, useEffect } from \"react\";\n\nexport const useDateRangeEffects = (\n startDate: Date | undefined,\n endDate: Date | undefined,\n setDateInFocus: (date: Date) => void,\n startDateInputRef: RefObject<HTMLInputElement>,\n endDateInputRef: RefObject<HTMLInputElement>\n) => {\n useEffect(\n function moveFocusedDateWhenStartDateChanges() {\n if (startDate) {\n setDateInFocus(startDate);\n }\n },\n [startDate, setDateInFocus]\n );\n\n useEffect(\n function moveFocusedDateWhenEndDateChanges() {\n if (endDate) {\n setDateInFocus(endDate);\n }\n },\n [endDate, setDateInFocus]\n );\n\n useEffect(\n function updateStartDateFieldWhenValueChanges() {\n if (startDateInputRef.current) {\n if (startDate) {\n startDateInputRef.current.valueAsDate = new Date(\n Date.UTC(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate()\n )\n );\n } else {\n startDateInputRef.current.valueAsDate = null;\n }\n }\n },\n [startDate, startDateInputRef]\n );\n\n useEffect(\n function updateEndDateFieldWhenValueChanges() {\n if (endDateInputRef.current) {\n if (endDate) {\n endDateInputRef.current.valueAsDate = new Date(\n Date.UTC(\n endDate.getFullYear(),\n endDate.getMonth(),\n endDate.getDate()\n )\n );\n } else {\n endDateInputRef.current.valueAsDate = null;\n }\n }\n },\n [endDate, endDateInputRef]\n );\n};\n","import { ChangeEvent, useCallback } from \"react\";\nimport { DateRangeDualTextInputProps } from \"../DateRangeDualTextInput\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useDateRangeHandlers = (\n startDate: Date | undefined,\n endDate: Date | undefined,\n onValueChange: DateRangeDualTextInputProps[\"onValueChange\"],\n {\n setDateInFocus,\n showCalendarInternal,\n hideCalendarInternal,\n setFirstFocusedInput,\n setCurrentPanel,\n }: UseInputStatesResult\n) => {\n const inputLeftChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (ev.target.value[0] !== \"0\") {\n onValueChange?.({\n startDate: ev.target.valueAsDate ?? undefined,\n endDate,\n });\n }\n },\n [onValueChange, endDate]\n );\n\n const inputRightChangeHandler = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (ev.target.value[0] !== \"0\") {\n onValueChange?.({\n startDate,\n endDate: ev.target.valueAsDate ?? undefined,\n });\n }\n },\n [onValueChange, startDate]\n );\n\n const showCalendar = useCallback(() => {\n if (startDate) {\n setDateInFocus(startDate);\n } else if (endDate) {\n setDateInFocus(endDate);\n } else {\n setDateInFocus(new Date());\n }\n setCurrentPanel(\"calendar\");\n showCalendarInternal();\n }, [\n startDate,\n endDate,\n setCurrentPanel,\n showCalendarInternal,\n setDateInFocus,\n ]);\n\n const hideCalendar = useCallback(() => {\n setFirstFocusedInput(undefined);\n hideCalendarInternal();\n }, [setFirstFocusedInput, hideCalendarInternal]);\n\n return {\n inputLeftChangeHandler,\n inputRightChangeHandler,\n hideCalendar,\n setDateInFocus,\n setCurrentPanel,\n showCalendar,\n };\n};\n","import { useBoolean } from \"@stenajs-webui/core\";\nimport { useState } from \"react\";\nimport { DateRangeFocusedInput } from \"../../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { CalendarPanelType } from \"../../../../features/calendar-with-month-year-pickers/CalendarPanelType\";\n\nexport type UseInputStatesResult = ReturnType<typeof useInputStates>;\n\nexport const useInputStates = (\n startDate: Date | undefined,\n endDate: Date | undefined\n) => {\n const [isCalendarVisible, showCalendarInternal, hideCalendarInternal] =\n useBoolean(false);\n\n const [firstFocusedInput, setFirstFocusedInput] = useState<\n DateRangeFocusedInput | undefined\n >(undefined);\n\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n\n const [dateInFocus, setDateInFocus] = useState<Date>(() => {\n const fromValue =\n focusedInput === \"startDate\"\n ? startDate\n : focusedInput === \"endDate\"\n ? endDate\n : undefined;\n\n return fromValue ?? new Date();\n });\n\n const [currentPanel, setCurrentPanel] =\n useState<CalendarPanelType>(\"calendar\");\n\n return {\n isCalendarVisible,\n showCalendarInternal,\n hideCalendarInternal,\n firstFocusedInput,\n setFirstFocusedInput,\n focusedInput,\n setFocusedInput,\n dateInFocus,\n setDateInFocus,\n currentPanel,\n setCurrentPanel,\n };\n};\n","import { isAfter } from \"date-fns\";\nimport * as React from \"react\";\nimport { RefObject, useCallback } from \"react\";\nimport { DayData } from \"../../../../util/calendar/CalendarDataFactory\";\nimport { DateRangeDualTextInputProps } from \"../DateRangeDualTextInput\";\nimport { UseInputStatesResult } from \"./UseInputStates\";\n\nexport const useUserInputHandlers = (\n startDate: Date | undefined,\n endDate: Date | undefined,\n onValueChange: DateRangeDualTextInputProps[\"onValueChange\"],\n startDateInputRef: RefObject<HTMLInputElement>,\n endDateInputRef: RefObject<HTMLInputElement>,\n showCalendar: () => void,\n hideCalendar: () => void,\n {\n firstFocusedInput,\n setFirstFocusedInput,\n isCalendarVisible,\n setFocusedInput,\n focusedInput,\n setCurrentPanel,\n }: UseInputStatesResult\n) => {\n const onFocusLeft = useCallback(() => {\n if (firstFocusedInput == null) {\n setFirstFocusedInput(\"startDate\");\n }\n setFocusedInput(\"startDate\");\n if (!isCalendarVisible) {\n showCalendar();\n }\n }, [\n isCalendarVisible,\n setFocusedInput,\n showCalendar,\n setFirstFocusedInput,\n firstFocusedInput,\n ]);\n\n const onFocusRight = useCallback(() => {\n if (firstFocusedInput == null) {\n setFirstFocusedInput(\"endDate\");\n }\n setFocusedInput(\"endDate\");\n if (!isCalendarVisible) {\n showCalendar();\n }\n }, [\n isCalendarVisible,\n setFocusedInput,\n showCalendar,\n setFirstFocusedInput,\n firstFocusedInput,\n ]);\n\n const onClickDay = useCallback(\n (day: DayData) => {\n if (focusedInput === \"startDate\") {\n if (endDate != null && isAfter(day.date, endDate)) {\n onValueChange?.({\n startDate: day.date,\n endDate: undefined,\n });\n setFocusedInput(\"endDate\");\n endDateInputRef.current?.focus();\n } else {\n onValueChange?.({\n startDate: day.date,\n endDate,\n });\n if (firstFocusedInput === \"startDate\") {\n setFocusedInput(\"endDate\");\n endDateInputRef.current?.focus();\n } else {\n setTimeout(hideCalendar, 50);\n }\n }\n } else if (focusedInput === \"endDate\") {\n if (!startDate) {\n onValueChange?.({\n startDate,\n endDate: day.date,\n });\n setFocusedInput(\"startDate\");\n startDateInputRef.current?.focus();\n } else if (isAfter(startDate, day.date)) {\n onValueChange?.({\n startDate: day.date,\n endDate: undefined,\n });\n setFocusedInput(\"endDate\");\n endDateInputRef.current?.focus();\n } else {\n onValueChange?.({\n startDate,\n endDate: day.date,\n });\n setTimeout(hideCalendar, 50);\n }\n }\n },\n [\n focusedInput,\n onValueChange,\n endDate,\n firstFocusedInput,\n setFocusedInput,\n endDateInputRef,\n hideCalendar,\n startDate,\n startDateInputRef,\n ]\n );\n\n const onClickArrowButton = useCallback(() => {\n setCurrentPanel(\"presets\");\n showCalendar();\n }, [setCurrentPanel, showCalendar]);\n\n const onClickCalendarButton = useCallback(() => {\n if (isCalendarVisible) {\n hideCalendar();\n } else {\n setFocusedInput(\"startDate\");\n setFirstFocusedInput(\"startDate\");\n startDateInputRef.current?.focus();\n setCurrentPanel(\"calendar\");\n showCalendar();\n }\n }, [\n isCalendarVisible,\n hideCalendar,\n setFocusedInput,\n setFirstFocusedInput,\n startDateInputRef,\n setCurrentPanel,\n showCalendar,\n ]);\n\n const onKeyDownHandler = useCallback(\n (ev: React.KeyboardEvent<HTMLDivElement>) => {\n if (ev.key === \"Escape\") {\n hideCalendar();\n }\n },\n [hideCalendar]\n );\n\n return {\n onFocusLeft,\n onFocusRight,\n onClickDay,\n onClickArrowButton,\n onClickCalendarButton,\n onKeyDownHandler,\n };\n};\n","import { Box, useDelayedFalse } from \"@stenajs-webui/core\";\nimport { stenaArrowRight } from \"@stenajs-webui/elements\";\nimport {\n TextInputProps,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { Popover } from \"@stenajs-webui/tooltip\";\nimport { isAfter } from \"date-fns\";\nimport * as React from \"react\";\nimport { useMemo, useRef } from \"react\";\nimport { defaultPopoverPlacement } from \"../../../config/DefaultPopoverPlacement\";\nimport {\n DualTextInput,\n DualTextInputProps,\n} from \"../../../features/dual-text-input/DualTextInput\";\nimport { CalendarWithMonthSwitcher } from \"../../../features/month-switcher/CalendarWithMonthSwitcher\";\nimport { buildDayStateForSingleMonth } from \"../../../util/calendar/StateModifier\";\nimport { useDateRangeEffects } from \"./hooks/UseDateRangeEffects\";\nimport { useDateRangeHandlers } from \"./hooks/UseDateRangeHandlers\";\nimport { useInputStates } from \"./hooks/UseInputStates\";\nimport { useUserInputHandlers } from \"./hooks/UseUserInputHandlers\";\nimport { DateRangeInputCalendarProps } from \"../../calendar-types/date-range-calendar/DateRangeCalendar\";\nimport { OptionalMinMaxDatesAsString } from \"../../../types/CalendarTypes\";\nimport { DateRange } from \"../../../types/DateRange\";\nimport { defaultMaxDate } from \"../../../config/DefaultMaxDate\";\n\nexport interface DateRangeDualTextInputProps<TData = unknown>\n extends ValueAndOnValueChangeProps<DateRange>,\n OptionalMinMaxDatesAsString,\n Pick<DualTextInputProps, \"widthLeft\" | \"widthRight\" | \"variant\"> {\n onEsc?: () => void;\n onEnter?: () => void;\n onBlur?: () => void;\n autoFocus?: boolean;\n calendarProps?: DateRangeInputCalendarProps<TData>;\n disabled?: boolean;\n}\n\nexport function DateRangeDualTextInput<TData>({\n value,\n onValueChange,\n autoFocus,\n onBlur,\n onEnter,\n onEsc,\n minDate,\n maxDate = defaultMaxDate,\n calendarProps,\n widthLeft = 128,\n widthRight = 128,\n variant,\n disabled,\n}: DateRangeDualTextInputProps<TData>) {\n const { startDate, endDate } = value || {};\n\n const startDateInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n const endDateInputRef: TextInputProps[\"inputRef\"] = useRef(null);\n\n const states = useInputStates(startDate, endDate);\n\n const {\n dateInFocus,\n setDateInFocus,\n isCalendarVisible,\n currentPanel,\n setCurrentPanel,\n } = states;\n\n const {\n showCalendar,\n hideCalendar,\n inputLeftChangeHandler,\n inputRightChangeHandler,\n } = useDateRangeHandlers(startDate, endDate, onValueChange, states);\n\n const {\n onKeyDownHandler,\n onFocusRight,\n onFocusLeft,\n onClickDay,\n onClickCalendarButton,\n onClickArrowButton,\n } = useUserInputHandlers(\n startDate,\n endDate,\n onValueChange,\n startDateInputRef,\n endDateInputRef,\n showCalendar,\n hideCalendar,\n states\n );\n\n useDateRangeEffects(\n startDate,\n endDate,\n setDateInFocus,\n startDateInputRef,\n endDateInputRef\n );\n\n const startDateIsAfterEnd = useMemo(\n () => startDate && endDate && isAfter(startDate, endDate),\n [startDate, endDate]\n );\n\n const statePerMonth = useMemo(\n () =>\n buildDayStateForSingleMonth(\n calendarProps?.statePerMonth,\n startDate,\n endDate,\n dateInFocus\n ),\n [calendarProps?.statePerMonth, startDate, endDate, dateInFocus]\n );\n\n const delayedIsCalendarVisible = useDelayedFalse(isCalendarVisible, 300);\n\n return (\n <Box onKeyDown={onKeyDownHandler}>\n <Popover\n arrow={false}\n lazy\n disabled={disabled}\n placement={defaultPopoverPlacement}\n onClickOutside={hideCalendar}\n visible={isCalendarVisible}\n content={\n delayedIsCalendarVisible && (\n <CalendarWithMonthSwitcher\n onClickDay={onClickDay}\n dateInFocus={dateInFocus}\n setDateInFocus={setDateInFocus}\n currentPanel={currentPanel}\n setCurrentPanel={setCurrentPanel}\n minDate={minDate}\n maxDate={maxDate}\n {...calendarProps}\n statePerMonth={statePerMonth}\n />\n )\n }\n >\n <DualTextInput\n autoFocusLeft={autoFocus}\n onEsc={onEsc}\n onEnter={onEnter}\n onBlur={onBlur}\n disabled={disabled}\n separatorIcon={stenaArrowRight}\n typeLeft={\"date\"}\n typeRight={\"date\"}\n placeholderLeft={\"Start date\"}\n placeholderRight={\"End date\"}\n onChangeLeft={inputLeftChangeHandler}\n onChangeRight={inputRightChangeHandler}\n onClickArrowDown={onClickArrowButton}\n onClickCalendar={onClickCalendarButton}\n onFocusLeft={onFocusLeft}\n onFocusRight={onFocusRight}\n onClickLeft={onFocusLeft}\n onClickRight={onFocusRight}\n inputRefLeft={startDateInputRef}\n inputRefRight={endDateInputRef}\n variant={startDateIsAfterEnd ? \"error\" : variant}\n widthLeft={widthLeft}\n widthRight={widthRight}\n minLeft={minDate}\n maxLeft={maxDate}\n minRight={minDate}\n maxRight={maxDate}\n />\n </Popover>\n </Box>\n );\n}\n"],"names":["DateFormats","buildDayStateForDateRange","statePerMonth","start","end","isAfter","eachDayOfInterval","result","date","isFirstInRange","isSameDay","isLastInRange","addDayStateHighlights","state","buildDayStateForSingleMonth","dateInFocus","buildDayStateForRange","startOfMonth","endOfMonth","startLimit","endLimit","max","subDays","min","addDays","setDayStateValue","values","monthString","format","weekNumber","getISOWeek","dayInMonth","getDate","setDayStateValueFunction","setter","calendarState","highlights","month","dayState","addDayStateHighlightsOnSingleDay","_a","addWeekStateHighlights","week","day","weekState","newHighlights","newWeekState","addWeekRangeHighlights","startDate","endDate","last","useHighlightToday","enabled","useMemo","Month","Month2","WeekDay","WeekDay2","getMonthsInYear","year","startMonth","numMonths","locale","months","i","getMonthInYear","yearToUse","monthToUse","firstDayOfMonth","getWeeksForMonth","forceSixWeeks","firstDayOfFirstWeek","startOfWeek","weeks","getWeekForDate","addWeeks","firstDayOfWeek","isLastWeekOfMonth","getMonth","getWeek","getYear","getDaysForWeekForDate","createDay","dayOfWeek","getISODay","addHours","d","calculateOverflowingMonth","dayHasHighlight","defaultHighlights","highlight","dayHighlightSelect","highlightsOrBoolean","returnValues","fallbackValue","defaultWrapperStyleProvider","selectedBackground","todayBackground","rangeBackground","borderColor","_","style","backgroundColor","monthInYear","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","boxSizing","defaultTextPropsProvider","selectedColor","disabledColor","inOtherMonthColor","rangeTextColor","isOtherMonth","color","undefined","defaultCalendarTheme","width","height","WeekNumber","textColor","clickableTextColor","show","CalendarDay","tdStyle","textProps","CalendarMonth","headerTextColor","extranetCalendarTheme","isDateInMinMaxRange","isBefore","DisabledDayWrapper","dayComponent","DayComponent","minDate","maxDate","props","activeDayState","WeekNumberCell","onClickWeek","theme","background","prefix","content","Box","_jsx","Text","Clickable","ev","CalendarWeek","statePerWeekDay","userDataPerWeekDay","onClickDay","renderWeekNumber","extraDayContent","days","map","dayOfMonth","dateString","WeekDayCell","onClickWeekDay","name","userData","ExtraDayContent","WrapperTd","styled","td","InnerWrapperDiv","div","innerWrapperStyle","CellWrapperDiv","cellWrapperStyle","position","_Fragment","isClickable","statePerWeek","userDataPerWeek","onClickMonth","onClickYear","renderWeekDay","headerLeftContent","headerRightContent","showWeekNumber","_jsxs","Row","FlatButton","Space","String","CalendarPanel","monthRows","userDataPerMonth","minDateObj","parse","Date","maxDateObj","styles","calendar","monthRow","rowIndex","Spacing","index","React","Calendar","initialDate","getInitialDate","getMonthRows","enGB","monthsPerRow","highlightToday","now","chunk","useSelectedMonthStepperLogic","setDateInFocus","nextMonth","useCallback","addMonths","nextYear","addYears","prevMonth","subMonths","prevYear","subYears","WithMonthSwitcherBelow","children","Indent","faAngleDoubleLeft","stenaAngleLeft","stenaAngleRight","faAngleDoubleRight","MonthPickerCell","value","onValueChange","label","PrimaryButton","monthMatrix","JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER","MonthPicker","Column","createStandardDateRangePresets","PresetPicker","onClickPreset","pageIndex","setPageIndex","useState","pages","currentPage","length","presets","preset","YearPickerCell","YearPicker","initialLastYear","lastYear","setLastYear","getFullYear","yearRows","startYear","range","useEffect","prev","calculateLastYearInFocus","faCaretLeft","yearRow","faCaretRight","yearDiff","remaining","yearsToAdd","yearsToSubtract","CalendarWithMonthYearPickers","currentPanel","setCurrentPanel","onChangeSelectedMonth","selectedMonth","newDate","setMonth","onChangeSelectedYear","selectedYear","setFullYear","noop","CalendarWithMonthSwitcher","monthSwitcherPlacement","onSelectPreset","hideYearPagination","calendarProps","placement","fallbackIfNoPlacement","dateRangeToStrings","dateRange","stringsToDateRange","isDateRangeInvalid","toggleDatesIfEndIsEarlierThanStart","toggleDateStringsIfEndIsEarlierThanStart","useDateRangeOnClickDayHandler","focusedInput","setFocusedInput","useInternalPanelState","onChangePanel","_setCurrentPanel","useDateRangeSelection","statePerMonthWithSelection","DateRangeCalendar","dateRangeSelectionProps","useDateRangeCalendarState","setStartDate","setEndDate","useSingleDateSelection","onChange","statePerMonthWithSelectedDate","SingleDateCalendar","singleDateSelectionProps","useMultiDateSelection","isSelected","v","stateSum","MultiDateCalendar","selectionProps","useSingleWeekSelection","getWeekDataFromWeekString","getWeekStringFromWeekData","weekData","parts","setWeek","SingleWeekCalendar","singleWeekSelectionProps","removeDateIfExist","list","item","listContainsDate","useDateRangeExclusionSelection","setDateRange","onChangeHandler","dates","onClickDayRange","addHighlighting","dateList","DateRangeExclusionCalendar","defaultPopoverPlacement","useCalendarPopoverUpdater","tippyRef","tippyInstanceRef","useTippyInstance","_b","useDateInput","onClose","openOnMount","showingCalendar","setShowingCalendar","showCalendar","hideCalendar","onSelectDate","setTimeout","defaultMaxDate","DateInput","displayFormat","fullDate","placeholder","zIndex","calendarTheme","portalTarget","variant","disabled","Popover","TextInput","stenaCalendar","useDateRangeInput","startDateInputRef","useRef","endDateInputRef","showCalendarStartDate","showCalendarEndDate","current","focus","startDateIsAfterEnd","DateRangeInput","placeholderStartDate","placeholderEndDate","Icon","faLongArrowAltRight","cssColor","DateTextInput","closeOnCalendarSelectDate","dateFormat","disableCalender","hideCalenderIcon","open","setOpen","toggleCalendar","onValueChangeHandler","onCalendarSelectDate","inValidInput","test","dateIsValid","isValid","invalid","formatHours","hours","h","formatMinutes","minutes","m","formatTimeString","time","validUserInput","arr","timeNumber","input","TimeTextInput","showPlaceholder","useIcon","valid","setValid","timeFormat","onBlur","formattedResult","success","target","validInput","stenaClock","DualTextInput","autoFocusLeft","autoFocusRight","onEsc","onEnter","onValueChangeLeft","onValueChangeRight","separatorIcon","placeholderLeft","placeholderRight","typeLeft","typeRight","onChangeLeft","onChangeRight","valueLeft","valueRight","minLeft","maxLeft","minRight","maxRight","onClickLeft","onClickRight","onClickCalendar","onClickArrowDown","onBlurLeft","onBlurRight","onFocusLeft","onFocusRight","inputRefLeft","inputRefRight","variantLeft","variantRight","showPresets","widthLeft","widthRight","focusCounter","tryTriggerOnBlur","debounce","focusLeftHandler","focusRightHandler","blurLeftHandler","blurRightHandler","TextInputBox","SeparatorLine","stenaAngleDown","transformTimeStringToNumber","isValidTimeString","getHoursAndMinutesFromTimeString","p","parseIntElseUndefined","transformTimeInDateToTimeString","TimePickerCell","onClick","selected","columnRef","canScrollRef","ref","targetScroll","scrollHeight","Math","scrollTo","TimePickerColumn","items","selectedItem","timePickerColumn","TimePicker","hour","setHour","minute","setMinute","onClickHour","onClickMinutes","timePicker","useDateRangeEffects","dateInputRef","useDateRangeHandlers","showCalendarInternal","hideCalendarInternal","setFirstFocusedInput","localTime","setLocalTime","localDate","setLocalDate","onChangeDate","incomingDate","onChangeTime","newTime","inputLeftChangeHandler","inputRightChangeHandler","useInputStates","isCalendarVisible","useBoolean","isTimePickerVisible","showTimePicker","hideTimePicker","firstFocusedInput","useUserInputHandlers","onClickArrowButton","onClickCalendarButton","onKeyDownHandler","DateTimeInput","autoFocus","timeInputRef","states","dateToHighlight","hideAll","timeValue","delayedIsCalendarVisible","useDelayedFalse","delayedIsTimePickerVisible","fromValue","_d","_c","DateRangeDualTextInput","stenaArrowRight"],"mappings":"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"}