bootstrap 5.0.0.alpha2 → 5.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  5. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  6. data/assets/javascripts/bootstrap-sprockets.js +10 -7
  7. data/assets/javascripts/bootstrap.js +2554 -2564
  8. data/assets/javascripts/bootstrap.min.js +3 -3
  9. data/assets/javascripts/bootstrap/alert.js +119 -115
  10. data/assets/javascripts/bootstrap/base-component.js +63 -0
  11. data/assets/javascripts/bootstrap/button.js +67 -69
  12. data/assets/javascripts/bootstrap/carousel.js +340 -331
  13. data/assets/javascripts/bootstrap/collapse.js +214 -209
  14. data/assets/javascripts/bootstrap/dom/data.js +35 -48
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +105 -98
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +26 -34
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +28 -41
  18. data/assets/javascripts/bootstrap/dropdown.js +392 -325
  19. data/assets/javascripts/bootstrap/modal.js +492 -434
  20. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  21. data/assets/javascripts/bootstrap/popover.js +114 -132
  22. data/assets/javascripts/bootstrap/scrollspy.js +172 -180
  23. data/assets/javascripts/bootstrap/tab.js +168 -144
  24. data/assets/javascripts/bootstrap/toast.js +141 -150
  25. data/assets/javascripts/bootstrap/tooltip.js +466 -452
  26. data/assets/stylesheets/_bootstrap-grid.scss +9 -9
  27. data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
  28. data/assets/stylesheets/_bootstrap.scss +5 -3
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +10 -3
  31. data/assets/stylesheets/bootstrap/_breadcrumb.scss +2 -4
  32. data/assets/stylesheets/bootstrap/_button-group.scss +5 -7
  33. data/assets/stylesheets/bootstrap/_buttons.scss +2 -15
  34. data/assets/stylesheets/bootstrap/_card.scss +2 -29
  35. data/assets/stylesheets/bootstrap/_carousel.scss +35 -18
  36. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  37. data/assets/stylesheets/bootstrap/_dropdown.scss +33 -29
  38. data/assets/stylesheets/bootstrap/_forms.scss +1 -1
  39. data/assets/stylesheets/bootstrap/_functions.scss +11 -12
  40. data/assets/stylesheets/bootstrap/_list-group.scss +23 -6
  41. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  42. data/assets/stylesheets/bootstrap/_modal.scss +2 -9
  43. data/assets/stylesheets/bootstrap/_nav.scss +12 -0
  44. data/assets/stylesheets/bootstrap/_navbar.scss +15 -2
  45. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  46. data/assets/stylesheets/bootstrap/_pagination.scss +3 -3
  47. data/assets/stylesheets/bootstrap/_popover.scss +10 -22
  48. data/assets/stylesheets/bootstrap/_progress.scss +4 -1
  49. data/assets/stylesheets/bootstrap/_reboot.scss +48 -44
  50. data/assets/stylesheets/bootstrap/_root.scss +5 -5
  51. data/assets/stylesheets/bootstrap/_spinners.scss +18 -5
  52. data/assets/stylesheets/bootstrap/_tables.scss +15 -16
  53. data/assets/stylesheets/bootstrap/_toasts.scss +15 -12
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +12 -12
  55. data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
  56. data/assets/stylesheets/bootstrap/_utilities.scss +133 -70
  57. data/assets/stylesheets/bootstrap/_variables.scss +363 -207
  58. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +5 -5
  59. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-check.scss +21 -11
  61. data/assets/stylesheets/bootstrap/forms/_form-control.scss +112 -9
  62. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -46
  63. data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -16
  64. data/assets/stylesheets/bootstrap/forms/_input-group.scss +21 -40
  65. data/assets/stylesheets/bootstrap/forms/_validation.scss +1 -1
  66. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
  67. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
  68. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +1 -1
  69. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -1
  70. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -6
  71. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +10 -5
  72. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -6
  73. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  74. data/assets/stylesheets/bootstrap/mixins/_container.scss +2 -4
  75. data/assets/stylesheets/bootstrap/mixins/_forms.scss +26 -22
  76. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +5 -1
  77. data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -13
  78. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -1
  79. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +5 -3
  80. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +7 -7
  81. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +19 -0
  82. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +3 -2
  83. data/assets/stylesheets/bootstrap/utilities/_api.scss +1 -1
  84. data/bootstrap.gemspec +1 -3
  85. data/lib/bootstrap/version.rb +2 -2
  86. data/tasks/updater/js.rb +20 -5
  87. data/tasks/updater/network.rb +7 -1
  88. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  89. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  90. data/test/dummy_rails/app/views/pages/root.html +89 -0
  91. data/test/dummy_rails/config/application.rb +0 -3
  92. data/test/gemfiles/rails_6_1.gemfile +7 -0
  93. metadata +20 -40
  94. data/assets/javascripts/bootstrap/dom/polyfill.js +0 -110
  95. data/assets/stylesheets/bootstrap/forms/_form-file.scss +0 -91
  96. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -9,8 +9,7 @@
9
9
  height: $btn-close-height;
10
10
  padding: $btn-close-padding-y $btn-close-padding-x;
11
11
  color: $btn-close-color;
12
- background: transparent escape-svg($btn-close-bg) no-repeat center center / $btn-close-width auto; // include transparent for button elements
13
- background-clip: content-box;
12
+ background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
14
13
  border: 0; // for button elements
15
14
  @include border-radius();
16
15
  opacity: $btn-close-opacity;
@@ -23,7 +22,7 @@
23
22
  }
24
23
 
25
24
  &:focus {
26
- outline: none;
25
+ outline: 0;
27
26
  box-shadow: $btn-close-focus-shadow;
28
27
  opacity: $btn-close-focus-opacity;
29
28
  }
@@ -1,8 +1,8 @@
1
1
  // The dropdown wrapper (`<div>`)
2
2
  .dropup,
3
- .dropright,
3
+ .dropend,
4
4
  .dropdown,
5
- .dropleft {
5
+ .dropstart {
6
6
  position: relative;
7
7
  }
8
8
 
@@ -16,13 +16,11 @@
16
16
  // The dropdown menu
17
17
  .dropdown-menu {
18
18
  position: absolute;
19
- top: 100%;
20
- left: 0;
21
19
  z-index: $zindex-dropdown;
22
20
  display: none; // none by default, but block on "open" of the menu
23
21
  min-width: $dropdown-min-width;
24
22
  padding: $dropdown-padding-y $dropdown-padding-x;
25
- margin: $dropdown-spacer 0 0; // override default ul
23
+ margin: 0; // Override default margin of ul
26
24
  @include font-size($dropdown-font-size);
27
25
  color: $dropdown-color;
28
26
  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
@@ -32,21 +30,38 @@
32
30
  border: $dropdown-border-width solid $dropdown-border-color;
33
31
  @include border-radius($dropdown-border-radius);
34
32
  @include box-shadow($dropdown-box-shadow);
33
+
34
+ &[data-bs-popper] {
35
+ top: 100%;
36
+ left: 0;
37
+ margin-top: $dropdown-spacer;
38
+ }
35
39
  }
36
40
 
37
41
  // scss-docs-start responsive-breakpoints
42
+ // We deliberately hardcode the `bs-` prefix because we check
43
+ // this custom property in JS to determine Popper's positioning
44
+
38
45
  @each $breakpoint in map-keys($grid-breakpoints) {
39
46
  @include media-breakpoint-up($breakpoint) {
40
47
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
41
48
 
42
- .dropdown-menu#{$infix}-left {
43
- right: auto;
44
- left: 0;
49
+ .dropdown-menu#{$infix}-start {
50
+ --bs-position: start;
51
+
52
+ &[data-bs-popper] {
53
+ right: auto #{"/* rtl:ignore */"};
54
+ left: 0 #{"/* rtl:ignore */"};
55
+ }
45
56
  }
46
57
 
47
- .dropdown-menu#{$infix}-right {
48
- right: 0;
49
- left: auto;
58
+ .dropdown-menu#{$infix}-end {
59
+ --bs-position: end;
60
+
61
+ &[data-bs-popper] {
62
+ right: 0 #{"/* rtl:ignore */"};
63
+ left: auto #{"/* rtl:ignore */"};
64
+ }
50
65
  }
51
66
  }
52
67
  }
@@ -55,7 +70,7 @@
55
70
  // Allow for dropdowns to go bottom up (aka, dropup-menu)
56
71
  // Just add .dropup after the standard .dropdown class and you're set.
57
72
  .dropup {
58
- .dropdown-menu {
73
+ .dropdown-menu[data-bs-popper] {
59
74
  top: auto;
60
75
  bottom: 100%;
61
76
  margin-top: 0;
@@ -67,8 +82,8 @@
67
82
  }
68
83
  }
69
84
 
70
- .dropright {
71
- .dropdown-menu {
85
+ .dropend {
86
+ .dropdown-menu[data-bs-popper] {
72
87
  top: 0;
73
88
  right: auto;
74
89
  left: 100%;
@@ -77,15 +92,15 @@
77
92
  }
78
93
 
79
94
  .dropdown-toggle {
80
- @include caret(right);
95
+ @include caret(end);
81
96
  &::after {
82
97
  vertical-align: 0;
83
98
  }
84
99
  }
85
100
  }
86
101
 
87
- .dropleft {
88
- .dropdown-menu {
102
+ .dropstart {
103
+ .dropdown-menu[data-bs-popper] {
89
104
  top: 0;
90
105
  right: 100%;
91
106
  left: auto;
@@ -94,24 +109,13 @@
94
109
  }
95
110
 
96
111
  .dropdown-toggle {
97
- @include caret(left);
112
+ @include caret(start);
98
113
  &::before {
99
114
  vertical-align: 0;
100
115
  }
101
116
  }
102
117
  }
103
118
 
104
- // When enabled Popper.js, reset basic dropdown position
105
- // stylelint-disable-next-line no-duplicate-selectors
106
- .dropdown-menu {
107
- &[x-placement^="top"],
108
- &[x-placement^="right"],
109
- &[x-placement^="bottom"],
110
- &[x-placement^="left"] {
111
- right: auto;
112
- bottom: auto;
113
- }
114
- }
115
119
 
116
120
  // Dividers (basically an `<hr>`) within the dropdown
117
121
  .dropdown-divider {
@@ -3,7 +3,7 @@
3
3
  @import "forms/form-control";
4
4
  @import "forms/form-select";
5
5
  @import "forms/form-check";
6
- @import "forms/form-file";
7
6
  @import "forms/form-range";
7
+ @import "forms/floating-labels";
8
8
  @import "forms/input-group";
9
9
  @import "forms/validation";
@@ -150,23 +150,22 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
150
150
  @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100);
151
151
  }
152
152
 
153
- // Request a color level
154
- // scss-docs-start color-level
155
- @function color-level($color: $primary, $level: 0) {
156
- $color-base: if($level > 0, $black, $white);
157
- $level: abs($level);
158
-
159
- @return mix($color-base, $color, $level * $theme-color-interval);
153
+ // scss-docs-start color-functions
154
+ // Tint a color: mix a color with white
155
+ @function tint-color($color, $weight) {
156
+ @return mix(white, $color, $weight);
160
157
  }
161
- // scss-docs-end color-level
162
158
 
163
- @function tint-color($color, $level) {
164
- @return mix(white, $color, $level * $theme-color-interval);
159
+ // Shade a color: mix a color with black
160
+ @function shade-color($color, $weight) {
161
+ @return mix(black, $color, $weight);
165
162
  }
166
163
 
167
- @function shade-color($color, $level) {
168
- @return mix(black, $color, $level * $theme-color-interval);
164
+ // Shade the color if the weight is positive, else tint it
165
+ @function shift-color($color, $weight) {
166
+ @return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));
169
167
  }
168
+ // scss-docs-end color-functions
170
169
 
171
170
  // Return valid calc
172
171
  @function add($value1, $value2, $return-calc: true) {
@@ -12,6 +12,17 @@
12
12
  @include border-radius($list-group-border-radius);
13
13
  }
14
14
 
15
+ .list-group-numbered {
16
+ list-style-type: none;
17
+ counter-reset: section;
18
+
19
+ > li::before {
20
+ // Increments only this instance of the section counter
21
+ content: counters(section, ".") ". ";
22
+ counter-increment: section;
23
+ }
24
+ }
25
+
15
26
 
16
27
  // Interactive list items
17
28
  //
@@ -99,13 +110,13 @@
99
110
 
100
111
  > .list-group-item {
101
112
  &:first-child {
102
- @include border-bottom-left-radius($list-group-border-radius);
103
- @include border-top-right-radius(0);
113
+ @include border-bottom-start-radius($list-group-border-radius);
114
+ @include border-top-end-radius(0);
104
115
  }
105
116
 
106
117
  &:last-child {
107
- @include border-top-right-radius($list-group-border-radius);
108
- @include border-bottom-left-radius(0);
118
+ @include border-top-end-radius($list-group-border-radius);
119
+ @include border-bottom-start-radius(0);
109
120
  }
110
121
 
111
122
  &.active {
@@ -151,7 +162,13 @@
151
162
  // Add modifier classes to change text and background color on individual items.
152
163
  // Organizationally, this must come after the `:hover` states.
153
164
 
154
- @each $color, $value in $theme-colors {
155
- @include list-group-item-variant($color, color-level($value, $list-group-item-bg-level), color-level($value, $list-group-item-color-level));
165
+ @each $state, $value in $theme-colors {
166
+ $list-group-background: shift-color($value, $list-group-item-bg-scale);
167
+ $list-group-color: shift-color($value, $list-group-item-color-scale);
168
+ @if (contrast-ratio($list-group-background, $list-group-color) < $min-contrast-ratio) {
169
+ $list-group-color: mix($value, color-contrast($list-group-background), abs($list-group-item-color-scale));
170
+ }
171
+
172
+ @include list-group-item-variant($state, $list-group-background, $list-group-color);
156
173
  }
157
174
  // scss-docs-end list-group-modifiers
@@ -10,6 +10,7 @@
10
10
 
11
11
  // Helpers
12
12
  @import "mixins/breakpoints";
13
+ @import "mixins/color-scheme";
13
14
  @import "mixins/image";
14
15
  @import "mixins/resize";
15
16
  @import "mixins/visually-hidden";
@@ -159,15 +159,6 @@
159
159
  }
160
160
  }
161
161
 
162
- // Measure scrollbar width for padding body during modal show/hide
163
- .modal-scrollbar-measure {
164
- position: absolute;
165
- top: -9999px;
166
- width: 50px;
167
- height: 50px;
168
- overflow: scroll;
169
- }
170
-
171
162
  // Scale up the modal
172
163
  @include media-breakpoint-up(sm) {
173
164
  // Automatically set modal's width for larger viewports
@@ -202,6 +193,7 @@
202
193
  .modal-xl { max-width: $modal-xl; }
203
194
  }
204
195
 
196
+ // scss-docs-start modal-fullscreen-loop
205
197
  @each $breakpoint in map-keys($grid-breakpoints) {
206
198
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
207
199
  $postfix: if($infix != "", $infix + "-down", "");
@@ -233,3 +225,4 @@
233
225
  }
234
226
  }
235
227
  }
228
+ // scss-docs-end modal-fullscreen-loop
@@ -43,12 +43,15 @@
43
43
 
44
44
  .nav-link {
45
45
  margin-bottom: -$nav-tabs-border-width;
46
+ background: none;
46
47
  border: $nav-tabs-border-width solid transparent;
47
48
  @include border-top-radius($nav-tabs-border-radius);
48
49
 
49
50
  &:hover,
50
51
  &:focus {
51
52
  border-color: $nav-tabs-link-hover-border-color;
53
+ // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
54
+ isolation: isolate;
52
55
  }
53
56
 
54
57
  &.disabled {
@@ -80,6 +83,8 @@
80
83
 
81
84
  .nav-pills {
82
85
  .nav-link {
86
+ background: none;
87
+ border: 0;
83
88
  @include border-radius($nav-pills-border-radius);
84
89
  }
85
90
 
@@ -112,6 +117,13 @@
112
117
  }
113
118
  }
114
119
 
120
+ .nav-fill,
121
+ .nav-justified {
122
+ .nav-item .nav-link {
123
+ width: 100%; // Make sure button will grow
124
+ }
125
+ }
126
+
115
127
 
116
128
  // Tabbable tabs
117
129
  //
@@ -56,7 +56,7 @@
56
56
  .navbar-brand {
57
57
  padding-top: $navbar-brand-padding-y;
58
58
  padding-bottom: $navbar-brand-padding-y;
59
- margin-right: $navbar-brand-margin-right;
59
+ margin-right: $navbar-brand-margin-end;
60
60
  @include font-size($navbar-brand-font-size);
61
61
  text-decoration: if($link-decoration == none, null, none);
62
62
  white-space: nowrap;
@@ -109,10 +109,11 @@
109
109
  // the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
110
110
  // on the `.navbar` parent.
111
111
  .navbar-collapse {
112
+ flex-basis: 100%;
113
+ flex-grow: 1;
112
114
  // For always expanded or extra full navbars, ensure content aligns itself
113
115
  // properly vertically. Can be easily overridden with flex utilities.
114
116
  align-items: center;
115
- width: 100%;
116
117
  }
117
118
 
118
119
  // Button for toggling the navbar when in its collapsed state
@@ -148,6 +149,12 @@
148
149
  background-size: 100%;
149
150
  }
150
151
 
152
+ .navbar-nav-scroll {
153
+ max-height: var(--#{$variable-prefix}scroll-height, 75vh);
154
+ overflow-y: auto;
155
+ }
156
+
157
+ // scss-docs-start navbar-expand-loop
151
158
  // Generate series of `.navbar-expand-*` responsive classes for configuring
152
159
  // where your navbar collapses.
153
160
  .navbar-expand {
@@ -174,8 +181,13 @@
174
181
  }
175
182
  }
176
183
 
184
+ .navbar-nav-scroll {
185
+ overflow: visible;
186
+ }
187
+
177
188
  .navbar-collapse {
178
189
  display: flex !important; // stylelint-disable-line declaration-no-important
190
+ flex-basis: auto;
179
191
  }
180
192
 
181
193
  .navbar-toggler {
@@ -185,6 +197,7 @@
185
197
  }
186
198
  }
187
199
  }
200
+ // scss-docs-end navbar-expand-loop
188
201
 
189
202
 
190
203
  // Navbar themes
@@ -0,0 +1,77 @@
1
+ .offcanvas {
2
+ position: fixed;
3
+ bottom: 0;
4
+ z-index: $zindex-offcanvas;
5
+ display: flex;
6
+ flex-direction: column;
7
+ max-width: 100%;
8
+ color: $offcanvas-color;
9
+ visibility: hidden;
10
+ background-color: $offcanvas-bg-color;
11
+ background-clip: padding-box;
12
+ outline: 0;
13
+ @include box-shadow($offcanvas-box-shadow);
14
+ @include transition(transform $offcanvas-transition-duration ease-in-out);
15
+ }
16
+
17
+ .offcanvas-header {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: space-between;
21
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
22
+
23
+ .btn-close {
24
+ padding: ($offcanvas-padding-y / 2) ($offcanvas-padding-x / 2);
25
+ margin: ($offcanvas-padding-y / -2) ($offcanvas-padding-x / -2) ($offcanvas-padding-y / -2) auto;
26
+ }
27
+ }
28
+
29
+ .offcanvas-title {
30
+ margin-bottom: 0;
31
+ line-height: $offcanvas-title-line-height;
32
+ }
33
+
34
+ .offcanvas-body {
35
+ flex-grow: 1;
36
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
37
+ overflow-y: auto;
38
+ }
39
+
40
+ .offcanvas-start {
41
+ top: 0;
42
+ left: 0;
43
+ width: $offcanvas-horizontal-width;
44
+ border-right: $offcanvas-border-width solid $offcanvas-border-color;
45
+ transform: translateX(-100%);
46
+ }
47
+
48
+ .offcanvas-end {
49
+ top: 0;
50
+ right: 0;
51
+ width: $offcanvas-horizontal-width;
52
+ border-left: $offcanvas-border-width solid $offcanvas-border-color;
53
+ transform: translateX(100%);
54
+ }
55
+
56
+ .offcanvas-top {
57
+ top: 0;
58
+ right: 0;
59
+ left: 0;
60
+ height: $offcanvas-vertical-height;
61
+ max-height: 100%;
62
+ border-bottom: $offcanvas-border-width solid $offcanvas-border-color;
63
+ transform: translateY(-100%);
64
+ }
65
+
66
+ .offcanvas-bottom {
67
+ right: 0;
68
+ left: 0;
69
+ height: $offcanvas-vertical-height;
70
+ max-height: 100%;
71
+ border-top: $offcanvas-border-width solid $offcanvas-border-color;
72
+ transform: translateY(100%);
73
+ }
74
+
75
+ .offcanvas.show {
76
+ transform: none;
77
+ }