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,202 +1,27 @@
1
1
  /*!
2
- * Bootstrap toast.js v5.1.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap toast.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(require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/manipulator', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.EventHandler, global.Manipulator, global.Base));
10
- })(this, (function (EventHandler, Manipulator, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./base-component'), require('./util/component-functions')) :
8
+ typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component', './util/component-functions'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.Index, global.EventHandler, global.BaseComponent, global.ComponentFunctions));
10
+ })(this, (function (index, EventHandler, BaseComponent, componentFunctions) { 'use strict';
11
11
 
12
12
  const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
14
  const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
- const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
15
  const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
17
16
 
18
17
  /**
19
18
  * --------------------------------------------------------------------------
20
- * Bootstrap (v5.1.3): util/index.js
21
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
22
- * --------------------------------------------------------------------------
23
- */
24
-
25
- const toType = obj => {
26
- if (obj === null || obj === undefined) {
27
- return `${obj}`;
28
- }
29
-
30
- return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
31
- };
32
-
33
- const getSelector = element => {
34
- let selector = element.getAttribute('data-bs-target');
35
-
36
- if (!selector || selector === '#') {
37
- let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
38
- // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
39
- // `document.querySelector` will rightfully complain it is invalid.
40
- // See https://github.com/twbs/bootstrap/issues/32273
41
-
42
- if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
43
- return null;
44
- } // Just in case some CMS puts out a full URL with the anchor appended
45
-
46
-
47
- if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
48
- hrefAttr = `#${hrefAttr.split('#')[1]}`;
49
- }
50
-
51
- selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
52
- }
53
-
54
- return selector;
55
- };
56
-
57
- const getElementFromSelector = element => {
58
- const selector = getSelector(element);
59
- return selector ? document.querySelector(selector) : null;
60
- };
61
-
62
- const isElement = obj => {
63
- if (!obj || typeof obj !== 'object') {
64
- return false;
65
- }
66
-
67
- if (typeof obj.jquery !== 'undefined') {
68
- obj = obj[0];
69
- }
70
-
71
- return typeof obj.nodeType !== 'undefined';
72
- };
73
-
74
- const typeCheckConfig = (componentName, config, configTypes) => {
75
- Object.keys(configTypes).forEach(property => {
76
- const expectedTypes = configTypes[property];
77
- const value = config[property];
78
- const valueType = value && isElement(value) ? 'element' : toType(value);
79
-
80
- if (!new RegExp(expectedTypes).test(valueType)) {
81
- throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
82
- }
83
- });
84
- };
85
-
86
- const isDisabled = element => {
87
- if (!element || element.nodeType !== Node.ELEMENT_NODE) {
88
- return true;
89
- }
90
-
91
- if (element.classList.contains('disabled')) {
92
- return true;
93
- }
94
-
95
- if (typeof element.disabled !== 'undefined') {
96
- return element.disabled;
97
- }
98
-
99
- return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
100
- };
101
- /**
102
- * Trick to restart an element's animation
103
- *
104
- * @param {HTMLElement} element
105
- * @return void
106
- *
107
- * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
108
- */
109
-
110
-
111
- const reflow = element => {
112
- // eslint-disable-next-line no-unused-expressions
113
- element.offsetHeight;
114
- };
115
-
116
- const getjQuery = () => {
117
- const {
118
- jQuery
119
- } = window;
120
-
121
- if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
122
- return jQuery;
123
- }
124
-
125
- return null;
126
- };
127
-
128
- const DOMContentLoadedCallbacks = [];
129
-
130
- const onDOMContentLoaded = callback => {
131
- if (document.readyState === 'loading') {
132
- // add listener on the first call when the document is in loading state
133
- if (!DOMContentLoadedCallbacks.length) {
134
- document.addEventListener('DOMContentLoaded', () => {
135
- DOMContentLoadedCallbacks.forEach(callback => callback());
136
- });
137
- }
138
-
139
- DOMContentLoadedCallbacks.push(callback);
140
- } else {
141
- callback();
142
- }
143
- };
144
-
145
- const defineJQueryPlugin = plugin => {
146
- onDOMContentLoaded(() => {
147
- const $ = getjQuery();
148
- /* istanbul ignore if */
149
-
150
- if ($) {
151
- const name = plugin.NAME;
152
- const JQUERY_NO_CONFLICT = $.fn[name];
153
- $.fn[name] = plugin.jQueryInterface;
154
- $.fn[name].Constructor = plugin;
155
-
156
- $.fn[name].noConflict = () => {
157
- $.fn[name] = JQUERY_NO_CONFLICT;
158
- return plugin.jQueryInterface;
159
- };
160
- }
161
- });
162
- };
163
-
164
- /**
165
- * --------------------------------------------------------------------------
166
- * Bootstrap (v5.1.3): util/component-functions.js
167
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
168
- * --------------------------------------------------------------------------
169
- */
170
-
171
- const enableDismissTrigger = (component, method = 'hide') => {
172
- const clickEvent = `click.dismiss${component.EVENT_KEY}`;
173
- const name = component.NAME;
174
- EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
175
- if (['A', 'AREA'].includes(this.tagName)) {
176
- event.preventDefault();
177
- }
178
-
179
- if (isDisabled(this)) {
180
- return;
181
- }
182
-
183
- const target = getElementFromSelector(this) || this.closest(`.${name}`);
184
- const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
185
-
186
- instance[method]();
187
- });
188
- };
189
-
190
- /**
191
- * --------------------------------------------------------------------------
192
- * Bootstrap (v5.1.3): toast.js
19
+ * Bootstrap (v5.2.2): toast.js
193
20
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
194
21
  * --------------------------------------------------------------------------
195
22
  */
196
23
  /**
197
- * ------------------------------------------------------------------------
198
24
  * Constants
199
- * ------------------------------------------------------------------------
200
25
  */
201
26
 
202
27
  const NAME = 'toast';
@@ -226,15 +51,12 @@
226
51
  delay: 5000
227
52
  };
228
53
  /**
229
- * ------------------------------------------------------------------------
230
- * Class Definition
231
- * ------------------------------------------------------------------------
54
+ * Class definition
232
55
  */
233
56
 
234
57
  class Toast extends BaseComponent__default.default {
235
58
  constructor(element, config) {
236
- super(element);
237
- this._config = this._getConfig(config);
59
+ super(element, config);
238
60
  this._timeout = null;
239
61
  this._hasMouseInteraction = false;
240
62
  this._hasKeyboardInteraction = false;
@@ -243,14 +65,14 @@
243
65
  } // Getters
244
66
 
245
67
 
246
- static get DefaultType() {
247
- return DefaultType;
248
- }
249
-
250
68
  static get Default() {
251
69
  return Default;
252
70
  }
253
71
 
72
+ static get DefaultType() {
73
+ return DefaultType;
74
+ }
75
+
254
76
  static get NAME() {
255
77
  return NAME;
256
78
  } // Public
@@ -280,17 +102,15 @@
280
102
  this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
281
103
 
282
104
 
283
- reflow(this._element);
105
+ index.reflow(this._element);
284
106
 
285
- this._element.classList.add(CLASS_NAME_SHOW);
286
-
287
- this._element.classList.add(CLASS_NAME_SHOWING);
107
+ this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
288
108
 
289
109
  this._queueCallback(complete, this._element, this._config.animation);
290
110
  }
291
111
 
292
112
  hide() {
293
- if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
113
+ if (!this.isShown()) {
294
114
  return;
295
115
  }
296
116
 
@@ -304,9 +124,7 @@
304
124
  this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
305
125
 
306
126
 
307
- this._element.classList.remove(CLASS_NAME_SHOWING);
308
-
309
- this._element.classList.remove(CLASS_NAME_SHOW);
127
+ this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
310
128
 
311
129
  EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
312
130
  };
@@ -319,22 +137,17 @@
319
137
  dispose() {
320
138
  this._clearTimeout();
321
139
 
322
- if (this._element.classList.contains(CLASS_NAME_SHOW)) {
140
+ if (this.isShown()) {
323
141
  this._element.classList.remove(CLASS_NAME_SHOW);
324
142
  }
325
143
 
326
144
  super.dispose();
327
- } // Private
145
+ }
328
146
 
147
+ isShown() {
148
+ return this._element.classList.contains(CLASS_NAME_SHOW);
149
+ } // Private
329
150
 
330
- _getConfig(config) {
331
- config = { ...Default,
332
- ...Manipulator__default.default.getDataAttributes(this._element),
333
- ...(typeof config === 'object' && config ? config : {})
334
- };
335
- typeCheckConfig(NAME, config, this.constructor.DefaultType);
336
- return config;
337
- }
338
151
 
339
152
  _maybeScheduleHide() {
340
153
  if (!this._config.autohide) {
@@ -354,13 +167,17 @@
354
167
  switch (event.type) {
355
168
  case 'mouseover':
356
169
  case 'mouseout':
357
- this._hasMouseInteraction = isInteracting;
358
- break;
170
+ {
171
+ this._hasMouseInteraction = isInteracting;
172
+ break;
173
+ }
359
174
 
360
175
  case 'focusin':
361
176
  case 'focusout':
362
- this._hasKeyboardInteraction = isInteracting;
363
- break;
177
+ {
178
+ this._hasKeyboardInteraction = isInteracting;
179
+ break;
180
+ }
364
181
  }
365
182
 
366
183
  if (isInteracting) {
@@ -406,16 +223,17 @@
406
223
  }
407
224
 
408
225
  }
226
+ /**
227
+ * Data API implementation
228
+ */
229
+
409
230
 
410
- enableDismissTrigger(Toast);
231
+ componentFunctions.enableDismissTrigger(Toast);
411
232
  /**
412
- * ------------------------------------------------------------------------
413
233
  * jQuery
414
- * ------------------------------------------------------------------------
415
- * add .Toast to jQuery only if jQuery is present
416
234
  */
417
235
 
418
- defineJQueryPlugin(Toast);
236
+ index.defineJQueryPlugin(Toast);
419
237
 
420
238
  return Toast;
421
239