From 2615e8a08ef369fb8e93d5e32d1f6a5d046522ad Mon Sep 17 00:00:00 2001 From: Eugene Olonov Date: Mon, 19 Oct 2026 14:15:54 -0700 Subject: [PATCH 1/3] Separate link reference markers from the previous word in the message accessible name --- CHANGELOG.md | 1 + .../accessibleName.linkReference.html | 67 +++++++++++++++++++ .../component/src/Utils/activityAltText.ts | 3 + 3 files changed, 71 insertions(+) create mode 100644 __tests__/html2/accessibility/accessibleName.linkReference.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ea94b2678..522067ab00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,7 @@ Legends: - Fixed screen readers announcing a single audio, video, or animation in a card as a list item, such as "1 of 1", fixes [#5722](https://github.com/microsoft/BotFramework-WebChat/issues/5722), in PR [#5903](https://github.com/microsoft/BotFramework-WebChat/pull/5903), by [@OEvgeny](https://github.com/OEvgeny) - Fixed video and animation cards disappearing in production builds when the video URL is relative or invalid, in PR [#5889](https://github.com/microsoft/BotFramework-WebChat/pull/5889), by [@OEvgeny](https://github.com/OEvgeny) - Fixed timestamps always using the 12-hour clock, such as "4:41 PM" instead of "16:41" in German, in PR [#5920](https://github.com/microsoft/BotFramework-WebChat/pull/5920), by [@OEvgeny](https://github.com/OEvgeny) +- Fixed screen readers gluing a link reference marker to the previous word in the message summary, such as "settings1" for `settings[1]`, in PR [#XXXX](https://github.com/microsoft/BotFramework-WebChat/pull/XXXX), by [@OEvgeny](https://github.com/OEvgeny) ## [4.19.2] - 2026-10-08 diff --git a/__tests__/html2/accessibility/accessibleName.linkReference.html b/__tests__/html2/accessibility/accessibleName.linkReference.html new file mode 100644 index 0000000000..c372e3707c --- /dev/null +++ b/__tests__/html2/accessibility/accessibleName.linkReference.html @@ -0,0 +1,67 @@ + + + + + + + + + +
+ + + + diff --git a/packages/component/src/Utils/activityAltText.ts b/packages/component/src/Utils/activityAltText.ts index ddf5e4e175..4d9c6de664 100644 --- a/packages/component/src/Utils/activityAltText.ts +++ b/packages/component/src/Utils/activityAltText.ts @@ -88,6 +88,9 @@ function htmlTextAlternatives(document: Document): string[] { if (nodeType === Node.TEXT_NODE) { return [textContent]; + } else if (tagName === 'A' || tagName === 'BUTTON') { + // Links and citation buttons are separate words, e.g. "settings[1]" should read "settings 1", not "settings1". + return /\S$/u.test(node.previousSibling?.textContent || '') ? [' '] : []; } else if (tagName === 'IMG') { return [node.getAttribute('alt')]; } else if (!HTML_INLINE_TAGS.includes(tagName)) { From 3058bc37cd1392bf44bb681b17b739c1984e58b1 Mon Sep 17 00:00:00 2001 From: Eugene Olonov Date: Mon, 19 Oct 2026 14:19:59 -0700 Subject: [PATCH 2/3] Add PR number to changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 522067ab00..6679fbb870 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,7 +63,7 @@ Legends: - Fixed screen readers announcing a single audio, video, or animation in a card as a list item, such as "1 of 1", fixes [#5722](https://github.com/microsoft/BotFramework-WebChat/issues/5722), in PR [#5903](https://github.com/microsoft/BotFramework-WebChat/pull/5903), by [@OEvgeny](https://github.com/OEvgeny) - Fixed video and animation cards disappearing in production builds when the video URL is relative or invalid, in PR [#5889](https://github.com/microsoft/BotFramework-WebChat/pull/5889), by [@OEvgeny](https://github.com/OEvgeny) - Fixed timestamps always using the 12-hour clock, such as "4:41 PM" instead of "16:41" in German, in PR [#5920](https://github.com/microsoft/BotFramework-WebChat/pull/5920), by [@OEvgeny](https://github.com/OEvgeny) -- Fixed screen readers gluing a link reference marker to the previous word in the message summary, such as "settings1" for `settings[1]`, in PR [#XXXX](https://github.com/microsoft/BotFramework-WebChat/pull/XXXX), by [@OEvgeny](https://github.com/OEvgeny) +- Fixed screen readers gluing a link reference marker to the previous word in the message summary, such as "settings1" for `settings[1]`, in PR [#5923](https://github.com/microsoft/BotFramework-WebChat/pull/5923), by [@OEvgeny](https://github.com/OEvgeny) ## [4.19.2] - 2026-10-08 From 8a6f663d24e72b0cd6ba6021bffbd9cc32c3fd90 Mon Sep 17 00:00:00 2001 From: Eugene Olonov Date: Mon, 19 Oct 2026 16:08:59 -0700 Subject: [PATCH 3/3] Show the live region copy in the link reference snapshot --- .../accessibleName.linkReference.html | 9 ++++++++- ...accessibleName.linkReference.html.snap-1.png | Bin 0 -> 20555 bytes 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 __tests__/html2/accessibility/accessibleName.linkReference.html.snap-1.png diff --git a/__tests__/html2/accessibility/accessibleName.linkReference.html b/__tests__/html2/accessibility/accessibleName.linkReference.html index c372e3707c..b1403149a9 100644 --- a/__tests__/html2/accessibility/accessibleName.linkReference.html +++ b/__tests__/html2/accessibility/accessibleName.linkReference.html @@ -2,6 +2,8 @@ + + @@ -25,7 +27,7 @@ { directLine, store, - styleOptions: { internalLiveRegionFadeAfter: 60000 } // Keep the live region content for the assertion. + styleOptions: { hideSendBox: true, internalLiveRegionFadeAfter: 60000 } // Keep the live region content for the assertion and the snapshot. }, document.getElementById('webchat') ); @@ -61,6 +63,11 @@ .replace(/\u200b/gu, '') ).toContain('Bot said:\nOverride the proxy settings 1.') ); + + await pageConditions.liveRegionStabilized(); + + // THEN: the live region (top) shows "Override the proxy settings 1." with a space, while the transcript shows "settings[1].". + await host.snapshot('local'); }); diff --git a/__tests__/html2/accessibility/accessibleName.linkReference.html.snap-1.png b/__tests__/html2/accessibility/accessibleName.linkReference.html.snap-1.png new file mode 100644 index 0000000000000000000000000000000000000000..50fe2b068a8bb97b9fc285d02e07885e722db1ce GIT binary patch literal 20555 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