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.
- package/CHANGELOG.md +26 -0
- package/README.md +28 -12
- package/dist/focus-trap.esm.js +182 -106
- package/dist/focus-trap.esm.js.map +1 -1
- package/dist/focus-trap.esm.min.js +2 -7
- package/dist/focus-trap.esm.min.js.map +1 -1
- package/dist/focus-trap.js +182 -106
- package/dist/focus-trap.js.map +1 -1
- package/dist/focus-trap.min.js +2 -7
- package/dist/focus-trap.min.js.map +1 -1
- package/dist/focus-trap.umd.js +182 -106
- package/dist/focus-trap.umd.js.map +1 -1
- package/dist/focus-trap.umd.min.js +2 -7
- package/dist/focus-trap.umd.min.js.map +1 -1
- package/index.d.ts +6 -5
- package/index.js +83 -23
- package/package.json +23 -22
package/dist/focus-trap.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* focus-trap 6.
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
57
|
-
};
|
|
104
|
+
delayInitialFocus: true
|
|
105
|
+
}, userOptions);
|
|
58
106
|
|
|
59
107
|
var state = {
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
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 (
|
|
266
|
+
} else if (containersContain(doc.activeElement)) {
|
|
216
267
|
node = doc.activeElement;
|
|
217
268
|
} else {
|
|
218
|
-
|
|
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 (
|
|
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
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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 (
|
|
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
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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
|
-
|
|
381
|
+
|
|
382
|
+
if (destinationNode) {
|
|
313
383
|
e.preventDefault();
|
|
314
|
-
tryFocus(
|
|
315
|
-
return;
|
|
384
|
+
tryFocus(destinationNode);
|
|
316
385
|
}
|
|
317
386
|
}
|
|
318
387
|
|
|
319
388
|
function checkClick(e) {
|
|
320
389
|
if (config.clickOutsideDeactivates) return;
|
|
321
|
-
if (
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
-
|
|
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) {
|
package/dist/focus-trap.js.map
CHANGED
|
@@ -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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"}
|
package/dist/focus-trap.min.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* focus-trap 6.
|
|
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";
|
|
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
|