vueform / multiselect

Vue 3 multiselect component with single select, multiselect and tagging options (+Tailwind CSS support).
https://vueform.com
MIT License
807 stars 150 forks source link

Accessibility Issue: Elements must only use supported ARIA attributes #430

Open kathirr007 opened 1 month ago

kathirr007 commented 1 month ago

Hi,

I'm getting the following accessibility issue Elements must only use supported ARIA attributes

Following is the issue, when add searchable attribute to true getting this issue:

<input type="text" class="w-full absolute inset-0 outline-none focus:ring-0 appearance-none box-border border-0 text-base font-sans bg-white rounded pl-3.5 rtl:pl-0 rtl:pr-3.5" autocomplete="off" id="selectGroups" aria-controls="selectGroups-multiselect-options" aria-placeholder="Search for Groups" aria-expanded="false" aria-multiselectable="true" role="combobox" aria-labelledby="selectGroups-assist">

@vueform/multiselect adds the following aria- attributes aria-placeholder="Search for Groups", aria-multiselectable="true". But those are not valid now. If we remove those attributes the issue will be resolved.

I've gone through the actual component code as well and found where the issue is

The following is the place when the searchable attribute is enabled set as true

<!-- Search -->
<template v-if="mode !== 'tags' && searchable && !disabled">
  <input
    :type="inputType"
    :modelValue="search"
    :value="search"
    :class="classList.search"
    :autocomplete="autocomplete"
    :id="searchable ? id : undefined"
    @input="handleSearchInput"
    @keypress="handleKeypress"
    @paste.stop="handlePaste"
    ref="input"

    :aria-controls="ariaControls"
    :aria-placeholder="ariaPlaceholder"
    :aria-expanded="isOpen"
    :aria-activedescendant="ariaActiveDescendant"
    :aria-multiselectable="ariaMultiselectable"
    role="combobox"

    v-bind="{
      ...attrs,
      ...arias,
    }"
  />
</template>

And the following code for Tags with search option enabled

<!-- Actual search input -->
<input    
  v-if="searchable && !disabled"
  :type="inputType"
  :modelValue="search"
  :value="search"
  :class="classList.tagsSearch"
  :id="searchable ? id : undefined"
  :autocomplete="autocomplete"
  @input="handleSearchInput"
  @keypress="handleKeypress"
  @paste.stop="handlePaste"
  ref="input"

  :aria-controls="ariaControls"
  :aria-placeholder="ariaPlaceholder"
  :aria-expanded="isOpen"
  :aria-activedescendant="ariaActiveDescendant"
  :aria-multiselectable="ariaMultiselectable"
  role="combobox"

  v-bind="{
    ...attrs,
    ...arias,
  }"
/>

If we remove :aria-placeholder="ariaPlaceholder" and :aria-multiselectable="ariaMultiselectable" the issue will be resolved.

tomsdob commented 1 week ago

Facing the same issue, Lighthouse reports this:

[aria-*] attributes do not match their roles Each ARIA role supports a specific subset of aria- attributes. Mismatching these invalidates the aria- attributes. Learn how to match ARIA attributes to their roles.