focus-trap 6.1.1 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * focus-trap 6.1.1
2
+ * focus-trap 6.2.0
3
3
  * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE
4
4
  */
5
5
  'use strict';
@@ -8,20 +8,71 @@ Object.defineProperty(exports, '__esModule', { value: true });
8
8
 
9
9
  var tabbable = require('tabbable');
10
10
 
11
+ function _defineProperty(obj, key, value) {
12
+ if (key in obj) {
13
+ Object.defineProperty(obj, key, {
14
+ value: value,
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true
18
+ });
19
+ } else {
20
+ obj[key] = value;
21
+ }
22
+
23
+ return obj;
24
+ }
25
+
26
+ function ownKeys(object, enumerableOnly) {
27
+ var keys = Object.keys(object);
28
+
29
+ if (Object.getOwnPropertySymbols) {
30
+ var symbols = Object.getOwnPropertySymbols(object);
31
+ if (enumerableOnly) symbols = symbols.filter(function (sym) {
32
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
33
+ });
34
+ keys.push.apply(keys, symbols);
35
+ }
36
+
37
+ return keys;
38
+ }
39
+
40
+ function _objectSpread2(target) {
41
+ for (var i = 1; i < arguments.length; i++) {
42
+ var source = arguments[i] != null ? arguments[i] : {};
43
+
44
+ if (i % 2) {
45
+ ownKeys(Object(source), true).forEach(function (key) {
46
+ _defineProperty(target, key, source[key]);
47
+ });
48
+ } else if (Object.getOwnPropertyDescriptors) {
49
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
50
+ } else {
51
+ ownKeys(Object(source)).forEach(function (key) {
52
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
53
+ });
54
+ }
55
+ }
56
+
57
+ return target;
58
+ }
59
+
11
60
  var activeFocusDelay;
12
61
 
13
- var activeFocusTraps = (function () {
62
+ var activeFocusTraps = function () {
14
63
  var trapQueue = [];
15
64
  return {
16
- activateTrap: function (trap) {
65
+ activateTrap: function activateTrap(trap) {
17
66
  if (trapQueue.length > 0) {
18
67
  var activeTrap = trapQueue[trapQueue.length - 1];
68
+
19
69
  if (activeTrap !== trap) {
20
70
  activeTrap.pause();
21
71
  }
22
72
  }
23
73
 
24
74
  var trapIndex = trapQueue.indexOf(trap);
75
+
25
76
  if (trapIndex === -1) {
26
77
  trapQueue.push(trap);
27
78
  } else {
@@ -30,9 +81,9 @@ var activeFocusTraps = (function () {
30
81
  trapQueue.push(trap);
31
82
  }
32
83
  },
33
-
34
- deactivateTrap: function (trap) {
84
+ deactivateTrap: function deactivateTrap(trap) {
35
85
  var trapIndex = trapQueue.indexOf(trap);
86
+
36
87
  if (trapIndex !== -1) {
37
88
  trapQueue.splice(trapIndex, 1);
38
89
  }
@@ -40,53 +91,60 @@ var activeFocusTraps = (function () {
40
91
  if (trapQueue.length > 0) {
41
92
  trapQueue[trapQueue.length - 1].unpause();
42
93
  }
43
- },
94
+ }
44
95
  };
45
- })();
96
+ }();
46
97
 
47
- function createFocusTrap(element, userOptions) {
98
+ function createFocusTrap(elements, userOptions) {
48
99
  var doc = document;
49
- var container =
50
- typeof element === 'string' ? doc.querySelector(element) : element;
51
100
 
52
- var config = {
101
+ var config = _objectSpread2({
53
102
  returnFocusOnDeactivate: true,
54
103
  escapeDeactivates: true,
55
- delayInitialFocus: true,
56
- ...userOptions,
57
- };
104
+ delayInitialFocus: true
105
+ }, userOptions);
58
106
 
59
107
  var state = {
60
- firstTabbableNode: null,
61
- lastTabbableNode: null,
108
+ // @type {Array<HTMLElement>}
109
+ containers: [],
110
+ // @type {{ firstTabbableNode: HTMLElement, lastTabbableNode: HTMLElement }}
111
+ tabbableGroups: [],
62
112
  nodeFocusedBeforeActivation: null,
63
113
  mostRecentlyFocusedNode: null,
64
114
  active: false,
65
- paused: false,
115
+ paused: false
66
116
  };
67
-
68
117
  var trap = {
69
118
  activate: activate,
70
119
  deactivate: deactivate,
71
120
  pause: pause,
72
121
  unpause: unpause,
122
+ updateContainerElements: updateContainerElements
73
123
  };
74
-
124
+ updateContainerElements(elements);
75
125
  return trap;
76
126
 
127
+ function updateContainerElements(containerElements) {
128
+ var elementsAsArray = [].concat(containerElements).filter(Boolean);
129
+ state.containers = elementsAsArray.map(function (element) {
130
+ return typeof element === 'string' ? doc.querySelector(element) : element;
131
+ });
132
+
133
+ if (state.active) {
134
+ updateTabbableNodes();
135
+ }
136
+
137
+ return trap;
138
+ }
139
+
77
140
  function activate(activateOptions) {
78
141
  if (state.active) return;
79
-
80
142
  updateTabbableNodes();
81
-
82
143
  state.active = true;
83
144
  state.paused = false;
84
145
  state.nodeFocusedBeforeActivation = doc.activeElement;
146
+ var onActivate = activateOptions && activateOptions.onActivate ? activateOptions.onActivate : config.onActivate;
85
147
 
86
- var onActivate =
87
- activateOptions && activateOptions.onActivate
88
- ? activateOptions.onActivate
89
- : config.onActivate;
90
148
  if (onActivate) {
91
149
  onActivate();
92
150
  }
@@ -97,27 +155,19 @@ function createFocusTrap(element, userOptions) {
97
155
 
98
156
  function deactivate(deactivateOptions) {
99
157
  if (!state.active) return;
100
-
101
158
  clearTimeout(activeFocusDelay);
102
-
103
159
  removeListeners();
104
160
  state.active = false;
105
161
  state.paused = false;
106
-
107
162
  activeFocusTraps.deactivateTrap(trap);
163
+ var onDeactivate = deactivateOptions && deactivateOptions.onDeactivate !== undefined ? deactivateOptions.onDeactivate : config.onDeactivate;
108
164
 
109
- var onDeactivate =
110
- deactivateOptions && deactivateOptions.onDeactivate !== undefined
111
- ? deactivateOptions.onDeactivate
112
- : config.onDeactivate;
113
165
  if (onDeactivate) {
114
166
  onDeactivate();
115
167
  }
116
168
 
117
- var returnFocus =
118
- deactivateOptions && deactivateOptions.returnFocus !== undefined
119
- ? deactivateOptions.returnFocus
120
- : config.returnFocusOnDeactivate;
169
+ var returnFocus = deactivateOptions && deactivateOptions.returnFocus !== undefined ? deactivateOptions.returnFocus : config.returnFocusOnDeactivate;
170
+
121
171
  if (returnFocus) {
122
172
  delay(function () {
123
173
  tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));
@@ -128,100 +178,101 @@ function createFocusTrap(element, userOptions) {
128
178
  }
129
179
 
130
180
  function pause() {
131
- if (state.paused || !state.active) return;
181
+ if (state.paused || !state.active) return trap;
132
182
  state.paused = true;
133
183
  removeListeners();
184
+ return trap;
134
185
  }
135
186
 
136
187
  function unpause() {
137
- if (!state.paused || !state.active) return;
188
+ if (!state.paused || !state.active) return trap;
138
189
  state.paused = false;
139
190
  updateTabbableNodes();
140
191
  addListeners();
192
+ return trap;
141
193
  }
142
194
 
143
195
  function addListeners() {
144
- if (!state.active) return;
145
-
146
- // There can be only one listening focus trap at a time
147
- activeFocusTraps.activateTrap(trap);
196
+ if (!state.active) return; // There can be only one listening focus trap at a time
148
197
 
149
- // Delay ensures that the focused element doesn't capture the event
198
+ activeFocusTraps.activateTrap(trap); // Delay ensures that the focused element doesn't capture the event
150
199
  // that caused the focus trap activation.
151
- activeFocusDelay = config.delayInitialFocus
152
- ? delay(function () {
153
- tryFocus(getInitialFocusNode());
154
- })
155
- : tryFocus(getInitialFocusNode());
156
200
 
201
+ activeFocusDelay = config.delayInitialFocus ? delay(function () {
202
+ tryFocus(getInitialFocusNode());
203
+ }) : tryFocus(getInitialFocusNode());
157
204
  doc.addEventListener('focusin', checkFocusIn, true);
158
205
  doc.addEventListener('mousedown', checkPointerDown, {
159
206
  capture: true,
160
- passive: false,
207
+ passive: false
161
208
  });
162
209
  doc.addEventListener('touchstart', checkPointerDown, {
163
210
  capture: true,
164
- passive: false,
211
+ passive: false
165
212
  });
166
213
  doc.addEventListener('click', checkClick, {
167
214
  capture: true,
168
- passive: false,
215
+ passive: false
169
216
  });
170
217
  doc.addEventListener('keydown', checkKey, {
171
218
  capture: true,
172
- passive: false,
219
+ passive: false
173
220
  });
174
-
175
221
  return trap;
176
222
  }
177
223
 
178
224
  function removeListeners() {
179
225
  if (!state.active) return;
180
-
181
226
  doc.removeEventListener('focusin', checkFocusIn, true);
182
227
  doc.removeEventListener('mousedown', checkPointerDown, true);
183
228
  doc.removeEventListener('touchstart', checkPointerDown, true);
184
229
  doc.removeEventListener('click', checkClick, true);
185
230
  doc.removeEventListener('keydown', checkKey, true);
186
-
187
231
  return trap;
188
232
  }
189
233
 
190
234
  function getNodeForOption(optionName) {
191
235
  var optionValue = config[optionName];
192
236
  var node = optionValue;
237
+
193
238
  if (!optionValue) {
194
239
  return null;
195
240
  }
241
+
196
242
  if (typeof optionValue === 'string') {
197
243
  node = doc.querySelector(optionValue);
244
+
198
245
  if (!node) {
199
246
  throw new Error('`' + optionName + '` refers to no known node');
200
247
  }
201
248
  }
249
+
202
250
  if (typeof optionValue === 'function') {
203
251
  node = optionValue();
252
+
204
253
  if (!node) {
205
254
  throw new Error('`' + optionName + '` did not return a node');
206
255
  }
207
256
  }
257
+
208
258
  return node;
209
259
  }
210
260
 
211
261
  function getInitialFocusNode() {
212
262
  var node;
263
+
213
264
  if (getNodeForOption('initialFocus') !== null) {
214
265
  node = getNodeForOption('initialFocus');
215
- } else if (container.contains(doc.activeElement)) {
266
+ } else if (containersContain(doc.activeElement)) {
216
267
  node = doc.activeElement;
217
268
  } else {
218
- node = state.firstTabbableNode || getNodeForOption('fallbackFocus');
269
+ var firstTabbableGroup = state.tabbableGroups[0];
270
+ var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;
271
+ node = firstTabbableNode || getNodeForOption('fallbackFocus');
219
272
  }
220
273
 
221
274
  if (!node) {
222
- throw new Error(
223
- 'Your focus-trap needs to have at least one focusable element'
224
- );
275
+ throw new Error('Your focus-trap needs to have at least one focusable element');
225
276
  }
226
277
 
227
278
  return node;
@@ -230,12 +281,12 @@ function createFocusTrap(element, userOptions) {
230
281
  function getReturnFocusNode(previousActiveElement) {
231
282
  var node = getNodeForOption('setReturnFocus');
232
283
  return node ? node : previousActiveElement;
233
- }
234
-
235
- // This needs to be done on mousedown and touchstart instead of click
284
+ } // This needs to be done on mousedown and touchstart instead of click
236
285
  // so that it precedes the focus event.
286
+
287
+
237
288
  function checkPointerDown(e) {
238
- if (container.contains(e.target)) {
289
+ if (containersContain(e.target)) {
239
290
  // allow the click since it ocurred inside the trap
240
291
  return;
241
292
  }
@@ -254,34 +305,30 @@ function createFocusTrap(element, userOptions) {
254
305
  // that was clicked, whether it's focusable or not; by setting
255
306
  // `returnFocus: true`, we'll attempt to re-focus the node originally-focused
256
307
  // on activation (or the configured `setReturnFocus` node)
257
- returnFocus: config.returnFocusOnDeactivate && !tabbable.isFocusable(e.target),
308
+ returnFocus: config.returnFocusOnDeactivate && !tabbable.isFocusable(e.target)
258
309
  });
259
310
  return;
260
- }
261
-
262
- // This is needed for mobile devices.
311
+ } // This is needed for mobile devices.
263
312
  // (If we'll only let `click` events through,
264
313
  // then on mobile they will be blocked anyways if `touchstart` is blocked.)
265
- if (
266
- config.allowOutsideClick &&
267
- (typeof config.allowOutsideClick === 'boolean'
268
- ? config.allowOutsideClick
269
- : config.allowOutsideClick(e))
270
- ) {
314
+
315
+
316
+ if (config.allowOutsideClick && (typeof config.allowOutsideClick === 'boolean' ? config.allowOutsideClick : config.allowOutsideClick(e))) {
271
317
  // allow the click outside the trap to take place
272
318
  return;
273
- }
319
+ } // otherwise, prevent the click
320
+
274
321
 
275
- // otherwise, prevent the click
276
322
  e.preventDefault();
277
- }
323
+ } // In case focus escapes the trap for some strange reason, pull it back in.
324
+
278
325
 
279
- // In case focus escapes the trap for some strange reason, pull it back in.
280
326
  function checkFocusIn(e) {
281
327
  // In Firefox when you Tab out of an iframe the Document is briefly focused.
282
- if (container.contains(e.target) || e.target instanceof Document) {
328
+ if (containersContain(e.target) || e.target instanceof Document) {
283
329
  return;
284
330
  }
331
+
285
332
  e.stopImmediatePropagation();
286
333
  tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());
287
334
  }
@@ -292,72 +339,101 @@ function createFocusTrap(element, userOptions) {
292
339
  deactivate();
293
340
  return;
294
341
  }
342
+
295
343
  if (isTabEvent(e)) {
296
344
  checkTab(e);
297
345
  return;
298
346
  }
299
- }
300
-
301
- // Hijack Tab events on the first and last focusable nodes of the trap,
347
+ } // Hijack Tab events on the first and last focusable nodes of the trap,
302
348
  // in order to prevent focus from escaping. If it escapes for even a
303
349
  // moment it can end up scrolling the page and causing confusion so we
304
350
  // kind of need to capture the action at the keydown phase.
351
+
352
+
305
353
  function checkTab(e) {
306
354
  updateTabbableNodes();
307
- if (e.shiftKey && e.target === state.firstTabbableNode) {
308
- e.preventDefault();
309
- tryFocus(state.lastTabbableNode);
310
- return;
355
+ var destinationNode = null;
356
+
357
+ if (e.shiftKey) {
358
+ var startOfGroupIndex = state.tabbableGroups.findIndex(function (_ref) {
359
+ var firstTabbableNode = _ref.firstTabbableNode;
360
+ return e.target === firstTabbableNode;
361
+ });
362
+
363
+ if (startOfGroupIndex >= 0) {
364
+ var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;
365
+ var destinationGroup = state.tabbableGroups[destinationGroupIndex];
366
+ destinationNode = destinationGroup.lastTabbableNode;
367
+ }
368
+ } else {
369
+ var lastOfGroupIndex = state.tabbableGroups.findIndex(function (_ref2) {
370
+ var lastTabbableNode = _ref2.lastTabbableNode;
371
+ return e.target === lastTabbableNode;
372
+ });
373
+
374
+ if (lastOfGroupIndex >= 0) {
375
+ var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;
376
+
377
+ var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];
378
+ destinationNode = _destinationGroup.firstTabbableNode;
379
+ }
311
380
  }
312
- if (!e.shiftKey && e.target === state.lastTabbableNode) {
381
+
382
+ if (destinationNode) {
313
383
  e.preventDefault();
314
- tryFocus(state.firstTabbableNode);
315
- return;
384
+ tryFocus(destinationNode);
316
385
  }
317
386
  }
318
387
 
319
388
  function checkClick(e) {
320
389
  if (config.clickOutsideDeactivates) return;
321
- if (container.contains(e.target)) return;
322
- if (
323
- config.allowOutsideClick &&
324
- (typeof config.allowOutsideClick === 'boolean'
325
- ? config.allowOutsideClick
326
- : config.allowOutsideClick(e))
327
- ) {
390
+ if (containersContain(e.target)) return;
391
+
392
+ if (config.allowOutsideClick && (typeof config.allowOutsideClick === 'boolean' ? config.allowOutsideClick : config.allowOutsideClick(e))) {
328
393
  return;
329
394
  }
395
+
330
396
  e.preventDefault();
331
397
  e.stopImmediatePropagation();
332
398
  }
333
399
 
334
400
  function updateTabbableNodes() {
335
- var tabbableNodes = tabbable.tabbable(container);
336
- state.firstTabbableNode = tabbableNodes[0] || getInitialFocusNode();
337
- state.lastTabbableNode =
338
- tabbableNodes[tabbableNodes.length - 1] || getInitialFocusNode();
401
+ state.tabbableGroups = state.containers.map(function (container) {
402
+ var tabbableNodes = tabbable.tabbable(container);
403
+ return {
404
+ firstTabbableNode: tabbableNodes[0],
405
+ lastTabbableNode: tabbableNodes[tabbableNodes.length - 1]
406
+ };
407
+ });
339
408
  }
340
409
 
341
410
  function tryFocus(node) {
342
411
  if (node === doc.activeElement) return;
412
+
343
413
  if (!node || !node.focus) {
344
414
  tryFocus(getInitialFocusNode());
345
415
  return;
346
416
  }
347
- node.focus({ preventScroll: !!config.preventScroll });
417
+
418
+ node.focus({
419
+ preventScroll: !!config.preventScroll
420
+ });
348
421
  state.mostRecentlyFocusedNode = node;
422
+
349
423
  if (isSelectableInput(node)) {
350
424
  node.select();
351
425
  }
352
426
  }
427
+
428
+ function containersContain(element) {
429
+ return state.containers.some(function (container) {
430
+ return container.contains(element);
431
+ });
432
+ }
353
433
  }
354
434
 
355
435
  function isSelectableInput(node) {
356
- return (
357
- node.tagName &&
358
- node.tagName.toLowerCase() === 'input' &&
359
- typeof node.select === 'function'
360
- );
436
+ return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function';
361
437
  }
362
438
 
363
439
  function isEscapeEvent(e) {
@@ -1 +1 @@
1
- {"version":3,"file":"focus-trap.js","sources":["../index.js"],"sourcesContent":["import { tabbable, isFocusable } from 'tabbable';\n\nvar activeFocusDelay;\n\nvar activeFocusTraps = (function () {\n var trapQueue = [];\n return {\n activateTrap: function (trap) {\n if (trapQueue.length > 0) {\n var activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n\n deactivateTrap: function (trap) {\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n },\n };\n})();\n\nfunction createFocusTrap(element, userOptions) {\n var doc = document;\n var container =\n typeof element === 'string' ? doc.querySelector(element) : element;\n\n var config = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n ...userOptions,\n };\n\n var state = {\n firstTabbableNode: null,\n lastTabbableNode: null,\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n };\n\n var trap = {\n activate: activate,\n deactivate: deactivate,\n pause: pause,\n unpause: unpause,\n };\n\n return trap;\n\n function activate(activateOptions) {\n if (state.active) return;\n\n updateTabbableNodes();\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n var onActivate =\n activateOptions && activateOptions.onActivate\n ? activateOptions.onActivate\n : config.onActivate;\n if (onActivate) {\n onActivate();\n }\n\n addListeners();\n return trap;\n }\n\n function deactivate(deactivateOptions) {\n if (!state.active) return;\n\n clearTimeout(activeFocusDelay);\n\n removeListeners();\n state.active = false;\n state.paused = false;\n\n activeFocusTraps.deactivateTrap(trap);\n\n var onDeactivate =\n deactivateOptions && deactivateOptions.onDeactivate !== undefined\n ? deactivateOptions.onDeactivate\n : config.onDeactivate;\n if (onDeactivate) {\n onDeactivate();\n }\n\n var returnFocus =\n deactivateOptions && deactivateOptions.returnFocus !== undefined\n ? deactivateOptions.returnFocus\n : config.returnFocusOnDeactivate;\n if (returnFocus) {\n delay(function () {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n });\n }\n\n return trap;\n }\n\n function pause() {\n if (state.paused || !state.active) return;\n state.paused = true;\n removeListeners();\n }\n\n function unpause() {\n if (!state.paused || !state.active) return;\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n }\n\n function addListeners() {\n if (!state.active) return;\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n activeFocusDelay = config.delayInitialFocus\n ? delay(function () {\n tryFocus(getInitialFocusNode());\n })\n : tryFocus(getInitialFocusNode());\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false,\n });\n\n return trap;\n }\n\n function removeListeners() {\n if (!state.active) return;\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n\n return trap;\n }\n\n function getNodeForOption(optionName) {\n var optionValue = config[optionName];\n var node = optionValue;\n if (!optionValue) {\n return null;\n }\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue);\n if (!node) {\n throw new Error('`' + optionName + '` refers to no known node');\n }\n }\n if (typeof optionValue === 'function') {\n node = optionValue();\n if (!node) {\n throw new Error('`' + optionName + '` did not return a node');\n }\n }\n return node;\n }\n\n function getInitialFocusNode() {\n var node;\n if (getNodeForOption('initialFocus') !== null) {\n node = getNodeForOption('initialFocus');\n } else if (container.contains(doc.activeElement)) {\n node = doc.activeElement;\n } else {\n node = state.firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n\n if (!node) {\n throw new Error(\n 'Your focus-trap needs to have at least one focusable element'\n );\n }\n\n return node;\n }\n\n function getReturnFocusNode(previousActiveElement) {\n var node = getNodeForOption('setReturnFocus');\n return node ? node : previousActiveElement;\n }\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n function checkPointerDown(e) {\n if (container.contains(e.target)) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (config.clickOutsideDeactivates) {\n // immediately deactivate the trap\n deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus: config.returnFocusOnDeactivate && !isFocusable(e.target),\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (\n config.allowOutsideClick &&\n (typeof config.allowOutsideClick === 'boolean'\n ? config.allowOutsideClick\n : config.allowOutsideClick(e))\n ) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n }\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n function checkFocusIn(e) {\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (container.contains(e.target) || e.target instanceof Document) {\n return;\n }\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n\n function checkKey(e) {\n if (config.escapeDeactivates !== false && isEscapeEvent(e)) {\n e.preventDefault();\n deactivate();\n return;\n }\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n }\n\n // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n function checkTab(e) {\n updateTabbableNodes();\n if (e.shiftKey && e.target === state.firstTabbableNode) {\n e.preventDefault();\n tryFocus(state.lastTabbableNode);\n return;\n }\n if (!e.shiftKey && e.target === state.lastTabbableNode) {\n e.preventDefault();\n tryFocus(state.firstTabbableNode);\n return;\n }\n }\n\n function checkClick(e) {\n if (config.clickOutsideDeactivates) return;\n if (container.contains(e.target)) return;\n if (\n config.allowOutsideClick &&\n (typeof config.allowOutsideClick === 'boolean'\n ? config.allowOutsideClick\n : config.allowOutsideClick(e))\n ) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n function updateTabbableNodes() {\n var tabbableNodes = tabbable(container);\n state.firstTabbableNode = tabbableNodes[0] || getInitialFocusNode();\n state.lastTabbableNode =\n tabbableNodes[tabbableNodes.length - 1] || getInitialFocusNode();\n }\n\n function tryFocus(node) {\n if (node === doc.activeElement) return;\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n node.focus({ preventScroll: !!config.preventScroll });\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n }\n}\n\nfunction isSelectableInput(node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n}\n\nfunction isEscapeEvent(e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n}\n\nfunction isTabEvent(e) {\n return e.key === 'Tab' || e.keyCode === 9;\n}\n\nfunction delay(fn) {\n return setTimeout(fn, 0);\n}\n\nexport { createFocusTrap };\n"],"names":["isFocusable","tabbable"],"mappings":"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"}
1
+ {"version":3,"file":"focus-trap.js","sources":["../index.js"],"sourcesContent":["import { tabbable, isFocusable } from 'tabbable';\n\nvar activeFocusDelay;\n\nvar activeFocusTraps = (function () {\n var trapQueue = [];\n return {\n activateTrap: function (trap) {\n if (trapQueue.length > 0) {\n var activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n\n deactivateTrap: function (trap) {\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n },\n };\n})();\n\nfunction createFocusTrap(elements, userOptions) {\n var doc = document;\n\n var config = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n ...userOptions,\n };\n\n var state = {\n // @type {Array<HTMLElement>}\n containers: [],\n // @type {{ firstTabbableNode: HTMLElement, lastTabbableNode: HTMLElement }}\n tabbableGroups: [],\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n };\n\n var trap = {\n activate: activate,\n deactivate: deactivate,\n pause: pause,\n unpause: unpause,\n updateContainerElements: updateContainerElements,\n };\n\n updateContainerElements(elements);\n\n return trap;\n\n function updateContainerElements(containerElements) {\n var elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n state.containers = elementsAsArray.map((element) =>\n typeof element === 'string' ? doc.querySelector(element) : element\n );\n\n if (state.active) {\n updateTabbableNodes();\n }\n\n return trap;\n }\n\n function activate(activateOptions) {\n if (state.active) return;\n\n updateTabbableNodes();\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n var onActivate =\n activateOptions && activateOptions.onActivate\n ? activateOptions.onActivate\n : config.onActivate;\n if (onActivate) {\n onActivate();\n }\n\n addListeners();\n return trap;\n }\n\n function deactivate(deactivateOptions) {\n if (!state.active) return;\n\n clearTimeout(activeFocusDelay);\n\n removeListeners();\n state.active = false;\n state.paused = false;\n\n activeFocusTraps.deactivateTrap(trap);\n\n var onDeactivate =\n deactivateOptions && deactivateOptions.onDeactivate !== undefined\n ? deactivateOptions.onDeactivate\n : config.onDeactivate;\n if (onDeactivate) {\n onDeactivate();\n }\n\n var returnFocus =\n deactivateOptions && deactivateOptions.returnFocus !== undefined\n ? deactivateOptions.returnFocus\n : config.returnFocusOnDeactivate;\n if (returnFocus) {\n delay(function () {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n });\n }\n\n return trap;\n }\n\n function pause() {\n if (state.paused || !state.active) return trap;\n state.paused = true;\n removeListeners();\n\n return trap;\n }\n\n function unpause() {\n if (!state.paused || !state.active) return trap;\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n\n return trap;\n }\n\n function addListeners() {\n if (!state.active) return;\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n activeFocusDelay = config.delayInitialFocus\n ? delay(function () {\n tryFocus(getInitialFocusNode());\n })\n : tryFocus(getInitialFocusNode());\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false,\n });\n\n return trap;\n }\n\n function removeListeners() {\n if (!state.active) return;\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n\n return trap;\n }\n\n function getNodeForOption(optionName) {\n var optionValue = config[optionName];\n var node = optionValue;\n if (!optionValue) {\n return null;\n }\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue);\n if (!node) {\n throw new Error('`' + optionName + '` refers to no known node');\n }\n }\n if (typeof optionValue === 'function') {\n node = optionValue();\n if (!node) {\n throw new Error('`' + optionName + '` did not return a node');\n }\n }\n return node;\n }\n\n function getInitialFocusNode() {\n var node;\n if (getNodeForOption('initialFocus') !== null) {\n node = getNodeForOption('initialFocus');\n } else if (containersContain(doc.activeElement)) {\n node = doc.activeElement;\n } else {\n var firstTabbableGroup = state.tabbableGroups[0];\n var firstTabbableNode =\n firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n\n if (!node) {\n throw new Error(\n 'Your focus-trap needs to have at least one focusable element'\n );\n }\n\n return node;\n }\n\n function getReturnFocusNode(previousActiveElement) {\n var node = getNodeForOption('setReturnFocus');\n return node ? node : previousActiveElement;\n }\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n function checkPointerDown(e) {\n if (containersContain(e.target)) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (config.clickOutsideDeactivates) {\n // immediately deactivate the trap\n deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus: config.returnFocusOnDeactivate && !isFocusable(e.target),\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (\n config.allowOutsideClick &&\n (typeof config.allowOutsideClick === 'boolean'\n ? config.allowOutsideClick\n : config.allowOutsideClick(e))\n ) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n }\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n function checkFocusIn(e) {\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (containersContain(e.target) || e.target instanceof Document) {\n return;\n }\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n\n function checkKey(e) {\n if (config.escapeDeactivates !== false && isEscapeEvent(e)) {\n e.preventDefault();\n deactivate();\n return;\n }\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n }\n\n // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n function checkTab(e) {\n updateTabbableNodes();\n\n let destinationNode = null;\n\n if (e.shiftKey) {\n const startOfGroupIndex = state.tabbableGroups.findIndex(\n ({ firstTabbableNode }) => e.target === firstTabbableNode\n );\n\n if (startOfGroupIndex >= 0) {\n const destinationGroupIndex =\n startOfGroupIndex === 0\n ? state.tabbableGroups.length - 1\n : startOfGroupIndex - 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n }\n } else {\n const lastOfGroupIndex = state.tabbableGroups.findIndex(\n ({ lastTabbableNode }) => e.target === lastTabbableNode\n );\n\n if (lastOfGroupIndex >= 0) {\n const destinationGroupIndex =\n lastOfGroupIndex === state.tabbableGroups.length - 1\n ? 0\n : lastOfGroupIndex + 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.firstTabbableNode;\n }\n }\n\n if (destinationNode) {\n e.preventDefault();\n\n tryFocus(destinationNode);\n }\n }\n\n function checkClick(e) {\n if (config.clickOutsideDeactivates) return;\n if (containersContain(e.target)) return;\n if (\n config.allowOutsideClick &&\n (typeof config.allowOutsideClick === 'boolean'\n ? config.allowOutsideClick\n : config.allowOutsideClick(e))\n ) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n function updateTabbableNodes() {\n state.tabbableGroups = state.containers.map((container) => {\n var tabbableNodes = tabbable(container);\n\n return {\n firstTabbableNode: tabbableNodes[0],\n lastTabbableNode: tabbableNodes[tabbableNodes.length - 1],\n };\n });\n }\n\n function tryFocus(node) {\n if (node === doc.activeElement) return;\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n node.focus({ preventScroll: !!config.preventScroll });\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n }\n\n function containersContain(element) {\n return state.containers.some((container) => container.contains(element));\n }\n}\n\nfunction isSelectableInput(node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n}\n\nfunction isEscapeEvent(e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n}\n\nfunction isTabEvent(e) {\n return e.key === 'Tab' || e.keyCode === 9;\n}\n\nfunction delay(fn) {\n return setTimeout(fn, 0);\n}\n\nexport { createFocusTrap };\n"],"names":["activeFocusDelay","activeFocusTraps","trapQueue","activateTrap","trap","length","activeTrap","pause","trapIndex","indexOf","push","splice","deactivateTrap","unpause","createFocusTrap","elements","userOptions","doc","document","config","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","state","containers","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","active","paused","activate","deactivate","updateContainerElements","containerElements","elementsAsArray","concat","filter","Boolean","map","element","querySelector","updateTabbableNodes","activateOptions","activeElement","onActivate","addListeners","deactivateOptions","clearTimeout","removeListeners","onDeactivate","undefined","returnFocus","delay","tryFocus","getReturnFocusNode","getInitialFocusNode","addEventListener","checkFocusIn","checkPointerDown","capture","passive","checkClick","checkKey","removeEventListener","getNodeForOption","optionName","optionValue","node","Error","containersContain","firstTabbableGroup","firstTabbableNode","previousActiveElement","e","target","clickOutsideDeactivates","isFocusable","allowOutsideClick","preventDefault","Document","stopImmediatePropagation","isEscapeEvent","isTabEvent","checkTab","destinationNode","shiftKey","startOfGroupIndex","findIndex","destinationGroupIndex","destinationGroup","lastTabbableNode","lastOfGroupIndex","container","tabbableNodes","tabbable","focus","preventScroll","isSelectableInput","select","some","contains","tagName","toLowerCase","key","keyCode","fn","setTimeout"],"mappings":"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"}
@@ -1,11 +1,6 @@
1
1
  /*!
2
- * focus-trap 6.1.1
2
+ * focus-trap 6.2.0
3
3
  * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE
4
4
  */
5
- "use strict";function e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}Object.defineProperty(exports,"__esModule",{value:!0});
6
- /*!
7
- * tabbable 5.1.0
8
- * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
9
- */
10
- let n=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])',"details>summary"],r=n.join(","),o="undefined"==typeof Element?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector;function i(e,t){let n=[],i=[];return function(e,t,n){let i=Array.prototype.slice.apply(e.querySelectorAll(r));t&&o.call(e,r)&&i.unshift(e);return i=i.filter(n),i}(e,(t=t||{}).includeContainer,a).forEach((function(e,t){let r=s(e);0===r?n.push(e):i.push({documentOrder:t,tabIndex:r,node:e})})),i.sort(f).map(e=>e.node).concat(n)}function a(e){return!(!c(e)||function(e){return function(e){return d(e)&&"radio"===e.type}(e)&&!function(e){if(!e.name)return!0;let t=function(e,t){for(let n=0;n<e.length;n++)if(e[n].checked&&e[n].form===t)return e[n]}((e.form||e.ownerDocument).querySelectorAll('input[type="radio"][name="'+e.name+'"]'),e.form);return!t||t===e}(e)}(e)||s(e)<0)}function c(e){return!(e.disabled||function(e){return d(e)&&"hidden"===e.type}(e)||function(e){if("hidden"===getComputedStyle(e).visibility)return!0;for(;e;){if("none"===getComputedStyle(e).display)return!0;e=e.parentElement}return!1}(e))}let u=n.concat("iframe").join(",");function l(e){if(!e)throw new Error("No node provided");return!1!==o.call(e,u)&&c(e)}function s(e){let t=parseInt(e.getAttribute("tabindex"),10);return isNaN(t)?function(e){return"true"===e.contentEditable}(e)?0:"AUDIO"!==e.nodeName&&"VIDEO"!==e.nodeName||null!==e.getAttribute("tabindex")?e.tabIndex:0:t}function f(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex}function d(e){return"INPUT"===e.tagName}var p,v,b=(v=[],{activateTrap:function(e){if(v.length>0){var t=v[v.length-1];t!==e&&t.pause()}var n=v.indexOf(e);-1===n||v.splice(n,1),v.push(e)},deactivateTrap:function(e){var t=v.indexOf(e);-1!==t&&v.splice(t,1),v.length>0&&v[v.length-1].unpause()}});function m(e){return setTimeout(e,0)}exports.createFocusTrap=function(n,r){var o=document,a="string"==typeof n?o.querySelector(n):n,c=function(n){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?t(Object(o),!0).forEach((function(t){e(n,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(o,e))}))}return n}({returnFocusOnDeactivate:!0,escapeDeactivates:!0,delayInitialFocus:!0},r),u={firstTabbableNode:null,lastTabbableNode:null,nodeFocusedBeforeActivation:null,mostRecentlyFocusedNode:null,active:!1,paused:!1},s={activate:function(e){if(u.active)return;k(),u.active=!0,u.paused=!1,u.nodeFocusedBeforeActivation=o.activeElement;var t=e&&e.onActivate?e.onActivate:c.onActivate;t&&t();return d(),s},deactivate:f,pause:function(){if(u.paused||!u.active)return;u.paused=!0,v()},unpause:function(){if(!u.paused||!u.active)return;u.paused=!1,k(),d()}};return s;function f(e){if(u.active){clearTimeout(p),v(),u.active=!1,u.paused=!1,b.deactivateTrap(s);var t=e&&void 0!==e.onDeactivate?e.onDeactivate:c.onDeactivate;return t&&t(),(e&&void 0!==e.returnFocus?e.returnFocus:c.returnFocusOnDeactivate)&&m((function(){var e;D((e=u.nodeFocusedBeforeActivation,y("setReturnFocus")||e))})),s}}function d(){if(u.active)return b.activateTrap(s),p=c.delayInitialFocus?m((function(){D(O())})):D(O()),o.addEventListener("focusin",h,!0),o.addEventListener("mousedown",g,{capture:!0,passive:!1}),o.addEventListener("touchstart",g,{capture:!0,passive:!1}),o.addEventListener("click",E,{capture:!0,passive:!1}),o.addEventListener("keydown",w,{capture:!0,passive:!1}),s}function v(){if(u.active)return o.removeEventListener("focusin",h,!0),o.removeEventListener("mousedown",g,!0),o.removeEventListener("touchstart",g,!0),o.removeEventListener("click",E,!0),o.removeEventListener("keydown",w,!0),s}function y(e){var t=c[e],n=t;if(!t)return null;if("string"==typeof t&&!(n=o.querySelector(t)))throw new Error("`"+e+"` refers to no known node");if("function"==typeof t&&!(n=t()))throw new Error("`"+e+"` did not return a node");return n}function O(){var e;if(!(e=null!==y("initialFocus")?y("initialFocus"):a.contains(o.activeElement)?o.activeElement:u.firstTabbableNode||y("fallbackFocus")))throw new Error("Your focus-trap needs to have at least one focusable element");return e}function g(e){a.contains(e.target)||(c.clickOutsideDeactivates?f({returnFocus:c.returnFocusOnDeactivate&&!l(e.target)}):c.allowOutsideClick&&("boolean"==typeof c.allowOutsideClick?c.allowOutsideClick:c.allowOutsideClick(e))||e.preventDefault())}function h(e){a.contains(e.target)||e.target instanceof Document||(e.stopImmediatePropagation(),D(u.mostRecentlyFocusedNode||O()))}function w(e){if(!1!==c.escapeDeactivates&&function(e){return"Escape"===e.key||"Esc"===e.key||27===e.keyCode}(e))return e.preventDefault(),void f();(function(e){return"Tab"===e.key||9===e.keyCode})(e)&&function(e){if(k(),e.shiftKey&&e.target===u.firstTabbableNode)return e.preventDefault(),void D(u.lastTabbableNode);if(!e.shiftKey&&e.target===u.lastTabbableNode)e.preventDefault(),D(u.firstTabbableNode)}(e)}function E(e){c.clickOutsideDeactivates||a.contains(e.target)||c.allowOutsideClick&&("boolean"==typeof c.allowOutsideClick?c.allowOutsideClick:c.allowOutsideClick(e))||(e.preventDefault(),e.stopImmediatePropagation())}function k(){var e=i(a);u.firstTabbableNode=e[0]||O(),u.lastTabbableNode=e[e.length-1]||O()}function D(e){e!==o.activeElement&&(e&&e.focus?(e.focus({preventScroll:!!c.preventScroll}),u.mostRecentlyFocusedNode=e,function(e){return e.tagName&&"input"===e.tagName.toLowerCase()&&"function"==typeof e.select}(e)&&e.select()):D(O()))}};
5
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("tabbable");function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var a,o=(a=[],{activateTrap:function(e){if(a.length>0){var t=a[a.length-1];t!==e&&t.pause()}var n=a.indexOf(e);-1===n||a.splice(n,1),a.push(e)},deactivateTrap:function(e){var t=a.indexOf(e);-1!==t&&a.splice(t,1),a.length>0&&a[a.length-1].unpause()}});function i(e){return setTimeout(e,0)}exports.createFocusTrap=function(a,c){var u=document,s=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({returnFocusOnDeactivate:!0,escapeDeactivates:!0,delayInitialFocus:!0},c),l={containers:[],tabbableGroups:[],nodeFocusedBeforeActivation:null,mostRecentlyFocusedNode:null,active:!1,paused:!1},f={activate:function(e){if(l.active)return;E(),l.active=!0,l.paused=!1,l.nodeFocusedBeforeActivation=u.activeElement;var t=e&&e.onActivate?e.onActivate:s.onActivate;t&&t();return b(),f},deactivate:d,pause:function(){return l.paused||!l.active||(l.paused=!0,p()),f},unpause:function(){return l.paused&&l.active?(l.paused=!1,E(),b(),f):f},updateContainerElements:v};return v(a),f;function v(e){var t=[].concat(e).filter(Boolean);return l.containers=t.map((function(e){return"string"==typeof e?u.querySelector(e):e})),l.active&&E(),f}function d(t){if(l.active){clearTimeout(e),p(),l.active=!1,l.paused=!1,o.deactivateTrap(f);var n=t&&void 0!==t.onDeactivate?t.onDeactivate:s.onDeactivate;return n&&n(),(t&&void 0!==t.returnFocus?t.returnFocus:s.returnFocusOnDeactivate)&&i((function(){var e;F((e=l.nodeFocusedBeforeActivation,y("setReturnFocus")||e))})),f}}function b(){if(l.active)return o.activateTrap(f),e=s.delayInitialFocus?i((function(){F(O())})):F(O()),u.addEventListener("focusin",g,!0),u.addEventListener("mousedown",m,{capture:!0,passive:!1}),u.addEventListener("touchstart",m,{capture:!0,passive:!1}),u.addEventListener("click",k,{capture:!0,passive:!1}),u.addEventListener("keydown",w,{capture:!0,passive:!1}),f}function p(){if(l.active)return u.removeEventListener("focusin",g,!0),u.removeEventListener("mousedown",m,!0),u.removeEventListener("touchstart",m,!0),u.removeEventListener("click",k,!0),u.removeEventListener("keydown",w,!0),f}function y(e){var t=s[e],n=t;if(!t)return null;if("string"==typeof t&&!(n=u.querySelector(t)))throw new Error("`"+e+"` refers to no known node");if("function"==typeof t&&!(n=t()))throw new Error("`"+e+"` did not return a node");return n}function O(){var e;if(null!==y("initialFocus"))e=y("initialFocus");else if(h(u.activeElement))e=u.activeElement;else{var t=l.tabbableGroups[0];e=t&&t.firstTabbableNode||y("fallbackFocus")}if(!e)throw new Error("Your focus-trap needs to have at least one focusable element");return e}function m(e){h(e.target)||(s.clickOutsideDeactivates?d({returnFocus:s.returnFocusOnDeactivate&&!t.isFocusable(e.target)}):s.allowOutsideClick&&("boolean"==typeof s.allowOutsideClick?s.allowOutsideClick:s.allowOutsideClick(e))||e.preventDefault())}function g(e){h(e.target)||e.target instanceof Document||(e.stopImmediatePropagation(),F(l.mostRecentlyFocusedNode||O()))}function w(e){if(!1!==s.escapeDeactivates&&function(e){return"Escape"===e.key||"Esc"===e.key||27===e.keyCode}(e))return e.preventDefault(),void d();(function(e){return"Tab"===e.key||9===e.keyCode})(e)&&function(e){E();var t=null;if(e.shiftKey){var n=l.tabbableGroups.findIndex((function(t){var n=t.firstTabbableNode;return e.target===n}));if(n>=0){var r=0===n?l.tabbableGroups.length-1:n-1;t=l.tabbableGroups[r].lastTabbableNode}}else{var a=l.tabbableGroups.findIndex((function(t){var n=t.lastTabbableNode;return e.target===n}));if(a>=0){var o=a===l.tabbableGroups.length-1?0:a+1;t=l.tabbableGroups[o].firstTabbableNode}}t&&(e.preventDefault(),F(t))}(e)}function k(e){s.clickOutsideDeactivates||h(e.target)||s.allowOutsideClick&&("boolean"==typeof s.allowOutsideClick?s.allowOutsideClick:s.allowOutsideClick(e))||(e.preventDefault(),e.stopImmediatePropagation())}function E(){l.tabbableGroups=l.containers.map((function(e){var n=t.tabbable(e);return{firstTabbableNode:n[0],lastTabbableNode:n[n.length-1]}}))}function F(e){e!==u.activeElement&&(e&&e.focus?(e.focus({preventScroll:!!s.preventScroll}),l.mostRecentlyFocusedNode=e,function(e){return e.tagName&&"input"===e.tagName.toLowerCase()&&"function"==typeof e.select}(e)&&e.select()):F(O()))}function h(e){return l.containers.some((function(t){return t.contains(e)}))}};
11
6
  //# sourceMappingURL=focus-trap.min.js.map