From 5457b4440b33bf01868ce10cb1b2891009bff4e5 Mon Sep 17 00:00:00 2001 From: wazeerc <58399263+wazeerc@users.noreply.github.com> Date: Fri, 2 May 2025 20:09:55 +0400 Subject: [PATCH] feat: close dropdown on `Escape` key press --- src/components/dropdown/index.ts | 13 +++++++++++++ src/components/dropdown/interface.ts | 1 + 2 files changed, 14 insertions(+) diff --git a/src/components/dropdown/index.ts b/src/components/dropdown/index.ts index 47f7fbf24..5136450ef 100644 --- a/src/components/dropdown/index.ts +++ b/src/components/dropdown/index.ts @@ -39,6 +39,7 @@ class Dropdown implements DropdownInterface { _hoverShowTargetElHandler: EventListenerOrEventListenerObject; _hoverHideHandler: EventListenerOrEventListenerObject; _clickHandler: EventListenerOrEventListenerObject; + _keydownEventListener: EventListenerOrEventListenerObject; constructor( targetElement: HTMLElement | null = null, @@ -101,6 +102,8 @@ class Dropdown implements DropdownInterface { }); } + document.removeEventListener('keydown', this._keydownEventListener); + this._popperInstance.destroy(); this._initialized = false; } @@ -128,6 +131,16 @@ class Dropdown implements DropdownInterface { }); } + this._keydownEventListener = (ev: KeyboardEvent) => { + if (ev.key === 'Escape') { + if (this.isVisible()) { + this.hide(); + } + } + }; + + document.addEventListener('keydown', this._keydownEventListener); + this._hoverShowTriggerElHandler = (ev) => { if (ev.type === 'click') { this.toggle(); diff --git a/src/components/dropdown/interface.ts b/src/components/dropdown/interface.ts index 50f1f0b12..b06bb463f 100644 --- a/src/components/dropdown/interface.ts +++ b/src/components/dropdown/interface.ts @@ -13,6 +13,7 @@ export declare interface DropdownInterface { _popperInstance: PopperInstance; _initialized: boolean; _clickOutsideEventListener: EventListenerOrEventListenerObject; + _keydownEventListener: EventListenerOrEventListenerObject; init(): void; _createPopperInstance(): PopperInstance;