CalendarComponent
Calendar public API.
It works like a state machine – calling each method updates its state in background and emits new state to state. The state could also be updated when some UI event (such as date selection) happens.