pub fn popup_nav_keys(
commands: Commands<'_, '_>,
keys: MessageReader<'_, '_, KeyPressed>,
tick: Res<'_, Tick>,
config: Res<'_, PopupNavConfig>,
type_ahead: ResMut<'_, TypeAheadBuffer>,
nav: ResMut<'_, ActivePopupNav>,
tracker: ResMut<'_, FocusTracker>,
store: ResMut<'_, PropertyStore>,
options: Query<'_, '_, (Entity, &DropdownOptionButton, Option<&TextContent>, Has<Disabled>, Option<&DocumentOrder>)>,
items: Query<'_, '_, (Entity, &MenuItemButton, Option<&TextContent>, Has<Disabled>, Option<&DocumentOrder>)>,
hovered_rows: Query<'_, '_, Entity, (With<Hovered>, Or<(With<DropdownOptionButton>, With<MenuItemButton>)>)>,
parents: Query<'_, '_, &ChildOf>,
transforms: Query<'_, '_, &Transform>,
scrolls: Query<'_, '_, (&Transform, &mut Scroll, &mut ScrollOffset)>,
)Expand description
Keyboard handling while a popup session is live: highlight
movement, type-ahead, and Alt+ArrowUp close. Commit keys
(Enter / Space) are deliberately not handled here - they flow
through lumen_input::activate_focused_on_enter -> ClickEvent ->
the option / menu-item click dispatchers, so keyboard and pointer
commits share one code path.