@@ -13,6 +13,7 @@ import EventHandler from './dom/event-handler.js'
13
13
import Manipulator from './dom/manipulator.js'
14
14
import SelectorEngine from './dom/selector-engine.js'
15
15
import { defineJQueryPlugin , getElement , isRTL } from './util/index.js'
16
+ import FocusTrap from './util/focustrap.js'
16
17
import {
17
18
convertToDateObject , getDateBySelectionType , getLocalDateFromString , isDateDisabled
18
19
} from './util/calendar.js'
@@ -218,6 +219,8 @@ class DateRangePicker extends BaseComponent {
218
219
this . _createDateRangePickerCalendars ( )
219
220
this . _addEventListeners ( )
220
221
this . _addCalendarEventListeners ( )
222
+
223
+ this . _focustrap = this . _initializeFocusTrap ( )
221
224
}
222
225
223
226
// Getters
@@ -254,6 +257,7 @@ class DateRangePicker extends BaseComponent {
254
257
this . _menu . classList . add ( CLASS_NAME_SHOW )
255
258
}
256
259
260
+ this . _focustrap . activate ( )
257
261
EventHandler . trigger ( this . _element , EVENT_SHOWN )
258
262
259
263
this . _createPopper ( )
@@ -273,6 +277,7 @@ class DateRangePicker extends BaseComponent {
273
277
this . _menu . classList . remove ( CLASS_NAME_SHOW )
274
278
}
275
279
280
+ this . _focustrap . deactivate ( )
276
281
EventHandler . trigger ( this . _element , EVENT_HIDDEN )
277
282
}
278
283
@@ -289,6 +294,8 @@ class DateRangePicker extends BaseComponent {
289
294
clearTimeout ( this . _endInputTimeout )
290
295
}
291
296
297
+ this . _focustrap . deactivate ( )
298
+
292
299
super . dispose ( )
293
300
}
294
301
@@ -335,6 +342,13 @@ class DateRangePicker extends BaseComponent {
335
342
}
336
343
337
344
// Private
345
+ _initializeFocusTrap ( ) {
346
+ return new FocusTrap ( {
347
+ additionalElement : this . _config . container ? this . _menu : null ,
348
+ trapElement : this . _element
349
+ } )
350
+ }
351
+
338
352
_addEventListeners ( ) {
339
353
EventHandler . on ( this . _indicatorElement , EVENT_CLICK , ( ) => {
340
354
if ( ! this . _config . disabled ) {
@@ -357,6 +371,7 @@ class DateRangePicker extends BaseComponent {
357
371
EventHandler . on ( this . _element , EVENT_KEYDOWN , event => {
358
372
if ( event . key === ESCAPE_KEY ) {
359
373
this . hide ( )
374
+ this . _startInput . focus ( )
360
375
}
361
376
} )
362
377
@@ -460,7 +475,7 @@ class DateRangePicker extends BaseComponent {
460
475
}
461
476
462
477
_addCalendarEventListeners ( ) {
463
- for ( const calendar of SelectorEngine . find ( SELECTOR_CALENDAR , this . _element ) ) {
478
+ for ( const calendar of SelectorEngine . find ( SELECTOR_CALENDAR , this . _menu ) ) {
464
479
EventHandler . on ( calendar , 'startDateChange.coreui.calendar' , event => {
465
480
this . _changeStartDate ( event . date )
466
481
@@ -1068,7 +1083,7 @@ class DateRangePicker extends BaseComponent {
1068
1083
const composedPath = event . composedPath ( )
1069
1084
1070
1085
if (
1071
- composedPath . includes ( context . _element )
1086
+ composedPath . includes ( context . _element ) || composedPath . includes ( context . _menu )
1072
1087
) {
1073
1088
continue
1074
1089
}
0 commit comments