From 3cc3559348155f7e05b6c1c0da934910072dcf77 Mon Sep 17 00:00:00 2001 From: Geert Selderslaghs Date: Sun, 15 Dec 2024 21:01:59 +0100 Subject: [PATCH] accessibility(Autocomplete) implemented tabindex and aria expanded #538 --- src/autocomplete.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/autocomplete.ts b/src/autocomplete.ts index e07ee62335..944736b8b7 100644 --- a/src/autocomplete.ts +++ b/src/autocomplete.ts @@ -3,7 +3,7 @@ import { Dropdown, DropdownOptions } from "./dropdown"; import { Component, BaseOptions, InitElements, MElement } from "./component"; export interface AutocompleteData { - /** + /** * A primitive value that can be converted to string. * If "text" is not provided, it will also be used as "option text" as well */ @@ -82,7 +82,7 @@ let _defaults: AutocompleteOptions = { onSearch: (text: string, autocomplete: Autocomplete) => { const normSearch = text.toLocaleLowerCase(); autocomplete.setMenuItems( - autocomplete.options.data.filter((option) => + autocomplete.options.data.filter((option) => option.id.toString().toLocaleLowerCase().includes(normSearch) || option.text?.toLocaleLowerCase().includes(normSearch) ) @@ -118,7 +118,7 @@ export class Autocomplete extends Component { ...Autocomplete.defaults, ...options }; - + this.isOpen = false; this.count = 0; this.activeIndex = -1; @@ -215,6 +215,7 @@ export class Autocomplete extends Component { this.container.style.maxHeight = this.options.maxDropDownHeight; this.container.id = `autocomplete-options-${Utils.guid()}`; this.container.classList.add('autocomplete-content', 'dropdown-content'); + this.container.ariaExpanded = 'true'; this.el.setAttribute('data-target', this.container.id); this.menuItems.forEach(menuItem => { @@ -260,6 +261,7 @@ export class Autocomplete extends Component { } _removeDropdown() { + this.container.ariaExpanded = 'false'; this.container.parentNode.removeChild(this.container); } @@ -368,6 +370,7 @@ export class Autocomplete extends Component { 'style', 'display:grid; grid-auto-flow: column; user-select: none; align-items: center;' ); + item.tabIndex = 0; // Checkbox if (this.options.isMultiSelect) { item.innerHTML = `