bootstrap 4.4.1 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +13 -2
  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 +15 -8
  7. data/assets/javascripts/bootstrap.js +3244 -2770
  8. data/assets/javascripts/bootstrap.min.js +4 -4
  9. data/assets/javascripts/bootstrap/alert.js +130 -124
  10. data/assets/javascripts/bootstrap/base-component.js +168 -0
  11. data/assets/javascripts/bootstrap/button.js +85 -179
  12. data/assets/javascripts/bootstrap/carousel.js +430 -405
  13. data/assets/javascripts/bootstrap/collapse.js +325 -264
  14. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +315 -0
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
  18. data/assets/javascripts/bootstrap/dropdown.js +464 -400
  19. data/assets/javascripts/bootstrap/modal.js +604 -464
  20. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  21. data/assets/javascripts/bootstrap/popover.js +119 -192
  22. data/assets/javascripts/bootstrap/scrollspy.js +250 -238
  23. data/assets/javascripts/bootstrap/tab.js +189 -151
  24. data/assets/javascripts/bootstrap/toast.js +215 -192
  25. data/assets/javascripts/bootstrap/tooltip.js +604 -544
  26. data/assets/stylesheets/_bootstrap-grid.scss +54 -18
  27. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  28. data/assets/stylesheets/_bootstrap.scss +19 -11
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  31. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  32. data/assets/stylesheets/bootstrap/_breadcrumb.scss +4 -18
  33. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  34. data/assets/stylesheets/bootstrap/_buttons.scss +27 -55
  35. data/assets/stylesheets/bootstrap/_card.scss +43 -106
  36. data/assets/stylesheets/bootstrap/_carousel.scss +65 -33
  37. data/assets/stylesheets/bootstrap/_close.scss +30 -31
  38. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  39. data/assets/stylesheets/bootstrap/_dropdown.scss +87 -38
  40. data/assets/stylesheets/bootstrap/_forms.scss +9 -338
  41. data/assets/stylesheets/bootstrap/_functions.scss +99 -28
  42. data/assets/stylesheets/bootstrap/_grid.scss +3 -50
  43. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  44. data/assets/stylesheets/bootstrap/_list-group.scss +38 -22
  45. data/assets/stylesheets/bootstrap/_mixins.scss +8 -13
  46. data/assets/stylesheets/bootstrap/_modal.scss +45 -65
  47. data/assets/stylesheets/bootstrap/_nav.scss +28 -9
  48. data/assets/stylesheets/bootstrap/_navbar.scss +51 -69
  49. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  50. data/assets/stylesheets/bootstrap/_pagination.scss +11 -20
  51. data/assets/stylesheets/bootstrap/_popover.scss +15 -27
  52. data/assets/stylesheets/bootstrap/_progress.scss +6 -4
  53. data/assets/stylesheets/bootstrap/_reboot.scss +339 -200
  54. data/assets/stylesheets/bootstrap/_root.scss +5 -9
  55. data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
  56. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  57. data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
  58. data/assets/stylesheets/bootstrap/_tooltip.scss +17 -17
  59. data/assets/stylesheets/bootstrap/_transitions.scss +2 -1
  60. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  61. data/assets/stylesheets/bootstrap/_utilities.scss +594 -17
  62. data/assets/stylesheets/bootstrap/_variables.scss +810 -489
  63. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  64. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  65. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  66. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  67. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  70. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  71. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  72. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  73. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  74. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  75. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  76. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  77. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  78. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  79. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  80. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  81. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  82. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  83. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  84. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +75 -52
  85. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  86. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  87. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  88. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  89. data/assets/stylesheets/bootstrap/mixins/_forms.scss +42 -75
  90. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  91. data/assets/stylesheets/bootstrap/mixins/_grid.scss +90 -34
  92. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  93. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  94. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  95. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  96. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  97. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  98. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  99. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  100. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  101. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  102. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  103. data/bootstrap.gemspec +1 -3
  104. data/lib/bootstrap/version.rb +2 -2
  105. data/tasks/updater/js.rb +20 -5
  106. data/tasks/updater/network.rb +8 -2
  107. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  108. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  109. data/test/dummy_rails/app/views/pages/root.html +89 -0
  110. data/test/dummy_rails/config/application.rb +0 -3
  111. data/test/gemfiles/rails_6_0.gemfile +7 -0
  112. data/test/gemfiles/rails_6_1.gemfile +7 -0
  113. metadata +48 -73
  114. data/assets/javascripts/bootstrap/util.js +0 -188
  115. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  116. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -521
  117. data/assets/stylesheets/bootstrap/_input-group.scss +0 -191
  118. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  119. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  120. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  121. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -22
  122. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  123. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  124. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -71
  125. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  126. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  127. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  128. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  129. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  130. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  131. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  132. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  133. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  134. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  135. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  136. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  137. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  138. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  139. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  140. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  141. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  142. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  143. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  144. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  145. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  146. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  147. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  148. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  149. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,199 +1,170 @@
1
1
  /*!
2
- * Bootstrap popover.js v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2
+ * Bootstrap popover.js v5.0.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
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.js'], factory) :
9
- (global = global || self, global.Popover = factory(global.jQuery, global.Tooltip));
10
- }(this, (function ($, Tooltip) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;
14
-
15
- function _defineProperties(target, props) {
16
- for (var i = 0; i < props.length; i++) {
17
- var descriptor = props[i];
18
- descriptor.enumerable = descriptor.enumerable || false;
19
- descriptor.configurable = true;
20
- if ("value" in descriptor) descriptor.writable = true;
21
- Object.defineProperty(target, descriptor.key, descriptor);
22
- }
23
- }
24
-
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/data.js'), require('./tooltip.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/data', './tooltip'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.SelectorEngine, global.Data, global.Tooltip));
10
+ }(this, (function (SelectorEngine, Data, Tooltip) { 'use strict';
30
11
 
31
- function _defineProperty(obj, key, value) {
32
- if (key in obj) {
33
- Object.defineProperty(obj, key, {
34
- value: value,
35
- enumerable: true,
36
- configurable: true,
37
- writable: true
38
- });
39
- } else {
40
- obj[key] = value;
41
- }
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
42
13
 
43
- return obj;
44
- }
14
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
16
+ var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
45
17
 
46
- function ownKeys(object, enumerableOnly) {
47
- var keys = Object.keys(object);
18
+ const getjQuery = () => {
19
+ const {
20
+ jQuery
21
+ } = window;
48
22
 
49
- if (Object.getOwnPropertySymbols) {
50
- var symbols = Object.getOwnPropertySymbols(object);
51
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
52
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
53
- });
54
- keys.push.apply(keys, symbols);
23
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
24
+ return jQuery;
55
25
  }
56
26
 
57
- return keys;
58
- }
27
+ return null;
28
+ };
59
29
 
60
- function _objectSpread2(target) {
61
- for (var i = 1; i < arguments.length; i++) {
62
- var source = arguments[i] != null ? arguments[i] : {};
63
-
64
- if (i % 2) {
65
- ownKeys(Object(source), true).forEach(function (key) {
66
- _defineProperty(target, key, source[key]);
67
- });
68
- } else if (Object.getOwnPropertyDescriptors) {
69
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
70
- } else {
71
- ownKeys(Object(source)).forEach(function (key) {
72
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
73
- });
74
- }
30
+ const onDOMContentLoaded = callback => {
31
+ if (document.readyState === 'loading') {
32
+ document.addEventListener('DOMContentLoaded', callback);
33
+ } else {
34
+ callback();
75
35
  }
36
+ };
76
37
 
77
- return target;
78
- }
79
-
80
- function _inheritsLoose(subClass, superClass) {
81
- subClass.prototype = Object.create(superClass.prototype);
82
- subClass.prototype.constructor = subClass;
83
- subClass.__proto__ = superClass;
84
- }
38
+ const defineJQueryPlugin = plugin => {
39
+ onDOMContentLoaded(() => {
40
+ const $ = getjQuery();
41
+ /* istanbul ignore if */
42
+
43
+ if ($) {
44
+ const name = plugin.NAME;
45
+ const JQUERY_NO_CONFLICT = $.fn[name];
46
+ $.fn[name] = plugin.jQueryInterface;
47
+ $.fn[name].Constructor = plugin;
48
+
49
+ $.fn[name].noConflict = () => {
50
+ $.fn[name] = JQUERY_NO_CONFLICT;
51
+ return plugin.jQueryInterface;
52
+ };
53
+ }
54
+ });
55
+ };
85
56
 
57
+ /**
58
+ * --------------------------------------------------------------------------
59
+ * Bootstrap (v5.0.1): popover.js
60
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
61
+ * --------------------------------------------------------------------------
62
+ */
86
63
  /**
87
64
  * ------------------------------------------------------------------------
88
65
  * Constants
89
66
  * ------------------------------------------------------------------------
90
67
  */
91
68
 
92
- var NAME = 'popover';
93
- var VERSION = '4.4.1';
94
- var DATA_KEY = 'bs.popover';
95
- var EVENT_KEY = "." + DATA_KEY;
96
- var JQUERY_NO_CONFLICT = $.fn[NAME];
97
- var CLASS_PREFIX = 'bs-popover';
98
- var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
99
-
100
- var Default = _objectSpread2({}, Tooltip.Default, {
69
+ const NAME = 'popover';
70
+ const DATA_KEY = 'bs.popover';
71
+ const EVENT_KEY = `.${DATA_KEY}`;
72
+ const CLASS_PREFIX = 'bs-popover';
73
+ const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
74
+ const Default = { ...Tooltip__default['default'].Default,
101
75
  placement: 'right',
76
+ offset: [0, 8],
102
77
  trigger: 'click',
103
78
  content: '',
104
- template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
105
- });
106
-
107
- var DefaultType = _objectSpread2({}, Tooltip.DefaultType, {
108
- content: '(string|element|function)'
109
- });
110
-
111
- var ClassName = {
112
- FADE: 'fade',
113
- SHOW: 'show'
79
+ template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
114
80
  };
115
- var Selector = {
116
- TITLE: '.popover-header',
117
- CONTENT: '.popover-body'
81
+ const DefaultType = { ...Tooltip__default['default'].DefaultType,
82
+ content: '(string|element|function)'
118
83
  };
119
- var Event = {
120
- HIDE: "hide" + EVENT_KEY,
121
- HIDDEN: "hidden" + EVENT_KEY,
122
- SHOW: "show" + EVENT_KEY,
123
- SHOWN: "shown" + EVENT_KEY,
124
- INSERTED: "inserted" + EVENT_KEY,
125
- CLICK: "click" + EVENT_KEY,
126
- FOCUSIN: "focusin" + EVENT_KEY,
127
- FOCUSOUT: "focusout" + EVENT_KEY,
128
- MOUSEENTER: "mouseenter" + EVENT_KEY,
129
- MOUSELEAVE: "mouseleave" + EVENT_KEY
84
+ const Event = {
85
+ HIDE: `hide${EVENT_KEY}`,
86
+ HIDDEN: `hidden${EVENT_KEY}`,
87
+ SHOW: `show${EVENT_KEY}`,
88
+ SHOWN: `shown${EVENT_KEY}`,
89
+ INSERTED: `inserted${EVENT_KEY}`,
90
+ CLICK: `click${EVENT_KEY}`,
91
+ FOCUSIN: `focusin${EVENT_KEY}`,
92
+ FOCUSOUT: `focusout${EVENT_KEY}`,
93
+ MOUSEENTER: `mouseenter${EVENT_KEY}`,
94
+ MOUSELEAVE: `mouseleave${EVENT_KEY}`
130
95
  };
96
+ const CLASS_NAME_FADE = 'fade';
97
+ const CLASS_NAME_SHOW = 'show';
98
+ const SELECTOR_TITLE = '.popover-header';
99
+ const SELECTOR_CONTENT = '.popover-body';
131
100
  /**
132
101
  * ------------------------------------------------------------------------
133
102
  * Class Definition
134
103
  * ------------------------------------------------------------------------
135
104
  */
136
105
 
137
- var Popover =
138
- /*#__PURE__*/
139
- function (_Tooltip) {
140
- _inheritsLoose(Popover, _Tooltip);
106
+ class Popover extends Tooltip__default['default'] {
107
+ // Getters
108
+ static get Default() {
109
+ return Default;
110
+ }
141
111
 
142
- function Popover() {
143
- return _Tooltip.apply(this, arguments) || this;
112
+ static get NAME() {
113
+ return NAME;
144
114
  }
145
115
 
146
- var _proto = Popover.prototype;
116
+ static get Event() {
117
+ return Event;
118
+ }
147
119
 
148
- // Overrides
149
- _proto.isWithContent = function isWithContent() {
150
- return this.getTitle() || this._getContent();
151
- };
120
+ static get DefaultType() {
121
+ return DefaultType;
122
+ } // Overrides
152
123
 
153
- _proto.addAttachmentClass = function addAttachmentClass(attachment) {
154
- $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
155
- };
156
124
 
157
- _proto.getTipElement = function getTipElement() {
158
- this.tip = this.tip || $(this.config.template)[0];
159
- return this.tip;
160
- };
125
+ isWithContent() {
126
+ return this.getTitle() || this._getContent();
127
+ }
161
128
 
162
- _proto.setContent = function setContent() {
163
- var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
129
+ setContent() {
130
+ const tip = this.getTipElement(); // we use append for html objects to maintain js events
164
131
 
165
- this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
132
+ this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TITLE, tip), this.getTitle());
166
133
 
167
- var content = this._getContent();
134
+ let content = this._getContent();
168
135
 
169
136
  if (typeof content === 'function') {
170
- content = content.call(this.element);
137
+ content = content.call(this._element);
171
138
  }
172
139
 
173
- this.setElementContent($tip.find(Selector.CONTENT), content);
174
- $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
140
+ this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_CONTENT, tip), content);
141
+ tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
175
142
  } // Private
176
- ;
177
143
 
178
- _proto._getContent = function _getContent() {
179
- return this.element.getAttribute('data-content') || this.config.content;
180
- };
181
144
 
182
- _proto._cleanTipClass = function _cleanTipClass() {
183
- var $tip = $(this.getTipElement());
184
- var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
145
+ _addAttachmentClass(attachment) {
146
+ this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
147
+ }
148
+
149
+ _getContent() {
150
+ return this._element.getAttribute('data-bs-content') || this._config.content;
151
+ }
152
+
153
+ _cleanTipClass() {
154
+ const tip = this.getTipElement();
155
+ const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
185
156
 
186
157
  if (tabClass !== null && tabClass.length > 0) {
187
- $tip.removeClass(tabClass.join(''));
158
+ tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
188
159
  }
189
160
  } // Static
190
- ;
191
161
 
192
- Popover._jQueryInterface = function _jQueryInterface(config) {
162
+
163
+ static jQueryInterface(config) {
193
164
  return this.each(function () {
194
- var data = $(this).data(DATA_KEY);
165
+ let data = Data__default['default'].get(this, DATA_KEY);
195
166
 
196
- var _config = typeof config === 'object' ? config : null;
167
+ const _config = typeof config === 'object' ? config : null;
197
168
 
198
169
  if (!data && /dispose|hide/.test(config)) {
199
170
  return;
@@ -201,73 +172,29 @@
201
172
 
202
173
  if (!data) {
203
174
  data = new Popover(this, _config);
204
- $(this).data(DATA_KEY, data);
175
+ Data__default['default'].set(this, DATA_KEY, data);
205
176
  }
206
177
 
207
178
  if (typeof config === 'string') {
208
179
  if (typeof data[config] === 'undefined') {
209
- throw new TypeError("No method named \"" + config + "\"");
180
+ throw new TypeError(`No method named "${config}"`);
210
181
  }
211
182
 
212
183
  data[config]();
213
184
  }
214
185
  });
215
- };
216
-
217
- _createClass(Popover, null, [{
218
- key: "VERSION",
219
- // Getters
220
- get: function get() {
221
- return VERSION;
222
- }
223
- }, {
224
- key: "Default",
225
- get: function get() {
226
- return Default;
227
- }
228
- }, {
229
- key: "NAME",
230
- get: function get() {
231
- return NAME;
232
- }
233
- }, {
234
- key: "DATA_KEY",
235
- get: function get() {
236
- return DATA_KEY;
237
- }
238
- }, {
239
- key: "Event",
240
- get: function get() {
241
- return Event;
242
- }
243
- }, {
244
- key: "EVENT_KEY",
245
- get: function get() {
246
- return EVENT_KEY;
247
- }
248
- }, {
249
- key: "DefaultType",
250
- get: function get() {
251
- return DefaultType;
252
- }
253
- }]);
186
+ }
254
187
 
255
- return Popover;
256
- }(Tooltip);
188
+ }
257
189
  /**
258
190
  * ------------------------------------------------------------------------
259
191
  * jQuery
260
192
  * ------------------------------------------------------------------------
193
+ * add .Popover to jQuery only if jQuery is present
261
194
  */
262
195
 
263
196
 
264
- $.fn[NAME] = Popover._jQueryInterface;
265
- $.fn[NAME].Constructor = Popover;
266
-
267
- $.fn[NAME].noConflict = function () {
268
- $.fn[NAME] = JQUERY_NO_CONFLICT;
269
- return Popover._jQueryInterface;
270
- };
197
+ defineJQueryPlugin(Popover);
271
198
 
272
199
  return Popover;
273
200
 
@@ -1,257 +1,303 @@
1
1
  /*!
2
- * Bootstrap scrollspy.js v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2
+ * Bootstrap scrollspy.js v5.0.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
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.js'], factory) :
9
- (global = global || self, global.ScrollSpy = factory(global.jQuery, global.Util));
10
- }(this, (function ($, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
14
-
15
- function _defineProperties(target, props) {
16
- for (var i = 0; i < props.length; i++) {
17
- var descriptor = props[i];
18
- descriptor.enumerable = descriptor.enumerable || false;
19
- descriptor.configurable = true;
20
- if ("value" in descriptor) descriptor.writable = true;
21
- Object.defineProperty(target, descriptor.key, descriptor);
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.SelectorEngine, global.EventHandler, global.Manipulator, global.Base));
10
+ }(this, (function (SelectorEngine, EventHandler, Manipulator, BaseComponent) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
+
19
+ /**
20
+ * --------------------------------------------------------------------------
21
+ * Bootstrap (v5.0.1): util/index.js
22
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23
+ * --------------------------------------------------------------------------
24
+ */
25
+
26
+ const MAX_UID = 1000000;
27
+
28
+ const toType = obj => {
29
+ if (obj === null || obj === undefined) {
30
+ return `${obj}`;
22
31
  }
23
- }
24
32
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
33
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
34
+ };
35
+ /**
36
+ * --------------------------------------------------------------------------
37
+ * Public Util Api
38
+ * --------------------------------------------------------------------------
39
+ */
30
40
 
31
- function _defineProperty(obj, key, value) {
32
- if (key in obj) {
33
- Object.defineProperty(obj, key, {
34
- value: value,
35
- enumerable: true,
36
- configurable: true,
37
- writable: true
38
- });
39
- } else {
40
- obj[key] = value;
41
+
42
+ const getUID = prefix => {
43
+ do {
44
+ prefix += Math.floor(Math.random() * MAX_UID);
45
+ } while (document.getElementById(prefix));
46
+
47
+ return prefix;
48
+ };
49
+
50
+ const getSelector = element => {
51
+ let selector = element.getAttribute('data-bs-target');
52
+
53
+ if (!selector || selector === '#') {
54
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
55
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
56
+ // `document.querySelector` will rightfully complain it is invalid.
57
+ // See https://github.com/twbs/bootstrap/issues/32273
58
+
59
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
60
+ return null;
61
+ } // Just in case some CMS puts out a full URL with the anchor appended
62
+
63
+
64
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
65
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
66
+ }
67
+
68
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
41
69
  }
42
70
 
43
- return obj;
44
- }
71
+ return selector;
72
+ };
45
73
 
46
- function ownKeys(object, enumerableOnly) {
47
- var keys = Object.keys(object);
74
+ const getSelectorFromElement = element => {
75
+ const selector = getSelector(element);
48
76
 
49
- if (Object.getOwnPropertySymbols) {
50
- var symbols = Object.getOwnPropertySymbols(object);
51
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
52
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
53
- });
54
- keys.push.apply(keys, symbols);
77
+ if (selector) {
78
+ return document.querySelector(selector) ? selector : null;
55
79
  }
56
80
 
57
- return keys;
58
- }
81
+ return null;
82
+ };
59
83
 
60
- function _objectSpread2(target) {
61
- for (var i = 1; i < arguments.length; i++) {
62
- var source = arguments[i] != null ? arguments[i] : {};
84
+ const isElement = obj => {
85
+ if (!obj || typeof obj !== 'object') {
86
+ return false;
87
+ }
63
88
 
64
- if (i % 2) {
65
- ownKeys(Object(source), true).forEach(function (key) {
66
- _defineProperty(target, key, source[key]);
67
- });
68
- } else if (Object.getOwnPropertyDescriptors) {
69
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
70
- } else {
71
- ownKeys(Object(source)).forEach(function (key) {
72
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
73
- });
89
+ if (typeof obj.jquery !== 'undefined') {
90
+ obj = obj[0];
91
+ }
92
+
93
+ return typeof obj.nodeType !== 'undefined';
94
+ };
95
+
96
+ const typeCheckConfig = (componentName, config, configTypes) => {
97
+ Object.keys(configTypes).forEach(property => {
98
+ const expectedTypes = configTypes[property];
99
+ const value = config[property];
100
+ const valueType = value && isElement(value) ? 'element' : toType(value);
101
+
102
+ if (!new RegExp(expectedTypes).test(valueType)) {
103
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
74
104
  }
105
+ });
106
+ };
107
+
108
+ const getjQuery = () => {
109
+ const {
110
+ jQuery
111
+ } = window;
112
+
113
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
114
+ return jQuery;
75
115
  }
76
116
 
77
- return target;
78
- }
117
+ return null;
118
+ };
119
+
120
+ const onDOMContentLoaded = callback => {
121
+ if (document.readyState === 'loading') {
122
+ document.addEventListener('DOMContentLoaded', callback);
123
+ } else {
124
+ callback();
125
+ }
126
+ };
127
+
128
+ const defineJQueryPlugin = plugin => {
129
+ onDOMContentLoaded(() => {
130
+ const $ = getjQuery();
131
+ /* istanbul ignore if */
132
+
133
+ if ($) {
134
+ const name = plugin.NAME;
135
+ const JQUERY_NO_CONFLICT = $.fn[name];
136
+ $.fn[name] = plugin.jQueryInterface;
137
+ $.fn[name].Constructor = plugin;
138
+
139
+ $.fn[name].noConflict = () => {
140
+ $.fn[name] = JQUERY_NO_CONFLICT;
141
+ return plugin.jQueryInterface;
142
+ };
143
+ }
144
+ });
145
+ };
79
146
 
147
+ /**
148
+ * --------------------------------------------------------------------------
149
+ * Bootstrap (v5.0.1): scrollspy.js
150
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
151
+ * --------------------------------------------------------------------------
152
+ */
80
153
  /**
81
154
  * ------------------------------------------------------------------------
82
155
  * Constants
83
156
  * ------------------------------------------------------------------------
84
157
  */
85
158
 
86
- var NAME = 'scrollspy';
87
- var VERSION = '4.4.1';
88
- var DATA_KEY = 'bs.scrollspy';
89
- var EVENT_KEY = "." + DATA_KEY;
90
- var DATA_API_KEY = '.data-api';
91
- var JQUERY_NO_CONFLICT = $.fn[NAME];
92
- var Default = {
159
+ const NAME = 'scrollspy';
160
+ const DATA_KEY = 'bs.scrollspy';
161
+ const EVENT_KEY = `.${DATA_KEY}`;
162
+ const DATA_API_KEY = '.data-api';
163
+ const Default = {
93
164
  offset: 10,
94
165
  method: 'auto',
95
166
  target: ''
96
167
  };
97
- var DefaultType = {
168
+ const DefaultType = {
98
169
  offset: 'number',
99
170
  method: 'string',
100
171
  target: '(string|element)'
101
172
  };
102
- var Event = {
103
- ACTIVATE: "activate" + EVENT_KEY,
104
- SCROLL: "scroll" + EVENT_KEY,
105
- LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
106
- };
107
- var ClassName = {
108
- DROPDOWN_ITEM: 'dropdown-item',
109
- DROPDOWN_MENU: 'dropdown-menu',
110
- ACTIVE: 'active'
111
- };
112
- var Selector = {
113
- DATA_SPY: '[data-spy="scroll"]',
114
- ACTIVE: '.active',
115
- NAV_LIST_GROUP: '.nav, .list-group',
116
- NAV_LINKS: '.nav-link',
117
- NAV_ITEMS: '.nav-item',
118
- LIST_ITEMS: '.list-group-item',
119
- DROPDOWN: '.dropdown',
120
- DROPDOWN_ITEMS: '.dropdown-item',
121
- DROPDOWN_TOGGLE: '.dropdown-toggle'
122
- };
123
- var OffsetMethod = {
124
- OFFSET: 'offset',
125
- POSITION: 'position'
126
- };
173
+ const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
174
+ const EVENT_SCROLL = `scroll${EVENT_KEY}`;
175
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
176
+ const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
177
+ const CLASS_NAME_ACTIVE = 'active';
178
+ const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
179
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
180
+ const SELECTOR_NAV_LINKS = '.nav-link';
181
+ const SELECTOR_NAV_ITEMS = '.nav-item';
182
+ const SELECTOR_LIST_ITEMS = '.list-group-item';
183
+ const SELECTOR_DROPDOWN = '.dropdown';
184
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
185
+ const METHOD_OFFSET = 'offset';
186
+ const METHOD_POSITION = 'position';
127
187
  /**
128
188
  * ------------------------------------------------------------------------
129
189
  * Class Definition
130
190
  * ------------------------------------------------------------------------
131
191
  */
132
192
 
133
- var ScrollSpy =
134
- /*#__PURE__*/
135
- function () {
136
- function ScrollSpy(element, config) {
137
- var _this = this;
138
-
139
- this._element = element;
140
- this._scrollElement = element.tagName === 'BODY' ? window : element;
193
+ class ScrollSpy extends BaseComponent__default['default'] {
194
+ constructor(element, config) {
195
+ super(element);
196
+ this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
141
197
  this._config = this._getConfig(config);
142
- this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS);
198
+ this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
143
199
  this._offsets = [];
144
200
  this._targets = [];
145
201
  this._activeTarget = null;
146
202
  this._scrollHeight = 0;
147
- $(this._scrollElement).on(Event.SCROLL, function (event) {
148
- return _this._process(event);
149
- });
203
+ EventHandler__default['default'].on(this._scrollElement, EVENT_SCROLL, () => this._process());
150
204
  this.refresh();
151
205
 
152
206
  this._process();
153
207
  } // Getters
154
208
 
155
209
 
156
- var _proto = ScrollSpy.prototype;
210
+ static get Default() {
211
+ return Default;
212
+ }
213
+
214
+ static get NAME() {
215
+ return NAME;
216
+ } // Public
157
217
 
158
- // Public
159
- _proto.refresh = function refresh() {
160
- var _this2 = this;
161
218
 
162
- var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
163
- var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
164
- var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
219
+ refresh() {
220
+ const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
221
+ const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
222
+ const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
165
223
  this._offsets = [];
166
224
  this._targets = [];
167
225
  this._scrollHeight = this._getScrollHeight();
168
- var targets = [].slice.call(document.querySelectorAll(this._selector));
169
- targets.map(function (element) {
170
- var target;
171
- var targetSelector = Util.getSelectorFromElement(element);
172
-
173
- if (targetSelector) {
174
- target = document.querySelector(targetSelector);
175
- }
226
+ const targets = SelectorEngine__default['default'].find(this._selector);
227
+ targets.map(element => {
228
+ const targetSelector = getSelectorFromElement(element);
229
+ const target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
176
230
 
177
231
  if (target) {
178
- var targetBCR = target.getBoundingClientRect();
232
+ const targetBCR = target.getBoundingClientRect();
179
233
 
180
234
  if (targetBCR.width || targetBCR.height) {
181
- // TODO (fat): remove sketch reliance on jQuery position/offset
182
- return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
235
+ return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector];
183
236
  }
184
237
  }
185
238
 
186
239
  return null;
187
- }).filter(function (item) {
188
- return item;
189
- }).sort(function (a, b) {
190
- return a[0] - b[0];
191
- }).forEach(function (item) {
192
- _this2._offsets.push(item[0]);
193
-
194
- _this2._targets.push(item[1]);
240
+ }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
241
+ this._offsets.push(item[0]);
242
+
243
+ this._targets.push(item[1]);
195
244
  });
196
- };
197
-
198
- _proto.dispose = function dispose() {
199
- $.removeData(this._element, DATA_KEY);
200
- $(this._scrollElement).off(EVENT_KEY);
201
- this._element = null;
202
- this._scrollElement = null;
203
- this._config = null;
204
- this._selector = null;
205
- this._offsets = null;
206
- this._targets = null;
207
- this._activeTarget = null;
208
- this._scrollHeight = null;
245
+ }
246
+
247
+ dispose() {
248
+ EventHandler__default['default'].off(this._scrollElement, EVENT_KEY);
249
+ super.dispose();
209
250
  } // Private
210
- ;
211
251
 
212
- _proto._getConfig = function _getConfig(config) {
213
- config = _objectSpread2({}, Default, {}, typeof config === 'object' && config ? config : {});
214
252
 
215
- if (typeof config.target !== 'string') {
216
- var id = $(config.target).attr('id');
253
+ _getConfig(config) {
254
+ config = { ...Default,
255
+ ...Manipulator__default['default'].getDataAttributes(this._element),
256
+ ...(typeof config === 'object' && config ? config : {})
257
+ };
258
+
259
+ if (typeof config.target !== 'string' && isElement(config.target)) {
260
+ let {
261
+ id
262
+ } = config.target;
217
263
 
218
264
  if (!id) {
219
- id = Util.getUID(NAME);
220
- $(config.target).attr('id', id);
265
+ id = getUID(NAME);
266
+ config.target.id = id;
221
267
  }
222
268
 
223
- config.target = "#" + id;
269
+ config.target = `#${id}`;
224
270
  }
225
271
 
226
- Util.typeCheckConfig(NAME, config, DefaultType);
272
+ typeCheckConfig(NAME, config, DefaultType);
227
273
  return config;
228
- };
274
+ }
229
275
 
230
- _proto._getScrollTop = function _getScrollTop() {
276
+ _getScrollTop() {
231
277
  return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
232
- };
278
+ }
233
279
 
234
- _proto._getScrollHeight = function _getScrollHeight() {
280
+ _getScrollHeight() {
235
281
  return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
236
- };
282
+ }
237
283
 
238
- _proto._getOffsetHeight = function _getOffsetHeight() {
284
+ _getOffsetHeight() {
239
285
  return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
240
- };
286
+ }
241
287
 
242
- _proto._process = function _process() {
243
- var scrollTop = this._getScrollTop() + this._config.offset;
288
+ _process() {
289
+ const scrollTop = this._getScrollTop() + this._config.offset;
244
290
 
245
- var scrollHeight = this._getScrollHeight();
291
+ const scrollHeight = this._getScrollHeight();
246
292
 
247
- var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
293
+ const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
248
294
 
249
295
  if (this._scrollHeight !== scrollHeight) {
250
296
  this.refresh();
251
297
  }
252
298
 
253
299
  if (scrollTop >= maxScroll) {
254
- var target = this._targets[this._targets.length - 1];
300
+ const target = this._targets[this._targets.length - 1];
255
301
 
256
302
  if (this._activeTarget !== target) {
257
303
  this._activate(target);
@@ -268,90 +314,68 @@
268
314
  return;
269
315
  }
270
316
 
271
- var offsetLength = this._offsets.length;
272
-
273
- for (var i = offsetLength; i--;) {
274
- var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
317
+ for (let i = this._offsets.length; i--;) {
318
+ const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
275
319
 
276
320
  if (isActiveTarget) {
277
321
  this._activate(this._targets[i]);
278
322
  }
279
323
  }
280
- };
324
+ }
281
325
 
282
- _proto._activate = function _activate(target) {
326
+ _activate(target) {
283
327
  this._activeTarget = target;
284
328
 
285
329
  this._clear();
286
330
 
287
- var queries = this._selector.split(',').map(function (selector) {
288
- return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
289
- });
331
+ const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
290
332
 
291
- var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
333
+ const link = SelectorEngine__default['default'].findOne(queries.join(','));
292
334
 
293
- if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
294
- $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
295
- $link.addClass(ClassName.ACTIVE);
335
+ if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
336
+ SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
337
+ link.classList.add(CLASS_NAME_ACTIVE);
296
338
  } else {
297
339
  // Set triggered link as active
298
- $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active
299
- // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
300
-
301
- $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item
302
-
303
- $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
340
+ link.classList.add(CLASS_NAME_ACTIVE);
341
+ SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
342
+ // Set triggered links parents as active
343
+ // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
344
+ SelectorEngine__default['default'].prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE)); // Handle special case when .nav-link is inside .nav-item
345
+
346
+ SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
347
+ SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
348
+ });
349
+ });
304
350
  }
305
351
 
306
- $(this._scrollElement).trigger(Event.ACTIVATE, {
352
+ EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, {
307
353
  relatedTarget: target
308
354
  });
309
- };
355
+ }
310
356
 
311
- _proto._clear = function _clear() {
312
- [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
313
- return node.classList.contains(ClassName.ACTIVE);
314
- }).forEach(function (node) {
315
- return node.classList.remove(ClassName.ACTIVE);
316
- });
357
+ _clear() {
358
+ SelectorEngine__default['default'].find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
317
359
  } // Static
318
- ;
319
360
 
320
- ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
321
- return this.each(function () {
322
- var data = $(this).data(DATA_KEY);
323
361
 
324
- var _config = typeof config === 'object' && config;
362
+ static jQueryInterface(config) {
363
+ return this.each(function () {
364
+ const data = ScrollSpy.getInstance(this) || new ScrollSpy(this, typeof config === 'object' ? config : {});
325
365
 
326
- if (!data) {
327
- data = new ScrollSpy(this, _config);
328
- $(this).data(DATA_KEY, data);
366
+ if (typeof config !== 'string') {
367
+ return;
329
368
  }
330
369
 
331
- if (typeof config === 'string') {
332
- if (typeof data[config] === 'undefined') {
333
- throw new TypeError("No method named \"" + config + "\"");
334
- }
335
-
336
- data[config]();
370
+ if (typeof data[config] === 'undefined') {
371
+ throw new TypeError(`No method named "${config}"`);
337
372
  }
338
- });
339
- };
340
373
 
341
- _createClass(ScrollSpy, null, [{
342
- key: "VERSION",
343
- get: function get() {
344
- return VERSION;
345
- }
346
- }, {
347
- key: "Default",
348
- get: function get() {
349
- return Default;
350
- }
351
- }]);
374
+ data[config]();
375
+ });
376
+ }
352
377
 
353
- return ScrollSpy;
354
- }();
378
+ }
355
379
  /**
356
380
  * ------------------------------------------------------------------------
357
381
  * Data Api implementation
@@ -359,29 +383,17 @@
359
383
  */
360
384
 
361
385
 
362
- $(window).on(Event.LOAD_DATA_API, function () {
363
- var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));
364
- var scrollSpysLength = scrollSpys.length;
365
-
366
- for (var i = scrollSpysLength; i--;) {
367
- var $spy = $(scrollSpys[i]);
368
-
369
- ScrollSpy._jQueryInterface.call($spy, $spy.data());
370
- }
386
+ EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
387
+ SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
371
388
  });
372
389
  /**
373
390
  * ------------------------------------------------------------------------
374
391
  * jQuery
375
392
  * ------------------------------------------------------------------------
393
+ * add .ScrollSpy to jQuery only if jQuery is present
376
394
  */
377
395
 
378
- $.fn[NAME] = ScrollSpy._jQueryInterface;
379
- $.fn[NAME].Constructor = ScrollSpy;
380
-
381
- $.fn[NAME].noConflict = function () {
382
- $.fn[NAME] = JQUERY_NO_CONFLICT;
383
- return ScrollSpy._jQueryInterface;
384
- };
396
+ defineJQueryPlugin(ScrollSpy);
385
397
 
386
398
  return ScrollSpy;
387
399