# Key Repeat JS


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

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

### generate_key_repeat_js

``` python

def generate_key_repeat_js(
    config:TokenSelectorConfig, # config with timing settings
)->str: # JS code fragment for the IIFE

```

*Generate the custom key repeat engine JS.*

``` python
from cjm_fasthtml_token_selector.core.config import TokenSelectorConfig, _reset_prefix_counter

_reset_prefix_counter()

# Default timing
cfg = TokenSelectorConfig(prefix="t")
js = generate_key_repeat_js(cfg)
assert "ns._handleKeyDown" in js
assert "ns._handleKeyUp" in js
assert "ns._repeatTimer" in js
assert str(cfg.initial_delay) in js
assert str(cfg.repeat_interval) in js
assert str(cfg.throttle_floor) in js
assert "ArrowLeft" in js
assert "ArrowRight" in js
print("Default key repeat JS generated!")

# Custom keys
cfg_wasd = TokenSelectorConfig(prefix="tw", left_key="a", right_key="d")
js_wasd = generate_key_repeat_js(cfg_wasd)
assert "'a'" in js_wasd
assert "'d'" in js_wasd
print("WASD key repeat JS generated!")

# Span mode includes shift dispatch
cfg_span = TokenSelectorConfig(prefix="ts", selection_mode="span")
js_span = generate_key_repeat_js(cfg_span)
assert "ns.extendLeft" in js_span
assert "ns.extendRight" in js_span
print("Span mode key repeat JS generated!")

# Custom timing
cfg_fast = TokenSelectorConfig(prefix="tf", initial_delay=100, repeat_interval=30, throttle_floor=20)
js_fast = generate_key_repeat_js(cfg_fast)
assert "100" in js_fast
assert "30" in js_fast
assert "20" in js_fast
print("Custom timing key repeat JS generated!")

_reset_prefix_counter()
print("All key repeat JS tests passed!")
```

    Default key repeat JS generated!
    WASD key repeat JS generated!
    Span mode key repeat JS generated!
    Custom timing key repeat JS generated!
    All key repeat JS tests passed!
