@openeuropa/bcl-bootstrap 0.25.1 → 0.26.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.
- package/bootstrap-icons.svg +1 -1
- package/icons/apple.svg +2 -2
- package/icons/boombox-fill.svg +2 -2
- package/icons/cup-fill.svg +1 -1
- package/icons/cup.svg +1 -1
- package/js/dist/alert.js +3 -12
- package/js/dist/alert.js.map +1 -1
- package/js/dist/base-component.js +32 -18
- package/js/dist/base-component.js.map +1 -1
- package/js/dist/button.js +3 -12
- package/js/dist/button.js.map +1 -1
- package/js/dist/carousel.js +207 -307
- package/js/dist/carousel.js.map +1 -1
- package/js/dist/collapse.js +57 -88
- package/js/dist/collapse.js.map +1 -1
- package/js/dist/dom/data.js +1 -3
- package/js/dist/dom/data.js.map +1 -1
- package/js/dist/dom/event-handler.js +87 -106
- package/js/dist/dom/event-handler.js.map +1 -1
- package/js/dist/dom/manipulator.js +21 -25
- package/js/dist/dom/manipulator.js.map +1 -1
- package/js/dist/dom/selector-engine.js +11 -10
- package/js/dist/dom/selector-engine.js.map +1 -1
- package/js/dist/dropdown.js +83 -115
- package/js/dist/dropdown.js.map +1 -1
- package/js/dist/modal.js +95 -152
- package/js/dist/modal.js.map +1 -1
- package/js/dist/offcanvas.js +75 -58
- package/js/dist/offcanvas.js.map +1 -1
- package/js/dist/popover.js +29 -56
- package/js/dist/popover.js.map +1 -1
- package/js/dist/scrollspy.js +176 -125
- package/js/dist/scrollspy.js.map +1 -1
- package/js/dist/tab.js +207 -92
- package/js/dist/tab.js.map +1 -1
- package/js/dist/toast.js +23 -37
- package/js/dist/toast.js.map +1 -1
- package/js/dist/tooltip.js +259 -348
- package/js/dist/tooltip.js.map +1 -1
- package/js/dist/util/backdrop.js +62 -39
- package/js/dist/util/backdrop.js.map +1 -1
- package/js/dist/util/component-functions.js +1 -1
- package/js/dist/util/component-functions.js.map +1 -1
- package/js/dist/util/config.js +75 -0
- package/js/dist/util/config.js.map +1 -0
- package/js/dist/util/focustrap.js +41 -34
- package/js/dist/util/focustrap.js.map +1 -1
- package/js/dist/util/index.js +56 -52
- package/js/dist/util/index.js.map +1 -1
- package/js/dist/util/sanitizer.js +12 -19
- package/js/dist/util/sanitizer.js.map +1 -1
- package/js/dist/util/scrollbar.js +49 -34
- package/js/dist/util/scrollbar.js.map +1 -1
- package/js/dist/util/swipe.js +151 -0
- package/js/dist/util/swipe.js.map +1 -0
- package/js/dist/util/template-factory.js +173 -0
- package/js/dist/util/template-factory.js.map +1 -0
- package/js/src/alert.js +3 -15
- package/js/src/base-component.js +28 -18
- package/js/src/button.js +3 -17
- package/js/src/carousel.js +203 -319
- package/js/src/collapse.js +61 -94
- package/js/src/dom/data.js +1 -3
- package/js/src/dom/event-handler.js +80 -108
- package/js/src/dom/manipulator.js +22 -31
- package/js/src/dom/selector-engine.js +10 -19
- package/js/src/dropdown.js +84 -138
- package/js/src/modal.js +94 -158
- package/js/src/offcanvas.js +72 -61
- package/js/src/popover.js +31 -62
- package/js/src/scrollspy.js +166 -171
- package/js/src/tab.js +193 -110
- package/js/src/toast.js +19 -41
- package/js/src/tooltip.js +259 -371
- package/js/src/util/backdrop.js +55 -36
- package/js/src/util/component-functions.js +1 -1
- package/js/src/util/config.js +66 -0
- package/js/src/util/focustrap.js +38 -28
- package/js/src/util/index.js +67 -64
- package/js/src/util/sanitizer.js +11 -19
- package/js/src/util/scrollbar.js +47 -30
- package/js/src/util/swipe.js +146 -0
- package/js/src/util/template-factory.js +160 -0
- package/package.json +4 -4
- package/scss/_accordion.scss +52 -24
- package/scss/_alert.scss +18 -4
- package/scss/_badge.scss +14 -5
- package/scss/_breadcrumb.scss +22 -10
- package/scss/_button-group.scss +3 -0
- package/scss/_buttons.scss +97 -22
- package/scss/_card.scss +55 -37
- package/scss/_close.scss +1 -1
- package/scss/_containers.scss +1 -1
- package/scss/_dropdown.scss +83 -75
- package/scss/_functions.scss +7 -7
- package/scss/_grid.scss +3 -3
- package/scss/_helpers.scss +1 -0
- package/scss/_list-group.scss +44 -27
- package/scss/_maps.scss +54 -0
- package/scss/_modal.scss +71 -43
- package/scss/_nav.scss +53 -20
- package/scss/_navbar.scss +91 -150
- package/scss/_offcanvas.scss +119 -59
- package/scss/_pagination.scss +66 -21
- package/scss/_placeholders.scss +1 -1
- package/scss/_popover.scss +90 -52
- package/scss/_progress.scss +20 -9
- package/scss/_reboot.scss +25 -40
- package/scss/_root.scss +40 -21
- package/scss/_spinners.scss +38 -22
- package/scss/_tables.scss +32 -23
- package/scss/_toasts.scss +35 -16
- package/scss/_tooltip.scss +61 -56
- package/scss/_type.scss +2 -0
- package/scss/_utilities.scss +43 -26
- package/scss/_variables.scss +113 -121
- package/scss/bootstrap-grid.scss +3 -6
- package/scss/bootstrap-reboot.scss +3 -7
- package/scss/bootstrap-utilities.scss +3 -6
- package/scss/bootstrap.scss +4 -6
- package/scss/forms/_floating-labels.scss +14 -3
- package/scss/forms/_form-check.scss +28 -5
- package/scss/forms/_form-control.scss +12 -37
- package/scss/forms/_form-select.scss +0 -1
- package/scss/forms/_input-group.scss +15 -7
- package/scss/helpers/_color-bg.scss +10 -0
- package/scss/helpers/_colored-links.scss +2 -2
- package/scss/helpers/_position.scss +7 -1
- package/scss/helpers/_ratio.scss +2 -2
- package/scss/helpers/_vr.scss +1 -1
- package/scss/mixins/_alert.scss +7 -3
- package/scss/mixins/_banner.scss +9 -0
- package/scss/mixins/_breakpoints.scss +8 -8
- package/scss/mixins/_buttons.scss +32 -95
- package/scss/mixins/_container.scss +4 -2
- package/scss/mixins/_forms.scss +8 -0
- package/scss/mixins/_gradients.scss +1 -1
- package/scss/mixins/_grid.scss +12 -12
- package/scss/mixins/_pagination.scss +4 -25
- package/scss/mixins/_reset-text.scss +1 -1
- package/scss/mixins/_table-variants.scss +12 -9
- package/scss/mixins/_utilities.scss +12 -4
package/js/dist/scrollspy.js
CHANGED
|
@@ -1,76 +1,75 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.
|
|
5
|
-
})(this, (function (index, EventHandler,
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
|
|
5
|
+
})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
6
6
|
|
|
7
7
|
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
8
8
|
|
|
9
9
|
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
10
|
-
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
11
10
|
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
12
11
|
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* --------------------------------------------------------------------------
|
|
16
|
-
* Bootstrap (v5.
|
|
15
|
+
* Bootstrap (v5.2.0): scrollspy.js
|
|
17
16
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
18
17
|
* --------------------------------------------------------------------------
|
|
19
18
|
*/
|
|
20
19
|
/**
|
|
21
|
-
* ------------------------------------------------------------------------
|
|
22
20
|
* Constants
|
|
23
|
-
* ------------------------------------------------------------------------
|
|
24
21
|
*/
|
|
25
22
|
|
|
26
23
|
const NAME = 'scrollspy';
|
|
27
24
|
const DATA_KEY = 'bs.scrollspy';
|
|
28
25
|
const EVENT_KEY = `.${DATA_KEY}`;
|
|
29
26
|
const DATA_API_KEY = '.data-api';
|
|
30
|
-
const Default = {
|
|
31
|
-
offset: 10,
|
|
32
|
-
method: 'auto',
|
|
33
|
-
target: ''
|
|
34
|
-
};
|
|
35
|
-
const DefaultType = {
|
|
36
|
-
offset: 'number',
|
|
37
|
-
method: 'string',
|
|
38
|
-
target: '(string|element)'
|
|
39
|
-
};
|
|
40
27
|
const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
|
|
41
|
-
const
|
|
28
|
+
const EVENT_CLICK = `click${EVENT_KEY}`;
|
|
42
29
|
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
|
|
43
30
|
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
|
44
31
|
const CLASS_NAME_ACTIVE = 'active';
|
|
45
32
|
const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
|
|
33
|
+
const SELECTOR_TARGET_LINKS = '[href]';
|
|
46
34
|
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
47
35
|
const SELECTOR_NAV_LINKS = '.nav-link';
|
|
48
36
|
const SELECTOR_NAV_ITEMS = '.nav-item';
|
|
49
37
|
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
|
50
|
-
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${
|
|
38
|
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
|
|
51
39
|
const SELECTOR_DROPDOWN = '.dropdown';
|
|
52
40
|
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
53
|
-
const
|
|
54
|
-
|
|
41
|
+
const Default = {
|
|
42
|
+
offset: null,
|
|
43
|
+
// TODO: v6 @deprecated, keep it for backwards compatibility reasons
|
|
44
|
+
rootMargin: '0px 0px -25%',
|
|
45
|
+
smoothScroll: false,
|
|
46
|
+
target: null
|
|
47
|
+
};
|
|
48
|
+
const DefaultType = {
|
|
49
|
+
offset: '(number|null)',
|
|
50
|
+
// TODO v6 @deprecated, keep it for backwards compatibility reasons
|
|
51
|
+
rootMargin: 'string',
|
|
52
|
+
smoothScroll: 'boolean',
|
|
53
|
+
target: 'element'
|
|
54
|
+
};
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
57
|
-
* Class Definition
|
|
58
|
-
* ------------------------------------------------------------------------
|
|
56
|
+
* Class definition
|
|
59
57
|
*/
|
|
60
58
|
|
|
61
59
|
class ScrollSpy extends BaseComponent__default.default {
|
|
62
60
|
constructor(element, config) {
|
|
63
|
-
super(element);
|
|
64
|
-
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
|
|
65
|
-
this._config = this._getConfig(config);
|
|
66
|
-
this._offsets = [];
|
|
67
|
-
this._targets = [];
|
|
68
|
-
this._activeTarget = null;
|
|
69
|
-
this._scrollHeight = 0;
|
|
70
|
-
EventHandler__default.default.on(this._scrollElement, EVENT_SCROLL, () => this._process());
|
|
71
|
-
this.refresh();
|
|
61
|
+
super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper
|
|
72
62
|
|
|
73
|
-
this.
|
|
63
|
+
this._targetLinks = new Map();
|
|
64
|
+
this._observableSections = new Map();
|
|
65
|
+
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
|
|
66
|
+
this._activeTarget = null;
|
|
67
|
+
this._observer = null;
|
|
68
|
+
this._previousScrollData = {
|
|
69
|
+
visibleEntryTop: 0,
|
|
70
|
+
parentScrollTop: 0
|
|
71
|
+
};
|
|
72
|
+
this.refresh(); // initialize
|
|
74
73
|
} // Getters
|
|
75
74
|
|
|
76
75
|
|
|
@@ -78,135 +77,190 @@
|
|
|
78
77
|
return Default;
|
|
79
78
|
}
|
|
80
79
|
|
|
80
|
+
static get DefaultType() {
|
|
81
|
+
return DefaultType;
|
|
82
|
+
}
|
|
83
|
+
|
|
81
84
|
static get NAME() {
|
|
82
85
|
return NAME;
|
|
83
86
|
} // Public
|
|
84
87
|
|
|
85
88
|
|
|
86
89
|
refresh() {
|
|
87
|
-
|
|
88
|
-
const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
|
89
|
-
const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
|
|
90
|
-
this._offsets = [];
|
|
91
|
-
this._targets = [];
|
|
92
|
-
this._scrollHeight = this._getScrollHeight();
|
|
93
|
-
const targets = SelectorEngine__default.default.find(SELECTOR_LINK_ITEMS, this._config.target);
|
|
94
|
-
targets.map(element => {
|
|
95
|
-
const targetSelector = index.getSelectorFromElement(element);
|
|
96
|
-
const target = targetSelector ? SelectorEngine__default.default.findOne(targetSelector) : null;
|
|
97
|
-
|
|
98
|
-
if (target) {
|
|
99
|
-
const targetBCR = target.getBoundingClientRect();
|
|
100
|
-
|
|
101
|
-
if (targetBCR.width || targetBCR.height) {
|
|
102
|
-
return [Manipulator__default.default[offsetMethod](target).top + offsetBase, targetSelector];
|
|
103
|
-
}
|
|
104
|
-
}
|
|
90
|
+
this._initializeTargetsAndObservables();
|
|
105
91
|
|
|
106
|
-
|
|
107
|
-
}).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
|
|
108
|
-
this._offsets.push(item[0]);
|
|
92
|
+
this._maybeEnableSmoothScroll();
|
|
109
93
|
|
|
110
|
-
|
|
111
|
-
|
|
94
|
+
if (this._observer) {
|
|
95
|
+
this._observer.disconnect();
|
|
96
|
+
} else {
|
|
97
|
+
this._observer = this._getNewObserver();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
for (const section of this._observableSections.values()) {
|
|
101
|
+
this._observer.observe(section);
|
|
102
|
+
}
|
|
112
103
|
}
|
|
113
104
|
|
|
114
105
|
dispose() {
|
|
115
|
-
|
|
106
|
+
this._observer.disconnect();
|
|
107
|
+
|
|
116
108
|
super.dispose();
|
|
117
109
|
} // Private
|
|
118
110
|
|
|
119
111
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
...(typeof config === 'object' && config ? config : {})
|
|
124
|
-
};
|
|
125
|
-
config.target = index.getElement(config.target) || document.documentElement;
|
|
126
|
-
index.typeCheckConfig(NAME, config, DefaultType);
|
|
112
|
+
_configAfterMerge(config) {
|
|
113
|
+
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
|
|
114
|
+
config.target = index.getElement(config.target) || document.body;
|
|
127
115
|
return config;
|
|
128
116
|
}
|
|
129
117
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
118
|
+
_maybeEnableSmoothScroll() {
|
|
119
|
+
if (!this._config.smoothScroll) {
|
|
120
|
+
return;
|
|
121
|
+
} // unregister any previous listeners
|
|
133
122
|
|
|
134
|
-
_getScrollHeight() {
|
|
135
|
-
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
|
136
|
-
}
|
|
137
123
|
|
|
138
|
-
|
|
139
|
-
|
|
124
|
+
EventHandler__default.default.off(this._config.target, EVENT_CLICK);
|
|
125
|
+
EventHandler__default.default.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
|
|
126
|
+
const observableSection = this._observableSections.get(event.target.hash);
|
|
127
|
+
|
|
128
|
+
if (observableSection) {
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
const root = this._rootElement || window;
|
|
131
|
+
const height = observableSection.offsetTop - this._element.offsetTop;
|
|
132
|
+
|
|
133
|
+
if (root.scrollTo) {
|
|
134
|
+
root.scrollTo({
|
|
135
|
+
top: height,
|
|
136
|
+
behavior: 'smooth'
|
|
137
|
+
});
|
|
138
|
+
return;
|
|
139
|
+
} // Chrome 60 doesn't support `scrollTo`
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
root.scrollTop = height;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
140
145
|
}
|
|
141
146
|
|
|
142
|
-
|
|
143
|
-
const
|
|
147
|
+
_getNewObserver() {
|
|
148
|
+
const options = {
|
|
149
|
+
root: this._rootElement,
|
|
150
|
+
threshold: [0.1, 0.5, 1],
|
|
151
|
+
rootMargin: this._getRootMargin()
|
|
152
|
+
};
|
|
153
|
+
return new IntersectionObserver(entries => this._observerCallback(entries), options);
|
|
154
|
+
} // The logic of selection
|
|
144
155
|
|
|
145
|
-
const scrollHeight = this._getScrollHeight();
|
|
146
156
|
|
|
147
|
-
|
|
157
|
+
_observerCallback(entries) {
|
|
158
|
+
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
|
|
148
159
|
|
|
149
|
-
|
|
150
|
-
this.
|
|
151
|
-
}
|
|
160
|
+
const activate = entry => {
|
|
161
|
+
this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
|
|
152
162
|
|
|
153
|
-
|
|
154
|
-
|
|
163
|
+
this._process(targetElement(entry));
|
|
164
|
+
};
|
|
155
165
|
|
|
156
|
-
|
|
157
|
-
|
|
166
|
+
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
|
|
167
|
+
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
|
|
168
|
+
this._previousScrollData.parentScrollTop = parentScrollTop;
|
|
169
|
+
|
|
170
|
+
for (const entry of entries) {
|
|
171
|
+
if (!entry.isIntersecting) {
|
|
172
|
+
this._activeTarget = null;
|
|
173
|
+
|
|
174
|
+
this._clearActiveClass(targetElement(entry));
|
|
175
|
+
|
|
176
|
+
continue;
|
|
158
177
|
}
|
|
159
178
|
|
|
160
|
-
|
|
161
|
-
}
|
|
179
|
+
const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop
|
|
162
180
|
|
|
163
|
-
|
|
164
|
-
|
|
181
|
+
if (userScrollsDown && entryIsLowerThanPrevious) {
|
|
182
|
+
activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
|
|
165
183
|
|
|
166
|
-
|
|
184
|
+
if (!parentScrollTop) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
167
187
|
|
|
168
|
-
|
|
169
|
-
|
|
188
|
+
continue;
|
|
189
|
+
} // if we are scrolling up, pick the smallest offsetTop
|
|
170
190
|
|
|
171
|
-
for (let i = this._offsets.length; i--;) {
|
|
172
|
-
const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
|
173
191
|
|
|
174
|
-
if (
|
|
175
|
-
|
|
192
|
+
if (!userScrollsDown && !entryIsLowerThanPrevious) {
|
|
193
|
+
activate(entry);
|
|
176
194
|
}
|
|
177
195
|
}
|
|
196
|
+
} // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
_getRootMargin() {
|
|
200
|
+
return this._config.offset ? `${this._config.offset}px 0px -30%` : this._config.rootMargin;
|
|
178
201
|
}
|
|
179
202
|
|
|
180
|
-
|
|
181
|
-
this.
|
|
203
|
+
_initializeTargetsAndObservables() {
|
|
204
|
+
this._targetLinks = new Map();
|
|
205
|
+
this._observableSections = new Map();
|
|
206
|
+
const targetLinks = SelectorEngine__default.default.find(SELECTOR_TARGET_LINKS, this._config.target);
|
|
182
207
|
|
|
183
|
-
|
|
208
|
+
for (const anchor of targetLinks) {
|
|
209
|
+
// ensure that the anchor has an id and is not disabled
|
|
210
|
+
if (!anchor.hash || index.isDisabled(anchor)) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
184
213
|
|
|
185
|
-
|
|
186
|
-
const link = SelectorEngine__default.default.findOne(queries.join(','), this._config.target);
|
|
187
|
-
link.classList.add(CLASS_NAME_ACTIVE);
|
|
214
|
+
const observableSection = SelectorEngine__default.default.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible
|
|
188
215
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
|
195
|
-
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
|
|
196
|
-
|
|
197
|
-
SelectorEngine__default.default.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
|
|
198
|
-
SelectorEngine__default.default.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
|
|
199
|
-
});
|
|
200
|
-
});
|
|
216
|
+
if (index.isVisible(observableSection)) {
|
|
217
|
+
this._targetLinks.set(anchor.hash, anchor);
|
|
218
|
+
|
|
219
|
+
this._observableSections.set(anchor.hash, observableSection);
|
|
220
|
+
}
|
|
201
221
|
}
|
|
222
|
+
}
|
|
202
223
|
|
|
203
|
-
|
|
224
|
+
_process(target) {
|
|
225
|
+
if (this._activeTarget === target) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
this._clearActiveClass(this._config.target);
|
|
230
|
+
|
|
231
|
+
this._activeTarget = target;
|
|
232
|
+
target.classList.add(CLASS_NAME_ACTIVE);
|
|
233
|
+
|
|
234
|
+
this._activateParents(target);
|
|
235
|
+
|
|
236
|
+
EventHandler__default.default.trigger(this._element, EVENT_ACTIVATE, {
|
|
204
237
|
relatedTarget: target
|
|
205
238
|
});
|
|
206
239
|
}
|
|
207
240
|
|
|
208
|
-
|
|
209
|
-
|
|
241
|
+
_activateParents(target) {
|
|
242
|
+
// Activate dropdown parents
|
|
243
|
+
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
|
244
|
+
SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
for (const listGroup of SelectorEngine__default.default.parents(target, SELECTOR_NAV_LIST_GROUP)) {
|
|
249
|
+
// Set triggered links parents as active
|
|
250
|
+
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
|
251
|
+
for (const item of SelectorEngine__default.default.prev(listGroup, SELECTOR_LINK_ITEMS)) {
|
|
252
|
+
item.classList.add(CLASS_NAME_ACTIVE);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
_clearActiveClass(parent) {
|
|
258
|
+
parent.classList.remove(CLASS_NAME_ACTIVE);
|
|
259
|
+
const activeNodes = SelectorEngine__default.default.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
|
|
260
|
+
|
|
261
|
+
for (const node of activeNodes) {
|
|
262
|
+
node.classList.remove(CLASS_NAME_ACTIVE);
|
|
263
|
+
}
|
|
210
264
|
} // Static
|
|
211
265
|
|
|
212
266
|
|
|
@@ -218,7 +272,7 @@
|
|
|
218
272
|
return;
|
|
219
273
|
}
|
|
220
274
|
|
|
221
|
-
if (
|
|
275
|
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
222
276
|
throw new TypeError(`No method named "${config}"`);
|
|
223
277
|
}
|
|
224
278
|
|
|
@@ -228,20 +282,17 @@
|
|
|
228
282
|
|
|
229
283
|
}
|
|
230
284
|
/**
|
|
231
|
-
*
|
|
232
|
-
* Data Api implementation
|
|
233
|
-
* ------------------------------------------------------------------------
|
|
285
|
+
* Data API implementation
|
|
234
286
|
*/
|
|
235
287
|
|
|
236
288
|
|
|
237
289
|
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
|
|
238
|
-
SelectorEngine__default.default.find(SELECTOR_DATA_SPY)
|
|
290
|
+
for (const spy of SelectorEngine__default.default.find(SELECTOR_DATA_SPY)) {
|
|
291
|
+
ScrollSpy.getOrCreateInstance(spy);
|
|
292
|
+
}
|
|
239
293
|
});
|
|
240
294
|
/**
|
|
241
|
-
* ------------------------------------------------------------------------
|
|
242
295
|
* jQuery
|
|
243
|
-
* ------------------------------------------------------------------------
|
|
244
|
-
* add .ScrollSpy to jQuery only if jQuery is present
|
|
245
296
|
*/
|
|
246
297
|
|
|
247
298
|
index.defineJQueryPlugin(ScrollSpy);
|
package/js/dist/scrollspy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._scrollElement = this._element.tagName === 'BODY' ? window : this._element\n this._config = this._getConfig(config)\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET :\n METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod :\n this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() :\n 0\n\n this._offsets = []\n this._targets = []\n this._scrollHeight = this._getScrollHeight()\n\n const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n\n targets.map(element => {\n const targetSelector = getSelectorFromElement(element)\n const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n return [\n Manipulator[offsetMethod](target).top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n EventHandler.off(this._scrollElement, EVENT_KEY)\n super.dispose()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n config.target = getElement(config.target) || document.documentElement\n\n typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset :\n this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight :\n this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = SELECTOR_LINK_ITEMS.split(',')\n .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const link = SelectorEngine.findOne(queries.join(','), this._config.target)\n\n link.classList.add(CLASS_NAME_ACTIVE)\n if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n } else {\n SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n .forEach(listGroup => {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n\n // Handle special case when .nav-link is inside .nav-item\n SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)\n .forEach(navItem => {\n SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n })\n })\n }\n\n EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(SELECTOR_DATA_SPY)\n .forEach(spy => new ScrollSpy(spy))\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","Default","offset","method","target","DefaultType","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","BaseComponent","constructor","element","config","_scrollElement","_element","tagName","window","_config","_getConfig","_offsets","_targets","_activeTarget","_scrollHeight","EventHandler","on","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","SelectorEngine","find","map","targetSelector","getSelectorFromElement","findOne","targetBCR","getBoundingClientRect","width","height","Manipulator","top","filter","item","sort","a","b","forEach","push","dispose","off","getDataAttributes","getElement","document","documentElement","typeCheckConfig","pageYOffset","scrollTop","scrollHeight","Math","max","body","_getOffsetHeight","innerHeight","maxScroll","length","_activate","_clear","i","isActiveTarget","queries","split","selector","link","join","classList","add","contains","closest","parents","listGroup","prev","navItem","children","trigger","relatedTarget","node","remove","jQueryInterface","each","data","getOrCreateInstance","TypeError","spy","defineJQueryPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: [0.1, 0.5, 1],\n rootMargin: this._getRootMargin()\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n _getRootMargin() {\n return this._config.offset ? `${this._config.offset}px 0px -30%` : this._config.rootMargin\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","Default","offset","rootMargin","smoothScroll","target","DefaultType","ScrollSpy","BaseComponent","constructor","element","config","_targetLinks","Map","_observableSections","_rootElement","getComputedStyle","_element","overflowY","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","values","observe","dispose","_configAfterMerge","getElement","document","body","_config","EventHandler","off","on","event","observableSection","get","hash","preventDefault","root","window","height","offsetTop","scrollTo","top","behavior","scrollTop","options","threshold","_getRootMargin","IntersectionObserver","entries","_observerCallback","targetElement","entry","id","activate","_process","documentElement","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","SelectorEngine","find","anchor","isDisabled","findOne","isVisible","set","classList","add","_activateParents","trigger","relatedTarget","contains","closest","listGroup","parents","item","prev","parent","remove","activeNodes","node","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","spy","defineJQueryPlugin"],"mappings":"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"}
|