@@ -13,6 +13,7 @@ import EventHandler from './dom/event-handler.js'
1313import Manipulator from './dom/manipulator.js'
1414import SelectorEngine from './dom/selector-engine.js'
1515import { defineJQueryPlugin , getElement , isRTL } from './util/index.js'
16+ import FocusTrap from './util/focustrap.js'
1617import {
1718 convertToDateObject , getDateBySelectionType , getLocalDateFromString , isDateDisabled
1819} from './util/calendar.js'
@@ -218,6 +219,8 @@ class DateRangePicker extends BaseComponent {
218219 this . _createDateRangePickerCalendars ( )
219220 this . _addEventListeners ( )
220221 this . _addCalendarEventListeners ( )
222+
223+ this . _focustrap = this . _initializeFocusTrap ( )
221224 }
222225
223226 // Getters
@@ -254,6 +257,7 @@ class DateRangePicker extends BaseComponent {
254257 this . _menu . classList . add ( CLASS_NAME_SHOW )
255258 }
256259
260+ this . _focustrap . activate ( )
257261 EventHandler . trigger ( this . _element , EVENT_SHOWN )
258262
259263 this . _createPopper ( )
@@ -273,6 +277,7 @@ class DateRangePicker extends BaseComponent {
273277 this . _menu . classList . remove ( CLASS_NAME_SHOW )
274278 }
275279
280+ this . _focustrap . deactivate ( )
276281 EventHandler . trigger ( this . _element , EVENT_HIDDEN )
277282 }
278283
@@ -289,6 +294,8 @@ class DateRangePicker extends BaseComponent {
289294 clearTimeout ( this . _endInputTimeout )
290295 }
291296
297+ this . _focustrap . deactivate ( )
298+
292299 super . dispose ( )
293300 }
294301
@@ -335,6 +342,13 @@ class DateRangePicker extends BaseComponent {
335342 }
336343
337344 // Private
345+ _initializeFocusTrap ( ) {
346+ return new FocusTrap ( {
347+ additionalElement : this . _config . container ? this . _menu : null ,
348+ trapElement : this . _element
349+ } )
350+ }
351+
338352 _addEventListeners ( ) {
339353 EventHandler . on ( this . _indicatorElement , EVENT_CLICK , ( ) => {
340354 if ( ! this . _config . disabled ) {
@@ -357,6 +371,7 @@ class DateRangePicker extends BaseComponent {
357371 EventHandler . on ( this . _element , EVENT_KEYDOWN , event => {
358372 if ( event . key === ESCAPE_KEY ) {
359373 this . hide ( )
374+ this . _startInput . focus ( )
360375 }
361376 } )
362377
@@ -460,7 +475,7 @@ class DateRangePicker extends BaseComponent {
460475 }
461476
462477 _addCalendarEventListeners ( ) {
463- for ( const calendar of SelectorEngine . find ( SELECTOR_CALENDAR , this . _element ) ) {
478+ for ( const calendar of SelectorEngine . find ( SELECTOR_CALENDAR , this . _menu ) ) {
464479 EventHandler . on ( calendar , 'startDateChange.coreui.calendar' , event => {
465480 this . _changeStartDate ( event . date )
466481
@@ -1068,7 +1083,7 @@ class DateRangePicker extends BaseComponent {
10681083 const composedPath = event . composedPath ( )
10691084
10701085 if (
1071- composedPath . includes ( context . _element )
1086+ composedPath . includes ( context . _element ) || composedPath . includes ( context . _menu )
10721087 ) {
10731088 continue
10741089 }
0 commit comments