diff --git a/src/components/drawer/drawer.ts b/src/components/drawer/drawer.ts index 3971a788..9e10c8bd 100644 --- a/src/components/drawer/drawer.ts +++ b/src/components/drawer/drawer.ts @@ -120,6 +120,10 @@ export default class SlDrawer extends ShoelaceElement { lockBodyScrolling(this); } } + // If there is an autofocus element, let it take focuse normally, otherwise focus the panel. + if (!this.querySelector('[autofocus]')) { + this.panel.focus({ preventScroll: true }); + } } disconnectedCallback() { @@ -143,14 +147,14 @@ export default class SlDrawer extends ShoelaceElement { } private addOpenListeners() { - document.addEventListener('keydown', this.handleDocumentKeyDown); + this.drawer.addEventListener('keydown', this.handleKeyDown); } private removeOpenListeners() { - document.removeEventListener('keydown', this.handleDocumentKeyDown); + this.drawer.removeEventListener('keydown', this.handleKeyDown); } - private handleDocumentKeyDown = (event: KeyboardEvent) => { + private handleKeyDown = (event: KeyboardEvent) => { if (this.open && !this.contained && event.key === 'Escape') { event.stopPropagation(); this.requestClose('keyboard'); @@ -307,6 +311,7 @@ export default class SlDrawer extends ShoelaceElement { 'drawer--rtl': this.localize.dir() === 'rtl', 'drawer--has-footer': this.hasSlotController.test('footer') })} + @keydown=${this.handleKeyDown} >