Keyboard Actions

Keyboard navigation library integration factories for token selector mode, actions, URL maps, and hidden action buttons.

Token Selector Mode


create_token_selector_mode


def create_token_selector_mode(
    config:TokenSelectorConfig, # config for this instance
    mode_name:str='token-select', # mode name for the keyboard nav system
    indicator_text:str='Token Select', # mode indicator text
    exit_key:str='', # exit key (empty = programmatic only via Escape KeyAction)
    exit_on_zone_change:bool=False, # whether to exit on zone change
)->KeyboardMode: # configured keyboard mode

Create a keyboard mode that activates/deactivates the token selector.

from cjm_fasthtml_token_selector.core.config import _reset_prefix_counter

_reset_prefix_counter()
cfg = TokenSelectorConfig(prefix="ts0")

mode = create_token_selector_mode(cfg)
assert mode.name == "token-select"
assert mode.on_enter == "ts0_activate"
assert mode.on_exit == "ts0_deactivate"
assert mode.indicator_text == "Token Select"
assert mode.exit_key == ""

# Custom mode name
mode2 = create_token_selector_mode(cfg, mode_name="split", indicator_text="Split Mode")
assert mode2.name == "split"
assert mode2.indicator_text == "Split Mode"

_reset_prefix_counter()
print("create_token_selector_mode tests passed!")
create_token_selector_mode tests passed!

URL Map and Action Buttons


build_token_selector_url_map


def build_token_selector_url_map(
    confirm_button_id:str, # button ID for confirm action
    cancel_button_id:str, # button ID for cancel action
    confirm_url:str, # URL for confirm action
    cancel_url:str, # URL for cancel action
)->Dict: # button ID -> URL mapping

Build URL map for keyboard system with token selector action buttons.


render_token_action_buttons


def render_token_action_buttons(
    confirm_button_id:str, # button ID for confirm
    cancel_button_id:str, # button ID for cancel
    confirm_url:str, # URL for confirm action
    cancel_url:str, # URL for cancel action
    ids:TokenSelectorHtmlIds, # HTML IDs (for hx_include)
    extra_include:str='', # additional hx_include selectors
)->Any: # Div containing hidden action buttons

Render hidden HTMX buttons for confirm/cancel actions.

ids = TokenSelectorHtmlIds(prefix="ts0")

url_map = build_token_selector_url_map("confirm-btn", "cancel-btn", "/confirm", "/cancel")
assert url_map["confirm-btn"] == "/confirm"
assert url_map["cancel-btn"] == "/cancel"
print("build_token_selector_url_map test passed!")

btns = render_token_action_buttons("confirm-btn", "cancel-btn", "/confirm", "/cancel", ids)
assert btns is not None
print("render_token_action_buttons test passed!")
build_token_selector_url_map test passed!
render_token_action_buttons test passed!