CalendarView and CalendarViewCell are focusable; entering the panel focuses the
selected (or first available) cell, arrow keys move OS focus to the target cell,
and disabled cells are non-focusable. Adds focus-entry and arrow-key end-to-end tests.
CalendarView carries fullscreen/mini/date/month/show-week pseudo-classes; the
view theme consumes FullPanelBg (fullscreen panel bg) and MiniContentHeight
(mini content cap). All six tokens now consumed. Adds a pseudo-class toggle test.
Mode changes now swap the panel grid (ViewMode was a non-notifying CLR property so
the XAML binding never refreshed) and custom HeaderTemplate receives a
CalendarHeaderContext as DataContext so its commands can commit Value/Mode.
Adds an end-to-end runtime mode-switch test (42->12->42).
Calendar unbinds old CalendarView/header handlers on template reapply, subscribes
to language-variant changes on attach and unsubscribes on detach, and pushes the
resolved culture to CalendarView/header (rebuilds month names, weekday titles,
week rules). RTL affects layout only, not date math. 17 render/view tests pass.
CalendarHeader computes year/month options per spec (20-year window, ValidRange
boundary trimming, month clamping), drives ComboBox dropdowns and a Segmented mode
switch, and reports Year/Month/Mode intents. Calendar hosts it as PART_DefaultHeader,
hidden when a custom HeaderTemplate is set. 7 option-logic + 6 render tests pass.
CalendarHeaderContext exposes Value/Mode plus ICommands. ChangeValueCommand
commits as Customize source; both commands validate parameter type in
CanExecute. Adds internal CalendarRelayCommand helper.
Nine StyledProperties per spec, CLR events (ValueChanged/Selected/PanelChanged),
CommitUserSelection with PanelChanged->ValueChanged->Selected ordering, and
CommitModeChange. Programmatic Value/Mode changes do not raise user events.
New public CalendarDateRange (end<start throws), CalendarMode {Month,Year},
CalendarSelectSource, CalendarCellType, CalendarCellContext, and the three
event args live in the top-level AtomUI.Desktop.Controls namespace. Rename
DatePicker test aliases to Picker* to avoid collision with these new types.
Move DateTimeHelper, CalendarExtensions, HeadTextButton, CalendarDateRange,
CalendarMode, CalendarSelectionMode, and calendar event args out of the top-level
AtomUI.Desktop.Controls namespace so the new Calendar can own it. Add xmlns
mappings and update DatePicker test usings. DatePicker behavior unchanged.