From 56a32fe162ce1d08ab0ea90df015610c7b0012dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Fri, 24 Apr 2026 18:55:34 +0400 Subject: [PATCH] Fix intrusive auto-focus on cookie banner initial load MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only focus the banner on user-initiated re-opens (hidden -> banner), not on the initial page load (loading -> banner). Also use preventScroll to avoid jarring scroll jumps on programmatic focus. Signed-off-by: Émile Ré --- packages/cookie-banner/src/components/banner.ts | 4 ++-- packages/cookie-banner/src/components/base.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cookie-banner/src/components/banner.ts b/packages/cookie-banner/src/components/banner.ts index 4f33dc76f..335200d86 100644 --- a/packages/cookie-banner/src/components/banner.ts +++ b/packages/cookie-banner/src/components/banner.ts @@ -25,9 +25,9 @@ const REQUIRED_BUTTONS = [ export class ProboBanner extends ProboElement { private root: ProboRootElement | null = null; private onStateChange = (e: Event): void => { - const { state } = (e as CustomEvent).detail; + const { state, prev } = (e as CustomEvent).detail; this.hidden = state !== "banner"; - if (state === "banner") { + if (state === "banner" && prev !== "loading") { this.focusFirst(); } }; diff --git a/packages/cookie-banner/src/components/base.ts b/packages/cookie-banner/src/components/base.ts index bdfbc194e..e84072eeb 100644 --- a/packages/cookie-banner/src/components/base.ts +++ b/packages/cookie-banner/src/components/base.ts @@ -26,7 +26,7 @@ export class ProboElement extends HTMLElement { protected focusFirst(): void { requestAnimationFrame(() => { const el = this.querySelector(FOCUSABLE); - el?.focus(); + el?.focus({ preventScroll: true }); }); }