From 06a629d5167071defa1f9da36eda58266046f9c4 Mon Sep 17 00:00:00 2001 From: Eugene Olonov Date: Mon, 19 Oct 2026 15:57:03 -0700 Subject: [PATCH 1/2] Scroll carousel cards into view when focused with TAB When the keyboard moves the focus into a carousel card from outside of it (TAB or SHIFT-TAB), center the card with react-film, as LEFT/RIGHT do, instead of leaving it partially visible. Focus by pointer is not :focus-visible and does not scroll. --- CHANGELOG.md | 1 + .../navigation.arrowKeys.formControls.html | 8 +- .../navigation.tab.scrollIntoView.html | 137 ++++++++++++++++++ ...igation.tab.scrollIntoView.html.snap-1.png | Bin 0 -> 8426 bytes ...igation.tab.scrollIntoView.html.snap-2.png | Bin 0 -> 8405 bytes ...igation.tab.scrollIntoView.html.snap-3.png | Bin 0 -> 7887 bytes ...igation.tab.scrollIntoView.html.snap-4.png | Bin 0 -> 8405 bytes ...navigation.tab.scrollIntoView.pointer.html | 112 ++++++++++++++ ...tab.scrollIntoView.pointer.html.snap-1.png | Bin 0 -> 8418 bytes .../src/Activity/CarouselFilmStrip.js | 15 ++ 10 files changed, 271 insertions(+), 2 deletions(-) create mode 100644 __tests__/html2/carousel/navigation.tab.scrollIntoView.html create mode 100644 __tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-1.png create mode 100644 __tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-2.png create mode 100644 __tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-3.png create mode 100644 __tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-4.png create mode 100644 __tests__/html2/carousel/navigation.tab.scrollIntoView.pointer.html create mode 100644 __tests__/html2/carousel/navigation.tab.scrollIntoView.pointer.html.snap-1.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ea94b2678..1072c1e30c 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 carousel cards focused with TAB staying partially out of view, 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/carousel/navigation.arrowKeys.formControls.html b/__tests__/html2/carousel/navigation.arrowKeys.formControls.html index 531e140f5c..a9bdc4962e 100644 --- a/__tests__/html2/carousel/navigation.arrowKeys.formControls.html +++ b/__tests__/html2/carousel/navigation.arrowKeys.formControls.html @@ -217,14 +217,18 @@ // WHEN: Press TAB twice to focus on the button inside the hero card. await host.sendTab(2); - // THEN: The button inside the hero card should have focus. + // THEN: The button inside the hero card should have focus, TAB into the hero card scrolled it into view. expect(document.activeElement).toBe(heroCardButton); + await waitFor(() => expect(isCardInView(cards[1])).toBe(true)); + await waitForCarouselSettled(); // WHEN: Press LEFT and RIGHT on the button inside the hero card. // THEN: The button inside the hero card should keep focus. await host.sendKeys('ARROW_LEFT'); expect(document.activeElement).toBe(heroCardButton); - expect(carouselFilmstrip.scrollLeft).toBe(0); + + await waitForCarouselScrolled(); + expect(document.activeElement).toBe(heroCardButton); await host.sendKeys('ARROW_RIGHT'); expect(document.activeElement).toBe(heroCardButton); diff --git a/__tests__/html2/carousel/navigation.tab.scrollIntoView.html b/__tests__/html2/carousel/navigation.tab.scrollIntoView.html new file mode 100644 index 0000000000..48636ec437 --- /dev/null +++ b/__tests__/html2/carousel/navigation.tab.scrollIntoView.html @@ -0,0 +1,137 @@ + + + + + + +
+ + + + diff --git a/__tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-1.png b/__tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-1.png new file mode 100644 index 0000000000000000000000000000000000000000..72bc3494331facf739f69b167de8328eb3f69505 GIT binary patch literal 8426 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 F{{X$rbh!Wk literal 0 HcmV?d00001 diff --git a/__tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-2.png b/__tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-2.png new file mode 100644 index 0000000000000000000000000000000000000000..78f788ada0b1324fdc305754b2e49cdf7721ed4f GIT binary patch literal 8405 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
|<@6dy{gG~|}ard5f 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 literal 0 HcmV?d00001 diff --git a/__tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-4.png b/__tests__/html2/carousel/navigation.tab.scrollIntoView.html.snap-4.png new file mode 100644 index 0000000000000000000000000000000000000000..78f788ada0b1324fdc305754b2e49cdf7721ed4f GIT binary patch literal 8405 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
|<@6dy{gG~|}ard5f zSg^%ge_XHcCvap~_Lh@P&2YP(#n6)B`Ud#wGo)}t%K?7E zBPs$hyR!Y#zhQQDE7}h>aOy0le+Xa4JwEO)}(P~N?#2la1peK?y3>{rBYjpwl@yqg^J|DI9KQ20vT zexBXGv(bcm)wa2eu_#;sFzDdQ^`u-#@tOSywx=Ar4O8aekOxnHKR)Jd01QW&{iZ`R z*J1OhSxv_UX-#KYmnAFSye@6%OVu`h2H)}}G&5DDc)qBBRR;+P`ZUqz6Fq9zJgu<) zs~3B-AwFLhrrKSx6|l=i`oo$TJYyeG*pSVRx*~ovySw#{jv2V1xtv30f)~BqZ7_Tq z=f2pyZJ2HG8bl2GGx_+EX#f1D6TZ~OwXn4{o1@>&%AD*ubo!AjqUqx(p1q5DzRG#y zD3S=TB}h&A^a-q0boWY~p?5SoSk;rr!j$Eob?PGw+s<*$1Ekkt;-Z+#ci%_J&rB55 z7Zs0kT*{iw&SAXwr#TmoCux=Qf?u9&_4$5=&dG+gsV)WFDh(P!a;sn=@tkmy+D4yi z5vPLW3?4ZQN?%rVi0KR~5$172;<3MqO!&UM7o zcQ-hn>?NnAr2!(bQE-*5j*k(U0| zQBlX^H2_O50C2ky6E$l^sSc$8mIHRuxk6x73ho2W8`F5efV-d`egKH1!jsF;n#W^r zWLeoQM-(tYpxCFp6 z%-1y{HaX7?H^w>QtyQv+r^Q5 zfMXkAg8f%TMcq$oS6$4wGOP*u^-j4X|D}uMa9r(7xC%h(%Cu|NpWaJi%+Lu7QWmFB zwt#aDh{!T-z!p9ahQAY2Q-Bxm@ + + + + + +
+ + + + diff --git a/__tests__/html2/carousel/navigation.tab.scrollIntoView.pointer.html.snap-1.png b/__tests__/html2/carousel/navigation.tab.scrollIntoView.pointer.html.snap-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3dbae63c93d12ec2040e1e7a8d1460b6d9549e GIT binary patch literal 8418 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 literal 0 HcmV?d00001 diff --git a/packages/component/src/Activity/CarouselFilmStrip.js b/packages/component/src/Activity/CarouselFilmStrip.js index 306cdee62c..b25f7ba052 100644 --- a/packages/component/src/Activity/CarouselFilmStrip.js +++ b/packages/component/src/Activity/CarouselFilmStrip.js @@ -38,6 +38,20 @@ const CarouselFilmStrip = ({ const scrollableCallbackRef = useScrollableCallbackRef(); const scrollTo = useScrollTo(); + // When the keyboard moves the focus into a card from outside of it (TAB or SHIFT-TAB), center the card with react-film, + // as LEFT/RIGHT do, instead of leaving it partially visible. Clicking a card or button is not :focus-visible and does not + // scroll; text inputs are, so the card is centered for typing. + const handleAttachmentsFocus = useCallback( + ({ currentTarget, relatedTarget, target }) => { + const cards = Array.from(currentTarget.children); + + const index = cards.findIndex(card => card.contains(target)); + + ~index && !cards[+index].contains(relatedTarget) && target.matches(':focus-visible') && scrollTo(() => index); + }, + [scrollTo] + ); + // When a card itself has focus (not a control inside it), LEFT/RIGHT move the focus to the previous/next card // (mirrored in RTL), HOME/END to the first/last card. This is a shortcut: every card is still a tab stop. const handleAttachmentsKeyDown = useCallback( @@ -167,6 +181,7 @@ const CarouselFilmStrip = ({
    From 9779dee5a5333d1f115a5a8a73d007e30f66a619 Mon Sep 17 00:00:00 2001 From: Eugene Olonov Date: Mon, 19 Oct 2026 16:06:15 -0700 Subject: [PATCH 2/2] Add PR number to changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1072c1e30c..2d8aa948a6 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 carousel cards focused with TAB staying partially out of view, in PR [#XXXX](https://github.com/microsoft/BotFramework-WebChat/pull/XXXX), by [@OEvgeny](https://github.com/OEvgeny) +- Fixed carousel cards focused with TAB staying partially out of view, in PR [#5926](https://github.com/microsoft/BotFramework-WebChat/pull/5926), by [@OEvgeny](https://github.com/OEvgeny) ## [4.19.2] - 2026-10-08