orbital-base-components 0.1.1

Headless base primitives for Orbital — structure, semantics, and accessibility
Documentation
use leptos::ev;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CollectionKeyboardAction {
    None,
    Next,
    Previous,
    Expand,
    Collapse,
    Select,
    Home,
    End,
    TypeAhead,
}

pub fn collection_keyboard_action(event: &ev::KeyboardEvent) -> CollectionKeyboardAction {
    let key = event.key();
    match key.as_str() {
        "ArrowDown" => CollectionKeyboardAction::Next,
        "ArrowUp" => CollectionKeyboardAction::Previous,
        "ArrowRight" => CollectionKeyboardAction::Expand,
        "ArrowLeft" => CollectionKeyboardAction::Collapse,
        "Enter" | " " => CollectionKeyboardAction::Select,
        "Home" => CollectionKeyboardAction::Home,
        "End" => CollectionKeyboardAction::End,
        text if text.len() == 1 && !event.ctrl_key() && !event.meta_key() && !event.alt_key() => {
            CollectionKeyboardAction::TypeAhead
        }
        _ => CollectionKeyboardAction::None,
    }
}