# Key Mapping


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

## KeyMapping

Maps physical keys to navigation directions, allowing customization of
navigation keys.

------------------------------------------------------------------------

<a
href="https://github.com/cj-mills/cjm-fasthtml-keyboard-navigation/blob/main/cjm_fasthtml_keyboard_navigation/core/key_mapping.py#L15"
target="_blank" style="float:right; font-size:smaller">source</a>

### KeyMapping

``` python

def KeyMapping(
    up:tuple[str, ...]=('ArrowUp',), down:tuple[str, ...]=('ArrowDown',), left:tuple[str, ...]=('ArrowLeft',),
    right:tuple[str, ...]=('ArrowRight',)
)->None:

```

*Maps physical keys to navigation directions.*

``` python
# Test KeyMapping basics
km = KeyMapping()
assert km.get_direction("ArrowUp") == "up"
assert km.get_direction("ArrowDown") == "down"
assert km.get_direction("ArrowLeft") == "left"
assert km.get_direction("ArrowRight") == "right"
assert km.get_direction("x") is None
```

## Preset Key Mappings

Common key mapping presets for different use cases.

``` python
# Test presets
assert WASD_KEYS.get_direction("w") == "up"
assert WASD_KEYS.get_direction("W") == "up"
assert VIM_KEYS.get_direction("j") == "down"
assert VIM_KEYS.get_direction("k") == "up"
assert NUMPAD_KEYS.get_direction("8") == "up"
assert ARROWS_AND_WASD.get_direction("ArrowUp") == "up"
assert ARROWS_AND_WASD.get_direction("w") == "up"
```

## Key Display Formatting

Utilities for formatting keys for user display.

------------------------------------------------------------------------

<a
href="https://github.com/cj-mills/cjm-fasthtml-keyboard-navigation/blob/main/cjm_fasthtml_keyboard_navigation/core/key_mapping.py#L121"
target="_blank" style="float:right; font-size:smaller">source</a>

### format_key_for_display

``` python

def format_key_for_display(
    key:str, # the JavaScript key name
)->str: # human-readable display string

```

*Format a key name for user display.*

------------------------------------------------------------------------

<a
href="https://github.com/cj-mills/cjm-fasthtml-keyboard-navigation/blob/main/cjm_fasthtml_keyboard_navigation/core/key_mapping.py#L128"
target="_blank" style="float:right; font-size:smaller">source</a>

### format_key_combo

``` python

def format_key_combo(
    key:str, # the main key
    modifiers:frozenset[str]=frozenset(), # modifier keys (shift, ctrl, alt, meta)
)->str: # formatted string like "Ctrl+Shift+A"

```

*Format a key combination for display.*

``` python
# Test display formatting
assert format_key_for_display("ArrowUp") == "↑"
assert format_key_for_display(" ") == "Space"
assert format_key_for_display("a") == "a"  # passthrough

assert format_key_combo("ArrowUp") == "↑"
assert format_key_combo("ArrowUp", frozenset({"shift"})) == "Shift+↑"
assert format_key_combo("a", frozenset({"ctrl", "shift"})) == "Ctrl+Shift+a"
```
