bootstrap 4.6.0 → 5.0.0.beta2

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 (145) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  5. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  6. data/assets/javascripts/bootstrap-sprockets.js +14 -8
  7. data/assets/javascripts/bootstrap.js +2152 -1633
  8. data/assets/javascripts/bootstrap.min.js +2 -2
  9. data/assets/javascripts/bootstrap/alert.js +179 -64
  10. data/assets/javascripts/bootstrap/base-component.js +75 -0
  11. data/assets/javascripts/bootstrap/button.js +94 -143
  12. data/assets/javascripts/bootstrap/carousel.js +386 -202
  13. data/assets/javascripts/bootstrap/collapse.js +349 -132
  14. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +310 -0
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +86 -0
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +93 -0
  18. data/assets/javascripts/bootstrap/dropdown.js +387 -224
  19. data/assets/javascripts/bootstrap/modal.js +391 -220
  20. data/assets/javascripts/bootstrap/popover.js +94 -49
  21. data/assets/javascripts/bootstrap/scrollspy.js +212 -80
  22. data/assets/javascripts/bootstrap/tab.js +198 -79
  23. data/assets/javascripts/bootstrap/toast.js +211 -78
  24. data/assets/javascripts/bootstrap/tooltip.js +558 -300
  25. data/assets/stylesheets/_bootstrap-grid.scss +51 -16
  26. data/assets/stylesheets/_bootstrap-reboot.scss +4 -1
  27. data/assets/stylesheets/_bootstrap.scss +15 -8
  28. data/assets/stylesheets/bootstrap/_accordion.scss +126 -0
  29. data/assets/stylesheets/bootstrap/_alert.scss +15 -10
  30. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  31. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -17
  32. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  33. data/assets/stylesheets/bootstrap/_buttons.scss +27 -60
  34. data/assets/stylesheets/bootstrap/_card.scss +21 -92
  35. data/assets/stylesheets/bootstrap/_carousel.scss +65 -33
  36. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  37. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  38. data/assets/stylesheets/bootstrap/_dropdown.scss +95 -38
  39. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  40. data/assets/stylesheets/bootstrap/_functions.scss +84 -23
  41. data/assets/stylesheets/bootstrap/_grid.scss +3 -54
  42. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  43. data/assets/stylesheets/bootstrap/_list-group.scss +17 -8
  44. data/assets/stylesheets/bootstrap/_mixins.scss +7 -13
  45. data/assets/stylesheets/bootstrap/_modal.scss +41 -46
  46. data/assets/stylesheets/bootstrap/_nav.scss +16 -4
  47. data/assets/stylesheets/bootstrap/_navbar.scss +43 -71
  48. data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
  49. data/assets/stylesheets/bootstrap/_popover.scss +15 -27
  50. data/assets/stylesheets/bootstrap/_progress.scss +2 -4
  51. data/assets/stylesheets/bootstrap/_reboot.scss +314 -163
  52. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  53. data/assets/stylesheets/bootstrap/_spinners.scss +5 -5
  54. data/assets/stylesheets/bootstrap/_tables.scss +79 -114
  55. data/assets/stylesheets/bootstrap/_toasts.scss +20 -15
  56. data/assets/stylesheets/bootstrap/_tooltip.scss +17 -17
  57. data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
  58. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  59. data/assets/stylesheets/bootstrap/_utilities.scss +566 -18
  60. data/assets/stylesheets/bootstrap/_variables.scss +673 -463
  61. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  62. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  64. data/assets/stylesheets/bootstrap/forms/_form-control.scss +223 -0
  65. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  66. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  67. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  68. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  69. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  70. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  71. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  72. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  73. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  74. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  75. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  76. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  77. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  78. data/assets/stylesheets/bootstrap/mixins/_alert.scss +1 -5
  79. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -8
  80. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  81. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  82. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +65 -47
  83. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  84. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  85. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  86. data/assets/stylesheets/bootstrap/mixins/_forms.scss +27 -88
  87. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  88. data/assets/stylesheets/bootstrap/mixins/_grid.scss +83 -32
  89. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  90. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -2
  91. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  92. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
  93. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  94. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  95. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  96. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  97. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  98. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  99. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  100. data/bootstrap.gemspec +1 -3
  101. data/lib/bootstrap/version.rb +2 -2
  102. data/tasks/updater/js.rb +20 -5
  103. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  104. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  105. data/test/dummy_rails/app/views/pages/root.html +89 -0
  106. data/test/dummy_rails/config/application.rb +0 -3
  107. data/test/gemfiles/rails_6_1.gemfile +7 -0
  108. metadata +44 -75
  109. data/assets/javascripts/bootstrap/util.js +0 -192
  110. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  111. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  112. data/assets/stylesheets/bootstrap/_input-group.scss +0 -208
  113. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  114. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  115. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  116. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  117. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  118. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  119. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  120. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  121. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  122. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  123. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  124. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  125. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  126. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  127. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  128. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  129. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  130. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  131. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  132. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  133. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  134. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  135. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  136. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  137. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  138. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  139. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  140. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  141. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  142. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  143. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  144. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  145. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,17 +1,18 @@
1
1
  /*!
2
- * Bootstrap popover.js v4.6.0 (https://getbootstrap.com/)
2
+ * Bootstrap popover.js v5.0.0-beta2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2021 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('jquery'), require('./tooltip.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', './tooltip'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.jQuery, global.Tooltip));
10
- }(this, (function ($, Tooltip) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/selector-engine.js'), require('./tooltip.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data', './dom/selector-engine', './tooltip'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Data, global.SelectorEngine, global.Tooltip));
10
+ }(this, (function (Data, SelectorEngine, Tooltip) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
14
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
14
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
16
  var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
16
17
 
17
18
  function _defineProperties(target, props) {
@@ -51,9 +52,65 @@
51
52
  function _inheritsLoose(subClass, superClass) {
52
53
  subClass.prototype = Object.create(superClass.prototype);
53
54
  subClass.prototype.constructor = subClass;
54
- subClass.__proto__ = superClass;
55
+
56
+ _setPrototypeOf(subClass, superClass);
57
+ }
58
+
59
+ function _setPrototypeOf(o, p) {
60
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
61
+ o.__proto__ = p;
62
+ return o;
63
+ };
64
+
65
+ return _setPrototypeOf(o, p);
55
66
  }
56
67
 
68
+ /**
69
+ * --------------------------------------------------------------------------
70
+ * Bootstrap (v5.0.0-beta2): util/index.js
71
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
72
+ * --------------------------------------------------------------------------
73
+ */
74
+
75
+ var getjQuery = function getjQuery() {
76
+ var _window = window,
77
+ jQuery = _window.jQuery;
78
+
79
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
80
+ return jQuery;
81
+ }
82
+
83
+ return null;
84
+ };
85
+
86
+ var onDOMContentLoaded = function onDOMContentLoaded(callback) {
87
+ if (document.readyState === 'loading') {
88
+ document.addEventListener('DOMContentLoaded', callback);
89
+ } else {
90
+ callback();
91
+ }
92
+ };
93
+
94
+ document.documentElement.dir === 'rtl';
95
+
96
+ var defineJQueryPlugin = function defineJQueryPlugin(name, plugin) {
97
+ onDOMContentLoaded(function () {
98
+ var $ = getjQuery();
99
+ /* istanbul ignore if */
100
+
101
+ if ($) {
102
+ var JQUERY_NO_CONFLICT = $.fn[name];
103
+ $.fn[name] = plugin.jQueryInterface;
104
+ $.fn[name].Constructor = plugin;
105
+
106
+ $.fn[name].noConflict = function () {
107
+ $.fn[name] = JQUERY_NO_CONFLICT;
108
+ return plugin.jQueryInterface;
109
+ };
110
+ }
111
+ });
112
+ };
113
+
57
114
  /**
58
115
  * ------------------------------------------------------------------------
59
116
  * Constants
@@ -61,28 +118,23 @@
61
118
  */
62
119
 
63
120
  var NAME = 'popover';
64
- var VERSION = '4.6.0';
65
121
  var DATA_KEY = 'bs.popover';
66
122
  var EVENT_KEY = "." + DATA_KEY;
67
- var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
68
123
  var CLASS_PREFIX = 'bs-popover';
69
124
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
70
125
 
71
126
  var Default = _extends({}, Tooltip__default['default'].Default, {
72
127
  placement: 'right',
128
+ offset: [0, 8],
73
129
  trigger: 'click',
74
130
  content: '',
75
- template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
131
+ template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
76
132
  });
77
133
 
78
134
  var DefaultType = _extends({}, Tooltip__default['default'].DefaultType, {
79
135
  content: '(string|element|function)'
80
136
  });
81
137
 
82
- var CLASS_NAME_FADE = 'fade';
83
- var CLASS_NAME_SHOW = 'show';
84
- var SELECTOR_TITLE = '.popover-header';
85
- var SELECTOR_CONTENT = '.popover-body';
86
138
  var Event = {
87
139
  HIDE: "hide" + EVENT_KEY,
88
140
  HIDDEN: "hidden" + EVENT_KEY,
@@ -95,6 +147,10 @@
95
147
  MOUSEENTER: "mouseenter" + EVENT_KEY,
96
148
  MOUSELEAVE: "mouseleave" + EVENT_KEY
97
149
  };
150
+ var CLASS_NAME_FADE = 'fade';
151
+ var CLASS_NAME_SHOW = 'show';
152
+ var SELECTOR_TITLE = '.popover-header';
153
+ var SELECTOR_CONTENT = '.popover-body';
98
154
  /**
99
155
  * ------------------------------------------------------------------------
100
156
  * Class Definition
@@ -115,48 +171,47 @@
115
171
  return this.getTitle() || this._getContent();
116
172
  };
117
173
 
118
- _proto.addAttachmentClass = function addAttachmentClass(attachment) {
119
- $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
120
- };
121
-
122
- _proto.getTipElement = function getTipElement() {
123
- this.tip = this.tip || $__default['default'](this.config.template)[0];
124
- return this.tip;
125
- };
126
-
127
174
  _proto.setContent = function setContent() {
128
- var $tip = $__default['default'](this.getTipElement()); // We use append for html objects to maintain js events
175
+ var tip = this.getTipElement(); // we use append for html objects to maintain js events
129
176
 
130
- this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
177
+ this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TITLE, tip), this.getTitle());
131
178
 
132
179
  var content = this._getContent();
133
180
 
134
181
  if (typeof content === 'function') {
135
- content = content.call(this.element);
182
+ content = content.call(this._element);
136
183
  }
137
184
 
138
- this.setElementContent($tip.find(SELECTOR_CONTENT), content);
139
- $tip.removeClass(CLASS_NAME_FADE + " " + CLASS_NAME_SHOW);
185
+ this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_CONTENT, tip), content);
186
+ tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
140
187
  } // Private
141
188
  ;
142
189
 
190
+ _proto._addAttachmentClass = function _addAttachmentClass(attachment) {
191
+ this.getTipElement().classList.add(CLASS_PREFIX + "-" + this.updateAttachment(attachment));
192
+ };
193
+
143
194
  _proto._getContent = function _getContent() {
144
- return this.element.getAttribute('data-content') || this.config.content;
195
+ return this._element.getAttribute('data-bs-content') || this.config.content;
145
196
  };
146
197
 
147
198
  _proto._cleanTipClass = function _cleanTipClass() {
148
- var $tip = $__default['default'](this.getTipElement());
149
- var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
199
+ var tip = this.getTipElement();
200
+ var tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
150
201
 
151
202
  if (tabClass !== null && tabClass.length > 0) {
152
- $tip.removeClass(tabClass.join(''));
203
+ tabClass.map(function (token) {
204
+ return token.trim();
205
+ }).forEach(function (tClass) {
206
+ return tip.classList.remove(tClass);
207
+ });
153
208
  }
154
209
  } // Static
155
210
  ;
156
211
 
157
- Popover._jQueryInterface = function _jQueryInterface(config) {
212
+ Popover.jQueryInterface = function jQueryInterface(config) {
158
213
  return this.each(function () {
159
- var data = $__default['default'](this).data(DATA_KEY);
214
+ var data = Data__default['default'].getData(this, DATA_KEY);
160
215
 
161
216
  var _config = typeof config === 'object' ? config : null;
162
217
 
@@ -166,7 +221,7 @@
166
221
 
167
222
  if (!data) {
168
223
  data = new Popover(this, _config);
169
- $__default['default'](this).data(DATA_KEY, data);
224
+ Data__default['default'].setData(this, DATA_KEY, data);
170
225
  }
171
226
 
172
227
  if (typeof config === 'string') {
@@ -180,14 +235,9 @@
180
235
  };
181
236
 
182
237
  _createClass(Popover, null, [{
183
- key: "VERSION",
184
- // Getters
185
- get: function get() {
186
- return VERSION;
187
- }
188
- }, {
189
238
  key: "Default",
190
- get: function get() {
239
+ get: // Getters
240
+ function get() {
191
241
  return Default;
192
242
  }
193
243
  }, {
@@ -223,16 +273,11 @@
223
273
  * ------------------------------------------------------------------------
224
274
  * jQuery
225
275
  * ------------------------------------------------------------------------
276
+ * add .Popover to jQuery only if jQuery is present
226
277
  */
227
278
 
228
279
 
229
- $__default['default'].fn[NAME] = Popover._jQueryInterface;
230
- $__default['default'].fn[NAME].Constructor = Popover;
231
-
232
- $__default['default'].fn[NAME].noConflict = function () {
233
- $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
234
- return Popover._jQueryInterface;
235
- };
280
+ defineJQueryPlugin(NAME, Popover);
236
281
 
237
282
  return Popover;
238
283
 
@@ -1,18 +1,21 @@
1
1
  /*!
2
- * Bootstrap scrollspy.js v4.6.0 (https://getbootstrap.com/)
2
+ * Bootstrap scrollspy.js v5.0.0-beta2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2021 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('jquery'), require('./util.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.jQuery, global.Util));
10
- }(this, (function ($, Util) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ }(this, (function (Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
14
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
- var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
14
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
18
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
16
19
 
17
20
  function _defineProperties(target, props) {
18
21
  for (var i = 0; i < props.length; i++) {
@@ -48,6 +51,141 @@
48
51
  return _extends.apply(this, arguments);
49
52
  }
50
53
 
54
+ function _inheritsLoose(subClass, superClass) {
55
+ subClass.prototype = Object.create(superClass.prototype);
56
+ subClass.prototype.constructor = subClass;
57
+
58
+ _setPrototypeOf(subClass, superClass);
59
+ }
60
+
61
+ function _setPrototypeOf(o, p) {
62
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
63
+ o.__proto__ = p;
64
+ return o;
65
+ };
66
+
67
+ return _setPrototypeOf(o, p);
68
+ }
69
+
70
+ /**
71
+ * --------------------------------------------------------------------------
72
+ * Bootstrap (v5.0.0-beta2): util/index.js
73
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
74
+ * --------------------------------------------------------------------------
75
+ */
76
+ var MAX_UID = 1000000;
77
+
78
+ var toType = function toType(obj) {
79
+ if (obj === null || obj === undefined) {
80
+ return "" + obj;
81
+ }
82
+
83
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
84
+ };
85
+ /**
86
+ * --------------------------------------------------------------------------
87
+ * Public Util Api
88
+ * --------------------------------------------------------------------------
89
+ */
90
+
91
+
92
+ var getUID = function getUID(prefix) {
93
+ do {
94
+ prefix += Math.floor(Math.random() * MAX_UID);
95
+ } while (document.getElementById(prefix));
96
+
97
+ return prefix;
98
+ };
99
+
100
+ var getSelector = function getSelector(element) {
101
+ var selector = element.getAttribute('data-bs-target');
102
+
103
+ if (!selector || selector === '#') {
104
+ var hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
105
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
106
+ // `document.querySelector` will rightfully complain it is invalid.
107
+ // See https://github.com/twbs/bootstrap/issues/32273
108
+
109
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
110
+ return null;
111
+ } // Just in case some CMS puts out a full URL with the anchor appended
112
+
113
+
114
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
115
+ hrefAttr = '#' + hrefAttr.split('#')[1];
116
+ }
117
+
118
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
119
+ }
120
+
121
+ return selector;
122
+ };
123
+
124
+ var getSelectorFromElement = function getSelectorFromElement(element) {
125
+ var selector = getSelector(element);
126
+
127
+ if (selector) {
128
+ return document.querySelector(selector) ? selector : null;
129
+ }
130
+
131
+ return null;
132
+ };
133
+
134
+ var isElement = function isElement(obj) {
135
+ return (obj[0] || obj).nodeType;
136
+ };
137
+
138
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
139
+ Object.keys(configTypes).forEach(function (property) {
140
+ var expectedTypes = configTypes[property];
141
+ var value = config[property];
142
+ var valueType = value && isElement(value) ? 'element' : toType(value);
143
+
144
+ if (!new RegExp(expectedTypes).test(valueType)) {
145
+ throw new TypeError(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
146
+ }
147
+ });
148
+ };
149
+
150
+ var getjQuery = function getjQuery() {
151
+ var _window = window,
152
+ jQuery = _window.jQuery;
153
+
154
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
155
+ return jQuery;
156
+ }
157
+
158
+ return null;
159
+ };
160
+
161
+ var onDOMContentLoaded = function onDOMContentLoaded(callback) {
162
+ if (document.readyState === 'loading') {
163
+ document.addEventListener('DOMContentLoaded', callback);
164
+ } else {
165
+ callback();
166
+ }
167
+ };
168
+
169
+ document.documentElement.dir === 'rtl';
170
+
171
+ var defineJQueryPlugin = function defineJQueryPlugin(name, plugin) {
172
+ onDOMContentLoaded(function () {
173
+ var $ = getjQuery();
174
+ /* istanbul ignore if */
175
+
176
+ if ($) {
177
+ var JQUERY_NO_CONFLICT = $.fn[name];
178
+ $.fn[name] = plugin.jQueryInterface;
179
+ $.fn[name].Constructor = plugin;
180
+
181
+ $.fn[name].noConflict = function () {
182
+ $.fn[name] = JQUERY_NO_CONFLICT;
183
+ return plugin.jQueryInterface;
184
+ };
185
+ }
186
+ });
187
+ };
188
+
51
189
  /**
52
190
  * ------------------------------------------------------------------------
53
191
  * Constants
@@ -55,11 +193,9 @@
55
193
  */
56
194
 
57
195
  var NAME = 'scrollspy';
58
- var VERSION = '4.6.0';
59
196
  var DATA_KEY = 'bs.scrollspy';
60
197
  var EVENT_KEY = "." + DATA_KEY;
61
198
  var DATA_API_KEY = '.data-api';
62
- var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
63
199
  var Default = {
64
200
  offset: 10,
65
201
  method: 'auto',
@@ -75,13 +211,12 @@
75
211
  var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
76
212
  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
77
213
  var CLASS_NAME_ACTIVE = 'active';
78
- var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
214
+ var SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
79
215
  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
80
216
  var SELECTOR_NAV_LINKS = '.nav-link';
81
217
  var SELECTOR_NAV_ITEMS = '.nav-item';
82
218
  var SELECTOR_LIST_ITEMS = '.list-group-item';
83
219
  var SELECTOR_DROPDOWN = '.dropdown';
84
- var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
85
220
  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
86
221
  var METHOD_OFFSET = 'offset';
87
222
  var METHOD_POSITION = 'position';
@@ -91,24 +226,29 @@
91
226
  * ------------------------------------------------------------------------
92
227
  */
93
228
 
94
- var ScrollSpy = /*#__PURE__*/function () {
95
- function ScrollSpy(element, config) {
96
- var _this = this;
229
+ var ScrollSpy = /*#__PURE__*/function (_BaseComponent) {
230
+ _inheritsLoose(ScrollSpy, _BaseComponent);
97
231
 
98
- this._element = element;
99
- this._scrollElement = element.tagName === 'BODY' ? window : element;
100
- this._config = this._getConfig(config);
101
- this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
102
- this._offsets = [];
103
- this._targets = [];
104
- this._activeTarget = null;
105
- this._scrollHeight = 0;
106
- $__default['default'](this._scrollElement).on(EVENT_SCROLL, function (event) {
107
- return _this._process(event);
232
+ function ScrollSpy(element, config) {
233
+ var _this;
234
+
235
+ _this = _BaseComponent.call(this, element) || this;
236
+ _this._scrollElement = element.tagName === 'BODY' ? window : element;
237
+ _this._config = _this._getConfig(config);
238
+ _this._selector = _this._config.target + " " + SELECTOR_NAV_LINKS + ", " + _this._config.target + " " + SELECTOR_LIST_ITEMS + ", " + _this._config.target + " ." + CLASS_NAME_DROPDOWN_ITEM;
239
+ _this._offsets = [];
240
+ _this._targets = [];
241
+ _this._activeTarget = null;
242
+ _this._scrollHeight = 0;
243
+ EventHandler__default['default'].on(_this._scrollElement, EVENT_SCROLL, function () {
244
+ return _this._process();
108
245
  });
109
- this.refresh();
110
246
 
111
- this._process();
247
+ _this.refresh();
248
+
249
+ _this._process();
250
+
251
+ return _this;
112
252
  } // Getters
113
253
 
114
254
 
@@ -124,21 +264,16 @@
124
264
  this._offsets = [];
125
265
  this._targets = [];
126
266
  this._scrollHeight = this._getScrollHeight();
127
- var targets = [].slice.call(document.querySelectorAll(this._selector));
267
+ var targets = SelectorEngine__default['default'].find(this._selector);
128
268
  targets.map(function (element) {
129
- var target;
130
- var targetSelector = Util__default['default'].getSelectorFromElement(element);
131
-
132
- if (targetSelector) {
133
- target = document.querySelector(targetSelector);
134
- }
269
+ var targetSelector = getSelectorFromElement(element);
270
+ var target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
135
271
 
136
272
  if (target) {
137
273
  var targetBCR = target.getBoundingClientRect();
138
274
 
139
275
  if (targetBCR.width || targetBCR.height) {
140
- // TODO (fat): remove sketch reliance on jQuery position/offset
141
- return [$__default['default'](target)[offsetMethod]().top + offsetBase, targetSelector];
276
+ return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector];
142
277
  }
143
278
  }
144
279
 
@@ -155,9 +290,9 @@
155
290
  };
156
291
 
157
292
  _proto.dispose = function dispose() {
158
- $__default['default'].removeData(this._element, DATA_KEY);
159
- $__default['default'](this._scrollElement).off(EVENT_KEY);
160
- this._element = null;
293
+ _BaseComponent.prototype.dispose.call(this);
294
+
295
+ EventHandler__default['default'].off(this._scrollElement, EVENT_KEY);
161
296
  this._scrollElement = null;
162
297
  this._config = null;
163
298
  this._selector = null;
@@ -171,18 +306,18 @@
171
306
  _proto._getConfig = function _getConfig(config) {
172
307
  config = _extends({}, Default, typeof config === 'object' && config ? config : {});
173
308
 
174
- if (typeof config.target !== 'string' && Util__default['default'].isElement(config.target)) {
175
- var id = $__default['default'](config.target).attr('id');
309
+ if (typeof config.target !== 'string' && isElement(config.target)) {
310
+ var id = config.target.id;
176
311
 
177
312
  if (!id) {
178
- id = Util__default['default'].getUID(NAME);
179
- $__default['default'](config.target).attr('id', id);
313
+ id = getUID(NAME);
314
+ config.target.id = id;
180
315
  }
181
316
 
182
317
  config.target = "#" + id;
183
318
  }
184
319
 
185
- Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
320
+ typeCheckConfig(NAME, config, DefaultType);
186
321
  return config;
187
322
  };
188
323
 
@@ -242,31 +377,39 @@
242
377
  this._clear();
243
378
 
244
379
  var queries = this._selector.split(',').map(function (selector) {
245
- return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
380
+ return selector + "[data-bs-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
246
381
  });
247
382
 
248
- var $link = $__default['default']([].slice.call(document.querySelectorAll(queries.join(','))));
383
+ var link = SelectorEngine__default['default'].findOne(queries.join(','));
249
384
 
250
- if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
251
- $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE);
252
- $link.addClass(CLASS_NAME_ACTIVE);
385
+ if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
386
+ SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
387
+ link.classList.add(CLASS_NAME_ACTIVE);
253
388
  } else {
254
389
  // Set triggered link as active
255
- $link.addClass(CLASS_NAME_ACTIVE); // Set triggered links parents as active
256
- // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
257
-
258
- $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE); // Handle special case when .nav-link is inside .nav-item
259
-
260
- $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE);
390
+ link.classList.add(CLASS_NAME_ACTIVE);
391
+ SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(function (listGroup) {
392
+ // Set triggered links parents as active
393
+ // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
394
+ SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).forEach(function (item) {
395
+ return item.classList.add(CLASS_NAME_ACTIVE);
396
+ }); // Handle special case when .nav-link is inside .nav-item
397
+
398
+ SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(function (navItem) {
399
+ SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(function (item) {
400
+ return item.classList.add(CLASS_NAME_ACTIVE);
401
+ });
402
+ });
403
+ });
261
404
  }
262
405
 
263
- $__default['default'](this._scrollElement).trigger(EVENT_ACTIVATE, {
406
+ EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, {
264
407
  relatedTarget: target
265
408
  });
266
409
  };
267
410
 
268
411
  _proto._clear = function _clear() {
269
- [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
412
+ SelectorEngine__default['default'].find(this._selector).filter(function (node) {
270
413
  return node.classList.contains(CLASS_NAME_ACTIVE);
271
414
  }).forEach(function (node) {
272
415
  return node.classList.remove(CLASS_NAME_ACTIVE);
@@ -274,15 +417,14 @@
274
417
  } // Static
275
418
  ;
276
419
 
277
- ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
420
+ ScrollSpy.jQueryInterface = function jQueryInterface(config) {
278
421
  return this.each(function () {
279
- var data = $__default['default'](this).data(DATA_KEY);
422
+ var data = Data__default['default'].getData(this, DATA_KEY);
280
423
 
281
424
  var _config = typeof config === 'object' && config;
282
425
 
283
426
  if (!data) {
284
427
  data = new ScrollSpy(this, _config);
285
- $__default['default'](this).data(DATA_KEY, data);
286
428
  }
287
429
 
288
430
  if (typeof config === 'string') {
@@ -296,19 +438,19 @@
296
438
  };
297
439
 
298
440
  _createClass(ScrollSpy, null, [{
299
- key: "VERSION",
441
+ key: "Default",
300
442
  get: function get() {
301
- return VERSION;
443
+ return Default;
302
444
  }
303
445
  }, {
304
- key: "Default",
446
+ key: "DATA_KEY",
305
447
  get: function get() {
306
- return Default;
448
+ return DATA_KEY;
307
449
  }
308
450
  }]);
309
451
 
310
452
  return ScrollSpy;
311
- }();
453
+ }(BaseComponent__default['default']);
312
454
  /**
313
455
  * ------------------------------------------------------------------------
314
456
  * Data Api implementation
@@ -316,29 +458,19 @@
316
458
  */
317
459
 
318
460
 
319
- $__default['default'](window).on(EVENT_LOAD_DATA_API, function () {
320
- var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
321
- var scrollSpysLength = scrollSpys.length;
322
-
323
- for (var i = scrollSpysLength; i--;) {
324
- var $spy = $__default['default'](scrollSpys[i]);
325
-
326
- ScrollSpy._jQueryInterface.call($spy, $spy.data());
327
- }
461
+ EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, function () {
462
+ SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(function (spy) {
463
+ return new ScrollSpy(spy, Manipulator__default['default'].getDataAttributes(spy));
464
+ });
328
465
  });
329
466
  /**
330
467
  * ------------------------------------------------------------------------
331
468
  * jQuery
332
469
  * ------------------------------------------------------------------------
470
+ * add .ScrollSpy to jQuery only if jQuery is present
333
471
  */
334
472
 
335
- $__default['default'].fn[NAME] = ScrollSpy._jQueryInterface;
336
- $__default['default'].fn[NAME].Constructor = ScrollSpy;
337
-
338
- $__default['default'].fn[NAME].noConflict = function () {
339
- $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
340
- return ScrollSpy._jQueryInterface;
341
- };
473
+ defineJQueryPlugin(NAME, ScrollSpy);
342
474
 
343
475
  return ScrollSpy;
344
476