bootstrap 5.1.3 → 5.2.2

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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -4
  3. data/assets/javascripts/bootstrap/alert.js +11 -146
  4. data/assets/javascripts/bootstrap/base-component.js +37 -120
  5. data/assets/javascripts/bootstrap/button.js +10 -74
  6. data/assets/javascripts/bootstrap/carousel.js +213 -485
  7. data/assets/javascripts/bootstrap/collapse.js +65 -249
  8. data/assets/javascripts/bootstrap/dom/data.js +3 -5
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +94 -132
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +23 -27
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +16 -58
  12. data/assets/javascripts/bootstrap/dropdown.js +103 -317
  13. data/assets/javascripts/bootstrap/modal.js +107 -749
  14. data/assets/javascripts/bootstrap/offcanvas.js +90 -659
  15. data/assets/javascripts/bootstrap/popover.js +36 -118
  16. data/assets/javascripts/bootstrap/scrollspy.js +183 -262
  17. data/assets/javascripts/bootstrap/tab.js +215 -214
  18. data/assets/javascripts/bootstrap/toast.js +36 -218
  19. data/assets/javascripts/bootstrap/tooltip.js +280 -629
  20. data/assets/javascripts/bootstrap/util/backdrop.js +165 -0
  21. data/assets/javascripts/bootstrap/util/component-functions.js +46 -0
  22. data/assets/javascripts/bootstrap/util/config.js +79 -0
  23. data/assets/javascripts/bootstrap/util/focustrap.js +129 -0
  24. data/assets/javascripts/bootstrap/util/index.js +350 -0
  25. data/assets/javascripts/bootstrap/util/sanitizer.js +122 -0
  26. data/assets/javascripts/bootstrap/util/scrollbar.js +138 -0
  27. data/assets/javascripts/bootstrap/util/swipe.js +155 -0
  28. data/assets/javascripts/bootstrap/util/template-factory.js +177 -0
  29. data/assets/javascripts/bootstrap-global-this-define.js +1 -1
  30. data/assets/javascripts/bootstrap-sprockets.js +17 -8
  31. data/assets/javascripts/bootstrap.js +2093 -1881
  32. data/assets/javascripts/bootstrap.min.js +3 -3
  33. data/assets/stylesheets/_bootstrap-grid.scss +3 -6
  34. data/assets/stylesheets/_bootstrap-reboot.scss +3 -7
  35. data/assets/stylesheets/_bootstrap.scss +4 -6
  36. data/assets/stylesheets/bootstrap/_accordion.scss +56 -25
  37. data/assets/stylesheets/bootstrap/_alert.scss +18 -4
  38. data/assets/stylesheets/bootstrap/_badge.scss +14 -5
  39. data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -10
  40. data/assets/stylesheets/bootstrap/_button-group.scss +4 -1
  41. data/assets/stylesheets/bootstrap/_buttons.scss +125 -29
  42. data/assets/stylesheets/bootstrap/_card.scss +55 -37
  43. data/assets/stylesheets/bootstrap/_close.scss +1 -1
  44. data/assets/stylesheets/bootstrap/_containers.scss +1 -1
  45. data/assets/stylesheets/bootstrap/_dropdown.scss +85 -76
  46. data/assets/stylesheets/bootstrap/_functions.scss +8 -8
  47. data/assets/stylesheets/bootstrap/_grid.scss +3 -3
  48. data/assets/stylesheets/bootstrap/_helpers.scss +1 -0
  49. data/assets/stylesheets/bootstrap/_list-group.scss +48 -30
  50. data/assets/stylesheets/bootstrap/_maps.scss +54 -0
  51. data/assets/stylesheets/bootstrap/_modal.scss +71 -43
  52. data/assets/stylesheets/bootstrap/_nav.scss +53 -20
  53. data/assets/stylesheets/bootstrap/_navbar.scss +93 -150
  54. data/assets/stylesheets/bootstrap/_offcanvas.scss +120 -59
  55. data/assets/stylesheets/bootstrap/_pagination.scss +66 -21
  56. data/assets/stylesheets/bootstrap/_placeholders.scss +1 -1
  57. data/assets/stylesheets/bootstrap/_popover.scss +90 -52
  58. data/assets/stylesheets/bootstrap/_progress.scss +20 -9
  59. data/assets/stylesheets/bootstrap/_reboot.scss +25 -40
  60. data/assets/stylesheets/bootstrap/_root.scss +40 -21
  61. data/assets/stylesheets/bootstrap/_spinners.scss +38 -22
  62. data/assets/stylesheets/bootstrap/_tables.scss +32 -23
  63. data/assets/stylesheets/bootstrap/_toasts.scss +38 -16
  64. data/assets/stylesheets/bootstrap/_tooltip.scss +61 -56
  65. data/assets/stylesheets/bootstrap/_type.scss +2 -0
  66. data/assets/stylesheets/bootstrap/_utilities.scss +43 -26
  67. data/assets/stylesheets/bootstrap/_variables.scss +128 -135
  68. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +3 -6
  69. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +15 -3
  70. data/assets/stylesheets/bootstrap/forms/_form-check.scss +28 -5
  71. data/assets/stylesheets/bootstrap/forms/_form-control.scss +12 -37
  72. data/assets/stylesheets/bootstrap/forms/_form-select.scss +0 -1
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +19 -8
  74. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +10 -0
  75. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
  76. data/assets/stylesheets/bootstrap/helpers/_position.scss +7 -1
  77. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
  78. data/assets/stylesheets/bootstrap/helpers/_vr.scss +1 -1
  79. data/assets/stylesheets/bootstrap/mixins/_alert.scss +7 -3
  80. data/assets/stylesheets/bootstrap/mixins/_banner.scss +9 -0
  81. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +8 -8
  82. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +32 -95
  83. data/assets/stylesheets/bootstrap/mixins/_container.scss +4 -2
  84. data/assets/stylesheets/bootstrap/mixins/_forms.scss +18 -10
  85. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
  86. data/assets/stylesheets/bootstrap/mixins/_grid.scss +12 -12
  87. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +4 -25
  88. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  89. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +12 -9
  90. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +13 -5
  91. data/bootstrap.gemspec +1 -1
  92. data/lib/bootstrap/version.rb +2 -2
  93. data/tasks/updater/js.rb +10 -5
  94. data/tasks/updater.rb +2 -2
  95. metadata +16 -4
@@ -1,43 +1,22 @@
1
1
  /*!
2
- * Bootstrap event-handler.js v5.1.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap event-handler.js v5.2.2 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
- typeof define === 'function' && define.amd ? define(factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory());
10
- })(this, (function () { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) :
8
+ typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index));
10
+ })(this, (function (index) { 'use strict';
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.1.3): util/index.js
14
+ * Bootstrap (v5.2.2): dom/event-handler.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
18
-
19
- const getjQuery = () => {
20
- const {
21
- jQuery
22
- } = window;
23
-
24
- if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
25
- return jQuery;
26
- }
27
-
28
- return null;
29
- };
30
-
31
18
  /**
32
- * --------------------------------------------------------------------------
33
- * Bootstrap (v5.1.3): dom/event-handler.js
34
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
35
- * --------------------------------------------------------------------------
36
- */
37
- /**
38
- * ------------------------------------------------------------------------
39
19
  * Constants
40
- * ------------------------------------------------------------------------
41
20
  */
42
21
 
43
22
  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
@@ -50,20 +29,17 @@
50
29
  mouseenter: 'mouseover',
51
30
  mouseleave: 'mouseout'
52
31
  };
53
- const customEventsRegex = /^(mouseenter|mouseleave)/i;
54
32
  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
55
33
  /**
56
- * ------------------------------------------------------------------------
57
34
  * Private methods
58
- * ------------------------------------------------------------------------
59
35
  */
60
36
 
61
- function getUidEvent(element, uid) {
37
+ function makeEventUid(element, uid) {
62
38
  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
63
39
  }
64
40
 
65
- function getEvent(element) {
66
- const uid = getUidEvent(element);
41
+ function getElementEvents(element) {
42
+ const uid = makeEventUid(element);
67
43
  element.uidEvent = uid;
68
44
  eventRegistry[uid] = eventRegistry[uid] || {};
69
45
  return eventRegistry[uid];
@@ -71,7 +47,9 @@
71
47
 
72
48
  function bootstrapHandler(element, fn) {
73
49
  return function handler(event) {
74
- event.delegateTarget = element;
50
+ hydrateObj(event, {
51
+ delegateTarget: element
52
+ });
75
53
 
76
54
  if (handler.oneOff) {
77
55
  EventHandler.off(element, event.type, fn);
@@ -88,65 +66,52 @@
88
66
  for (let {
89
67
  target
90
68
  } = event; target && target !== this; target = target.parentNode) {
91
- for (let i = domElements.length; i--;) {
92
- if (domElements[i] === target) {
93
- event.delegateTarget = target;
69
+ for (const domElement of domElements) {
70
+ if (domElement !== target) {
71
+ continue;
72
+ }
94
73
 
95
- if (handler.oneOff) {
96
- EventHandler.off(element, event.type, selector, fn);
97
- }
74
+ hydrateObj(event, {
75
+ delegateTarget: target
76
+ });
98
77
 
99
- return fn.apply(target, [event]);
78
+ if (handler.oneOff) {
79
+ EventHandler.off(element, event.type, selector, fn);
100
80
  }
101
- }
102
- } // To please ESLint
103
81
 
104
-
105
- return null;
82
+ return fn.apply(target, [event]);
83
+ }
84
+ }
106
85
  };
107
86
  }
108
87
 
109
- function findHandler(events, handler, delegationSelector = null) {
110
- const uidEventList = Object.keys(events);
111
-
112
- for (let i = 0, len = uidEventList.length; i < len; i++) {
113
- const event = events[uidEventList[i]];
114
-
115
- if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
116
- return event;
117
- }
118
- }
119
-
120
- return null;
88
+ function findHandler(events, callable, delegationSelector = null) {
89
+ return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
121
90
  }
122
91
 
123
- function normalizeParams(originalTypeEvent, handler, delegationFn) {
124
- const delegation = typeof handler === 'string';
125
- const originalHandler = delegation ? delegationFn : handler;
92
+ function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
93
+ const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check
94
+
95
+ const callable = isDelegated ? delegationFunction : handler || delegationFunction;
126
96
  let typeEvent = getTypeEvent(originalTypeEvent);
127
- const isNative = nativeEvents.has(typeEvent);
128
97
 
129
- if (!isNative) {
98
+ if (!nativeEvents.has(typeEvent)) {
130
99
  typeEvent = originalTypeEvent;
131
100
  }
132
101
 
133
- return [delegation, originalHandler, typeEvent];
102
+ return [isDelegated, callable, typeEvent];
134
103
  }
135
104
 
136
- function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
105
+ function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
137
106
  if (typeof originalTypeEvent !== 'string' || !element) {
138
107
  return;
139
108
  }
140
109
 
141
- if (!handler) {
142
- handler = delegationFn;
143
- delegationFn = null;
144
- } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
110
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
145
111
  // this prevents the handler from being dispatched the same way as mouseover or mouseout does
146
112
 
147
-
148
- if (customEventsRegex.test(originalTypeEvent)) {
149
- const wrapFn = fn => {
113
+ if (originalTypeEvent in customEvents) {
114
+ const wrapFunction = fn => {
150
115
  return function (event) {
151
116
  if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
152
117
  return fn.call(this, event);
@@ -154,31 +119,26 @@
154
119
  };
155
120
  };
156
121
 
157
- if (delegationFn) {
158
- delegationFn = wrapFn(delegationFn);
159
- } else {
160
- handler = wrapFn(handler);
161
- }
122
+ callable = wrapFunction(callable);
162
123
  }
163
124
 
164
- const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
165
- const events = getEvent(element);
125
+ const events = getElementEvents(element);
166
126
  const handlers = events[typeEvent] || (events[typeEvent] = {});
167
- const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
127
+ const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
168
128
 
169
- if (previousFn) {
170
- previousFn.oneOff = previousFn.oneOff && oneOff;
129
+ if (previousFunction) {
130
+ previousFunction.oneOff = previousFunction.oneOff && oneOff;
171
131
  return;
172
132
  }
173
133
 
174
- const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
175
- const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
176
- fn.delegationSelector = delegation ? handler : null;
177
- fn.originalHandler = originalHandler;
134
+ const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
135
+ const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
136
+ fn.delegationSelector = isDelegated ? handler : null;
137
+ fn.callable = callable;
178
138
  fn.oneOff = oneOff;
179
139
  fn.uidEvent = uid;
180
140
  handlers[uid] = fn;
181
- element.addEventListener(typeEvent, fn, delegation);
141
+ element.addEventListener(typeEvent, fn, isDelegated);
182
142
  }
183
143
 
184
144
  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
@@ -194,12 +154,13 @@
194
154
 
195
155
  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
196
156
  const storeElementEvent = events[typeEvent] || {};
197
- Object.keys(storeElementEvent).forEach(handlerKey => {
157
+
158
+ for (const handlerKey of Object.keys(storeElementEvent)) {
198
159
  if (handlerKey.includes(namespace)) {
199
160
  const event = storeElementEvent[handlerKey];
200
- removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
161
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
201
162
  }
202
- });
163
+ }
203
164
  }
204
165
 
205
166
  function getTypeEvent(event) {
@@ -209,49 +170,49 @@
209
170
  }
210
171
 
211
172
  const EventHandler = {
212
- on(element, event, handler, delegationFn) {
213
- addHandler(element, event, handler, delegationFn, false);
173
+ on(element, event, handler, delegationFunction) {
174
+ addHandler(element, event, handler, delegationFunction, false);
214
175
  },
215
176
 
216
- one(element, event, handler, delegationFn) {
217
- addHandler(element, event, handler, delegationFn, true);
177
+ one(element, event, handler, delegationFunction) {
178
+ addHandler(element, event, handler, delegationFunction, true);
218
179
  },
219
180
 
220
- off(element, originalTypeEvent, handler, delegationFn) {
181
+ off(element, originalTypeEvent, handler, delegationFunction) {
221
182
  if (typeof originalTypeEvent !== 'string' || !element) {
222
183
  return;
223
184
  }
224
185
 
225
- const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
186
+ const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
226
187
  const inNamespace = typeEvent !== originalTypeEvent;
227
- const events = getEvent(element);
188
+ const events = getElementEvents(element);
189
+ const storeElementEvent = events[typeEvent] || {};
228
190
  const isNamespace = originalTypeEvent.startsWith('.');
229
191
 
230
- if (typeof originalHandler !== 'undefined') {
192
+ if (typeof callable !== 'undefined') {
231
193
  // Simplest case: handler is passed, remove that listener ONLY.
232
- if (!events || !events[typeEvent]) {
194
+ if (!Object.keys(storeElementEvent).length) {
233
195
  return;
234
196
  }
235
197
 
236
- removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
198
+ removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
237
199
  return;
238
200
  }
239
201
 
240
202
  if (isNamespace) {
241
- Object.keys(events).forEach(elementEvent => {
203
+ for (const elementEvent of Object.keys(events)) {
242
204
  removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
243
- });
205
+ }
244
206
  }
245
207
 
246
- const storeElementEvent = events[typeEvent] || {};
247
- Object.keys(storeElementEvent).forEach(keyHandlers => {
208
+ for (const keyHandlers of Object.keys(storeElementEvent)) {
248
209
  const handlerKey = keyHandlers.replace(stripUidRegex, '');
249
210
 
250
211
  if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
251
212
  const event = storeElementEvent[keyHandlers];
252
- removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
213
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
253
214
  }
254
- });
215
+ }
255
216
  },
256
217
 
257
218
  trigger(element, event, args) {
@@ -259,15 +220,13 @@
259
220
  return null;
260
221
  }
261
222
 
262
- const $ = getjQuery();
223
+ const $ = index.getjQuery();
263
224
  const typeEvent = getTypeEvent(event);
264
225
  const inNamespace = event !== typeEvent;
265
- const isNative = nativeEvents.has(typeEvent);
266
- let jQueryEvent;
226
+ let jQueryEvent = null;
267
227
  let bubbles = true;
268
228
  let nativeDispatch = true;
269
229
  let defaultPrevented = false;
270
- let evt = null;
271
230
 
272
231
  if (inNamespace && $) {
273
232
  jQueryEvent = $.Event(event, args);
@@ -277,27 +236,11 @@
277
236
  defaultPrevented = jQueryEvent.isDefaultPrevented();
278
237
  }
279
238
 
280
- if (isNative) {
281
- evt = document.createEvent('HTMLEvents');
282
- evt.initEvent(typeEvent, bubbles, true);
283
- } else {
284
- evt = new CustomEvent(event, {
285
- bubbles,
286
- cancelable: true
287
- });
288
- } // merge custom information in our event
289
-
290
-
291
- if (typeof args !== 'undefined') {
292
- Object.keys(args).forEach(key => {
293
- Object.defineProperty(evt, key, {
294
- get() {
295
- return args[key];
296
- }
297
-
298
- });
299
- });
300
- }
239
+ let evt = new Event(event, {
240
+ bubbles,
241
+ cancelable: true
242
+ });
243
+ evt = hydrateObj(evt, args);
301
244
 
302
245
  if (defaultPrevented) {
303
246
  evt.preventDefault();
@@ -307,7 +250,7 @@
307
250
  element.dispatchEvent(evt);
308
251
  }
309
252
 
310
- if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
253
+ if (evt.defaultPrevented && jQueryEvent) {
311
254
  jQueryEvent.preventDefault();
312
255
  }
313
256
 
@@ -316,6 +259,25 @@
316
259
 
317
260
  };
318
261
 
262
+ function hydrateObj(obj, meta) {
263
+ for (const [key, value] of Object.entries(meta || {})) {
264
+ try {
265
+ obj[key] = value;
266
+ } catch (_unused) {
267
+ Object.defineProperty(obj, key, {
268
+ configurable: true,
269
+
270
+ get() {
271
+ return value;
272
+ }
273
+
274
+ });
275
+ }
276
+ }
277
+
278
+ return obj;
279
+ }
280
+
319
281
  return EventHandler;
320
282
 
321
283
  }));
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Bootstrap manipulator.js v5.1.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap manipulator.js v5.2.2 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
@@ -11,28 +11,36 @@
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.1.3): dom/manipulator.js
14
+ * Bootstrap (v5.2.2): dom/manipulator.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
18
- function normalizeData(val) {
19
- if (val === 'true') {
18
+ function normalizeData(value) {
19
+ if (value === 'true') {
20
20
  return true;
21
21
  }
22
22
 
23
- if (val === 'false') {
23
+ if (value === 'false') {
24
24
  return false;
25
25
  }
26
26
 
27
- if (val === Number(val).toString()) {
28
- return Number(val);
27
+ if (value === Number(value).toString()) {
28
+ return Number(value);
29
29
  }
30
30
 
31
- if (val === '' || val === 'null') {
31
+ if (value === '' || value === 'null') {
32
32
  return null;
33
33
  }
34
34
 
35
- return val;
35
+ if (typeof value !== 'string') {
36
+ return value;
37
+ }
38
+
39
+ try {
40
+ return JSON.parse(decodeURIComponent(value));
41
+ } catch (_unused) {
42
+ return value;
43
+ }
36
44
  }
37
45
 
38
46
  function normalizeDataKey(key) {
@@ -54,31 +62,19 @@
54
62
  }
55
63
 
56
64
  const attributes = {};
57
- Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
65
+ const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
66
+
67
+ for (const key of bsKeys) {
58
68
  let pureKey = key.replace(/^bs/, '');
59
69
  pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
60
70
  attributes[pureKey] = normalizeData(element.dataset[key]);
61
- });
71
+ }
72
+
62
73
  return attributes;
63
74
  },
64
75
 
65
76
  getDataAttribute(element, key) {
66
77
  return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
67
- },
68
-
69
- offset(element) {
70
- const rect = element.getBoundingClientRect();
71
- return {
72
- top: rect.top + window.pageYOffset,
73
- left: rect.left + window.pageXOffset
74
- };
75
- },
76
-
77
- position(element) {
78
- return {
79
- top: element.offsetTop,
80
- left: element.offsetLeft
81
- };
82
78
  }
83
79
 
84
80
  };
@@ -1,64 +1,24 @@
1
1
  /*!
2
- * Bootstrap selector-engine.js v5.1.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap selector-engine.js v5.2.2 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
- typeof define === 'function' && define.amd ? define(factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory());
10
- })(this, (function () { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) :
8
+ typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory(global.Index));
10
+ })(this, (function (index) { 'use strict';
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.1.3): util/index.js
14
+ * Bootstrap (v5.2.2): dom/selector-engine.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
18
-
19
- const isElement = obj => {
20
- if (!obj || typeof obj !== 'object') {
21
- return false;
22
- }
23
-
24
- if (typeof obj.jquery !== 'undefined') {
25
- obj = obj[0];
26
- }
27
-
28
- return typeof obj.nodeType !== 'undefined';
29
- };
30
-
31
- const isVisible = element => {
32
- if (!isElement(element) || element.getClientRects().length === 0) {
33
- return false;
34
- }
35
-
36
- return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
37
- };
38
-
39
- const isDisabled = element => {
40
- if (!element || element.nodeType !== Node.ELEMENT_NODE) {
41
- return true;
42
- }
43
-
44
- if (element.classList.contains('disabled')) {
45
- return true;
46
- }
47
-
48
- if (typeof element.disabled !== 'undefined') {
49
- return element.disabled;
50
- }
51
-
52
- return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
53
- };
54
-
55
18
  /**
56
- * --------------------------------------------------------------------------
57
- * Bootstrap (v5.1.3): dom/selector-engine.js
58
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
59
- * --------------------------------------------------------------------------
19
+ * Constants
60
20
  */
61
- const NODE_TEXT = 3;
21
+
62
22
  const SelectorEngine = {
63
23
  find(selector, element = document.documentElement) {
64
24
  return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
@@ -74,14 +34,11 @@
74
34
 
75
35
  parents(element, selector) {
76
36
  const parents = [];
77
- let ancestor = element.parentNode;
78
-
79
- while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
80
- if (ancestor.matches(selector)) {
81
- parents.push(ancestor);
82
- }
37
+ let ancestor = element.parentNode.closest(selector);
83
38
 
84
- ancestor = ancestor.parentNode;
39
+ while (ancestor) {
40
+ parents.push(ancestor);
41
+ ancestor = ancestor.parentNode.closest(selector);
85
42
  }
86
43
 
87
44
  return parents;
@@ -101,6 +58,7 @@
101
58
  return [];
102
59
  },
103
60
 
61
+ // TODO: this is now unused; remove later along with prev()
104
62
  next(element, selector) {
105
63
  let next = element.nextElementSibling;
106
64
 
@@ -116,8 +74,8 @@
116
74
  },
117
75
 
118
76
  focusableChildren(element) {
119
- const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
120
- return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
77
+ const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
78
+ return this.find(focusables, element).filter(el => !index.isDisabled(el) && index.isVisible(el));
121
79
  }
122
80
 
123
81
  };