Skip to content

Conversation

@kgogov
Copy link
Contributor

@kgogov kgogov commented Nov 20, 2025

Overview

This PR introduces improved keyboard navigation capabilities for ui5-li-custom components within lists, enabling users to efficiently navigate between internal focusable elements across multiple list items.

1. Arrow Key Navigation Between Internal Elements

  • Arrow Up/Down keys now navigate between same-index focusable elements across list items
  • Enables column-wise navigation through structured list content
  • Example: Pressing Arrow Down while focused on the first button in Item 1 moves focus to the first button in Item 2

Key capabilities:

  • Navigate between corresponding elements (e.g., button-to-button, link-to-link)
  • Automatically skip items without focusable elements (e.g., standard list items)
  • Works seamlessly across ui5-li-group boundaries
  • Handles items with varying numbers of focusable elements (index clamping)
  • Does nothing at list boundaries (first/last item)
  • Preserves existing F2/F7/Tab navigation behavior

2. F7 Navigation with Position Memory

  • F7 now remembers the focused element position when navigating between list items
  • Shared state across all items in the same list via _lastFocusedElementIndex
  • Example: If you focus the second button in Item 1, exit with F7, move to Item 2, and press F7 again, it focuses the second button in Item 2

Behavior comparison:

  • F2: Simple navigation - always goes to first focusable element (no memory)
  • F7: Smart navigation - remembers last focused element position across items

3. Fixed Scroll Blocking Issue

  • List component no longer unconditionally prevents default scroll behavior on Arrow Down
  • _handleDown() now returns a boolean to indicate if the event was handled
  • Only prevents default when actually navigating to the growing button
  • Preserves browser scroll functionality when arrow keys don't trigger list navigation

4. Test Coverage

Added 6 comprehensive Cypress tests covering:

  • Basic arrow down/up navigation
  • Skipping standard list items
  • Navigation across group boundaries
  • Handling items with different element counts
  • Boundary conditions (first/last item)
  • F7 position memory across items

5. Demo Page

Added ListItemCustomArrowNavigation.html with 8 examples demonstrating:

  • Basic column navigation
  • Mixed custom/standard items
  • Group navigation
  • Varying element counts
  • Boundary cases
  • Real-world scenarios
  • Selection modes

Breaking Changes

None - this is a fully backward-compatible enhancement.

Jira: BGSOFUIPIRIN-6942
Fixes #11987

@ui5-webcomponents-bot
Copy link
Collaborator

ui5-webcomponents-bot commented Nov 20, 2025

@ui5-webcomponents-bot ui5-webcomponents-bot temporarily deployed to preview November 20, 2025 12:53 Inactive
@ui5-webcomponents-bot ui5-webcomponents-bot temporarily deployed to preview November 20, 2025 14:24 Inactive
@kgogov kgogov force-pushed the list-item-custom-keyboard-navigation branch from 8d06bd6 to 324c292 Compare November 20, 2025 14:35
@ui5-webcomponents-bot ui5-webcomponents-bot temporarily deployed to preview November 20, 2025 14:42 Inactive
@ui5-webcomponents-bot ui5-webcomponents-bot temporarily deployed to preview November 20, 2025 15:01 Inactive
@kgogov kgogov force-pushed the list-item-custom-keyboard-navigation branch from 034548d to 5f38de1 Compare November 24, 2025 14:23
@ui5-webcomponents-bot ui5-webcomponents-bot temporarily deployed to preview November 24, 2025 14:30 Inactive
@kgogov kgogov marked this pull request as ready for review November 24, 2025 14:55
F7 key enables navigation between list item and internal focusable elements:
- If focus is on item level, moves focus to previously focused internal element (or first if none)
- If focus is on internal element, saves focus position and moves back to item level
- Add Cypress tests for F7 functionality
- Add test page for manual F7 validation

Jira: BGSOFUIPIRIN-6942
Related: #11987
Fixes TypeScript linter errors for awaiting non-Promise parent calls
F7 navigation now remembers the focused element position when
moving between list items. Pressing F7 focuses the element at
the same index that was previously focused in another item.

The List component stores a shared _lastFocusedElementIndex
property, and ListItem uses getTabbableElements to reliably
find focusable elements. Helper methods handle focusing by
index and updating the stored position.
…ents

Arrow Up/Down keys now navigate between same-index focusable elements
across list items when focus is inside the internal content of list items.
This allows users to navigate column-wise through structured list items.

Key features:
- Navigate between corresponding elements across items (e.g., first button
  to first button in next/previous item)
- Automatically skip items without focusable elements
- Works across ui5-li-group boundaries
- Preserves existing F2/F7/Tab navigation
- Only prevents default scroll when List handles the event (growing button)
Add comprehensive test page for arrow key navigation between
internal elements across list items. Includes 8 test examples
covering basic navigation, mixed items, groups, boundary cases,
selection modes, and nested lists.
Add cypress tests for arrow key navigation between internal elements
across list items. Tests cover basic navigation, skipping standard items,
group boundaries, varying element counts, and boundary conditions.
F7 and F2 navigation now checks if there are tabbable elements
inside the list item before handling the event. If no tabbable
elements exist (e.g., delete button with tabindex="-1"), the
event propagates to allow parent components like Tokenizer to
handle it with their custom logic.

This fixes interference with Tokenizer's F7 behavior while
maintaining correct navigation for custom list items.
@kgogov kgogov force-pushed the list-item-custom-keyboard-navigation branch from 5f38de1 to 7d958d0 Compare November 24, 2025 15:44
@ui5-webcomponents-bot ui5-webcomponents-bot temporarily deployed to preview November 24, 2025 15:50 Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[SF_ACC][[ui5-List]: Unable to scroll down via down arrow when focus on item control

3 participants