@coreui/coreui 4.0.4 → 4.1.1
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/README.md +5 -8
- package/dist/css/coreui-grid.css +254 -205
- package/dist/css/coreui-grid.css.map +1 -1
- package/dist/css/coreui-grid.min.css +2 -2
- package/dist/css/coreui-grid.min.css.map +1 -1
- package/dist/css/coreui-grid.rtl.css +411 -362
- package/dist/css/coreui-grid.rtl.css.map +1 -1
- package/dist/css/coreui-grid.rtl.min.css +3 -3
- package/dist/css/coreui-grid.rtl.min.css.map +1 -1
- package/dist/css/coreui-reboot.css +63 -8
- package/dist/css/coreui-reboot.css.map +1 -1
- package/dist/css/coreui-reboot.min.css +2 -2
- package/dist/css/coreui-reboot.min.css.map +1 -1
- package/dist/css/coreui-reboot.rtl.css +64 -9
- package/dist/css/coreui-reboot.rtl.css.map +1 -1
- package/dist/css/coreui-reboot.rtl.min.css +3 -3
- package/dist/css/coreui-reboot.rtl.min.css.map +1 -1
- package/dist/css/coreui-utilities.css +181 -81
- package/dist/css/coreui-utilities.css.map +1 -1
- package/dist/css/coreui-utilities.min.css +2 -2
- package/dist/css/coreui-utilities.min.css.map +1 -1
- package/dist/css/coreui-utilities.rtl.css +380 -280
- package/dist/css/coreui-utilities.rtl.css.map +1 -1
- package/dist/css/coreui-utilities.rtl.min.css +3 -3
- package/dist/css/coreui-utilities.rtl.min.css.map +1 -1
- package/dist/css/coreui.css +712 -345
- package/dist/css/coreui.css.map +1 -1
- package/dist/css/coreui.min.css +2 -2
- package/dist/css/coreui.min.css.map +1 -1
- package/dist/css/coreui.rtl.css +893 -541
- package/dist/css/coreui.rtl.css.map +1 -1
- package/dist/css/coreui.rtl.min.css +3 -3
- package/dist/css/coreui.rtl.min.css.map +1 -1
- package/dist/js/coreui.bundle.js +855 -746
- package/dist/js/coreui.bundle.js.map +1 -1
- package/dist/js/coreui.bundle.min.js +3 -3
- package/dist/js/coreui.bundle.min.js.map +1 -1
- package/dist/js/coreui.esm.js +708 -644
- package/dist/js/coreui.esm.js.map +1 -1
- package/dist/js/coreui.esm.min.js +3 -3
- package/dist/js/coreui.esm.min.js.map +1 -1
- package/dist/js/coreui.js +718 -656
- package/dist/js/coreui.js.map +1 -1
- package/dist/js/coreui.min.js +3 -3
- package/dist/js/coreui.min.js.map +1 -1
- package/js/dist/alert.js +82 -49
- package/js/dist/alert.js.map +1 -1
- package/js/dist/base-component.js +26 -18
- package/js/dist/base-component.js.map +1 -1
- package/js/dist/button.js +23 -13
- package/js/dist/button.js.map +1 -1
- package/js/dist/carousel.js +95 -50
- package/js/dist/carousel.js.map +1 -1
- package/js/dist/collapse.js +125 -139
- package/js/dist/collapse.js.map +1 -1
- package/js/dist/dom/data.js +6 -6
- package/js/dist/dom/data.js.map +1 -1
- package/js/dist/dom/event-handler.js +15 -6
- package/js/dist/dom/event-handler.js.map +1 -1
- package/js/dist/dom/manipulator.js +7 -7
- package/js/dist/dom/manipulator.js.map +1 -1
- package/js/dist/dom/selector-engine.js +74 -9
- package/js/dist/dom/selector-engine.js.map +1 -1
- package/js/dist/dropdown.js +125 -112
- package/js/dist/dropdown.js.map +1 -1
- package/js/dist/modal.js +270 -93
- package/js/dist/modal.js.map +1 -1
- package/js/dist/offcanvas.js +231 -62
- package/js/dist/offcanvas.js.map +1 -1
- package/js/dist/popover.js +29 -59
- package/js/dist/popover.js.map +1 -1
- package/js/dist/scrollspy.js +45 -35
- package/js/dist/scrollspy.js.map +1 -1
- package/js/dist/tab.js +45 -23
- package/js/dist/tab.js.map +1 -1
- package/js/dist/toast.js +132 -34
- package/js/dist/toast.js.map +1 -1
- package/js/dist/tooltip.js +127 -109
- package/js/dist/tooltip.js.map +1 -1
- package/js/src/alert.js +21 -47
- package/js/src/base-component.js +3 -3
- package/js/src/button.js +1 -1
- package/js/src/carousel.js +10 -4
- package/js/src/collapse.js +66 -119
- package/js/src/dom/data.js +1 -1
- package/js/src/dom/event-handler.js +1 -2
- package/js/src/dom/manipulator.js +3 -3
- package/js/src/dom/selector-engine.js +18 -1
- package/js/src/dropdown.js +53 -68
- package/js/src/modal.js +24 -35
- package/js/src/navigation.js +6 -4
- package/js/src/offcanvas.js +16 -18
- package/js/src/popover.js +7 -49
- package/js/src/scrollspy.js +1 -1
- package/js/src/sidebar.js +23 -27
- package/js/src/tab.js +1 -1
- package/js/src/toast.js +11 -11
- package/js/src/tooltip.js +66 -50
- package/js/src/util/backdrop.js +6 -5
- package/js/src/util/component-functions.js +34 -0
- package/js/src/util/focustrap.js +105 -0
- package/js/src/util/index.js +39 -11
- package/js/src/util/sanitizer.js +21 -22
- package/js/src/util/scrollbar.js +1 -1
- package/package.json +54 -55
- package/scss/_buttons.scss +1 -2
- package/scss/_card.scss +2 -1
- package/scss/_dropdown.scss +1 -1
- package/scss/_functions.scss +51 -12
- package/scss/_grid.scss +0 -23
- package/scss/_helpers.scss +2 -0
- package/scss/_mixins.scss +1 -0
- package/scss/_modal.scss +2 -12
- package/scss/_nav.scss +1 -2
- package/scss/_navbar.scss +30 -1
- package/scss/_offcanvas.scss +6 -2
- package/scss/_placeholders.scss +51 -0
- package/scss/_reboot.scss +12 -8
- package/scss/_root.scss +36 -7
- package/scss/_tables.scss +9 -5
- package/scss/_toasts.scss +2 -2
- package/scss/_transitions.scss +6 -0
- package/scss/_utilities.scss +31 -8
- package/scss/_variables.scss +188 -13
- package/scss/coreui-grid.rtl.scss +1 -1
- package/scss/coreui-grid.scss +3 -1
- package/scss/coreui-reboot.rtl.scss +1 -1
- package/scss/coreui-reboot.scss +2 -4
- package/scss/coreui-utilities.rtl.scss +1 -1
- package/scss/coreui-utilities.scss +1 -1
- package/scss/coreui.rtl.scss +1 -1
- package/scss/coreui.scss +2 -1
- package/scss/forms/_form-control.scss +1 -1
- package/scss/forms/_form-select.scss +2 -0
- package/scss/helpers/_stacks.scss +15 -0
- package/scss/helpers/_vr.scss +8 -0
- package/scss/mixins/_backdrop.scss +14 -0
- package/scss/mixins/_grid.scss +26 -7
- package/scss/mixins/_ltr-rtl.scss +21 -0
- package/scss/mixins/_reset-text.scss +1 -1
- package/scss/mixins/_utilities.scss +27 -39
- package/scss/mixins/_visually-hidden.scss +1 -1
- package/scss/sidebar/_sidebar-nav.scss +1 -0
- package/scss/sidebar/_sidebar.scss +17 -17
package/js/dist/offcanvas.js
CHANGED
|
@@ -1,30 +1,39 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* CoreUI offcanvas.js v4.
|
|
3
|
-
* Copyright
|
|
2
|
+
* CoreUI offcanvas.js v4.1.1 (https://coreui.io)
|
|
3
|
+
* Copyright 2022 The CoreUI Team (https://github.com/orgs/coreui/people)
|
|
4
4
|
* Licensed under MIT (https://coreui.io)
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
7
7
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/manipulator.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
|
|
8
8
|
typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/manipulator', './dom/event-handler', './base-component'], factory) :
|
|
9
9
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Offcanvas = factory(global.SelectorEngine, global.Manipulator, global.EventHandler, global.Base));
|
|
10
|
-
}(this, (function (SelectorEngine, Manipulator, EventHandler, BaseComponent) { 'use strict';
|
|
10
|
+
})(this, (function (SelectorEngine, Manipulator, EventHandler, BaseComponent) { 'use strict';
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
15
|
+
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
16
|
+
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
17
|
+
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* --------------------------------------------------------------------------
|
|
21
|
+
* CoreUI (v4.1.1): alert.js
|
|
22
|
+
* Licensed under MIT (https://coreui.io/license)
|
|
23
|
+
*
|
|
24
|
+
* This component is a modified version of the Bootstrap's util/index.js
|
|
25
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
26
|
+
* --------------------------------------------------------------------------
|
|
27
|
+
*/
|
|
19
28
|
const MILLISECONDS_MULTIPLIER = 1000;
|
|
20
29
|
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
|
21
30
|
|
|
22
|
-
const toType =
|
|
23
|
-
if (
|
|
24
|
-
return `${
|
|
31
|
+
const toType = object => {
|
|
32
|
+
if (object === null || object === undefined) {
|
|
33
|
+
return `${object}`;
|
|
25
34
|
}
|
|
26
35
|
|
|
27
|
-
return
|
|
36
|
+
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
28
37
|
};
|
|
29
38
|
|
|
30
39
|
const getSelector = element => {
|
|
@@ -102,7 +111,7 @@
|
|
|
102
111
|
}
|
|
103
112
|
|
|
104
113
|
if (typeof obj === 'string' && obj.length > 0) {
|
|
105
|
-
return
|
|
114
|
+
return document.querySelector(obj);
|
|
106
115
|
}
|
|
107
116
|
|
|
108
117
|
return null;
|
|
@@ -125,7 +134,27 @@
|
|
|
125
134
|
return false;
|
|
126
135
|
}
|
|
127
136
|
|
|
128
|
-
|
|
137
|
+
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed
|
|
138
|
+
|
|
139
|
+
const closedDetails = element.closest('details:not([open])');
|
|
140
|
+
|
|
141
|
+
if (!closedDetails) {
|
|
142
|
+
return elementIsVisible;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (closedDetails !== element) {
|
|
146
|
+
const summary = element.closest('summary');
|
|
147
|
+
|
|
148
|
+
if (summary && summary.parentNode !== closedDetails) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (summary === null) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return elementIsVisible;
|
|
129
158
|
};
|
|
130
159
|
|
|
131
160
|
const isDisabled = element => {
|
|
@@ -143,8 +172,20 @@
|
|
|
143
172
|
|
|
144
173
|
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
145
174
|
};
|
|
175
|
+
/**
|
|
176
|
+
* Trick to restart an element's animation
|
|
177
|
+
*
|
|
178
|
+
* @param {HTMLElement} element
|
|
179
|
+
* @return void
|
|
180
|
+
*
|
|
181
|
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
182
|
+
*/
|
|
183
|
+
|
|
146
184
|
|
|
147
|
-
const reflow = element =>
|
|
185
|
+
const reflow = element => {
|
|
186
|
+
// eslint-disable-next-line no-unused-expressions
|
|
187
|
+
element.offsetHeight;
|
|
188
|
+
};
|
|
148
189
|
|
|
149
190
|
const getjQuery = () => {
|
|
150
191
|
const {
|
|
@@ -232,7 +273,7 @@
|
|
|
232
273
|
|
|
233
274
|
/**
|
|
234
275
|
* --------------------------------------------------------------------------
|
|
235
|
-
* Bootstrap (v5.
|
|
276
|
+
* Bootstrap (v5.1.3): util/scrollBar.js
|
|
236
277
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
237
278
|
* --------------------------------------------------------------------------
|
|
238
279
|
*/
|
|
@@ -301,18 +342,18 @@
|
|
|
301
342
|
const actualValue = element.style[styleProp];
|
|
302
343
|
|
|
303
344
|
if (actualValue) {
|
|
304
|
-
Manipulator__default
|
|
345
|
+
Manipulator__default.default.setDataAttribute(element, styleProp, actualValue);
|
|
305
346
|
}
|
|
306
347
|
}
|
|
307
348
|
|
|
308
349
|
_resetElementAttributes(selector, styleProp) {
|
|
309
350
|
const manipulationCallBack = element => {
|
|
310
|
-
const value = Manipulator__default
|
|
351
|
+
const value = Manipulator__default.default.getDataAttribute(element, styleProp);
|
|
311
352
|
|
|
312
353
|
if (typeof value === 'undefined') {
|
|
313
354
|
element.style.removeProperty(styleProp);
|
|
314
355
|
} else {
|
|
315
|
-
Manipulator__default
|
|
356
|
+
Manipulator__default.default.removeDataAttribute(element, styleProp);
|
|
316
357
|
element.style[styleProp] = value;
|
|
317
358
|
}
|
|
318
359
|
};
|
|
@@ -324,7 +365,7 @@
|
|
|
324
365
|
if (isElement(selector)) {
|
|
325
366
|
callBack(selector);
|
|
326
367
|
} else {
|
|
327
|
-
SelectorEngine__default
|
|
368
|
+
SelectorEngine__default.default.find(selector, this._element).forEach(callBack);
|
|
328
369
|
}
|
|
329
370
|
}
|
|
330
371
|
|
|
@@ -336,11 +377,12 @@
|
|
|
336
377
|
|
|
337
378
|
/**
|
|
338
379
|
* --------------------------------------------------------------------------
|
|
339
|
-
* Bootstrap (v5.
|
|
340
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
380
|
+
* Bootstrap (v5.1.3): util/backdrop.js
|
|
381
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
341
382
|
* --------------------------------------------------------------------------
|
|
342
383
|
*/
|
|
343
|
-
const Default$
|
|
384
|
+
const Default$2 = {
|
|
385
|
+
className: 'modal-backdrop',
|
|
344
386
|
isVisible: true,
|
|
345
387
|
// if false, we use the backdrop helper without adding any element to the dom
|
|
346
388
|
isAnimated: false,
|
|
@@ -348,17 +390,17 @@
|
|
|
348
390
|
// give the choice to place backdrop under different elements
|
|
349
391
|
clickCallback: null
|
|
350
392
|
};
|
|
351
|
-
const DefaultType$
|
|
393
|
+
const DefaultType$2 = {
|
|
394
|
+
className: 'string',
|
|
352
395
|
isVisible: 'boolean',
|
|
353
396
|
isAnimated: 'boolean',
|
|
354
397
|
rootElement: '(element|string)',
|
|
355
398
|
clickCallback: '(function|null)'
|
|
356
399
|
};
|
|
357
|
-
const NAME$
|
|
358
|
-
const CLASS_NAME_BACKDROP = 'modal-backdrop';
|
|
400
|
+
const NAME$2 = 'backdrop';
|
|
359
401
|
const CLASS_NAME_FADE = 'fade';
|
|
360
402
|
const CLASS_NAME_SHOW$1 = 'show';
|
|
361
|
-
const EVENT_MOUSEDOWN = `mousedown.coreui.${NAME$
|
|
403
|
+
const EVENT_MOUSEDOWN = `mousedown.coreui.${NAME$2}`;
|
|
362
404
|
|
|
363
405
|
class Backdrop {
|
|
364
406
|
constructor(config) {
|
|
@@ -404,7 +446,7 @@
|
|
|
404
446
|
_getElement() {
|
|
405
447
|
if (!this._element) {
|
|
406
448
|
const backdrop = document.createElement('div');
|
|
407
|
-
backdrop.className =
|
|
449
|
+
backdrop.className = this._config.className;
|
|
408
450
|
|
|
409
451
|
if (this._config.isAnimated) {
|
|
410
452
|
backdrop.classList.add(CLASS_NAME_FADE);
|
|
@@ -417,12 +459,12 @@
|
|
|
417
459
|
}
|
|
418
460
|
|
|
419
461
|
_getConfig(config) {
|
|
420
|
-
config = { ...Default$
|
|
462
|
+
config = { ...Default$2,
|
|
421
463
|
...(typeof config === 'object' ? config : {})
|
|
422
464
|
}; // use getElement() with the default "body" to get a fresh Element on each instantiation
|
|
423
465
|
|
|
424
466
|
config.rootElement = getElement(config.rootElement);
|
|
425
|
-
typeCheckConfig(NAME$
|
|
467
|
+
typeCheckConfig(NAME$2, config, DefaultType$2);
|
|
426
468
|
return config;
|
|
427
469
|
}
|
|
428
470
|
|
|
@@ -431,9 +473,9 @@
|
|
|
431
473
|
return;
|
|
432
474
|
}
|
|
433
475
|
|
|
434
|
-
this._config.rootElement.
|
|
476
|
+
this._config.rootElement.append(this._getElement());
|
|
435
477
|
|
|
436
|
-
EventHandler__default
|
|
478
|
+
EventHandler__default.default.on(this._getElement(), EVENT_MOUSEDOWN, () => {
|
|
437
479
|
execute(this._config.clickCallback);
|
|
438
480
|
});
|
|
439
481
|
this._isAppended = true;
|
|
@@ -444,7 +486,7 @@
|
|
|
444
486
|
return;
|
|
445
487
|
}
|
|
446
488
|
|
|
447
|
-
EventHandler__default
|
|
489
|
+
EventHandler__default.default.off(this._element, EVENT_MOUSEDOWN);
|
|
448
490
|
|
|
449
491
|
this._element.remove();
|
|
450
492
|
|
|
@@ -459,7 +501,136 @@
|
|
|
459
501
|
|
|
460
502
|
/**
|
|
461
503
|
* --------------------------------------------------------------------------
|
|
462
|
-
*
|
|
504
|
+
* Bootstrap (v5.1.3): util/focustrap.js
|
|
505
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
506
|
+
* --------------------------------------------------------------------------
|
|
507
|
+
*/
|
|
508
|
+
const Default$1 = {
|
|
509
|
+
trapElement: null,
|
|
510
|
+
// The element to trap focus inside of
|
|
511
|
+
autofocus: true
|
|
512
|
+
};
|
|
513
|
+
const DefaultType$1 = {
|
|
514
|
+
trapElement: 'element',
|
|
515
|
+
autofocus: 'boolean'
|
|
516
|
+
};
|
|
517
|
+
const NAME$1 = 'focustrap';
|
|
518
|
+
const DATA_KEY$1 = 'coreui.focustrap';
|
|
519
|
+
const EVENT_KEY$1 = `.${DATA_KEY$1}`;
|
|
520
|
+
const EVENT_FOCUSIN = `focusin${EVENT_KEY$1}`;
|
|
521
|
+
const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$1}`;
|
|
522
|
+
const TAB_KEY = 'Tab';
|
|
523
|
+
const TAB_NAV_FORWARD = 'forward';
|
|
524
|
+
const TAB_NAV_BACKWARD = 'backward';
|
|
525
|
+
|
|
526
|
+
class FocusTrap {
|
|
527
|
+
constructor(config) {
|
|
528
|
+
this._config = this._getConfig(config);
|
|
529
|
+
this._isActive = false;
|
|
530
|
+
this._lastTabNavDirection = null;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
activate() {
|
|
534
|
+
const {
|
|
535
|
+
trapElement,
|
|
536
|
+
autofocus
|
|
537
|
+
} = this._config;
|
|
538
|
+
|
|
539
|
+
if (this._isActive) {
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (autofocus) {
|
|
544
|
+
trapElement.focus();
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
EventHandler__default.default.off(document, EVENT_KEY$1); // guard against infinite focus loop
|
|
548
|
+
|
|
549
|
+
EventHandler__default.default.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event));
|
|
550
|
+
EventHandler__default.default.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
|
|
551
|
+
this._isActive = true;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
deactivate() {
|
|
555
|
+
if (!this._isActive) {
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
this._isActive = false;
|
|
560
|
+
EventHandler__default.default.off(document, EVENT_KEY$1);
|
|
561
|
+
} // Private
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
_handleFocusin(event) {
|
|
565
|
+
const {
|
|
566
|
+
target
|
|
567
|
+
} = event;
|
|
568
|
+
const {
|
|
569
|
+
trapElement
|
|
570
|
+
} = this._config;
|
|
571
|
+
|
|
572
|
+
if (target === document || target === trapElement || trapElement.contains(target)) {
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
const elements = SelectorEngine__default.default.focusableChildren(trapElement);
|
|
577
|
+
|
|
578
|
+
if (elements.length === 0) {
|
|
579
|
+
trapElement.focus();
|
|
580
|
+
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
|
|
581
|
+
elements[elements.length - 1].focus();
|
|
582
|
+
} else {
|
|
583
|
+
elements[0].focus();
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
_handleKeydown(event) {
|
|
588
|
+
if (event.key !== TAB_KEY) {
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
_getConfig(config) {
|
|
596
|
+
config = { ...Default$1,
|
|
597
|
+
...(typeof config === 'object' ? config : {})
|
|
598
|
+
};
|
|
599
|
+
typeCheckConfig(NAME$1, config, DefaultType$1);
|
|
600
|
+
return config;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
* --------------------------------------------------------------------------
|
|
607
|
+
* Bootstrap (v5.1.3): util/component-functions.js
|
|
608
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
609
|
+
* --------------------------------------------------------------------------
|
|
610
|
+
*/
|
|
611
|
+
|
|
612
|
+
const enableDismissTrigger = (component, method = 'hide') => {
|
|
613
|
+
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
|
|
614
|
+
const name = component.NAME;
|
|
615
|
+
EventHandler__default.default.on(document, clickEvent, `[data-coreui-dismiss="${name}"]`, function (event) {
|
|
616
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
|
617
|
+
event.preventDefault();
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
if (isDisabled(this)) {
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
|
625
|
+
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
|
626
|
+
|
|
627
|
+
instance[method]();
|
|
628
|
+
});
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* --------------------------------------------------------------------------
|
|
633
|
+
* CoreUI (v4.1.1): dropdown.js
|
|
463
634
|
* Licensed under MIT (https://coreui.io/license)
|
|
464
635
|
*
|
|
465
636
|
* This component is a modified version of the Bootstrap's offcanvas.js
|
|
@@ -489,16 +660,14 @@
|
|
|
489
660
|
scroll: 'boolean'
|
|
490
661
|
};
|
|
491
662
|
const CLASS_NAME_SHOW = 'show';
|
|
663
|
+
const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
|
|
492
664
|
const OPEN_SELECTOR = '.offcanvas.show';
|
|
493
665
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
494
666
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
495
667
|
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
496
668
|
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
497
|
-
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
|
|
498
669
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
499
|
-
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
|
500
670
|
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
|
|
501
|
-
const SELECTOR_DATA_DISMISS = '[data-coreui-dismiss="offcanvas"]';
|
|
502
671
|
const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="offcanvas"]';
|
|
503
672
|
/**
|
|
504
673
|
* ------------------------------------------------------------------------
|
|
@@ -506,12 +675,13 @@
|
|
|
506
675
|
* ------------------------------------------------------------------------
|
|
507
676
|
*/
|
|
508
677
|
|
|
509
|
-
class Offcanvas extends BaseComponent__default
|
|
678
|
+
class Offcanvas extends BaseComponent__default.default {
|
|
510
679
|
constructor(element, config) {
|
|
511
680
|
super(element);
|
|
512
681
|
this._config = this._getConfig(config);
|
|
513
682
|
this._isShown = false;
|
|
514
683
|
this._backdrop = this._initializeBackDrop();
|
|
684
|
+
this._focustrap = this._initializeFocusTrap();
|
|
515
685
|
|
|
516
686
|
this._addEventListeners();
|
|
517
687
|
} // Getters
|
|
@@ -535,7 +705,7 @@
|
|
|
535
705
|
return;
|
|
536
706
|
}
|
|
537
707
|
|
|
538
|
-
const showEvent = EventHandler__default
|
|
708
|
+
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
|
|
539
709
|
relatedTarget
|
|
540
710
|
});
|
|
541
711
|
|
|
@@ -550,8 +720,6 @@
|
|
|
550
720
|
|
|
551
721
|
if (!this._config.scroll) {
|
|
552
722
|
new ScrollBarHelper().hide();
|
|
553
|
-
|
|
554
|
-
this._enforceFocusOnElement(this._element);
|
|
555
723
|
}
|
|
556
724
|
|
|
557
725
|
this._element.removeAttribute('aria-hidden');
|
|
@@ -563,7 +731,11 @@
|
|
|
563
731
|
this._element.classList.add(CLASS_NAME_SHOW);
|
|
564
732
|
|
|
565
733
|
const completeCallBack = () => {
|
|
566
|
-
|
|
734
|
+
if (!this._config.scroll) {
|
|
735
|
+
this._focustrap.activate();
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
|
|
567
739
|
relatedTarget
|
|
568
740
|
});
|
|
569
741
|
};
|
|
@@ -576,13 +748,13 @@
|
|
|
576
748
|
return;
|
|
577
749
|
}
|
|
578
750
|
|
|
579
|
-
const hideEvent = EventHandler__default
|
|
751
|
+
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
|
|
580
752
|
|
|
581
753
|
if (hideEvent.defaultPrevented) {
|
|
582
754
|
return;
|
|
583
755
|
}
|
|
584
756
|
|
|
585
|
-
|
|
757
|
+
this._focustrap.deactivate();
|
|
586
758
|
|
|
587
759
|
this._element.blur();
|
|
588
760
|
|
|
@@ -605,7 +777,7 @@
|
|
|
605
777
|
new ScrollBarHelper().reset();
|
|
606
778
|
}
|
|
607
779
|
|
|
608
|
-
EventHandler__default
|
|
780
|
+
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
|
|
609
781
|
};
|
|
610
782
|
|
|
611
783
|
this._queueCallback(completeCallback, this._element, true);
|
|
@@ -614,14 +786,15 @@
|
|
|
614
786
|
dispose() {
|
|
615
787
|
this._backdrop.dispose();
|
|
616
788
|
|
|
789
|
+
this._focustrap.deactivate();
|
|
790
|
+
|
|
617
791
|
super.dispose();
|
|
618
|
-
EventHandler__default['default'].off(document, EVENT_FOCUSIN);
|
|
619
792
|
} // Private
|
|
620
793
|
|
|
621
794
|
|
|
622
795
|
_getConfig(config) {
|
|
623
796
|
config = { ...Default,
|
|
624
|
-
...Manipulator__default
|
|
797
|
+
...Manipulator__default.default.getDataAttributes(this._element),
|
|
625
798
|
...(typeof config === 'object' ? config : {})
|
|
626
799
|
};
|
|
627
800
|
typeCheckConfig(NAME, config, DefaultType);
|
|
@@ -630,6 +803,7 @@
|
|
|
630
803
|
|
|
631
804
|
_initializeBackDrop() {
|
|
632
805
|
return new Backdrop({
|
|
806
|
+
className: CLASS_NAME_BACKDROP,
|
|
633
807
|
isVisible: this._config.backdrop,
|
|
634
808
|
isAnimated: true,
|
|
635
809
|
rootElement: this._element.parentNode,
|
|
@@ -637,20 +811,14 @@
|
|
|
637
811
|
});
|
|
638
812
|
}
|
|
639
813
|
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
EventHandler__default['default'].on(document, EVENT_FOCUSIN, event => {
|
|
644
|
-
if (document !== event.target && element !== event.target && !element.contains(event.target)) {
|
|
645
|
-
element.focus();
|
|
646
|
-
}
|
|
814
|
+
_initializeFocusTrap() {
|
|
815
|
+
return new FocusTrap({
|
|
816
|
+
trapElement: this._element
|
|
647
817
|
});
|
|
648
|
-
element.focus();
|
|
649
818
|
}
|
|
650
819
|
|
|
651
820
|
_addEventListeners() {
|
|
652
|
-
EventHandler__default
|
|
653
|
-
EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
|
821
|
+
EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
|
654
822
|
if (this._config.keyboard && event.key === ESCAPE_KEY) {
|
|
655
823
|
this.hide();
|
|
656
824
|
}
|
|
@@ -682,7 +850,7 @@
|
|
|
682
850
|
*/
|
|
683
851
|
|
|
684
852
|
|
|
685
|
-
EventHandler__default
|
|
853
|
+
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
686
854
|
const target = getElementFromSelector(this);
|
|
687
855
|
|
|
688
856
|
if (['A', 'AREA'].includes(this.tagName)) {
|
|
@@ -693,14 +861,14 @@
|
|
|
693
861
|
return;
|
|
694
862
|
}
|
|
695
863
|
|
|
696
|
-
EventHandler__default
|
|
864
|
+
EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
|
|
697
865
|
// focus on trigger when it is closed
|
|
698
866
|
if (isVisible(this)) {
|
|
699
867
|
this.focus();
|
|
700
868
|
}
|
|
701
869
|
}); // avoid conflict when clicking a toggler of an offcanvas, while another is open
|
|
702
870
|
|
|
703
|
-
const allReadyOpen = SelectorEngine__default
|
|
871
|
+
const allReadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
|
|
704
872
|
|
|
705
873
|
if (allReadyOpen && allReadyOpen !== target) {
|
|
706
874
|
Offcanvas.getInstance(allReadyOpen).hide();
|
|
@@ -709,7 +877,8 @@
|
|
|
709
877
|
const data = Offcanvas.getOrCreateInstance(target);
|
|
710
878
|
data.toggle(this);
|
|
711
879
|
});
|
|
712
|
-
EventHandler__default
|
|
880
|
+
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => SelectorEngine__default.default.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
|
|
881
|
+
enableDismissTrigger(Offcanvas);
|
|
713
882
|
/**
|
|
714
883
|
* ------------------------------------------------------------------------
|
|
715
884
|
* jQuery
|
|
@@ -720,5 +889,5 @@
|
|
|
720
889
|
|
|
721
890
|
return Offcanvas;
|
|
722
891
|
|
|
723
|
-
}))
|
|
892
|
+
}));
|
|
724
893
|
//# sourceMappingURL=offcanvas.js.map
|