bootstrap 5.3.0 → 5.3.2

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +11 -5
  3. data/Gemfile +1 -0
  4. data/README.md +6 -2
  5. data/Rakefile +10 -1
  6. data/assets/javascripts/bootstrap/alert.js +1 -1
  7. data/assets/javascripts/bootstrap/base-component.js +2 -2
  8. data/assets/javascripts/bootstrap/button.js +1 -1
  9. data/assets/javascripts/bootstrap/carousel.js +1 -1
  10. data/assets/javascripts/bootstrap/collapse.js +1 -1
  11. data/assets/javascripts/bootstrap/dom/data.js +1 -1
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +1 -1
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +1 -1
  14. data/assets/javascripts/bootstrap/dom/selector-engine.js +3 -3
  15. data/assets/javascripts/bootstrap/dropdown.js +1 -1
  16. data/assets/javascripts/bootstrap/modal.js +1 -1
  17. data/assets/javascripts/bootstrap/offcanvas.js +1 -1
  18. data/assets/javascripts/bootstrap/popover.js +1 -1
  19. data/assets/javascripts/bootstrap/scrollspy.js +1 -1
  20. data/assets/javascripts/bootstrap/tab.js +13 -5
  21. data/assets/javascripts/bootstrap/toast.js +1 -1
  22. data/assets/javascripts/bootstrap/tooltip.js +1 -1
  23. data/assets/javascripts/bootstrap/util/backdrop.js +1 -1
  24. data/assets/javascripts/bootstrap/util/component-functions.js +1 -1
  25. data/assets/javascripts/bootstrap/util/config.js +1 -1
  26. data/assets/javascripts/bootstrap/util/focustrap.js +1 -1
  27. data/assets/javascripts/bootstrap/util/index.js +1 -1
  28. data/assets/javascripts/bootstrap/util/sanitizer.js +1 -1
  29. data/assets/javascripts/bootstrap/util/scrollbar.js +1 -1
  30. data/assets/javascripts/bootstrap/util/swipe.js +1 -1
  31. data/assets/javascripts/bootstrap/util/template-factory.js +1 -1
  32. data/assets/javascripts/bootstrap-sprockets.js +14 -14
  33. data/assets/javascripts/bootstrap.js +16 -8
  34. data/assets/javascripts/bootstrap.min.js +2 -2
  35. data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
  36. data/assets/stylesheets/bootstrap/_buttons.scss +1 -1
  37. data/assets/stylesheets/bootstrap/_nav.scss +2 -14
  38. data/assets/stylesheets/bootstrap/_reboot.scss +5 -4
  39. data/assets/stylesheets/bootstrap/_root.scss +3 -0
  40. data/assets/stylesheets/bootstrap/_utilities.scss +3 -3
  41. data/assets/stylesheets/bootstrap/_variables-dark.scss +3 -1
  42. data/assets/stylesheets/bootstrap/_variables.scss +21 -17
  43. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +2 -1
  44. data/assets/stylesheets/bootstrap/forms/_form-check.scss +2 -1
  45. data/assets/stylesheets/bootstrap/forms/_form-control.scss +1 -1
  46. data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
  47. data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -1
  48. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +1 -2
  49. data/assets/stylesheets/bootstrap/helpers/_vr.scss +1 -1
  50. data/assets/stylesheets/bootstrap/mixins/_banner.scss +1 -1
  51. data/assets/stylesheets/bootstrap/mixins/_grid.scss +1 -1
  52. data/bootstrap.gemspec +4 -3
  53. data/lib/bootstrap/engine.rb +7 -1
  54. data/lib/bootstrap/version.rb +2 -2
  55. data/tasks/updater/scss.rb +1 -1
  56. data/test/gemfiles/rails_4_2.gemfile +1 -1
  57. data/test/gemfiles/rails_5_0.gemfile +1 -1
  58. data/test/gemfiles/rails_5_1.gemfile +1 -1
  59. data/test/gemfiles/rails_5_2.gemfile +1 -1
  60. data/test/gemfiles/rails_6_0.gemfile +1 -0
  61. data/test/gemfiles/rails_6_1.gemfile +1 -0
  62. data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
  63. data/test/gemfiles/{rails_7_0.gemfile → rails_7_0_sassc.gemfile} +1 -0
  64. metadata +35 -19
  65. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1297df4a046b73652d3beb2a4edea3d3964b185320d890661af5f7ea8f420236
4
- data.tar.gz: 9552130734b9698ce8cf99a92617e8df11664dc1d2bc24a9c1e306de646a1f48
3
+ metadata.gz: 9cc8c9361e6004e1f33ea619081fc68672a49d7f20e8a6bcf53ac8ec12e4c662
4
+ data.tar.gz: e65b879fec0203e16027ed41093bc20d276e202168abec214b9295a04ac0b3a8
5
5
  SHA512:
6
- metadata.gz: 4553a9d115f51a7516243cb392aa9c2f3b1e07f75c315f0400dd62772abd37b907ed3d9b40b37dfd42ec8c1bc809ab60ce7528784485374166d61416df882116
7
- data.tar.gz: e01e045f2dd4616399a52dcef1037f177a625d7141b424b9b793fbc203e6b8315634296189af57fcbb7ad004fed61193be04d1d1101115df0cd1364351bd42b3
6
+ metadata.gz: 94d62cb6112a90a4a97ae631e3895f18650217e67f872565b26efa6a5a3228d223782e0f82a722efc8f0881b60f409c7ba320b2069962436952eeaf0c6b2431d
7
+ data.tar.gz: 8e0c37862c25003c9ba9a8892614050b4d8e82bdb4b902060f3aeb7f7af1dbcb89f89934e43a3f724a672b29eac7c87d2f789435283f9068c238719692159f2d
@@ -1,8 +1,9 @@
1
1
  name: CI
2
2
 
3
3
  on:
4
- push:
5
- pull_request:
4
+ - push
5
+ - pull_request
6
+ - workflow_dispatch
6
7
 
7
8
  jobs:
8
9
  test:
@@ -18,7 +19,8 @@ jobs:
18
19
  - test/gemfiles/rails_5_2.gemfile
19
20
  - test/gemfiles/rails_6_0.gemfile
20
21
  - test/gemfiles/rails_6_1.gemfile
21
- - test/gemfiles/rails_7_0.gemfile
22
+ - test/gemfiles/rails_7_0_sassc.gemfile
23
+ - test/gemfiles/rails_7_0_dartsass.gemfile
22
24
  include:
23
25
  - ruby_version: '2.5'
24
26
  gemfile: test/gemfiles/rails_4_2.gemfile
@@ -26,9 +28,13 @@ jobs:
26
28
  gemfile: test/gemfiles/rails_4_2.gemfile
27
29
  exclude:
28
30
  - ruby_version: '2.5'
29
- gemfile: test/gemfiles/rails_7_0.gemfile
31
+ gemfile: test/gemfiles/rails_7_0_sassc.gemfile
32
+ - ruby_version: '2.5'
33
+ gemfile: test/gemfiles/rails_7_0_dartsass.gemfile
34
+ - ruby_version: '2.6'
35
+ gemfile: test/gemfiles/rails_7_0_sassc.gemfile
30
36
  - ruby_version: '2.6'
31
- gemfile: test/gemfiles/rails_7_0.gemfile
37
+ gemfile: test/gemfiles/rails_7_0_dartsass.gemfile
32
38
  - ruby_version: '3.0'
33
39
  gemfile: test/gemfiles/rails_5_0.gemfile
34
40
  - ruby_version: '3.0'
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ gemspec
4
4
 
5
5
  group :development do
6
6
  gem 'popper_js', '>= 1.12.3'
7
+ gem 'dartsass-sprockets'
7
8
  end
8
9
 
9
10
  group :debug do
data/README.md CHANGED
@@ -21,10 +21,14 @@ Please see the appropriate guide for your environment of choice:
21
21
  Add `bootstrap` to your Gemfile:
22
22
 
23
23
  ```ruby
24
- gem 'bootstrap', '~> 5.3.0'
24
+ gem 'bootstrap', '~> 5.3.2'
25
25
  ```
26
26
 
27
- Ensure that `sprockets-rails` is at least v2.3.2.
27
+ This gem requires a Sass engine, so make sure you have **one** of these two gems in your Gemfile:
28
+ - [`dartsass-sprockets`](https://github.com/tablecheck/dartsass-sprockets): Dart Sass engine, recommended but only works for Ruby 2.6+ and Rails 5+
29
+ - [`sassc-rails`](https://github.com/sass/sassc-rails): SassC engine, deprecated but compatible with Ruby 2.3+ and Rails 4
30
+
31
+ Also ensure that `sprockets-rails` is at least v2.3.2.
28
32
 
29
33
  `bundle install` and restart your server to make the files available through the pipeline.
30
34
 
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'bundler/setup'
2
3
 
3
4
  lib_path = File.join(File.dirname(__FILE__), 'lib')
4
5
  $:.unshift(lib_path) unless $:.include?(lib_path)
@@ -45,12 +46,20 @@ end
45
46
 
46
47
  desc 'Dumps output to a CSS file for testing'
47
48
  task :debug do
48
- require 'sassc'
49
+ begin
50
+ require 'dartsass-ruby'
51
+ rescue LoadError
52
+ require 'sassc'
53
+ rescue LoadError
54
+ raise LoadError.new("bootstrap-rubygem requires a Sass engine. Please add dartsass-sprockets or sassc-rails to your dependencies.")
55
+ end
49
56
  require './lib/bootstrap'
50
57
  require 'term/ansicolor'
51
58
  require 'autoprefixer-rails'
52
59
  path = Bootstrap.stylesheets_path
53
60
  %w(_bootstrap _bootstrap-reboot _bootstrap-grid).each do |file|
61
+ # For ease of upgrading, the root namespace ::SassC is still used by dartsass-sprockets.
62
+ # This is planned to be renamed in a future major version release.
54
63
  engine = SassC::Engine.new(File.read("#{path}/#{file}.scss"), syntax: :scss, load_paths: [path])
55
64
  out = File.join('tmp', "#{file[1..-1]}.css")
56
65
  css = engine.render
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap alert.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap alert.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap base-component.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap base-component.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -21,7 +21,7 @@
21
21
  * Constants
22
22
  */
23
23
 
24
- const VERSION = '5.3.0';
24
+ const VERSION = '5.3.2';
25
25
 
26
26
  /**
27
27
  * Class definition
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap button.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap button.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap carousel.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap carousel.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap collapse.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap collapse.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap data.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap data.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap event-handler.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap event-handler.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap manipulator.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap manipulator.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap selector-engine.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap selector-engine.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -33,9 +33,9 @@
33
33
  if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
34
34
  hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
35
35
  }
36
- selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
36
+ selector = hrefAttribute && hrefAttribute !== '#' ? index_js.parseSelector(hrefAttribute.trim()) : null;
37
37
  }
38
- return index_js.parseSelector(selector);
38
+ return selector;
39
39
  };
40
40
  const SelectorEngine = {
41
41
  find(selector, element = document.documentElement) {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap dropdown.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap modal.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap modal.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap offcanvas.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap offcanvas.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap popover.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap popover.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap scrollspy.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap scrollspy.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap tab.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap tab.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -35,13 +35,15 @@
35
35
  const ARROW_RIGHT_KEY = 'ArrowRight';
36
36
  const ARROW_UP_KEY = 'ArrowUp';
37
37
  const ARROW_DOWN_KEY = 'ArrowDown';
38
+ const HOME_KEY = 'Home';
39
+ const END_KEY = 'End';
38
40
  const CLASS_NAME_ACTIVE = 'active';
39
41
  const CLASS_NAME_FADE = 'fade';
40
42
  const CLASS_NAME_SHOW = 'show';
41
43
  const CLASS_DROPDOWN = 'dropdown';
42
44
  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
43
45
  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
44
- const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';
46
+ const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
45
47
  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
46
48
  const SELECTOR_OUTER = '.nav-item, .list-group-item';
47
49
  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
@@ -141,13 +143,19 @@
141
143
  this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
142
144
  }
143
145
  _keydown(event) {
144
- if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
146
+ if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
145
147
  return;
146
148
  }
147
149
  event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
148
150
  event.preventDefault();
149
- const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
150
- const nextActiveElement = index_js.getNextActiveElement(this._getChildren().filter(element => !index_js.isDisabled(element)), event.target, isNext, true);
151
+ const children = this._getChildren().filter(element => !index_js.isDisabled(element));
152
+ let nextActiveElement;
153
+ if ([HOME_KEY, END_KEY].includes(event.key)) {
154
+ nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
155
+ } else {
156
+ const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
157
+ nextActiveElement = index_js.getNextActiveElement(children, event.target, isNext, true);
158
+ }
151
159
  if (nextActiveElement) {
152
160
  nextActiveElement.focus({
153
161
  preventScroll: true
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap toast.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap toast.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap tooltip.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap tooltip.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap backdrop.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap backdrop.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap component-functions.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap component-functions.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap config.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap config.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap focustrap.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap focustrap.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap index.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap index.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap sanitizer.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap sanitizer.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap scrollbar.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap scrollbar.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap swipe.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap swipe.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap template-factory.js v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap template-factory.js v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -1,28 +1,28 @@
1
1
  //= require ./bootstrap-global-this-define
2
- //= require ./bootstrap/dom/manipulator
3
2
  //= require ./bootstrap/dom/data
4
3
  //= require ./bootstrap/util/index
5
4
  //= require ./bootstrap/dom/event-handler
5
+ //= require ./bootstrap/dom/manipulator
6
6
  //= require ./bootstrap/util/config
7
7
  //= require ./bootstrap/base-component
8
8
  //= require ./bootstrap/dom/selector-engine
9
- //= require ./bootstrap/util/component-functions
10
- //= require ./bootstrap/toast
11
- //= require ./bootstrap/button
12
- //= require ./bootstrap/alert
9
+ //= require ./bootstrap/collapse
13
10
  //= require ./bootstrap/util/sanitizer
14
- //= require ./bootstrap/util/template-factory
15
- //= require ./bootstrap/util/swipe
16
- //= require ./bootstrap/carousel
17
- //= require ./bootstrap/tooltip
18
- //= require ./bootstrap/util/focustrap
19
11
  //= require ./bootstrap/util/backdrop
20
12
  //= require ./bootstrap/util/scrollbar
13
+ //= require ./bootstrap/util/component-functions
14
+ //= require ./bootstrap/util/focustrap
15
+ //= require ./bootstrap/modal
16
+ //= require ./bootstrap/util/template-factory
17
+ //= require ./bootstrap/tooltip
21
18
  //= require ./bootstrap/offcanvas
19
+ //= require ./bootstrap/util/swipe
20
+ //= require ./bootstrap/toast
21
+ //= require ./bootstrap/button
22
+ //= require ./bootstrap/alert
22
23
  //= require ./bootstrap/popover
23
- //= require ./bootstrap/modal
24
- //= require ./bootstrap/tab
25
- //= require ./bootstrap/dropdown
26
- //= require ./bootstrap/collapse
27
24
  //= require ./bootstrap/scrollspy
25
+ //= require ./bootstrap/dropdown
26
+ //= require ./bootstrap/tab
27
+ //= require ./bootstrap/carousel
28
28
  //= require ./bootstrap-global-this-undefine
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap v5.3.0 (https://getbootstrap.com/)
2
+ * Bootstrap v5.3.2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2023 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
  */
@@ -667,7 +667,7 @@
667
667
  * Constants
668
668
  */
669
669
 
670
- const VERSION = '5.3.0';
670
+ const VERSION = '5.3.2';
671
671
 
672
672
  /**
673
673
  * Class definition
@@ -748,9 +748,9 @@
748
748
  if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
749
749
  hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
750
750
  }
751
- selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
751
+ selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;
752
752
  }
753
- return parseSelector(selector);
753
+ return selector;
754
754
  };
755
755
  const SelectorEngine = {
756
756
  find(selector, element = document.documentElement) {
@@ -4038,13 +4038,15 @@
4038
4038
  const ARROW_RIGHT_KEY = 'ArrowRight';
4039
4039
  const ARROW_UP_KEY = 'ArrowUp';
4040
4040
  const ARROW_DOWN_KEY = 'ArrowDown';
4041
+ const HOME_KEY = 'Home';
4042
+ const END_KEY = 'End';
4041
4043
  const CLASS_NAME_ACTIVE = 'active';
4042
4044
  const CLASS_NAME_FADE$1 = 'fade';
4043
4045
  const CLASS_NAME_SHOW$1 = 'show';
4044
4046
  const CLASS_DROPDOWN = 'dropdown';
4045
4047
  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
4046
4048
  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
4047
- const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';
4049
+ const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
4048
4050
  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
4049
4051
  const SELECTOR_OUTER = '.nav-item, .list-group-item';
4050
4052
  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
@@ -4144,13 +4146,19 @@
4144
4146
  this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
4145
4147
  }
4146
4148
  _keydown(event) {
4147
- if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
4149
+ if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
4148
4150
  return;
4149
4151
  }
4150
4152
  event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
4151
4153
  event.preventDefault();
4152
- const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
4153
- const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);
4154
+ const children = this._getChildren().filter(element => !isDisabled(element));
4155
+ let nextActiveElement;
4156
+ if ([HOME_KEY, END_KEY].includes(event.key)) {
4157
+ nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
4158
+ } else {
4159
+ const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
4160
+ nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
4161
+ }
4154
4162
  if (nextActiveElement) {
4155
4163
  nextActiveElement.focus({
4156
4164
  preventScroll: true