# Keyboard interaction map All views are operable without a pointer. Focus styling uses the `--cal-ring` token and is always visible (`:focus-visible`). Grids use a **roving tabindex**: one cell is in the tab order at a time; arrow keys move focus within the grid, and Tab leaves it. ## Month view (`cal-month-view`) The day grid is an ARIA `grid`; the focused day cell is the roving tab stop. | Key | Action | |-----|--------| | / | Focus the previous / next day | | / | Focus the same weekday in the previous / next week | | Home / End | Focus the first / last day of the focused week | | Enter / Space | Select the focused day (`daySelected`) | | Tab into a chip, then Enter | Activate an event chip (`eventClicked`) | The **"+N more" overflow popover** opens from its trigger; focus moves into the popover, Esc closes it and returns focus to the trigger, and the listed events are ordinary buttons in the tab order. ## Year view (`cal-year-view`) Each mini-month is a `grid`; arrow keys roam across the **whole year**, wrapping between months. | Key | Action | |-----|--------| | / | Previous / next day (crosses month boundaries) | | / | Up / down one week | | Home / End | First / last day of the focused week | | Enter / Space | Drill into the focused day | ## Week / Day time-grid (`cal-time-grid`) Each timed event is focusable. Selection, **keyboard move/resize**, and inline title editing are all keyboard-driven. | Context | Key | Action | |---------|-----|--------| | Event focused | Enter / Space | **Grab** the event (enter move mode) | | Grabbed | / | Move the event earlier / later by one snap step | | Grabbed | Shift + / | Resize the **end** by one snap step | | Grabbed | Enter / Space | **Drop** — commit the change (`eventChanged`) | | Grabbed | Esc | Cancel the move/resize (snaps back) | | Event focused | F2 | Start inline title edit | | Editing | Enter | Commit the new title (`eventChanged`, `kind:'inline-edit'`) | | Editing | Esc | Cancel the edit | ## Resource timeline (`cal-timeline-view`) Each event block is focusable. Move, lane-reassign, and resize are keyboard-driven, with screen-reader announcements on every step. | Context | Key | Action | |---------|-----|--------| | Block focused | Enter / Space | **Grab** the block (enter move mode) | | Grabbed | / | Move earlier / later by one snap step | | Grabbed | / | Reassign to the previous / next resource lane | | Grabbed | Shift + / | Resize the **end** by one snap step | | Grabbed | Enter / Space | **Drop** — commit (runs `validateChange`, then `eventChanged`) | | Grabbed | Esc | Cancel the move/resize (snaps back) | ## Recurrence editor (`cal-recurrence-editor`) and timezone picker Standard form controls: native `