From 7577e703c2b6b482637d277bc1d7aba3efffa51b Mon Sep 17 00:00:00 2001 From: gnezim Date: Tue, 21 Apr 2026 08:32:21 +0300 Subject: [PATCH] Close SharePanel on Escape + mark as role=dialog with aria-label (a11y + PrimeNG parity) --- .../components/BoardDetailsHeader/SharePanel.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/features/online-board/components/BoardDetailsHeader/SharePanel.tsx b/src/features/online-board/components/BoardDetailsHeader/SharePanel.tsx index 5d55b028..00c8c82c 100644 --- a/src/features/online-board/components/BoardDetailsHeader/SharePanel.tsx +++ b/src/features/online-board/components/BoardDetailsHeader/SharePanel.tsx @@ -1,4 +1,4 @@ -import type { FC, MouseEvent } from "react"; +import { type FC, type MouseEvent, useEffect } from "react"; import { useTranslation } from "@/i18n/provider.js"; import "./actions.scss"; @@ -12,6 +12,15 @@ export const SharePanel: FC = ({ url, locale, onClose }) => { const { t } = useTranslation(); const encoded = encodeURIComponent(url); + // Close on Escape — matches Angular's PrimeNG p-overlayPanel dismissable behaviour. + useEffect(() => { + const onKey = (e: KeyboardEvent) => { + if (e.key === "Escape") onClose(); + }; + window.addEventListener("keydown", onKey); + return () => window.removeEventListener("keydown", onKey); + }, [onClose]); + const handleCopy = async (e: MouseEvent) => { e.preventDefault(); try { @@ -23,7 +32,7 @@ export const SharePanel: FC = ({ url, locale, onClose }) => { }; return ( -
+