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.
Non-movement keyboard actions. Movement keys (Left/Right) are handled by the token selector’s own key repeat engine, not by KeyAction.
create_token_nav_actions
def create_token_nav_actions( config:TokenSelectorConfig, # config for this instance zone_id:str, # focus zone ID mode_name:str='token-select', # mode name (must match the mode) confirm_button_id:str='', # HTMX button ID for confirm action cancel_button_id:str='', # HTMX button ID for cancel action)->Tuple: # non-movement keyboard actions
Create keyboard actions for the token selector.
_reset_prefix_counter()cfg = TokenSelectorConfig(prefix="ts0")actions = create_token_nav_actions( cfg, zone_id="my-zone", confirm_button_id="confirm-btn", cancel_button_id="cancel-btn",)# Should have: Enter, Space, Escape, Home, End = 5 actionsassertlen(actions) ==5# No ArrowLeft/ArrowRightkeys = {a.key for a in actions}assert"ArrowLeft"notin keysassert"ArrowRight"notin keysassert"Enter"in keysassert"Escape"in keysassert"Home"in keysassert"End"in keys# Home uses js_callbackhome_action = [a for a in actions if a.key =="Home"][0]assert home_action.js_callback =="ts0_moveToFirst"# Without confirm/cancelactions_min = create_token_nav_actions(cfg, zone_id="z")assertlen(actions_min) ==2# Home + End only_reset_prefix_counter()print("create_token_nav_actions tests passed!")
create_token_nav_actions 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.