# 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 `