bootstrap 5.1.3 → 5.3.5

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 (127) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +61 -0
  3. data/CHANGELOG.md +9 -0
  4. data/Gemfile +1 -0
  5. data/README.md +35 -14
  6. data/Rakefile +16 -5
  7. data/assets/javascripts/bootstrap/alert.js +22 -167
  8. data/assets/javascripts/bootstrap/base-component.js +34 -133
  9. data/assets/javascripts/bootstrap/button.js +19 -86
  10. data/assets/javascripts/bootstrap/carousel.js +209 -564
  11. data/assets/javascripts/bootstrap/collapse.js +78 -324
  12. data/assets/javascripts/bootstrap/dom/data.js +8 -14
  13. data/assets/javascripts/bootstrap/dom/event-handler.js +89 -174
  14. data/assets/javascripts/bootstrap/dom/manipulator.js +22 -39
  15. data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -71
  16. data/assets/javascripts/bootstrap/dropdown.js +135 -420
  17. data/assets/javascripts/bootstrap/modal.js +115 -837
  18. data/assets/javascripts/bootstrap/offcanvas.js +93 -714
  19. data/assets/javascripts/bootstrap/popover.js +42 -130
  20. data/assets/javascripts/bootstrap/scrollspy.js +180 -296
  21. data/assets/javascripts/bootstrap/tab.js +197 -245
  22. data/assets/javascripts/bootstrap/toast.js +52 -276
  23. data/assets/javascripts/bootstrap/tooltip.js +283 -744
  24. data/assets/javascripts/bootstrap/util/backdrop.js +138 -0
  25. data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
  26. data/assets/javascripts/bootstrap/util/config.js +67 -0
  27. data/assets/javascripts/bootstrap/util/focustrap.js +112 -0
  28. data/assets/javascripts/bootstrap/util/index.js +280 -0
  29. data/assets/javascripts/bootstrap/util/sanitizer.js +113 -0
  30. data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
  31. data/assets/javascripts/bootstrap/util/swipe.js +134 -0
  32. data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
  33. data/assets/javascripts/bootstrap-global-this-define.js +1 -1
  34. data/assets/javascripts/bootstrap-sprockets.js +15 -6
  35. data/assets/javascripts/bootstrap.js +2278 -2831
  36. data/assets/javascripts/bootstrap.min.js +3 -3
  37. data/assets/stylesheets/_bootstrap-grid.scss +4 -9
  38. data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
  39. data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
  40. data/assets/stylesheets/_bootstrap.scss +5 -6
  41. data/assets/stylesheets/bootstrap/_accordion.scss +68 -33
  42. data/assets/stylesheets/bootstrap/_alert.scss +25 -14
  43. data/assets/stylesheets/bootstrap/_badge.scss +14 -5
  44. data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -10
  45. data/assets/stylesheets/bootstrap/_button-group.scss +12 -4
  46. data/assets/stylesheets/bootstrap/_buttons.scss +133 -28
  47. data/assets/stylesheets/bootstrap/_card.scss +61 -39
  48. data/assets/stylesheets/bootstrap/_carousel.scss +22 -25
  49. data/assets/stylesheets/bootstrap/_close.scss +36 -10
  50. data/assets/stylesheets/bootstrap/_containers.scss +1 -1
  51. data/assets/stylesheets/bootstrap/_dropdown.scss +86 -76
  52. data/assets/stylesheets/bootstrap/_functions.scss +10 -10
  53. data/assets/stylesheets/bootstrap/_grid.scss +9 -3
  54. data/assets/stylesheets/bootstrap/_helpers.scss +3 -0
  55. data/assets/stylesheets/bootstrap/_list-group.scss +81 -56
  56. data/assets/stylesheets/bootstrap/_maps.scss +174 -0
  57. data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
  58. data/assets/stylesheets/bootstrap/_modal.scss +76 -45
  59. data/assets/stylesheets/bootstrap/_nav.scss +87 -29
  60. data/assets/stylesheets/bootstrap/_navbar.scss +102 -148
  61. data/assets/stylesheets/bootstrap/_offcanvas.scss +125 -61
  62. data/assets/stylesheets/bootstrap/_pagination.scss +66 -21
  63. data/assets/stylesheets/bootstrap/_placeholders.scss +1 -1
  64. data/assets/stylesheets/bootstrap/_popover.scss +90 -52
  65. data/assets/stylesheets/bootstrap/_progress.scss +31 -11
  66. data/assets/stylesheets/bootstrap/_reboot.scss +32 -46
  67. data/assets/stylesheets/bootstrap/_root.scss +155 -22
  68. data/assets/stylesheets/bootstrap/_spinners.scss +38 -22
  69. data/assets/stylesheets/bootstrap/_tables.scss +40 -24
  70. data/assets/stylesheets/bootstrap/_toasts.scss +38 -16
  71. data/assets/stylesheets/bootstrap/_tooltip.scss +60 -56
  72. data/assets/stylesheets/bootstrap/_type.scss +3 -1
  73. data/assets/stylesheets/bootstrap/_utilities.scss +209 -33
  74. data/assets/stylesheets/bootstrap/_variables-dark.scss +102 -0
  75. data/assets/stylesheets/bootstrap/_variables.scss +415 -303
  76. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +39 -5
  77. data/assets/stylesheets/bootstrap/forms/_form-check.scss +51 -14
  78. data/assets/stylesheets/bootstrap/forms/_form-control.scss +36 -41
  79. data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
  80. data/assets/stylesheets/bootstrap/forms/_form-select.scss +12 -4
  81. data/assets/stylesheets/bootstrap/forms/_input-group.scss +20 -9
  82. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
  83. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
  84. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  85. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  86. data/assets/stylesheets/bootstrap/helpers/_position.scss +7 -1
  87. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
  88. data/assets/stylesheets/bootstrap/helpers/_vr.scss +2 -2
  89. data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -4
  90. data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
  91. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +8 -8
  92. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +32 -95
  93. data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
  94. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  95. data/assets/stylesheets/bootstrap/mixins/_container.scss +4 -2
  96. data/assets/stylesheets/bootstrap/mixins/_forms.scss +38 -19
  97. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
  98. data/assets/stylesheets/bootstrap/mixins/_grid.scss +15 -15
  99. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
  100. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +4 -25
  101. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  102. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +12 -9
  103. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +14 -6
  104. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +6 -2
  105. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
  106. data/bootstrap.gemspec +3 -3
  107. data/lib/bootstrap/engine.rb +17 -2
  108. data/lib/bootstrap/version.rb +2 -2
  109. data/tasks/updater/js.rb +10 -5
  110. data/tasks/updater/network.rb +2 -2
  111. data/tasks/updater/scss.rb +2 -2
  112. data/tasks/updater.rb +2 -2
  113. data/test/dummy_rails/config/application.rb +0 -2
  114. data/test/dummy_rails/public/favicon.ico +0 -0
  115. data/test/gemfiles/rails_4_2.gemfile +2 -1
  116. data/test/gemfiles/rails_5_0.gemfile +1 -2
  117. data/test/gemfiles/rails_5_1.gemfile +1 -2
  118. data/test/gemfiles/rails_5_2.gemfile +7 -0
  119. data/test/gemfiles/rails_6_0.gemfile +1 -1
  120. data/test/gemfiles/rails_6_1.gemfile +1 -1
  121. data/test/gemfiles/rails_7_0_dartsass.gemfile +7 -0
  122. data/test/gemfiles/rails_7_0_sassc.gemfile +7 -0
  123. data/test/rails_test.rb +0 -5
  124. data/test/test_helper.rb +3 -2
  125. metadata +49 -29
  126. data/.travis.yml +0 -32
  127. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -18
@@ -1,274 +1,197 @@
1
1
  /*!
2
- * Bootstrap event-handler.js v5.1.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap event-handler.js v5.3.5 (https://getbootstrap.com/)
3
+ * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
- typeof define === 'function' && define.amd ? define(factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory());
10
- })(this, (function () { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index.js')) :
8
+ typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index));
10
+ })(this, (function (index_js) { 'use strict';
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.1.3): util/index.js
14
+ * Bootstrap dom/event-handler.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
18
18
 
19
- const getjQuery = () => {
20
- const {
21
- jQuery
22
- } = window;
23
-
24
- if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
25
- return jQuery;
26
- }
27
-
28
- return null;
29
- };
30
19
 
31
20
  /**
32
- * --------------------------------------------------------------------------
33
- * Bootstrap (v5.1.3): dom/event-handler.js
34
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
35
- * --------------------------------------------------------------------------
36
- */
37
- /**
38
- * ------------------------------------------------------------------------
39
21
  * Constants
40
- * ------------------------------------------------------------------------
41
22
  */
42
23
 
43
24
  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
44
25
  const stripNameRegex = /\..*/;
45
26
  const stripUidRegex = /::\d+$/;
46
27
  const eventRegistry = {}; // Events storage
47
-
48
28
  let uidEvent = 1;
49
29
  const customEvents = {
50
30
  mouseenter: 'mouseover',
51
31
  mouseleave: 'mouseout'
52
32
  };
53
- const customEventsRegex = /^(mouseenter|mouseleave)/i;
54
33
  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
34
+
55
35
  /**
56
- * ------------------------------------------------------------------------
57
36
  * Private methods
58
- * ------------------------------------------------------------------------
59
37
  */
60
38
 
61
- function getUidEvent(element, uid) {
39
+ function makeEventUid(element, uid) {
62
40
  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
63
41
  }
64
-
65
- function getEvent(element) {
66
- const uid = getUidEvent(element);
42
+ function getElementEvents(element) {
43
+ const uid = makeEventUid(element);
67
44
  element.uidEvent = uid;
68
45
  eventRegistry[uid] = eventRegistry[uid] || {};
69
46
  return eventRegistry[uid];
70
47
  }
71
-
72
48
  function bootstrapHandler(element, fn) {
73
49
  return function handler(event) {
74
- event.delegateTarget = element;
75
-
50
+ hydrateObj(event, {
51
+ delegateTarget: element
52
+ });
76
53
  if (handler.oneOff) {
77
54
  EventHandler.off(element, event.type, fn);
78
55
  }
79
-
80
56
  return fn.apply(element, [event]);
81
57
  };
82
58
  }
83
-
84
59
  function bootstrapDelegationHandler(element, selector, fn) {
85
60
  return function handler(event) {
86
61
  const domElements = element.querySelectorAll(selector);
87
-
88
62
  for (let {
89
63
  target
90
64
  } = event; target && target !== this; target = target.parentNode) {
91
- for (let i = domElements.length; i--;) {
92
- if (domElements[i] === target) {
93
- event.delegateTarget = target;
94
-
95
- if (handler.oneOff) {
96
- EventHandler.off(element, event.type, selector, fn);
97
- }
98
-
99
- return fn.apply(target, [event]);
65
+ for (const domElement of domElements) {
66
+ if (domElement !== target) {
67
+ continue;
68
+ }
69
+ hydrateObj(event, {
70
+ delegateTarget: target
71
+ });
72
+ if (handler.oneOff) {
73
+ EventHandler.off(element, event.type, selector, fn);
100
74
  }
75
+ return fn.apply(target, [event]);
101
76
  }
102
- } // To please ESLint
103
-
104
-
105
- return null;
77
+ }
106
78
  };
107
79
  }
108
-
109
- function findHandler(events, handler, delegationSelector = null) {
110
- const uidEventList = Object.keys(events);
111
-
112
- for (let i = 0, len = uidEventList.length; i < len; i++) {
113
- const event = events[uidEventList[i]];
114
-
115
- if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
116
- return event;
117
- }
118
- }
119
-
120
- return null;
80
+ function findHandler(events, callable, delegationSelector = null) {
81
+ return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
121
82
  }
122
-
123
- function normalizeParams(originalTypeEvent, handler, delegationFn) {
124
- const delegation = typeof handler === 'string';
125
- const originalHandler = delegation ? delegationFn : handler;
83
+ function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
84
+ const isDelegated = typeof handler === 'string';
85
+ // TODO: tooltip passes `false` instead of selector, so we need to check
86
+ const callable = isDelegated ? delegationFunction : handler || delegationFunction;
126
87
  let typeEvent = getTypeEvent(originalTypeEvent);
127
- const isNative = nativeEvents.has(typeEvent);
128
-
129
- if (!isNative) {
88
+ if (!nativeEvents.has(typeEvent)) {
130
89
  typeEvent = originalTypeEvent;
131
90
  }
132
-
133
- return [delegation, originalHandler, typeEvent];
91
+ return [isDelegated, callable, typeEvent];
134
92
  }
135
-
136
- function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
93
+ function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
137
94
  if (typeof originalTypeEvent !== 'string' || !element) {
138
95
  return;
139
96
  }
97
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
140
98
 
141
- if (!handler) {
142
- handler = delegationFn;
143
- delegationFn = null;
144
- } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
99
+ // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
145
100
  // this prevents the handler from being dispatched the same way as mouseover or mouseout does
146
-
147
-
148
- if (customEventsRegex.test(originalTypeEvent)) {
149
- const wrapFn = fn => {
101
+ if (originalTypeEvent in customEvents) {
102
+ const wrapFunction = fn => {
150
103
  return function (event) {
151
104
  if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
152
105
  return fn.call(this, event);
153
106
  }
154
107
  };
155
108
  };
156
-
157
- if (delegationFn) {
158
- delegationFn = wrapFn(delegationFn);
159
- } else {
160
- handler = wrapFn(handler);
161
- }
109
+ callable = wrapFunction(callable);
162
110
  }
163
-
164
- const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
165
- const events = getEvent(element);
111
+ const events = getElementEvents(element);
166
112
  const handlers = events[typeEvent] || (events[typeEvent] = {});
167
- const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
168
-
169
- if (previousFn) {
170
- previousFn.oneOff = previousFn.oneOff && oneOff;
113
+ const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
114
+ if (previousFunction) {
115
+ previousFunction.oneOff = previousFunction.oneOff && oneOff;
171
116
  return;
172
117
  }
173
-
174
- const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
175
- const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
176
- fn.delegationSelector = delegation ? handler : null;
177
- fn.originalHandler = originalHandler;
118
+ const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
119
+ const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
120
+ fn.delegationSelector = isDelegated ? handler : null;
121
+ fn.callable = callable;
178
122
  fn.oneOff = oneOff;
179
123
  fn.uidEvent = uid;
180
124
  handlers[uid] = fn;
181
- element.addEventListener(typeEvent, fn, delegation);
125
+ element.addEventListener(typeEvent, fn, isDelegated);
182
126
  }
183
-
184
127
  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
185
128
  const fn = findHandler(events[typeEvent], handler, delegationSelector);
186
-
187
129
  if (!fn) {
188
130
  return;
189
131
  }
190
-
191
132
  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
192
133
  delete events[typeEvent][fn.uidEvent];
193
134
  }
194
-
195
135
  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
196
136
  const storeElementEvent = events[typeEvent] || {};
197
- Object.keys(storeElementEvent).forEach(handlerKey => {
137
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
198
138
  if (handlerKey.includes(namespace)) {
199
- const event = storeElementEvent[handlerKey];
200
- removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
139
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
201
140
  }
202
- });
141
+ }
203
142
  }
204
-
205
143
  function getTypeEvent(event) {
206
144
  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
207
145
  event = event.replace(stripNameRegex, '');
208
146
  return customEvents[event] || event;
209
147
  }
210
-
211
148
  const EventHandler = {
212
- on(element, event, handler, delegationFn) {
213
- addHandler(element, event, handler, delegationFn, false);
149
+ on(element, event, handler, delegationFunction) {
150
+ addHandler(element, event, handler, delegationFunction, false);
214
151
  },
215
-
216
- one(element, event, handler, delegationFn) {
217
- addHandler(element, event, handler, delegationFn, true);
152
+ one(element, event, handler, delegationFunction) {
153
+ addHandler(element, event, handler, delegationFunction, true);
218
154
  },
219
-
220
- off(element, originalTypeEvent, handler, delegationFn) {
155
+ off(element, originalTypeEvent, handler, delegationFunction) {
221
156
  if (typeof originalTypeEvent !== 'string' || !element) {
222
157
  return;
223
158
  }
224
-
225
- const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
159
+ const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
226
160
  const inNamespace = typeEvent !== originalTypeEvent;
227
- const events = getEvent(element);
161
+ const events = getElementEvents(element);
162
+ const storeElementEvent = events[typeEvent] || {};
228
163
  const isNamespace = originalTypeEvent.startsWith('.');
229
-
230
- if (typeof originalHandler !== 'undefined') {
164
+ if (typeof callable !== 'undefined') {
231
165
  // Simplest case: handler is passed, remove that listener ONLY.
232
- if (!events || !events[typeEvent]) {
166
+ if (!Object.keys(storeElementEvent).length) {
233
167
  return;
234
168
  }
235
-
236
- removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
169
+ removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
237
170
  return;
238
171
  }
239
-
240
172
  if (isNamespace) {
241
- Object.keys(events).forEach(elementEvent => {
173
+ for (const elementEvent of Object.keys(events)) {
242
174
  removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
243
- });
175
+ }
244
176
  }
245
-
246
- const storeElementEvent = events[typeEvent] || {};
247
- Object.keys(storeElementEvent).forEach(keyHandlers => {
177
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
248
178
  const handlerKey = keyHandlers.replace(stripUidRegex, '');
249
-
250
179
  if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
251
- const event = storeElementEvent[keyHandlers];
252
- removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
180
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
253
181
  }
254
- });
182
+ }
255
183
  },
256
-
257
184
  trigger(element, event, args) {
258
185
  if (typeof event !== 'string' || !element) {
259
186
  return null;
260
187
  }
261
-
262
- const $ = getjQuery();
188
+ const $ = index_js.getjQuery();
263
189
  const typeEvent = getTypeEvent(event);
264
190
  const inNamespace = event !== typeEvent;
265
- const isNative = nativeEvents.has(typeEvent);
266
- let jQueryEvent;
191
+ let jQueryEvent = null;
267
192
  let bubbles = true;
268
193
  let nativeDispatch = true;
269
194
  let defaultPrevented = false;
270
- let evt = null;
271
-
272
195
  if (inNamespace && $) {
273
196
  jQueryEvent = $.Event(event, args);
274
197
  $(element).trigger(jQueryEvent);
@@ -276,45 +199,37 @@
276
199
  nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
277
200
  defaultPrevented = jQueryEvent.isDefaultPrevented();
278
201
  }
279
-
280
- if (isNative) {
281
- evt = document.createEvent('HTMLEvents');
282
- evt.initEvent(typeEvent, bubbles, true);
283
- } else {
284
- evt = new CustomEvent(event, {
285
- bubbles,
286
- cancelable: true
287
- });
288
- } // merge custom information in our event
289
-
290
-
291
- if (typeof args !== 'undefined') {
292
- Object.keys(args).forEach(key => {
293
- Object.defineProperty(evt, key, {
294
- get() {
295
- return args[key];
296
- }
297
-
298
- });
299
- });
300
- }
301
-
202
+ const evt = hydrateObj(new Event(event, {
203
+ bubbles,
204
+ cancelable: true
205
+ }), args);
302
206
  if (defaultPrevented) {
303
207
  evt.preventDefault();
304
208
  }
305
-
306
209
  if (nativeDispatch) {
307
210
  element.dispatchEvent(evt);
308
211
  }
309
-
310
- if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
212
+ if (evt.defaultPrevented && jQueryEvent) {
311
213
  jQueryEvent.preventDefault();
312
214
  }
313
-
314
215
  return evt;
315
216
  }
316
-
317
217
  };
218
+ function hydrateObj(obj, meta = {}) {
219
+ for (const [key, value] of Object.entries(meta)) {
220
+ try {
221
+ obj[key] = value;
222
+ } catch (_unused) {
223
+ Object.defineProperty(obj, key, {
224
+ configurable: true,
225
+ get() {
226
+ return value;
227
+ }
228
+ });
229
+ }
230
+ }
231
+ return obj;
232
+ }
318
233
 
319
234
  return EventHandler;
320
235
 
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Bootstrap manipulator.js v5.1.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap manipulator.js v5.3.5 (https://getbootstrap.com/)
3
+ * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
@@ -11,76 +11,59 @@
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.1.3): dom/manipulator.js
14
+ * Bootstrap dom/manipulator.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
18
- function normalizeData(val) {
19
- if (val === 'true') {
18
+
19
+ function normalizeData(value) {
20
+ if (value === 'true') {
20
21
  return true;
21
22
  }
22
-
23
- if (val === 'false') {
23
+ if (value === 'false') {
24
24
  return false;
25
25
  }
26
-
27
- if (val === Number(val).toString()) {
28
- return Number(val);
26
+ if (value === Number(value).toString()) {
27
+ return Number(value);
29
28
  }
30
-
31
- if (val === '' || val === 'null') {
29
+ if (value === '' || value === 'null') {
32
30
  return null;
33
31
  }
34
-
35
- return val;
32
+ if (typeof value !== 'string') {
33
+ return value;
34
+ }
35
+ try {
36
+ return JSON.parse(decodeURIComponent(value));
37
+ } catch (_unused) {
38
+ return value;
39
+ }
36
40
  }
37
-
38
41
  function normalizeDataKey(key) {
39
42
  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
40
43
  }
41
-
42
44
  const Manipulator = {
43
45
  setDataAttribute(element, key, value) {
44
46
  element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
45
47
  },
46
-
47
48
  removeDataAttribute(element, key) {
48
49
  element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
49
50
  },
50
-
51
51
  getDataAttributes(element) {
52
52
  if (!element) {
53
53
  return {};
54
54
  }
55
-
56
55
  const attributes = {};
57
- Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
56
+ const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
57
+ for (const key of bsKeys) {
58
58
  let pureKey = key.replace(/^bs/, '');
59
- pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
59
+ pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1);
60
60
  attributes[pureKey] = normalizeData(element.dataset[key]);
61
- });
61
+ }
62
62
  return attributes;
63
63
  },
64
-
65
64
  getDataAttribute(element, key) {
66
65
  return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
67
- },
68
-
69
- offset(element) {
70
- const rect = element.getBoundingClientRect();
71
- return {
72
- top: rect.top + window.pageYOffset,
73
- left: rect.left + window.pageXOffset
74
- };
75
- },
76
-
77
- position(element) {
78
- return {
79
- top: element.offsetTop,
80
- left: element.offsetLeft
81
- };
82
66
  }
83
-
84
67
  };
85
68
 
86
69
  return Manipulator;