Skip to content

ix-input: aria-label / aria-required on host not exposed to native input in shadow root (screen readers announce no name or required state) #2913

Open

Description

@Gaurav-Rastogi00

Prerequisites

  • I have read the Contributing Guidelines.
  • I have not leaked any internal/restricted information like screenshots, videos, code snippets, links etc.

What happened?

Summary

When aria-label (or aria-required) is set on <ix-input>, it stays on the host element and never reaches the native <input> inside the shadow root. Screen readers therefore announce only "edit text" and give no accessible name or required state for the field.

Environment

  • @siemens/ix: 3.2.0
  • @siemens/ix-vue:
  • Framework: Vue 3
  • Screen readers: VoiceOver (macOS/iOS), TalkBack (Android) <add NVDA/JAWS if tested>
  • Browsers:

Steps to reproduce

  1. Render an input with an external label and a required state:
    <ix-typography id="loc-label">Location *</ix-typography>
    <ix-input aria-label="Location" aria-required="true" required></ix-input>
  2. Turn on a screen reader.
  3. Tab into the input.

What type of frontend framework are you seeing the problem on?

Others

On which version of the frontend framework are you experiencing the issue?

"vue": "^3.5.29",

Which version of iX do you use?

v3

Code to produce this issue.

<IxInput
          :label=""
          :value=""
          readonly
          data-br=""
        />

 <IxTextarea
        class=""
        :label=""
        :value=""
        data-br=""
        :textarea-width=""
        :textarea-height=""
      />

Activity

  1. kathrinschalber commented on Oct 27, 2026

    @kathrinschalber
    Collaborator

    Added to our internal backlog (internal reference EIX-484)

  2. added
    type: bugSomething isn't working
    BacklogIts part of the team backlog
    and removed
    triageWe discuss this topic in our internal weekly
    on Oct 27, 2026
  3. khushi-git-7 commented on Nov 3, 2026

    @khushi-git-7

    Hi @kathrinschalber, I saw this is on your internal backlog (EIX-484). Would it be okay if I picked it up, or is someone on the team already working on it?

    What I'd do, reusing what ix-date-dropdown and ix-slider already do:

    1. In ix-input, ix-number-input and ix-textarea, collect the host's ARIA attributes once with a11yHostAttributes(this.hostElement) and spread them onto the native <input> / <textarea>. Like the other components, this moves them off the host, so the name isn't announced twice.
    2. Keep aria-invalid coming from the validation state, as getAriaAttributesForInput does today. aria-required becomes true when either required is set or the host had aria-required="true".
    3. Tests: a host aria-label ends up on the native control and not on the host, a host aria-required="true" is exposed on the native control, and required still sets it as before.
    4. A changeset for @siemens/ix.
  4. kathrinschalber commented on Nov 4, 2026

    @kathrinschalber
    Collaborator

    Hi @khushi-git-7! as you can see, my colleague just added the contribution badge, so we would be happy to get your support there ❤️

  5. khushi-git-7 commented on Nov 4, 2026

    @khushi-git-7

    Thank you! The PR is up: #2975

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions