@openeuropa/bcl-bootstrap 0.28.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/bootstrap-icons.svg +1 -1
  2. package/icons/0-circle-fill.svg +4 -0
  3. package/icons/0-circle.svg +4 -0
  4. package/icons/0-square-fill.svg +4 -0
  5. package/icons/0-square.svg +4 -0
  6. package/icons/1-circle-fill.svg +1 -1
  7. package/icons/amd.svg +3 -0
  8. package/icons/arrow-bar-left.svg +1 -1
  9. package/icons/arrow-bar-right.svg +1 -1
  10. package/icons/arrows-collapse.svg +1 -1
  11. package/icons/arrows-expand.svg +1 -1
  12. package/icons/building-add.svg +5 -0
  13. package/icons/building-check.svg +5 -0
  14. package/icons/building-dash.svg +5 -0
  15. package/icons/building-down.svg +5 -0
  16. package/icons/building-exclamation.svg +4 -0
  17. package/icons/building-fill-add.svg +4 -0
  18. package/icons/building-fill-check.svg +4 -0
  19. package/icons/building-fill-dash.svg +4 -0
  20. package/icons/building-fill-down.svg +4 -0
  21. package/icons/building-fill-exclamation.svg +4 -0
  22. package/icons/building-fill-gear.svg +4 -0
  23. package/icons/building-fill-lock.svg +4 -0
  24. package/icons/building-fill-slash.svg +4 -0
  25. package/icons/building-fill-up.svg +4 -0
  26. package/icons/building-fill-x.svg +4 -0
  27. package/icons/building-fill.svg +3 -0
  28. package/icons/building-gear.svg +4 -0
  29. package/icons/building-lock.svg +4 -0
  30. package/icons/building-slash.svg +5 -0
  31. package/icons/building-up.svg +5 -0
  32. package/icons/building-x.svg +4 -0
  33. package/icons/building.svg +2 -2
  34. package/icons/buildings-fill.svg +3 -0
  35. package/icons/buildings.svg +4 -0
  36. package/icons/bus-front-fill.svg +3 -0
  37. package/icons/bus-front.svg +4 -0
  38. package/icons/capsule-pill.svg +1 -1
  39. package/icons/capsule.svg +1 -1
  40. package/icons/car-front-fill.svg +1 -1
  41. package/icons/car-front.svg +1 -1
  42. package/icons/database-add.svg +4 -0
  43. package/icons/database-check.svg +4 -0
  44. package/icons/database-dash.svg +4 -0
  45. package/icons/database-down.svg +4 -0
  46. package/icons/database-exclamation.svg +4 -0
  47. package/icons/database-fill-add.svg +4 -0
  48. package/icons/database-fill-check.svg +4 -0
  49. package/icons/database-fill-dash.svg +4 -0
  50. package/icons/database-fill-down.svg +4 -0
  51. package/icons/database-fill-exclamation.svg +5 -0
  52. package/icons/database-fill-gear.svg +4 -0
  53. package/icons/database-fill-lock.svg +5 -0
  54. package/icons/database-fill-slash.svg +4 -0
  55. package/icons/database-fill-up.svg +4 -0
  56. package/icons/database-fill-x.svg +5 -0
  57. package/icons/database-fill.svg +6 -0
  58. package/icons/database-gear.svg +4 -0
  59. package/icons/database-lock.svg +4 -0
  60. package/icons/database-slash.svg +4 -0
  61. package/icons/database-up.svg +4 -0
  62. package/icons/database-x.svg +4 -0
  63. package/icons/database.svg +3 -0
  64. package/icons/envelope-at-fill.svg +4 -0
  65. package/icons/envelope-at.svg +4 -0
  66. package/icons/ev-front-fill.svg +3 -0
  67. package/icons/ev-front.svg +4 -0
  68. package/icons/globe-americas.svg +3 -0
  69. package/icons/globe-asia-australia.svg +4 -0
  70. package/icons/globe-central-south-asia.svg +3 -0
  71. package/icons/globe-europe-africa.svg +3 -0
  72. package/icons/heart-pulse-fill.svg +2 -1
  73. package/icons/heart-pulse.svg +2 -1
  74. package/icons/heartbreak-fill.svg +1 -1
  75. package/icons/heartbreak.svg +1 -1
  76. package/icons/house-add-fill.svg +5 -0
  77. package/icons/house-add.svg +4 -0
  78. package/icons/house-check-fill.svg +5 -0
  79. package/icons/house-check.svg +4 -0
  80. package/icons/house-dash-fill.svg +5 -0
  81. package/icons/house-dash.svg +4 -0
  82. package/icons/house-door-fill.svg +1 -1
  83. package/icons/house-door.svg +1 -1
  84. package/icons/house-down-fill.svg +5 -0
  85. package/icons/house-down.svg +4 -0
  86. package/icons/house-exclamation-fill.svg +5 -0
  87. package/icons/house-exclamation.svg +4 -0
  88. package/icons/house-fill.svg +2 -2
  89. package/icons/house-gear-fill.svg +5 -0
  90. package/icons/house-gear.svg +4 -0
  91. package/icons/house-lock-fill.svg +5 -0
  92. package/icons/house-lock.svg +4 -0
  93. package/icons/house-slash-fill.svg +5 -0
  94. package/icons/house-slash.svg +4 -0
  95. package/icons/house-up-fill.svg +5 -0
  96. package/icons/house-up.svg +4 -0
  97. package/icons/house-x-fill.svg +5 -0
  98. package/icons/house-x.svg +4 -0
  99. package/icons/house.svg +1 -2
  100. package/icons/houses-fill.svg +4 -0
  101. package/icons/houses.svg +3 -0
  102. package/icons/lungs-fill.svg +1 -1
  103. package/icons/nvidia.svg +3 -0
  104. package/icons/people-fill.svg +1 -3
  105. package/icons/people.svg +1 -1
  106. package/icons/person-add.svg +4 -0
  107. package/icons/person-check.svg +2 -2
  108. package/icons/person-dash.svg +2 -2
  109. package/icons/person-down.svg +4 -0
  110. package/icons/person-exclamation.svg +4 -0
  111. package/icons/person-fill-add.svg +4 -0
  112. package/icons/person-fill-check.svg +4 -0
  113. package/icons/person-fill-dash.svg +4 -0
  114. package/icons/person-fill-down.svg +4 -0
  115. package/icons/person-fill-exclamation.svg +4 -0
  116. package/icons/person-fill-gear.svg +3 -0
  117. package/icons/person-fill-lock.svg +3 -0
  118. package/icons/person-fill-slash.svg +3 -0
  119. package/icons/person-fill-up.svg +4 -0
  120. package/icons/person-fill-x.svg +4 -0
  121. package/icons/person-fill.svg +1 -1
  122. package/icons/person-gear.svg +3 -0
  123. package/icons/person-lock.svg +3 -0
  124. package/icons/person-slash.svg +3 -0
  125. package/icons/person-up.svg +4 -0
  126. package/icons/person-vcard-fill.svg +3 -0
  127. package/icons/person-vcard.svg +4 -0
  128. package/icons/person-x.svg +2 -2
  129. package/icons/person.svg +1 -1
  130. package/icons/prescription.svg +2 -2
  131. package/icons/prescription2.svg +1 -1
  132. package/icons/regex.svg +3 -0
  133. package/icons/rocket-fill.svg +4 -0
  134. package/icons/rocket-takeoff-fill.svg +4 -0
  135. package/icons/rocket-takeoff.svg +5 -0
  136. package/icons/rocket.svg +5 -0
  137. package/icons/scooter.svg +3 -0
  138. package/icons/sign-dead-end-fill.svg +4 -0
  139. package/icons/sign-dead-end.svg +4 -0
  140. package/icons/sign-do-not-enter-fill.svg +4 -0
  141. package/icons/sign-do-not-enter.svg +4 -0
  142. package/icons/sign-intersection-fill.svg +3 -0
  143. package/icons/sign-intersection-side-fill.svg +3 -0
  144. package/icons/sign-intersection-side.svg +4 -0
  145. package/icons/sign-intersection-t-fill.svg +3 -0
  146. package/icons/sign-intersection-t.svg +4 -0
  147. package/icons/sign-intersection-y-fill.svg +3 -0
  148. package/icons/sign-intersection-y.svg +4 -0
  149. package/icons/sign-intersection.svg +4 -0
  150. package/icons/sign-merge-left-fill.svg +3 -0
  151. package/icons/sign-merge-left.svg +4 -0
  152. package/icons/sign-merge-right-fill.svg +3 -0
  153. package/icons/sign-merge-right.svg +4 -0
  154. package/icons/sign-no-left-turn-fill.svg +4 -0
  155. package/icons/sign-no-left-turn.svg +3 -0
  156. package/icons/sign-no-parking-fill.svg +4 -0
  157. package/icons/sign-no-parking.svg +3 -0
  158. package/icons/sign-no-right-turn-fill.svg +4 -0
  159. package/icons/sign-no-right-turn.svg +3 -0
  160. package/icons/sign-railroad-fill.svg +5 -0
  161. package/icons/sign-railroad.svg +4 -0
  162. package/icons/sign-stop-fill.svg +1 -1
  163. package/icons/sign-stop-lights-fill.svg +1 -1
  164. package/icons/sign-turn-left-fill.svg +1 -1
  165. package/icons/sign-turn-right-fill.svg +1 -1
  166. package/icons/sign-turn-slight-left-fill.svg +1 -1
  167. package/icons/sign-turn-slight-right-fill.svg +1 -1
  168. package/icons/sign-yield-fill.svg +1 -1
  169. package/icons/sina-weibo.svg +4 -0
  170. package/icons/stripe.svg +3 -0
  171. package/icons/subscript.svg +3 -0
  172. package/icons/superscript.svg +3 -0
  173. package/icons/taxi-front-fill.svg +3 -0
  174. package/icons/taxi-front.svg +4 -0
  175. package/icons/tencent-qq.svg +4 -0
  176. package/icons/text-wrap.svg +3 -0
  177. package/icons/train-freight-front-fill.svg +1 -1
  178. package/icons/train-freight-front.svg +1 -1
  179. package/icons/train-front-fill.svg +1 -1
  180. package/icons/train-front.svg +1 -1
  181. package/icons/train-lightrail-front-fill.svg +1 -1
  182. package/icons/train-lightrail-front.svg +1 -1
  183. package/icons/trello.svg +3 -0
  184. package/icons/truck-front-fill.svg +1 -1
  185. package/icons/truck-front.svg +2 -3
  186. package/icons/virus.svg +1 -1
  187. package/icons/virus2.svg +1 -1
  188. package/icons/wikipedia.svg +3 -0
  189. package/js/dist/alert.js +14 -25
  190. package/js/dist/alert.js.map +1 -1
  191. package/js/dist/base-component.js +13 -30
  192. package/js/dist/base-component.js.map +1 -1
  193. package/js/dist/button.js +11 -15
  194. package/js/dist/button.js.map +1 -1
  195. package/js/dist/carousel.js +36 -120
  196. package/js/dist/carousel.js.map +1 -1
  197. package/js/dist/collapse.js +27 -88
  198. package/js/dist/collapse.js.map +1 -1
  199. package/js/dist/dependency/manipulator.js +72 -0
  200. package/js/dist/dependency/manipulator.js.map +1 -0
  201. package/js/dist/dom/data.js +6 -10
  202. package/js/dist/dom/data.js.map +1 -1
  203. package/js/dist/dom/event-handler.js +7 -52
  204. package/js/dist/dom/event-handler.js.map +1 -1
  205. package/js/dist/dom/manipulator.js +2 -15
  206. package/js/dist/dom/manipulator.js.map +1 -1
  207. package/js/dist/dom/selector-engine.js +2 -16
  208. package/js/dist/dom/selector-engine.js.map +1 -1
  209. package/js/dist/dropdown.js +52 -124
  210. package/js/dist/dropdown.js.map +1 -1
  211. package/js/dist/modal.js +40 -119
  212. package/js/dist/modal.js.map +1 -1
  213. package/js/dist/offcanvas.js +36 -89
  214. package/js/dist/offcanvas.js.map +1 -1
  215. package/js/dist/popover.js +15 -22
  216. package/js/dist/popover.js.map +1 -1
  217. package/js/dist/scrollspy-legacy.js +216 -0
  218. package/js/dist/scrollspy-legacy.js.map +1 -0
  219. package/js/dist/scrollspy.js +42 -80
  220. package/js/dist/scrollspy.js.map +1 -1
  221. package/js/dist/tab.js +40 -98
  222. package/js/dist/tab.js.map +1 -1
  223. package/js/dist/toast.js +30 -69
  224. package/js/dist/toast.js.map +1 -1
  225. package/js/dist/tooltip.js +74 -196
  226. package/js/dist/tooltip.js.map +1 -1
  227. package/js/dist/util/backdrop.js +13 -40
  228. package/js/dist/util/backdrop.js.map +1 -1
  229. package/js/dist/util/component-functions.js +5 -11
  230. package/js/dist/util/component-functions.js.map +1 -1
  231. package/js/dist/util/config.js +6 -18
  232. package/js/dist/util/config.js.map +1 -1
  233. package/js/dist/util/focustrap.js +16 -33
  234. package/js/dist/util/focustrap.js.map +1 -1
  235. package/js/dist/util/index.js +28 -75
  236. package/js/dist/util/index.js.map +1 -1
  237. package/js/dist/util/sanitizer.js +7 -17
  238. package/js/dist/util/sanitizer.js.map +1 -1
  239. package/js/dist/util/scrollbar.js +16 -43
  240. package/js/dist/util/scrollbar.js.map +1 -1
  241. package/js/dist/util/swipe.js +18 -40
  242. package/js/dist/util/swipe.js.map +1 -1
  243. package/js/dist/util/template-factory.js +13 -41
  244. package/js/dist/util/template-factory.js.map +1 -1
  245. package/js/src/alert.js +1 -1
  246. package/js/src/base-component.js +2 -2
  247. package/js/src/button.js +1 -1
  248. package/js/src/carousel.js +1 -1
  249. package/js/src/collapse.js +1 -1
  250. package/js/src/dependency/manipulator.js +80 -0
  251. package/js/src/dom/data.js +1 -1
  252. package/js/src/dom/event-handler.js +1 -1
  253. package/js/src/dom/manipulator.js +1 -1
  254. package/js/src/dom/selector-engine.js +1 -1
  255. package/js/src/dropdown.js +10 -3
  256. package/js/src/modal.js +3 -3
  257. package/js/src/offcanvas.js +1 -1
  258. package/js/src/popover.js +1 -1
  259. package/js/src/scrollspy-legacy.js +294 -0
  260. package/js/src/scrollspy.js +1 -1
  261. package/js/src/tab.js +2 -4
  262. package/js/src/toast.js +9 -4
  263. package/js/src/tooltip.js +27 -48
  264. package/js/src/util/backdrop.js +1 -1
  265. package/js/src/util/component-functions.js +1 -1
  266. package/js/src/util/config.js +1 -1
  267. package/js/src/util/focustrap.js +1 -1
  268. package/js/src/util/index.js +1 -1
  269. package/js/src/util/sanitizer.js +1 -1
  270. package/js/src/util/scrollbar.js +1 -1
  271. package/js/src/util/swipe.js +1 -1
  272. package/js/src/util/template-factory.js +1 -1
  273. package/legacy/dependency/manipulator.js +80 -0
  274. package/legacy/scrollspy-legacy.js +294 -0
  275. package/package.json +6 -6
  276. package/scss/_buttons.scss +8 -2
  277. package/scss/_carousel.scss +0 -3
  278. package/scss/_functions.scss +1 -1
  279. package/scss/_toasts.scss +2 -0
  280. package/scss/_variables.scss +1 -1
  281. package/scss/bootstrap-utilities.scss +3 -0
  282. package/scss/mixins/_banner.scss +1 -1
  283. package/scss/mixins/_table-variants.scss +2 -2
@@ -0,0 +1,216 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dependency/manipulator'), require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
3
+ typeof define === 'function' && define.amd ? define(['./dependency/manipulator', './util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollspyLegacy = factory(global.Manipulator, global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
5
+ })(this, (function (Manipulator, index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
6
+
7
+ /**
8
+ * --------------------------------------------------------------------------
9
+ * Bootstrap (v5.1.3): scrollspy.js
10
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
11
+ * --------------------------------------------------------------------------
12
+ */
13
+
14
+ /**
15
+ * ------------------------------------------------------------------------
16
+ * Constants
17
+ * ------------------------------------------------------------------------
18
+ */
19
+
20
+ const NAME = 'scrollspy';
21
+ const DATA_KEY = 'bs.scrollspy';
22
+ const EVENT_KEY = `.${DATA_KEY}`;
23
+ const DATA_API_KEY = '.data-api';
24
+ const Default = {
25
+ offset: 10,
26
+ method: 'auto',
27
+ target: ''
28
+ };
29
+ const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
30
+ const EVENT_SCROLL = `scroll${EVENT_KEY}`;
31
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
32
+ const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
33
+ const CLASS_NAME_ACTIVE = 'active';
34
+ const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
35
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
36
+ const SELECTOR_NAV_LINKS = '.nav-link';
37
+ const SELECTOR_NAV_ITEMS = '.nav-item';
38
+ const SELECTOR_LIST_ITEMS = '.list-group-item';
39
+ const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
40
+ const SELECTOR_DROPDOWN = '.dropdown';
41
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
42
+ const METHOD_OFFSET = 'offset';
43
+ const METHOD_POSITION = 'position';
44
+
45
+ /**
46
+ * ------------------------------------------------------------------------
47
+ * Class Definition
48
+ * ------------------------------------------------------------------------
49
+ */
50
+
51
+ class ScrollSpy extends BaseComponent {
52
+ constructor(element, config) {
53
+ super(element);
54
+ this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
55
+ this._config = this._getConfig(config);
56
+ this._offsets = [];
57
+ this._targets = [];
58
+ this._activeTarget = null;
59
+ this._scrollHeight = 0;
60
+ EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());
61
+ this.refresh();
62
+ this._process();
63
+ }
64
+
65
+ // Getters
66
+
67
+ static get Default() {
68
+ return Default;
69
+ }
70
+ static get NAME() {
71
+ return NAME;
72
+ }
73
+
74
+ // Public
75
+
76
+ refresh() {
77
+ const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
78
+ const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
79
+ const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
80
+ this._offsets = [];
81
+ this._targets = [];
82
+ this._scrollHeight = this._getScrollHeight();
83
+ const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
84
+ targets.map(element => {
85
+ const targetSelector = index.getSelectorFromElement(element);
86
+ const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
87
+ if (target) {
88
+ const targetBCR = target.getBoundingClientRect();
89
+ if (targetBCR.width || targetBCR.height) {
90
+ return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
91
+ }
92
+ }
93
+ return null;
94
+ }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
95
+ this._offsets.push(item[0]);
96
+ this._targets.push(item[1]);
97
+ });
98
+ }
99
+ dispose() {
100
+ EventHandler.off(this._scrollElement, EVENT_KEY);
101
+ super.dispose();
102
+ }
103
+
104
+ // Private
105
+
106
+ _getConfig(config) {
107
+ config = {
108
+ ...Default,
109
+ ...Manipulator.getDataAttributes(this._element),
110
+ ...(typeof config === 'object' && config ? config : {})
111
+ };
112
+ config.target = index.getElement(config.target) || document.documentElement;
113
+ return config;
114
+ }
115
+ _getScrollTop() {
116
+ return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
117
+ }
118
+ _getScrollHeight() {
119
+ return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
120
+ }
121
+ _getOffsetHeight() {
122
+ return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
123
+ }
124
+ _process() {
125
+ const scrollTop = this._getScrollTop() + this._config.offset;
126
+ const scrollHeight = this._getScrollHeight();
127
+ const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
128
+ if (this._scrollHeight !== scrollHeight) {
129
+ this.refresh();
130
+ }
131
+ if (scrollTop >= maxScroll) {
132
+ const target = this._targets[this._targets.length - 1];
133
+ if (this._activeTarget !== target) {
134
+ this._activate(target);
135
+ }
136
+ return;
137
+ }
138
+ if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
139
+ this._activeTarget = null;
140
+ this._clear();
141
+ return;
142
+ }
143
+ for (let i = this._offsets.length; i--;) {
144
+ const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
145
+ if (isActiveTarget) {
146
+ this._activate(this._targets[i]);
147
+ }
148
+ }
149
+ }
150
+ _activate(target) {
151
+ this._activeTarget = target;
152
+ this._clear();
153
+ const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
154
+ const link = SelectorEngine.findOne(queries.join(','), this._config.target);
155
+ link.classList.add(CLASS_NAME_ACTIVE);
156
+ if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
157
+ SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
158
+ } else {
159
+ SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
160
+ // Set triggered links parents as active
161
+ // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
162
+ SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
163
+
164
+ // Handle special case when .nav-link is inside .nav-item
165
+ SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
166
+ SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
167
+ });
168
+ });
169
+ }
170
+ EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
171
+ relatedTarget: target
172
+ });
173
+ }
174
+ _clear() {
175
+ SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
176
+ }
177
+
178
+ // Static
179
+
180
+ static jQueryInterface(config) {
181
+ return this.each(function () {
182
+ const data = ScrollSpy.getOrCreateInstance(this, config);
183
+ if (typeof config !== 'string') {
184
+ return;
185
+ }
186
+ if (typeof data[config] === 'undefined') {
187
+ throw new TypeError(`No method named "${config}"`);
188
+ }
189
+ data[config]();
190
+ });
191
+ }
192
+ }
193
+
194
+ /**
195
+ * ------------------------------------------------------------------------
196
+ * Data Api implementation
197
+ * ------------------------------------------------------------------------
198
+ */
199
+
200
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
201
+ SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
202
+ });
203
+
204
+ /**
205
+ * ------------------------------------------------------------------------
206
+ * jQuery
207
+ * ------------------------------------------------------------------------
208
+ * add .ScrollSpy to jQuery only if jQuery is present
209
+ */
210
+
211
+ index.defineJQueryPlugin(ScrollSpy);
212
+
213
+ return ScrollSpy;
214
+
215
+ }));
216
+ //# sourceMappingURL=scrollspy-legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollspy-legacy.js","sources":["../src/scrollspy-legacy.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\n// Old versions\nimport Manipulator from './dependency/manipulator'\n\n import {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n} from './util/index'\nimport EventHandler from './dom/event-handler'\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 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","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","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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"}
@@ -4,18 +4,13 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
5
5
  })(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
6
6
 
7
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
8
-
9
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
10
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
11
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
12
-
13
7
  /**
14
8
  * --------------------------------------------------------------------------
15
- * Bootstrap (v5.2.1): scrollspy.js
9
+ * Bootstrap (v5.2.3): scrollspy.js
16
10
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
17
11
  * --------------------------------------------------------------------------
18
12
  */
13
+
19
14
  /**
20
15
  * Constants
21
16
  */
@@ -54,14 +49,16 @@
54
49
  target: 'element',
55
50
  threshold: 'array'
56
51
  };
52
+
57
53
  /**
58
54
  * Class definition
59
55
  */
60
56
 
61
- class ScrollSpy extends BaseComponent__default.default {
57
+ class ScrollSpy extends BaseComponent {
62
58
  constructor(element, config) {
63
- super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper
59
+ super(element, config);
64
60
 
61
+ // this._element is the observablesContainer and config.target the menu links wrapper
65
62
  this._targetLinks = new Map();
66
63
  this._observableSections = new Map();
67
64
  this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
@@ -72,87 +69,75 @@
72
69
  parentScrollTop: 0
73
70
  };
74
71
  this.refresh(); // initialize
75
- } // Getters
76
-
72
+ }
77
73
 
74
+ // Getters
78
75
  static get Default() {
79
76
  return Default;
80
77
  }
81
-
82
78
  static get DefaultType() {
83
79
  return DefaultType;
84
80
  }
85
-
86
81
  static get NAME() {
87
82
  return NAME;
88
- } // Public
89
-
83
+ }
90
84
 
85
+ // Public
91
86
  refresh() {
92
87
  this._initializeTargetsAndObservables();
93
-
94
88
  this._maybeEnableSmoothScroll();
95
-
96
89
  if (this._observer) {
97
90
  this._observer.disconnect();
98
91
  } else {
99
92
  this._observer = this._getNewObserver();
100
93
  }
101
-
102
94
  for (const section of this._observableSections.values()) {
103
95
  this._observer.observe(section);
104
96
  }
105
97
  }
106
-
107
98
  dispose() {
108
99
  this._observer.disconnect();
109
-
110
100
  super.dispose();
111
- } // Private
112
-
101
+ }
113
102
 
103
+ // Private
114
104
  _configAfterMerge(config) {
115
105
  // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
116
- config.target = index.getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
106
+ config.target = index.getElement(config.target) || document.body;
117
107
 
108
+ // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
118
109
  config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
119
-
120
110
  if (typeof config.threshold === 'string') {
121
111
  config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
122
112
  }
123
-
124
113
  return config;
125
114
  }
126
-
127
115
  _maybeEnableSmoothScroll() {
128
116
  if (!this._config.smoothScroll) {
129
117
  return;
130
- } // unregister any previous listeners
131
-
118
+ }
132
119
 
133
- EventHandler__default.default.off(this._config.target, EVENT_CLICK);
134
- EventHandler__default.default.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
120
+ // unregister any previous listeners
121
+ EventHandler.off(this._config.target, EVENT_CLICK);
122
+ EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
135
123
  const observableSection = this._observableSections.get(event.target.hash);
136
-
137
124
  if (observableSection) {
138
125
  event.preventDefault();
139
126
  const root = this._rootElement || window;
140
127
  const height = observableSection.offsetTop - this._element.offsetTop;
141
-
142
128
  if (root.scrollTo) {
143
129
  root.scrollTo({
144
130
  top: height,
145
131
  behavior: 'smooth'
146
132
  });
147
133
  return;
148
- } // Chrome 60 doesn't support `scrollTo`
149
-
134
+ }
150
135
 
136
+ // Chrome 60 doesn't support `scrollTo`
151
137
  root.scrollTop = height;
152
138
  }
153
139
  });
154
140
  }
155
-
156
141
  _getNewObserver() {
157
142
  const options = {
158
143
  root: this._rootElement,
@@ -160,141 +145,118 @@
160
145
  rootMargin: this._config.rootMargin
161
146
  };
162
147
  return new IntersectionObserver(entries => this._observerCallback(entries), options);
163
- } // The logic of selection
164
-
148
+ }
165
149
 
150
+ // The logic of selection
166
151
  _observerCallback(entries) {
167
152
  const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
168
-
169
153
  const activate = entry => {
170
154
  this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
171
-
172
155
  this._process(targetElement(entry));
173
156
  };
174
-
175
157
  const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
176
158
  const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
177
159
  this._previousScrollData.parentScrollTop = parentScrollTop;
178
-
179
160
  for (const entry of entries) {
180
161
  if (!entry.isIntersecting) {
181
162
  this._activeTarget = null;
182
-
183
163
  this._clearActiveClass(targetElement(entry));
184
-
185
164
  continue;
186
165
  }
187
-
188
- const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop
189
-
166
+ const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
167
+ // if we are scrolling down, pick the bigger offsetTop
190
168
  if (userScrollsDown && entryIsLowerThanPrevious) {
191
- activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
192
-
169
+ activate(entry);
170
+ // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
193
171
  if (!parentScrollTop) {
194
172
  return;
195
173
  }
196
-
197
174
  continue;
198
- } // if we are scrolling up, pick the smallest offsetTop
199
-
175
+ }
200
176
 
177
+ // if we are scrolling up, pick the smallest offsetTop
201
178
  if (!userScrollsDown && !entryIsLowerThanPrevious) {
202
179
  activate(entry);
203
180
  }
204
181
  }
205
182
  }
206
-
207
183
  _initializeTargetsAndObservables() {
208
184
  this._targetLinks = new Map();
209
185
  this._observableSections = new Map();
210
- const targetLinks = SelectorEngine__default.default.find(SELECTOR_TARGET_LINKS, this._config.target);
211
-
186
+ const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
212
187
  for (const anchor of targetLinks) {
213
188
  // ensure that the anchor has an id and is not disabled
214
189
  if (!anchor.hash || index.isDisabled(anchor)) {
215
190
  continue;
216
191
  }
192
+ const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
217
193
 
218
- const observableSection = SelectorEngine__default.default.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible
219
-
194
+ // ensure that the observableSection exists & is visible
220
195
  if (index.isVisible(observableSection)) {
221
196
  this._targetLinks.set(anchor.hash, anchor);
222
-
223
197
  this._observableSections.set(anchor.hash, observableSection);
224
198
  }
225
199
  }
226
200
  }
227
-
228
201
  _process(target) {
229
202
  if (this._activeTarget === target) {
230
203
  return;
231
204
  }
232
-
233
205
  this._clearActiveClass(this._config.target);
234
-
235
206
  this._activeTarget = target;
236
207
  target.classList.add(CLASS_NAME_ACTIVE);
237
-
238
208
  this._activateParents(target);
239
-
240
- EventHandler__default.default.trigger(this._element, EVENT_ACTIVATE, {
209
+ EventHandler.trigger(this._element, EVENT_ACTIVATE, {
241
210
  relatedTarget: target
242
211
  });
243
212
  }
244
-
245
213
  _activateParents(target) {
246
214
  // Activate dropdown parents
247
215
  if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
248
- SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
216
+ SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
249
217
  return;
250
218
  }
251
-
252
- for (const listGroup of SelectorEngine__default.default.parents(target, SELECTOR_NAV_LIST_GROUP)) {
219
+ for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
253
220
  // Set triggered links parents as active
254
221
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
255
- for (const item of SelectorEngine__default.default.prev(listGroup, SELECTOR_LINK_ITEMS)) {
222
+ for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
256
223
  item.classList.add(CLASS_NAME_ACTIVE);
257
224
  }
258
225
  }
259
226
  }
260
-
261
227
  _clearActiveClass(parent) {
262
228
  parent.classList.remove(CLASS_NAME_ACTIVE);
263
- const activeNodes = SelectorEngine__default.default.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
264
-
229
+ const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
265
230
  for (const node of activeNodes) {
266
231
  node.classList.remove(CLASS_NAME_ACTIVE);
267
232
  }
268
- } // Static
269
-
233
+ }
270
234
 
235
+ // Static
271
236
  static jQueryInterface(config) {
272
237
  return this.each(function () {
273
238
  const data = ScrollSpy.getOrCreateInstance(this, config);
274
-
275
239
  if (typeof config !== 'string') {
276
240
  return;
277
241
  }
278
-
279
242
  if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
280
243
  throw new TypeError(`No method named "${config}"`);
281
244
  }
282
-
283
245
  data[config]();
284
246
  });
285
247
  }
286
-
287
248
  }
249
+
288
250
  /**
289
251
  * Data API implementation
290
252
  */
291
253
 
292
-
293
- EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
294
- for (const spy of SelectorEngine__default.default.find(SELECTOR_DATA_SPY)) {
254
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
255
+ for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
295
256
  ScrollSpy.getOrCreateInstance(spy);
296
257
  }
297
258
  });
259
+
298
260
  /**
299
261
  * jQuery
300
262
  */
@@ -1 +1 @@
1
- {"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.1): 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 threshold: [0.1, 0.5, 1]\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 threshold: 'array'\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 // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\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: this._config.threshold,\n rootMargin: this._config.rootMargin\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 _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","threshold","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","split","map","value","Number","parseFloat","_config","EventHandler","off","on","event","observableSection","get","hash","preventDefault","root","window","height","offsetTop","scrollTo","top","behavior","scrollTop","options","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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"}
1
+ {"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): 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 threshold: [0.1, 0.5, 1]\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 threshold: 'array'\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 // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\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: this._config.threshold,\n rootMargin: this._config.rootMargin\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 _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","threshold","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","split","map","value","Number","parseFloat","_config","EventHandler","off","on","event","observableSection","get","hash","preventDefault","root","window","height","offsetTop","scrollTo","top","behavior","scrollTop","options","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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"}