{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/calendar/index.tsx","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { tsx, create } from '@dojo/framework/core/vdom';\nimport { DNode, RenderResult } from '@dojo/framework/core/interfaces';\nimport { formatAriaProperties, Keys } from '../common/util';\nimport { monthInMin, monthInMax, isOutOfDateRange, toDate } from './date-utils';\nimport Icon from '../icon/index';\nimport bundle from './nls/Calendar';\nimport * as css from '../theme/default/calendar.m.css';\nimport * as baseCss from '../common/styles/base.m.css';\nimport * as iconCss from '../theme/default/icon.m.css';\n\nimport theme from '../middleware/theme';\nimport icache, { createICacheMiddleware } from '@dojo/framework/core/middleware/icache';\nimport focus from '@dojo/framework/core/middleware/focus';\nimport i18n from '@dojo/framework/core/middleware/i18n';\n\nexport type CalendarMessages = {\n\tchooseMonth: string;\n\tchooseYear: string;\n\tpreviousMonth: string;\n\tnextMonth: string;\n\tpreviousYears: string;\n\tnextYears: string;\n};\n\nexport enum FirstDayOfWeek {\n\tsunday = 0,\n\tmonday = 1,\n\ttuesday = 2,\n\twednesday = 3,\n\tthursday = 4,\n\tfriday = 5,\n\tsaturday = 6\n}\n\nexport interface CalendarProperties {\n\t/** Custom aria attributes */\n\taria?: { [key: string]: string | null };\n\t/** Customize or internationalize accessible text for the Calendar widget */\n\tlabels?: CalendarMessages;\n\t/** Set the latest date the calendar will display (it will show the whole month but not allow later selections) */\n\tmaxDate?: Date;\n\t/** Set the earliest date the calendar will display (it will show the whole month but not allow previous selections) */\n\tminDate?: Date;\n\t/** Customize or internationalize full month names and abbreviations */\n\tmonthNames?: { short: string; long: string }[];\n\t/** Customize or internationalize weekday names and abbreviations */\n\tweekdayNames?: { short: string; long: string }[];\n\t/** Configure the first day of the calendar week, defaults to 0 (sunday) */\n\tfirstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\t/** The initial value */\n\tinitialValue?: Date;\n\t/** A controlled date value */\n\tvalue?: Date;\n\t/** Function called when the user selects a date */\n\tonValue?: (value: Date) => void;\n\t/** The initial month to display */\n\tinitialMonth?: number;\n\t/** A controlled month value */\n\tmonth?: number;\n\t/** Function called when the month changes */\n\tonMonth?(month: number): void;\n\t/** The initial year to display */\n\tinitialYear?: number;\n\t/** A controlled year value */\n\tyear?: number;\n\t/** Function called when the year changes */\n\tonYear?(year: number): void;\n}\n\nexport interface CalendarIcache {\n\tvalue: Date;\n\tinitialValue: Date;\n\tinitialMonth: number;\n\tmonth: number;\n\tinitialYear: number;\n\tyear: number;\n\tcallDateFocus?: boolean;\n\tfocusedDay: number;\n\tmonthLabelId: string;\n\tpopupOpen?: boolean;\n}\n\nexport interface CalendarChildren {\n\t/** Format the displayed current month and year */\n\tmonthLabel?: (month: number, year: number) => RenderResult;\n\t/** Format the weekday column headers */\n\tweekdayCell?: (day: { short: string; long: string }) => RenderResult;\n}\n\ninterface ShortLong<T> {\n\tshort: keyof T;\n\tlong: keyof T;\n}\n\nconst DEFAULT_MONTHS: ShortLong<typeof bundle.messages>[] = [\n\t{ short: 'janShort', long: 'january' },\n\t{ short: 'febShort', long: 'february' },\n\t{ short: 'marShort', long: 'march' },\n\t{ short: 'aprShort', long: 'april' },\n\t{ short: 'mayShort', long: 'may' },\n\t{ short: 'junShort', long: 'june' },\n\t{ short: 'julShort', long: 'july' },\n\t{ short: 'augShort', long: 'august' },\n\t{ short: 'sepShort', long: 'september' },\n\t{ short: 'octShort', long: 'october' },\n\t{ short: 'novShort', long: 'november' },\n\t{ short: 'decShort', long: 'december' }\n];\n\nconst DEFAULT_WEEKDAYS: ShortLong<typeof bundle.messages>[] = [\n\t{ short: 'sunShort', long: 'sunday' },\n\t{ short: 'monShort', long: 'monday' },\n\t{ short: 'tueShort', long: 'tuesday' },\n\t{ short: 'wedShort', long: 'wednesday' },\n\t{ short: 'thuShort', long: 'thursday' },\n\t{ short: 'friShort', long: 'friday' },\n\t{ short: 'satShort', long: 'saturday' }\n];\n\ninterface CalendarCellProperties {\n\t/** Used to immediately call focus on the cell */\n\tcallFocus?: boolean;\n\t/** The set date value */\n\tdate: number;\n\t/** Whether the date is in the displayed month */\n\tdisabled?: boolean;\n\t/** Whether the date can receive tab focus */\n\tfocusable?: boolean;\n\t/** Handler for the click event */\n\tonClick?(date: number, disabled: boolean): void;\n\t/** Handler for when the cell receives focus */\n\tonFocusCalled?(): void;\n\t/** Handler for the key down event */\n\tonKeyDown?(key: number, preventDefault: () => void): void;\n\t/** if the date is outside the min/max */\n\toutOfRange?: boolean;\n\t/** if the date is currently selected */\n\tselected?: boolean;\n\t/** if the date the same as the current day */\n\ttoday?: boolean;\n}\n\n/**\n * Enum for next/previous buttons\n */\nenum Paging {\n\tnext = 'next',\n\tprevious = 'previous'\n}\n\n/**\n * Enum for month or year controls\n */\nenum Controls {\n\tmonth = 'month',\n\tyear = 'year'\n}\n\ninterface DatePickerProperties {\n\t/** Id to reference label containing current month and year */\n\tlabelId?: string;\n\t/** Customize or internationalize accessible helper text */\n\tlabels: CalendarMessages;\n\t/** Maximum date to be picked */\n\tmaxDate?: Date;\n\t/** Minimum date to be picked */\n\tminDate?: Date;\n\t/** Currently displayed month (zero-based) */\n\tmonth: number;\n\t/** Array of full and abbreviated month names */\n\tmonthNames: { short: string; long: string }[];\n\t/** Handles when a user action occurs that triggers a change in the month or year popup state */\n\tonPopupChange?(open: boolean): void;\n\t/** Handles when a month should change (month is zero-based) */\n\tonRequestMonthChange?(month: number): void;\n\t/** Handles when a year should change */\n\tonRequestYearChange?(year: number): void;\n\t/** Formats the displayed current month and year */\n\trenderMonthLabel?(month: number, year: number): RenderResult;\n\t/** Currently displayed year */\n\tyear: number;\n\t/** Number of years to display in a single page of the year popup */\n\tyearRange?: number;\n}\n\nconst BASE_YEAR = 2000;\n\nexport const CalendarCell = create({ theme }).properties<CalendarCellProperties>()(\n\tfunction CalendarCell({ middleware: { theme }, properties }) {\n\t\tconst themeCss = theme.classes(css);\n\t\tconst {\n\t\t\tcallFocus,\n\t\t\tdate,\n\t\t\tfocusable = false,\n\t\t\tselected = false,\n\t\t\tonFocusCalled,\n\t\t\tdisabled = false,\n\t\t\toutOfRange = false,\n\t\t\ttoday = false\n\t\t} = properties();\n\n\t\tfunction onClick(event: MouseEvent) {\n\t\t\tevent.stopPropagation();\n\t\t\tconst { date, disabled = false, onClick } = properties();\n\t\t\tonClick && onClick(date, disabled);\n\t\t}\n\n\t\tfunction onKeyDown(event: KeyboardEvent) {\n\t\t\tevent.stopPropagation();\n\t\t\tconst { onKeyDown } = properties();\n\t\t\tonKeyDown &&\n\t\t\t\tonKeyDown(event.which, () => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t}\n\n\t\tif (callFocus) {\n\t\t\tonFocusCalled && onFocusCalled();\n\t\t}\n\n\t\treturn (\n\t\t\t<td\n\t\t\t\tkey=\"root\"\n\t\t\t\tfocus={callFocus}\n\t\t\t\trole=\"gridcell\"\n\t\t\t\taria-selected={selected ? 'true' : 'false'}\n\t\t\t\ttabIndex={focusable ? 0 : -1}\n\t\t\t\tclasses={[\n\t\t\t\t\tthemeCss.date,\n\t\t\t\t\tdisabled || outOfRange ? themeCss.inactiveDate : null,\n\t\t\t\t\toutOfRange ? themeCss.outOfRange : null,\n\t\t\t\t\tselected ? themeCss.selectedDate : null,\n\t\t\t\t\ttoday ? themeCss.todayDate : null\n\t\t\t\t]}\n\t\t\t\tonclick={onClick}\n\t\t\t\tonkeydown={onKeyDown}\n\t\t\t>\n\t\t\t\t<span>{`${date}`}</span>\n\t\t\t</td>\n\t\t);\n\t}\n);\n\nexport const DatePicker = create({ theme, focus, icache }).properties<DatePickerProperties>()(\n\tfunction DatePicker({ middleware: { theme, focus, icache }, properties, id }) {\n\t\tconst themeCss = theme.classes(css);\n\t\tconst { labelId = `${id}_label`, labels, month, year } = properties();\n\t\tconst keyWithFocus = icache.get<string>('keyWithFocus');\n\t\tconst monthPopupOpen = icache.getOrSet('monthPopupOpen', false);\n\t\tconst yearPopupOpen = icache.getOrSet('yearPopupOpen', false);\n\t\tconst yearPage = icache.getOrSet('yearPage', 0);\n\n\t\tfunction closeMonthPopup(event?: MouseEvent) {\n\t\t\tif (event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\tconst { onPopupChange } = properties();\n\t\t\ticache.set('keyWithFocus', 'month-button');\n\t\t\ticache.set('monthPopupOpen', false);\n\t\t\tfocus.focus();\n\t\t\tonPopupChange && onPopupChange(getPopupState());\n\t\t}\n\n\t\tfunction closeYearPopup(event?: MouseEvent) {\n\t\t\tif (event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\tconst { onPopupChange } = properties();\n\t\t\ticache.set('yearPopupOpen', false);\n\t\t\ticache.set('keyWithFocus', 'year-button');\n\t\t\tfocus.focus();\n\t\t\tonPopupChange && onPopupChange(getPopupState());\n\t\t}\n\n\t\tfunction getMonthInputKey(month: number): string {\n\t\t\treturn `${id}_month_input_${month}`;\n\t\t}\n\n\t\tfunction getPopupState() {\n\t\t\tconst monthPopupOpen = icache.get('monthPopupOpen');\n\t\t\tconst yearPopupOpen = icache.get('yearPopupOpen');\n\t\t\treturn !!monthPopupOpen || !!yearPopupOpen;\n\t\t}\n\n\t\tfunction getYearInputKey(year: number): string {\n\t\t\treturn `${id}_year_input_${year}`;\n\t\t}\n\n\t\tfunction getYearRange() {\n\t\t\tconst { year, yearRange = 20 } = properties();\n\t\t\tconst offset = ((year - BASE_YEAR) % yearRange) - yearRange * yearPage;\n\n\t\t\tif (year >= BASE_YEAR) {\n\t\t\t\treturn { first: year - offset, last: year + yearRange - offset };\n\t\t\t} else {\n\t\t\t\treturn { first: year - (yearRange + offset), last: year - offset };\n\t\t\t}\n\t\t}\n\n\t\tfunction onMonthButtonClick(event: MouseEvent) {\n\t\t\tevent.stopPropagation();\n\t\t\tmonthPopupOpen ? closeMonthPopup() : openMonthPopup();\n\t\t}\n\n\t\tfunction onMonthRadioChange(event: Event) {\n\t\t\tevent.stopPropagation();\n\t\t\tconst { onRequestMonthChange } = properties();\n\t\t\tonRequestMonthChange &&\n\t\t\t\tonRequestMonthChange(parseInt((event.target as HTMLInputElement).value, 10));\n\t\t}\n\n\t\tfunction onPopupKeyDown(event: KeyboardEvent) {\n\t\t\tevent.stopPropagation();\n\t\t\t// close popup on escape, or if a value is selected with enter/space\n\t\t\tif (\n\t\t\t\tevent.which === Keys.Escape ||\n\t\t\t\tevent.which === Keys.Enter ||\n\t\t\t\tevent.which === Keys.Space\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmonthPopupOpen && closeMonthPopup();\n\t\t\t\tyearPopupOpen && closeYearPopup();\n\t\t\t}\n\t\t}\n\n\t\tfunction onYearButtonClick(event: MouseEvent) {\n\t\t\tevent.stopPropagation();\n\t\t\tyearPopupOpen ? closeYearPopup() : openYearPopup();\n\t\t}\n\n\t\tfunction onYearPageDown(event: MouseEvent) {\n\t\t\tevent.stopPropagation();\n\t\t\ticache.set('yearPage', yearPage - 1);\n\t\t}\n\n\t\tfunction onYearPageUp(event: MouseEvent) {\n\t\t\tevent.stopPropagation();\n\t\t\ticache.set('yearPage', yearPage + 1);\n\t\t}\n\n\t\tfunction onYearRadioChange(event: Event) {\n\t\t\tevent.stopPropagation();\n\t\t\tconst {\n\t\t\t\tonRequestYearChange,\n\t\t\t\tmonth,\n\t\t\t\tminDate,\n\t\t\t\tmaxDate,\n\t\t\t\tonRequestMonthChange\n\t\t\t} = properties();\n\t\t\tconst newYear = parseInt((event.target as HTMLInputElement).value, 10);\n\t\t\tif (!monthInMinMax(newYear, month)) {\n\t\t\t\t// we know the year is valid but the month is out of range\n\t\t\t\tif (minDate && newYear === minDate.getFullYear()) {\n\t\t\t\t\tonRequestMonthChange && onRequestMonthChange(minDate.getMonth());\n\t\t\t\t} else if (maxDate && newYear === maxDate.getFullYear()) {\n\t\t\t\t\tonRequestMonthChange && onRequestMonthChange(maxDate.getMonth());\n\t\t\t\t}\n\t\t\t}\n\t\t\ticache.set('yearPage', 0);\n\t\t\tonRequestYearChange && onRequestYearChange(newYear);\n\t\t}\n\n\t\tfunction openMonthPopup() {\n\t\t\tconst { month, onPopupChange } = properties();\n\t\t\ticache.set('monthPopupOpen', true);\n\t\t\ticache.set('yearPopupOpen', false);\n\t\t\ticache.set('keyWithFocus', getMonthInputKey(month));\n\t\t\tfocus.focus();\n\t\t\tonPopupChange && onPopupChange(getPopupState());\n\t\t}\n\n\t\tfunction openYearPopup() {\n\t\t\tconst { year, onPopupChange } = properties();\n\t\t\ticache.set('yearPopupOpen', true);\n\t\t\ticache.set('monthPopupOpen', false);\n\t\t\ticache.set('keyWithFocus', getYearInputKey(year));\n\t\t\tfocus.focus();\n\t\t\tonPopupChange && onPopupChange(getPopupState());\n\t\t}\n\n\t\tfunction monthInMinMax(year: number, month: number) {\n\t\t\tlet { minDate, maxDate } = properties();\n\n\t\t\treturn monthInMin(year, month, minDate) && monthInMax(year, month, maxDate);\n\t\t}\n\n\t\tfunction yearInMinMax(year: number) {\n\t\t\tconst { minDate, maxDate } = properties();\n\t\t\tconst minYear = minDate ? minDate.getFullYear() : year;\n\t\t\tconst maxYear = maxDate ? maxDate.getFullYear() : year;\n\t\t\treturn year >= minYear && year <= maxYear;\n\t\t}\n\n\t\tfunction renderControlsTrigger(type: Controls) {\n\t\t\tconst { month, monthNames, year } = properties();\n\n\t\t\tconst content = type === Controls.month ? monthNames[month].long : `${year}`;\n\t\t\tconst open = type === Controls.month ? monthPopupOpen : yearPopupOpen;\n\t\t\tconst onclick = type === Controls.month ? onMonthButtonClick : onYearButtonClick;\n\t\t\tconst key = `${type}-button`;\n\n\t\t\treturn (\n\t\t\t\t<button\n\t\t\t\t\tkey={key}\n\t\t\t\t\taria-controls={`${id}_${type}_dialog`}\n\t\t\t\t\taria-expanded={open ? 'true' : 'false'}\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\tid={`${id}_${type}_button`}\n\t\t\t\t\tclasses={[\n\t\t\t\t\t\t(themeCss as any)[`${type}Trigger`],\n\t\t\t\t\t\topen ? (themeCss as any)[`${type}TriggerActive`] : null\n\t\t\t\t\t]}\n\t\t\t\t\tfocus={keyWithFocus === key ? focus.shouldFocus : undefined}\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonclick={onclick}\n\t\t\t\t>\n\t\t\t\t\t{content}\n\t\t\t\t</button>\n\t\t\t);\n\t\t}\n\n\t\tfunction renderMonthLabel(month: number, year: number) {\n\t\t\tconst { monthNames, renderMonthLabel } = properties();\n\t\t\treturn renderMonthLabel\n\t\t\t\t? renderMonthLabel(month, year)\n\t\t\t\t: `${monthNames[month].long} ${year}`;\n\t\t}\n\n\t\tfunction renderMonthRadios() {\n\t\t\tconst { year, month, monthNames } = properties();\n\t\t\treturn monthNames.map(({ short, long }, i) => {\n\t\t\t\tconst key = getMonthInputKey(i);\n\t\t\t\treturn (\n\t\t\t\t\t<label\n\t\t\t\t\t\tkey={`${id}_month_radios_${i}`}\n\t\t\t\t\t\tclasses={[\n\t\t\t\t\t\t\tthemeCss.monthRadio,\n\t\t\t\t\t\t\ti === month ? themeCss.monthRadioChecked : null\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tfor={getMonthInputKey(i)}\n\t\t\t\t\t\tonmouseup={closeMonthPopup}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tchecked={i === month}\n\t\t\t\t\t\t\tclasses={themeCss.monthRadioInput}\n\t\t\t\t\t\t\tid={key}\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tname={`${id}_month_radios`}\n\t\t\t\t\t\t\tfocus={keyWithFocus === key ? focus.shouldFocus : undefined}\n\t\t\t\t\t\t\ttabIndex={monthPopupOpen ? 0 : -1}\n\t\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t\tvalue={`${i}`}\n\t\t\t\t\t\t\tdisabled={!monthInMinMax(year, i)}\n\t\t\t\t\t\t\tonchange={onMonthRadioChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<abbr classes={themeCss.monthRadioLabel} title={long}>\n\t\t\t\t\t\t\t{short}\n\t\t\t\t\t\t</abbr>\n\t\t\t\t\t</label>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\tfunction renderPagingButtonContent(type: Paging) {\n\t\t\tconst { labels, classes, variant } = properties();\n\t\t\tconst iconType = type === Paging.next ? 'rightIcon' : 'leftIcon';\n\t\t\tconst labelText = type === Paging.next ? labels.nextYears : labels.previousYears;\n\n\t\t\treturn [\n\t\t\t\t<Icon\n\t\t\t\t\ttype={iconType}\n\t\t\t\t\ttheme={theme.compose(\n\t\t\t\t\t\ticonCss,\n\t\t\t\t\t\tcss,\n\t\t\t\t\t\t'datePickerPaging'\n\t\t\t\t\t)}\n\t\t\t\t\tclasses={classes}\n\t\t\t\t\tvariant={variant}\n\t\t\t\t/>,\n\t\t\t\t<span classes={baseCss.visuallyHidden}>{labelText}</span>\n\t\t\t];\n\t\t}\n\n\t\tfunction renderYearRadios() {\n\t\t\tconst { year } = properties();\n\t\t\tconst radios = [];\n\n\t\t\tconst yearLimits = getYearRange();\n\t\t\tfor (let i = yearLimits.first; i < yearLimits.last; i++) {\n\t\t\t\tconst key = getYearInputKey(i);\n\t\t\t\tradios.push(\n\t\t\t\t\t<label\n\t\t\t\t\t\tkey={`${id}_year_radios_${i}`}\n\t\t\t\t\t\tclasses={[\n\t\t\t\t\t\t\tthemeCss.yearRadio,\n\t\t\t\t\t\t\ti === year ? themeCss.yearRadioChecked : null\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tfor={getYearInputKey(i)}\n\t\t\t\t\t\tonmouseup={closeYearPopup}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tchecked={i === year}\n\t\t\t\t\t\t\tclasses={themeCss.yearRadioInput}\n\t\t\t\t\t\t\tid={key}\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tname={`${id}_year_radios`}\n\t\t\t\t\t\t\tfocus={keyWithFocus === key ? focus.shouldFocus : undefined}\n\t\t\t\t\t\t\ttabIndex={yearPopupOpen ? 0 : -1}\n\t\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t\tvalue={`${i}`}\n\t\t\t\t\t\t\tdisabled={!yearInMinMax(i)}\n\t\t\t\t\t\t\tonchange={onYearRadioChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<abbr classes={themeCss.yearRadioLabel}>{`${i}`}</abbr>\n\t\t\t\t\t</label>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn radios;\n\t\t}\n\n\t\treturn (\n\t\t\t<div classes={themeCss.datePicker}>\n\t\t\t\t<div classes={themeCss.topMatter} role=\"menubar\">\n\t\t\t\t\t<label\n\t\t\t\t\t\tid={labelId}\n\t\t\t\t\t\tclasses={[baseCss.visuallyHidden]}\n\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\taria-atomic=\"false\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{renderMonthLabel(month, year)}\n\t\t\t\t\t</label>\n\t\t\t\t\t{renderControlsTrigger(Controls.month)}\n\t\t\t\t\t{renderControlsTrigger(Controls.year)}\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\tkey=\"month-grid\"\n\t\t\t\t\taria-hidden={monthPopupOpen ? 'false' : 'true'}\n\t\t\t\t\taria-labelledby={`${id}_month_button`}\n\t\t\t\t\tclasses={[themeCss.monthGrid, !monthPopupOpen ? baseCss.visuallyHidden : null]}\n\t\t\t\t\tid={`${id}_month_dialog`}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t>\n\t\t\t\t\t<fieldset classes={themeCss.monthFields} onkeydown={onPopupKeyDown}>\n\t\t\t\t\t\t<legend classes={baseCss.visuallyHidden}>{labels.chooseMonth}</legend>\n\t\t\t\t\t\t{renderMonthRadios()}\n\t\t\t\t\t</fieldset>\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\tkey=\"year-grid\"\n\t\t\t\t\taria-hidden={yearPopupOpen ? 'false' : 'true'}\n\t\t\t\t\taria-labelledby={`${id}_year_button`}\n\t\t\t\t\tclasses={[themeCss.yearGrid, !yearPopupOpen ? baseCss.visuallyHidden : null]}\n\t\t\t\t\tid={`${id}_year_dialog`}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t>\n\t\t\t\t\t<fieldset classes={themeCss.yearFields} onkeydown={onPopupKeyDown}>\n\t\t\t\t\t\t<legend classes={[baseCss.visuallyHidden]}>{labels.chooseYear}</legend>\n\t\t\t\t\t\t{...renderYearRadios()}\n\t\t\t\t\t</fieldset>\n\t\t\t\t</div>\n\t\t\t\t<div classes={themeCss.controls}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclasses={themeCss.previous}\n\t\t\t\t\t\ttabindex={yearPopupOpen ? 0 : -1}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonclick={onYearPageDown}\n\t\t\t\t\t\tdisabled={!yearInMinMax(year - 1)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{...renderPagingButtonContent(Paging.previous)}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclasses={themeCss.next}\n\t\t\t\t\t\ttabindex={yearPopupOpen ? 0 : -1}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonclick={onYearPageUp}\n\t\t\t\t\t\tdisabled={!yearInMinMax(year + 1)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{renderPagingButtonContent(Paging.next)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nconst factory = create({\n\ticache: createICacheMiddleware<CalendarIcache>(),\n\ti18n,\n\ttheme,\n\tfocus\n})\n\t.properties<CalendarProperties>()\n\t.children<CalendarChildren | undefined>();\n\nexport const Calendar = factory(function Calendar({\n\tmiddleware: { icache, i18n, theme, focus },\n\tproperties,\n\tid,\n\tchildren\n}) {\n\tconst themeCss = theme.classes(css);\n\tconst { messages: commonMessages } = i18n.localize(bundle);\n\n\tconst {\n\t\tlabels = i18n.localize(bundle).messages,\n\t\taria = {},\n\t\tminDate,\n\t\tmaxDate,\n\t\tinitialValue,\n\t\tweekdayNames = getWeekdays(commonMessages),\n\t\tfirstDayOfWeek = 0\n\t} = properties();\n\n\tlet { value, month, year } = properties();\n\tconst { monthLabel, weekdayCell } = children()[0] || ({} as CalendarChildren);\n\tconst defaultDate = initialValue || new Date();\n\tconst {\n\t\tinitialYear = defaultDate.getFullYear(),\n\t\tinitialMonth = defaultDate.getMonth()\n\t} = properties();\n\n\tconst existingInitialValue = icache.get('initialValue');\n\tconst existingInitialMonth = icache.get('initialMonth');\n\tconst existingInitialYear = icache.get('initialYear');\n\tconst callDateFocus = icache.getOrSet('callDateFocus', false);\n\tconst focusedDay = icache.getOrSet('focusedDay', 1);\n\tconst monthLabelId = icache.getOrSet('monthLabelId', id);\n\tconst popupOpen = icache.getOrSet('popupOpen', false);\n\tconst shouldFocus = focus.shouldFocus();\n\tif (!value) {\n\t\tvalue = icache.get('value') || new Date();\n\n\t\tif (!initialValue && !existingInitialValue) {\n\t\t\tvalue = toDate(defaultDate);\n\n\t\t\tif (isOutOfDateRange(value, minDate, maxDate)) {\n\t\t\t\tvalue = toDate(maxDate);\n\t\t\t}\n\n\t\t\ticache.set('initialValue', value);\n\t\t\ticache.set('value', value);\n\t\t}\n\n\t\tif (initialValue && initialValue !== existingInitialValue) {\n\t\t\tvalue = toDate(initialValue);\n\n\t\t\ticache.set('initialValue', toDate(initialValue));\n\t\t\ticache.set('value', value);\n\t\t}\n\t}\n\n\tif (typeof month === 'undefined') {\n\t\tif (initialMonth !== existingInitialMonth) {\n\t\t\ticache.set('initialMonth', initialMonth);\n\t\t\ticache.set('month', initialMonth);\n\t\t}\n\t}\n\n\tif (typeof year === 'undefined') {\n\t\tif (initialYear !== existingInitialYear) {\n\t\t\ticache.set('initialYear', initialYear);\n\t\t\ticache.set('year', initialYear);\n\t\t}\n\t}\n\n\t({ month, year } = getMonthYear());\n\n\tlet weekdayOrder: number[] = [];\n\tfor (let i = firstDayOfWeek; i < firstDayOfWeek + 7; i++) {\n\t\tweekdayOrder.push(i > 6 ? i - 7 : i);\n\t}\n\n\tconst weekdays = weekdayOrder.map((order) => (\n\t\t<th role=\"columnheader\" classes={themeCss.weekday}>\n\t\t\t{renderWeekdayCell(weekdayNames[order])}\n\t\t</th>\n\t));\n\n\tfunction onValueChange(newValue: Date) {\n\t\tconst { onValue } = properties();\n\t\ticache.set('value', newValue);\n\t\tonValue && onValue(newValue);\n\t}\n\n\tfunction onMonthChange(newMonth: number) {\n\t\tconst { onMonth } = properties();\n\t\ticache.set('month', newMonth);\n\t\tonMonth && onMonth(newMonth);\n\t}\n\n\tfunction onYearChange(newYear: number) {\n\t\tconst { onYear } = properties();\n\t\ticache.set('year', newYear);\n\t\tonYear && onYear(newYear);\n\t}\n\n\tfunction getMonthLength(month: number, year: number) {\n\t\tconst lastDate = new Date(year, month + 1, 0);\n\t\treturn lastDate.getDate();\n\t}\n\n\tfunction getMonths(commonMessages: typeof bundle.messages) {\n\t\treturn DEFAULT_MONTHS.map((month) => ({\n\t\t\tshort: commonMessages[month.short],\n\t\t\tlong: commonMessages[month.long]\n\t\t}));\n\t}\n\n\tfunction getMonthYear() {\n\t\tlet { month, year, value } = properties();\n\t\tconst selectedDate = value || icache.getOrSet('value', new Date());\n\t\tmonth = typeof month === 'number' ? month : icache.get('month');\n\t\tyear = typeof year === 'number' ? year : icache.get('year');\n\t\treturn {\n\t\t\tmonth: typeof month === 'number' ? month : selectedDate.getMonth(),\n\t\t\tyear: typeof year === 'number' ? year : selectedDate.getFullYear()\n\t\t};\n\t}\n\n\tfunction getWeekdays(commonMessages: typeof bundle.messages) {\n\t\treturn DEFAULT_WEEKDAYS.map((weekday) => ({\n\t\t\tshort: commonMessages[weekday.short],\n\t\t\tlong: commonMessages[weekday.long]\n\t\t}));\n\t}\n\n\tfunction goToDate(day: number) {\n\t\tconst { month, year } = getMonthYear();\n\t\tconst currentMonthLength = getMonthLength(month, year);\n\t\tconst previousMonthLength = getMonthLength(month - 1, year);\n\n\t\tensureDayIsInMinMax(new Date(year, month, day), (updatedDay) => (day = updatedDay));\n\n\t\tif (day < 1) {\n\t\t\tonMonthDecrement();\n\t\t\tday += previousMonthLength;\n\t\t} else if (day > currentMonthLength) {\n\t\t\tonMonthIncrement();\n\t\t\tday -= currentMonthLength;\n\t\t}\n\n\t\ticache.set('focusedDay', day);\n\t\ticache.set('callDateFocus', true);\n\t}\n\n\tfunction onDateClick(date: number, disabled: boolean) {\n\t\tlet { month, year } = getMonthYear();\n\n\t\tif (disabled) {\n\t\t\t({ month, year } = date < 15 ? onMonthIncrement() : onMonthDecrement());\n\t\t\ticache.set('callDateFocus', true);\n\t\t}\n\t\ticache.set('focusedDay', date);\n\t\tconst dateValue = new Date(year, month, date);\n\t\tonValueChange(dateValue);\n\t}\n\n\tfunction onDateFocusCalled() {\n\t\ticache.set('callDateFocus', false);\n\t}\n\n\tfunction onDateKeyDown(key: number, preventDefault: () => void) {\n\t\tconst { month, year } = getMonthYear();\n\t\tswitch (key) {\n\t\t\tcase Keys.Up:\n\t\t\t\tpreventDefault();\n\t\t\t\tgoToDate(focusedDay - 7);\n\t\t\t\tbreak;\n\t\t\tcase Keys.Down:\n\t\t\t\tpreventDefault();\n\t\t\t\tgoToDate(focusedDay + 7);\n\t\t\t\tbreak;\n\t\t\tcase Keys.Left:\n\t\t\t\tpreventDefault();\n\t\t\t\tgoToDate(focusedDay - 1);\n\t\t\t\tbreak;\n\t\t\tcase Keys.Right:\n\t\t\t\tpreventDefault();\n\t\t\t\tgoToDate(focusedDay + 1);\n\t\t\t\tbreak;\n\t\t\tcase Keys.PageUp:\n\t\t\t\tpreventDefault();\n\t\t\t\tgoToDate(1);\n\t\t\t\tbreak;\n\t\t\tcase Keys.PageDown:\n\t\t\t\tpreventDefault();\n\t\t\t\tconst monthLength = getMonthLength(month, year);\n\t\t\t\tgoToDate(monthLength);\n\t\t\t\tbreak;\n\t\t\tcase Keys.Enter:\n\t\t\tcase Keys.Space:\n\t\t\t\tonValueChange(new Date(year, month, focusedDay));\n\t\t}\n\t}\n\n\tfunction onMonthDecrement() {\n\t\tconst { month, year } = getMonthYear();\n\n\t\tconst newYear = month === 0 ? year - 1 : year;\n\t\tconst newMonth = month === 0 ? 11 : month - 1;\n\n\t\tonMonthChange(newMonth);\n\t\tif (newYear !== year) {\n\t\t\tonYearChange(newYear);\n\t\t}\n\n\t\treturn { month: newMonth, year: newYear };\n\t}\n\n\tfunction onMonthIncrement() {\n\t\tconst { month, year } = getMonthYear();\n\n\t\tconst newYear = month === 11 ? year + 1 : year;\n\t\tconst newMonth = month === 11 ? 0 : month + 1;\n\t\tonMonthChange(newMonth);\n\t\tif (newYear !== year) {\n\t\t\tonYearChange(newYear);\n\t\t}\n\t\treturn { month: newMonth, year: newYear };\n\t}\n\n\tfunction onMonthPageDown(event: MouseEvent) {\n\t\tevent.stopPropagation();\n\t\tonMonthDecrement();\n\t}\n\n\tfunction onMonthPageUp(event: MouseEvent) {\n\t\tevent.stopPropagation();\n\t\tonMonthIncrement();\n\t}\n\n\tfunction ensureDayIsInMinMax(newDate: Date, update: (day: number) => void) {\n\t\tconst { minDate, maxDate } = properties();\n\n\t\tif (minDate && newDate < minDate) {\n\t\t\tupdate(minDate.getDate());\n\t\t} else if (maxDate && newDate > maxDate) {\n\t\t\tupdate(maxDate.getDate());\n\t\t}\n\t}\n\n\tfunction renderDateGrid(selectedDate?: Date) {\n\t\tconst { month, year } = getMonthYear();\n\t\tconst { firstDayOfWeek = 0 } = properties();\n\n\t\tensureDayIsInMinMax(new Date(year, month, focusedDay), (newDay) =>\n\t\t\ticache.set('focusedDay', newDay)\n\t\t);\n\t\tconst currentMonthLength = getMonthLength(month, year);\n\t\tconst previousMonthLength = getMonthLength(month - 1, year);\n\t\tconst currentMonthStartDay = new Date(year, month, 1).getDay();\n\t\tconst initialWeekday =\n\t\t\tcurrentMonthStartDay - firstDayOfWeek < 0\n\t\t\t\t? currentMonthStartDay - firstDayOfWeek + 7\n\t\t\t\t: currentMonthStartDay - firstDayOfWeek;\n\t\tconst todayString = new Date().toDateString();\n\n\t\tlet dayIndex = 0;\n\t\tlet isCurrentMonth = currentMonthStartDay === firstDayOfWeek;\n\t\tlet cellMonth = isCurrentMonth ? month : month - 1;\n\t\tlet date = isCurrentMonth ? 0 : previousMonthLength - initialWeekday;\n\t\tlet isSelectedDay: boolean;\n\t\tlet isToday: boolean;\n\t\tlet weeks: DNode[] = [];\n\t\tlet days: DNode[];\n\t\tlet dateObj: Date;\n\t\tlet dateString: string;\n\t\tlet weekday: number;\n\n\t\tfor (let week = 0; week < 6; week++) {\n\t\t\tdays = [];\n\n\t\t\tfor (weekday = 0; weekday < 7; weekday++) {\n\t\t\t\t// find the next date\n\t\t\t\t// if we've reached the end of the previous month, reset to 1\n\t\t\t\tif (date > dayIndex && date >= previousMonthLength) {\n\t\t\t\t\tdate = 1;\n\t\t\t\t\tcellMonth++;\n\t\t\t\t}\n\t\t\t\t// if we've reached the end of the current month, reset to 1\n\t\t\t\telse if (date <= dayIndex && date >= currentMonthLength) {\n\t\t\t\t\tdate = 1;\n\t\t\t\t\tcellMonth++;\n\t\t\t\t} else {\n\t\t\t\t\tdate++;\n\t\t\t\t}\n\n\t\t\t\t// set isSelectedDay if the dates match\n\t\t\t\tdateObj = new Date(year, cellMonth, date);\n\t\t\t\tdateString = dateObj.toDateString();\n\t\t\t\tisSelectedDay = Boolean(selectedDate && dateString === selectedDate.toDateString());\n\t\t\t\tisCurrentMonth = month === cellMonth;\n\t\t\t\tisToday = dateString === todayString;\n\n\t\t\t\tdays.push(\n\t\t\t\t\trenderDateCell(dateObj, dayIndex++, isSelectedDay, isCurrentMonth, isToday)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tweeks.push(<tr>{days}</tr>);\n\t\t}\n\n\t\treturn weeks;\n\t}\n\n\tfunction renderDateCell(\n\t\tdateObj: Date,\n\t\tindex: number,\n\t\tselected: boolean,\n\t\tcurrentMonth: boolean,\n\t\ttoday: boolean\n\t) {\n\t\tconst { minDate, maxDate, theme, classes, variant } = properties();\n\n\t\tconst date = dateObj.getDate();\n\t\tconst outOfRange = isOutOfDateRange(dateObj, minDate, maxDate);\n\t\tconst focusable = currentMonth && date === icache.get('focusedDay');\n\n\t\treturn (\n\t\t\t<CalendarCell\n\t\t\t\tclasses={classes}\n\t\t\t\tvariant={variant}\n\t\t\t\tkey={`date-${index}`}\n\t\t\t\tcallFocus={(callDateFocus || shouldFocus) && focusable}\n\t\t\t\tdate={date}\n\t\t\t\toutOfRange={outOfRange}\n\t\t\t\tfocusable={focusable}\n\t\t\t\tdisabled={!currentMonth}\n\t\t\t\tselected={selected}\n\t\t\t\ttheme={theme}\n\t\t\t\ttoday={today}\n\t\t\t\tonClick={outOfRange ? undefined : onDateClick}\n\t\t\t\tonFocusCalled={onDateFocusCalled}\n\t\t\t\tonKeyDown={onDateKeyDown}\n\t\t\t/>\n\t\t);\n\t}\n\n\tfunction renderDatePicker(commonMessages: typeof bundle.messages, labels: CalendarMessages) {\n\t\tconst {\n\t\t\tmonthNames = getMonths(commonMessages),\n\t\t\ttheme,\n\t\t\tclasses,\n\t\t\tvariant,\n\t\t\tminDate,\n\t\t\tmaxDate\n\t\t} = properties();\n\t\tconst { month, year } = getMonthYear();\n\n\t\treturn (\n\t\t\t<DatePicker\n\t\t\t\tkey=\"date-picker\"\n\t\t\t\tclasses={classes}\n\t\t\t\tvariant={variant}\n\t\t\t\tlabelId={monthLabelId}\n\t\t\t\tlabels={labels}\n\t\t\t\tmonth={month}\n\t\t\t\tmonthNames={monthNames}\n\t\t\t\trenderMonthLabel={monthLabel}\n\t\t\t\ttheme={theme}\n\t\t\t\tyear={year}\n\t\t\t\tminDate={minDate}\n\t\t\t\tmaxDate={maxDate}\n\t\t\t\tonPopupChange={(open: boolean) => {\n\t\t\t\t\ticache.set('popupOpen', open);\n\t\t\t\t}}\n\t\t\t\tonRequestMonthChange={(requestMonth: number) => {\n\t\t\t\t\tonMonthChange(requestMonth);\n\t\t\t\t}}\n\t\t\t\tonRequestYearChange={(requestYear: number) => {\n\t\t\t\t\tonYearChange(requestYear);\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t}\n\n\tfunction renderPagingButtonContent(type: Paging, labels: CalendarMessages) {\n\t\tconst { classes, variant } = properties();\n\t\tconst iconType = type === Paging.next ? 'rightIcon' : 'leftIcon';\n\t\tconst labelText = type === Paging.next ? labels.nextMonth : labels.previousMonth;\n\n\t\treturn [\n\t\t\t<Icon\n\t\t\t\ttype={iconType}\n\t\t\t\ttheme={theme.compose(\n\t\t\t\t\ticonCss,\n\t\t\t\t\tcss,\n\t\t\t\t\t'calendarPaging'\n\t\t\t\t)}\n\t\t\t\tclasses={classes}\n\t\t\t\tvariant={variant}\n\t\t\t/>,\n\t\t\t<span classes={[baseCss.visuallyHidden]}>{labelText}</span>\n\t\t];\n\t}\n\n\tfunction renderWeekdayCell(day: { short: string; long: string }) {\n\t\treturn weekdayCell ? (\n\t\t\tweekdayCell(day)\n\t\t) : (\n\t\t\t<abbr classes={themeCss.abbr} title={day.long}>\n\t\t\t\t{day.short}\n\t\t\t</abbr>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div classes={[theme.variant(), themeCss.root]} {...formatAriaProperties(aria)}>\n\t\t\t{renderDatePicker(commonMessages, labels)}\n\t\t\t<table\n\t\t\t\tcellspacing=\"0\"\n\t\t\t\tcellpadding=\"0\"\n\t\t\t\trole=\"grid\"\n\t\t\t\taria-labelledby={monthLabelId}\n\t\t\t\tclasses={[themeCss.dateGrid, popupOpen ? baseCss.visuallyHidden : null]}\n\t\t\t>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>{weekdays}</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>{renderDateGrid(value)}</tbody>\n\t\t\t</table>\n\t\t\t<div classes={[themeCss.controls, popupOpen ? baseCss.visuallyHidden : null]}>\n\t\t\t\t<button\n\t\t\t\t\tclasses={themeCss.previous}\n\t\t\t\t\ttabIndex={popupOpen ? -1 : 0}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdisabled={!monthInMin(year, month - 1, minDate)}\n\t\t\t\t\tonclick={onMonthPageDown}\n\t\t\t\t>\n\t\t\t\t\t{renderPagingButtonContent(Paging.previous, labels)}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclasses={themeCss.next}\n\t\t\t\t\ttabIndex={popupOpen ? -1 : 0}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdisabled={!monthInMax(year, month + 1, maxDate)}\n\t\t\t\t\tonclick={onMonthPageUp}\n\t\t\t\t>\n\t\t\t\t\t{renderPagingButtonContent(Paging.next, labels)}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nexport default Calendar;\n"]}