+ // Keyboard navigation
+ onChildEvent(this.$el, '[data-entity-type]', 'keydown', (e, el) => {
+ if (e.ctrlKey && e.code === 'Enter') {
+ const form = this.$el.closest('form');
+ if (form) {
+ form.submit();
+ e.preventDefault();
+ return;
+ }
+ }
+
+ if (e.code === 'ArrowDown') {
+ this.focusAdjacent(true);
+ }
+ if (e.code === 'ArrowUp') {
+ this.focusAdjacent(false);
+ }
+ });
+
+ this.searchInput.addEventListener('keydown', e => {
+ if (e.code === 'ArrowDown') {
+ this.focusAdjacent(true);
+ }
+ })
+ }
+
+ focusAdjacent(forward = true) {
+ const items = Array.from(this.resultsContainer.querySelectorAll('[data-entity-type]'));
+ const selectedIndex = items.indexOf(document.activeElement);
+ const newItem = items[selectedIndex+ (forward ? 1 : -1)] || items[0];
+ if (newItem) {
+ newItem.focus();
+ }