bootstrap 5.1.1 → 5.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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/javascripts/bootstrap/alert.js +18 -153
  4. data/assets/javascripts/bootstrap/base-component.js +44 -127
  5. data/assets/javascripts/bootstrap/button.js +16 -80
  6. data/assets/javascripts/bootstrap/carousel.js +225 -497
  7. data/assets/javascripts/bootstrap/collapse.js +79 -262
  8. data/assets/javascripts/bootstrap/dom/data.js +6 -8
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +95 -133
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +25 -29
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +17 -59
  12. data/assets/javascripts/bootstrap/dropdown.js +124 -342
  13. data/assets/javascripts/bootstrap/modal.js +122 -767
  14. data/assets/javascripts/bootstrap/offcanvas.js +102 -671
  15. data/assets/javascripts/bootstrap/popover.js +42 -124
  16. data/assets/javascripts/bootstrap/scrollspy.js +186 -269
  17. data/assets/javascripts/bootstrap/tab.js +222 -221
  18. data/assets/javascripts/bootstrap/toast.js +41 -227
  19. data/assets/javascripts/bootstrap/tooltip.js +283 -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 +16 -7
  31. data/assets/javascripts/bootstrap.js +2094 -1891
  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 +52 -24
  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 +3 -0
  41. data/assets/stylesheets/bootstrap/_buttons.scss +97 -22
  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 +83 -75
  46. data/assets/stylesheets/bootstrap/_functions.scss +7 -7
  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 +44 -27
  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 +91 -150
  54. data/assets/stylesheets/bootstrap/_offcanvas.scss +119 -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 +38 -25
  63. data/assets/stylesheets/bootstrap/_toasts.scss +35 -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 +118 -124
  68. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +3 -6
  69. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +14 -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 +2 -1
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +15 -7
  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 +8 -0
  85. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
  86. data/assets/stylesheets/bootstrap/mixins/_grid.scss +13 -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 +12 -4
  91. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +1 -1
  92. data/bootstrap.gemspec +1 -1
  93. data/lib/bootstrap/version.rb +2 -2
  94. data/tasks/updater/js.rb +9 -4
  95. metadata +16 -4
@@ -1,202 +1,27 @@
1
1
  /*!
2
- * Bootstrap toast.js v5.1.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap toast.js v5.2.0 (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
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
- var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
17
16
 
18
17
  /**
19
18
  * --------------------------------------------------------------------------
20
- * Bootstrap (v5.1.1): util/index.js
19
+ * Bootstrap (v5.2.0): toast.js
21
20
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
22
21
  * --------------------------------------------------------------------------
23
22
  */
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.1): 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
23
  /**
191
- * --------------------------------------------------------------------------
192
- * Bootstrap (v5.1.1): toast.js
193
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
194
- * --------------------------------------------------------------------------
195
- */
196
- /**
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
- class Toast extends BaseComponent__default['default'] {
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,21 +65,21 @@
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
257
79
 
258
80
 
259
81
  show() {
260
- const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
82
+ const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
261
83
 
262
84
  if (showEvent.defaultPrevented) {
263
85
  return;
@@ -272,7 +94,7 @@
272
94
  const complete = () => {
273
95
  this._element.classList.remove(CLASS_NAME_SHOWING);
274
96
 
275
- EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
97
+ EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
276
98
 
277
99
  this._maybeScheduleHide();
278
100
  };
@@ -280,21 +102,19 @@
280
102
  this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
281
103
 
282
104
 
283
- reflow(this._element);
284
-
285
- this._element.classList.add(CLASS_NAME_SHOW);
105
+ index.reflow(this._element);
286
106
 
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
 
297
- const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
117
+ const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
298
118
 
299
119
  if (hideEvent.defaultPrevented) {
300
120
  return;
@@ -304,11 +124,9 @@
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
- EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
129
+ EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
312
130
  };
313
131
 
314
132
  this._element.classList.add(CLASS_NAME_SHOWING);
@@ -319,23 +137,18 @@
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();
145
+ }
146
+
147
+ isShown() {
148
+ return this._element.classList.contains(CLASS_NAME_SHOW);
327
149
  } // Private
328
150
 
329
151
 
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
-
339
152
  _maybeScheduleHide() {
340
153
  if (!this._config.autohide) {
341
154
  return;
@@ -379,10 +192,10 @@
379
192
  }
380
193
 
381
194
  _setListeners() {
382
- EventHandler__default['default'].on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
383
- EventHandler__default['default'].on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
384
- EventHandler__default['default'].on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
385
- EventHandler__default['default'].on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
195
+ EventHandler__default.default.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
196
+ EventHandler__default.default.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
197
+ EventHandler__default.default.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
198
+ EventHandler__default.default.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
386
199
  }
387
200
 
388
201
  _clearTimeout() {
@@ -406,17 +219,18 @@
406
219
  }
407
220
 
408
221
  }
222
+ /**
223
+ * Data API implementation
224
+ */
225
+
409
226
 
410
- enableDismissTrigger(Toast);
227
+ componentFunctions.enableDismissTrigger(Toast);
411
228
  /**
412
- * ------------------------------------------------------------------------
413
229
  * jQuery
414
- * ------------------------------------------------------------------------
415
- * add .Toast to jQuery only if jQuery is present
416
230
  */
417
231
 
418
- defineJQueryPlugin(Toast);
232
+ index.defineJQueryPlugin(Toast);
419
233
 
420
234
  return Toast;
421
235
 
422
- })));
236
+ }));