bootstrap 4.3.1 → 4.5.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.

Potentially problematic release.


This version of bootstrap might be problematic. Click here for more details.

Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +1 -1
  5. data/assets/javascripts/bootstrap/alert.js +26 -35
  6. data/assets/javascripts/bootstrap/button.js +93 -52
  7. data/assets/javascripts/bootstrap/carousel.js +122 -120
  8. data/assets/javascripts/bootstrap/collapse.js +75 -71
  9. data/assets/javascripts/bootstrap/dropdown.js +143 -140
  10. data/assets/javascripts/bootstrap/modal.js +165 -134
  11. data/assets/javascripts/bootstrap/popover.js +47 -39
  12. data/assets/javascripts/bootstrap/scrollspy.js +71 -71
  13. data/assets/javascripts/bootstrap/tab.js +51 -60
  14. data/assets/javascripts/bootstrap/toast.js +84 -72
  15. data/assets/javascripts/bootstrap/tooltip.js +141 -131
  16. data/assets/javascripts/bootstrap/util.js +28 -7
  17. data/assets/javascripts/bootstrap-sprockets.js +6 -6
  18. data/assets/javascripts/bootstrap.js +811 -826
  19. data/assets/javascripts/bootstrap.min.js +3 -3
  20. data/assets/stylesheets/_bootstrap-grid.scss +3 -3
  21. data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
  22. data/assets/stylesheets/_bootstrap.scss +3 -3
  23. data/assets/stylesheets/bootstrap/_badge.scss +1 -1
  24. data/assets/stylesheets/bootstrap/_breadcrumb.scss +4 -1
  25. data/assets/stylesheets/bootstrap/_button-group.scss +1 -1
  26. data/assets/stylesheets/bootstrap/_buttons.scss +13 -8
  27. data/assets/stylesheets/bootstrap/_card.scss +28 -35
  28. data/assets/stylesheets/bootstrap/_carousel.scss +6 -6
  29. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  30. data/assets/stylesheets/bootstrap/_code.scss +1 -1
  31. data/assets/stylesheets/bootstrap/_custom-forms.scss +24 -9
  32. data/assets/stylesheets/bootstrap/_dropdown.scss +5 -4
  33. data/assets/stylesheets/bootstrap/_forms.scss +26 -9
  34. data/assets/stylesheets/bootstrap/_functions.scss +60 -5
  35. data/assets/stylesheets/bootstrap/_grid.scss +33 -8
  36. data/assets/stylesheets/bootstrap/_images.scss +2 -2
  37. data/assets/stylesheets/bootstrap/_input-group.scss +1 -2
  38. data/assets/stylesheets/bootstrap/_list-group.scss +36 -31
  39. data/assets/stylesheets/bootstrap/_mixins.scss +3 -3
  40. data/assets/stylesheets/bootstrap/_modal.scss +28 -16
  41. data/assets/stylesheets/bootstrap/_nav.scss +4 -3
  42. data/assets/stylesheets/bootstrap/_navbar.scss +45 -15
  43. data/assets/stylesheets/bootstrap/_pagination.scss +3 -2
  44. data/assets/stylesheets/bootstrap/_popover.scss +8 -9
  45. data/assets/stylesheets/bootstrap/_print.scss +2 -2
  46. data/assets/stylesheets/bootstrap/_progress.scss +6 -2
  47. data/assets/stylesheets/bootstrap/_reboot.scss +24 -27
  48. data/assets/stylesheets/bootstrap/_root.scss +1 -0
  49. data/assets/stylesheets/bootstrap/_spinners.scss +1 -0
  50. data/assets/stylesheets/bootstrap/_tables.scss +3 -3
  51. data/assets/stylesheets/bootstrap/_type.scss +2 -2
  52. data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
  53. data/assets/stylesheets/bootstrap/_variables.scss +46 -22
  54. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
  55. data/assets/stylesheets/bootstrap/mixins/_badge.scss +1 -1
  56. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +26 -13
  57. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +11 -8
  58. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  59. data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -3
  60. data/assets/stylesheets/bootstrap/mixins/_forms.scss +34 -49
  61. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +30 -15
  62. data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -0
  63. data/assets/stylesheets/bootstrap/mixins/_hover.scss +4 -4
  64. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -1
  65. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
  66. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  67. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -1
  68. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  69. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +3 -2
  70. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +1 -1
  71. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +3 -2
  72. data/assets/stylesheets/bootstrap/mixins/_transition.scss +17 -7
  73. data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
  74. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  75. data/assets/stylesheets/bootstrap/utilities/_text.scss +3 -4
  76. data/bootstrap.gemspec +1 -1
  77. data/lib/bootstrap/version.rb +2 -2
  78. data/tasks/updater/network.rb +2 -2
  79. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  80. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  81. data/test/gemfiles/rails_6_0.gemfile +7 -0
  82. data/test/support/dummy_rails_integration.rb +3 -1
  83. data/test/test_helper.rb +18 -13
  84. metadata +11 -5
@@ -48,14 +48,19 @@
48
48
  .modal.show & {
49
49
  transform: $modal-show-transform;
50
50
  }
51
+
52
+ // When trying to close, animate focus to scale
53
+ .modal.modal-static & {
54
+ transform: $modal-scale-transform;
55
+ }
51
56
  }
52
57
 
53
58
  .modal-dialog-scrollable {
54
59
  display: flex; // IE10/11
55
- max-height: calc(100% - #{$modal-dialog-margin * 2});
60
+ max-height: subtract(100%, $modal-dialog-margin * 2);
56
61
 
57
62
  .modal-content {
58
- max-height: calc(100vh - #{$modal-dialog-margin * 2}); // IE10/11
63
+ max-height: subtract(100vh, $modal-dialog-margin * 2); // IE10/11
59
64
  overflow: hidden;
60
65
  }
61
66
 
@@ -72,12 +77,13 @@
72
77
  .modal-dialog-centered {
73
78
  display: flex;
74
79
  align-items: center;
75
- min-height: calc(100% - #{$modal-dialog-margin * 2});
80
+ min-height: subtract(100%, $modal-dialog-margin * 2);
76
81
 
77
82
  // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)
78
83
  &::before {
79
84
  display: block; // IE10
80
- height: calc(100vh - #{$modal-dialog-margin * 2});
85
+ height: subtract(100vh, $modal-dialog-margin * 2);
86
+ height: min-content; // Reset height to 0 except on IE
81
87
  content: "";
82
88
  }
83
89
 
@@ -138,7 +144,7 @@
138
144
  justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
139
145
  padding: $modal-header-padding;
140
146
  border-bottom: $modal-header-border-width solid $modal-header-border-color;
141
- @include border-top-radius($modal-content-border-radius);
147
+ @include border-top-radius($modal-content-inner-border-radius);
142
148
 
143
149
  .close {
144
150
  padding: $modal-header-padding;
@@ -158,7 +164,7 @@
158
164
  .modal-body {
159
165
  position: relative;
160
166
  // Enable `flex-grow: 1` so that the body take up as much space as possible
161
- // when should there be a fixed height on `.modal-dialog`.
167
+ // when there should be a fixed height on `.modal-dialog`.
162
168
  flex: 1 1 auto;
163
169
  padding: $modal-inner-padding;
164
170
  }
@@ -166,15 +172,20 @@
166
172
  // Footer (for actions)
167
173
  .modal-footer {
168
174
  display: flex;
175
+ flex-wrap: wrap;
169
176
  align-items: center; // vertically center
170
177
  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
171
- padding: $modal-inner-padding;
178
+ padding: $modal-inner-padding - $modal-footer-margin-between / 2;
172
179
  border-top: $modal-footer-border-width solid $modal-footer-border-color;
173
- @include border-bottom-radius($modal-content-border-radius);
174
-
175
- // Easily place margin between footer elements
176
- > :not(:first-child) { margin-left: .25rem; }
177
- > :not(:last-child) { margin-right: .25rem; }
180
+ @include border-bottom-radius($modal-content-inner-border-radius);
181
+
182
+ // Place margin between footer elements
183
+ // This solution is far from ideal because of the universal selector usage,
184
+ // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
185
+ // stylelint-disable-next-line selector-max-universal
186
+ > * {
187
+ margin: $modal-footer-margin-between / 2;
188
+ }
178
189
  }
179
190
 
180
191
  // Measure scrollbar width for padding body during modal show/hide
@@ -195,18 +206,19 @@
195
206
  }
196
207
 
197
208
  .modal-dialog-scrollable {
198
- max-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
209
+ max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
199
210
 
200
211
  .modal-content {
201
- max-height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
212
+ max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);
202
213
  }
203
214
  }
204
215
 
205
216
  .modal-dialog-centered {
206
- min-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
217
+ min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
207
218
 
208
219
  &::before {
209
- height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
220
+ height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);
221
+ height: min-content;
210
222
  }
211
223
  }
212
224
 
@@ -1,7 +1,7 @@
1
1
  // Base class
2
2
  //
3
3
  // Kickstart any navigation component with a set of style resets. Works with
4
- // `<nav>`s or `<ul>`s.
4
+ // `<nav>`s, `<ul>`s or `<ol>`s.
5
5
 
6
6
  .nav {
7
7
  display: flex;
@@ -14,8 +14,9 @@
14
14
  .nav-link {
15
15
  display: block;
16
16
  padding: $nav-link-padding-y $nav-link-padding-x;
17
+ text-decoration: if($link-decoration == none, null, none);
17
18
 
18
- @include hover-focus {
19
+ @include hover-focus() {
19
20
  text-decoration: none;
20
21
  }
21
22
 
@@ -42,7 +43,7 @@
42
43
  border: $nav-tabs-border-width solid transparent;
43
44
  @include border-top-radius($nav-tabs-border-radius);
44
45
 
45
- @include hover-focus {
46
+ @include hover-focus() {
46
47
  border-color: $nav-tabs-link-hover-border-color;
47
48
  }
48
49
 
@@ -25,13 +25,23 @@
25
25
 
26
26
  // Because flex properties aren't inherited, we need to redeclare these first
27
27
  // few properties so that content nested within behave properly.
28
- > .container,
29
- > .container-fluid {
28
+ %container-flex-properties {
30
29
  display: flex;
31
30
  flex-wrap: wrap;
32
31
  align-items: center;
33
32
  justify-content: space-between;
34
33
  }
34
+
35
+ .container,
36
+ .container-fluid {
37
+ @extend %container-flex-properties;
38
+ }
39
+
40
+ @each $breakpoint, $container-max-width in $container-max-widths {
41
+ > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {
42
+ @extend %container-flex-properties;
43
+ }
44
+ }
35
45
  }
36
46
 
37
47
 
@@ -48,7 +58,7 @@
48
58
  line-height: inherit;
49
59
  white-space: nowrap;
50
60
 
51
- @include hover-focus {
61
+ @include hover-focus() {
52
62
  text-decoration: none;
53
63
  }
54
64
  }
@@ -113,7 +123,7 @@
113
123
  border: $border-width solid transparent; // remove default button style
114
124
  @include border-radius($navbar-toggler-border-radius);
115
125
 
116
- @include hover-focus {
126
+ @include hover-focus() {
117
127
  text-decoration: none;
118
128
  }
119
129
  }
@@ -139,11 +149,21 @@
139
149
 
140
150
  &#{$infix} {
141
151
  @include media-breakpoint-down($breakpoint) {
142
- > .container,
143
- > .container-fluid {
152
+ %container-navbar-expand-#{$breakpoint} {
144
153
  padding-right: 0;
145
154
  padding-left: 0;
146
155
  }
156
+
157
+ > .container,
158
+ > .container-fluid {
159
+ @extend %container-navbar-expand-#{$breakpoint};
160
+ }
161
+
162
+ @each $size, $container-max-width in $container-max-widths {
163
+ > .container#{breakpoint-infix($size, $container-max-widths)} {
164
+ @extend %container-navbar-expand-#{$breakpoint};
165
+ }
166
+ }
147
167
  }
148
168
 
149
169
  @include media-breakpoint-up($next) {
@@ -164,9 +184,19 @@
164
184
  }
165
185
 
166
186
  // For nesting containers, have to redeclare for alignment purposes
187
+ %container-nesting-#{$breakpoint} {
188
+ flex-wrap: nowrap;
189
+ }
190
+
167
191
  > .container,
168
192
  > .container-fluid {
169
- flex-wrap: nowrap;
193
+ @extend %container-nesting-#{$breakpoint};
194
+ }
195
+
196
+ @each $size, $container-max-width in $container-max-widths {
197
+ > .container#{breakpoint-infix($size, $container-max-widths)} {
198
+ @extend %container-nesting-#{$breakpoint};
199
+ }
170
200
  }
171
201
 
172
202
  .navbar-collapse {
@@ -194,7 +224,7 @@
194
224
  .navbar-brand {
195
225
  color: $navbar-light-brand-color;
196
226
 
197
- @include hover-focus {
227
+ @include hover-focus() {
198
228
  color: $navbar-light-brand-hover-color;
199
229
  }
200
230
  }
@@ -203,7 +233,7 @@
203
233
  .nav-link {
204
234
  color: $navbar-light-color;
205
235
 
206
- @include hover-focus {
236
+ @include hover-focus() {
207
237
  color: $navbar-light-hover-color;
208
238
  }
209
239
 
@@ -226,7 +256,7 @@
226
256
  }
227
257
 
228
258
  .navbar-toggler-icon {
229
- background-image: $navbar-light-toggler-icon-bg;
259
+ background-image: escape-svg($navbar-light-toggler-icon-bg);
230
260
  }
231
261
 
232
262
  .navbar-text {
@@ -234,7 +264,7 @@
234
264
  a {
235
265
  color: $navbar-light-active-color;
236
266
 
237
- @include hover-focus {
267
+ @include hover-focus() {
238
268
  color: $navbar-light-active-color;
239
269
  }
240
270
  }
@@ -246,7 +276,7 @@
246
276
  .navbar-brand {
247
277
  color: $navbar-dark-brand-color;
248
278
 
249
- @include hover-focus {
279
+ @include hover-focus() {
250
280
  color: $navbar-dark-brand-hover-color;
251
281
  }
252
282
  }
@@ -255,7 +285,7 @@
255
285
  .nav-link {
256
286
  color: $navbar-dark-color;
257
287
 
258
- @include hover-focus {
288
+ @include hover-focus() {
259
289
  color: $navbar-dark-hover-color;
260
290
  }
261
291
 
@@ -278,7 +308,7 @@
278
308
  }
279
309
 
280
310
  .navbar-toggler-icon {
281
- background-image: $navbar-dark-toggler-icon-bg;
311
+ background-image: escape-svg($navbar-dark-toggler-icon-bg);
282
312
  }
283
313
 
284
314
  .navbar-text {
@@ -286,7 +316,7 @@
286
316
  a {
287
317
  color: $navbar-dark-active-color;
288
318
 
289
- @include hover-focus {
319
+ @include hover-focus() {
290
320
  color: $navbar-dark-active-color;
291
321
  }
292
322
  }
@@ -11,6 +11,7 @@
11
11
  margin-left: -$pagination-border-width;
12
12
  line-height: $pagination-line-height;
13
13
  color: $pagination-color;
14
+ text-decoration: if($link-decoration == none, null, none);
14
15
  background-color: $pagination-bg;
15
16
  border: $pagination-border-width solid $pagination-border-color;
16
17
 
@@ -23,7 +24,7 @@
23
24
  }
24
25
 
25
26
  &:focus {
26
- z-index: 2;
27
+ z-index: 3;
27
28
  outline: $pagination-focus-outline;
28
29
  box-shadow: $pagination-focus-box-shadow;
29
30
  }
@@ -43,7 +44,7 @@
43
44
  }
44
45
 
45
46
  &.active .page-link {
46
- z-index: 1;
47
+ z-index: 3;
47
48
  color: $pagination-active-color;
48
49
  background-color: $pagination-active-bg;
49
50
  border-color: $pagination-active-border-color;
@@ -22,7 +22,7 @@
22
22
  display: block;
23
23
  width: $popover-arrow-width;
24
24
  height: $popover-arrow-height;
25
- margin: 0 $border-radius-lg;
25
+ margin: 0 $popover-border-radius;
26
26
 
27
27
  &::before,
28
28
  &::after {
@@ -39,7 +39,7 @@
39
39
  margin-bottom: $popover-arrow-height;
40
40
 
41
41
  > .arrow {
42
- bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
42
+ bottom: subtract(-$popover-arrow-height, $popover-border-width);
43
43
 
44
44
  &::before {
45
45
  bottom: 0;
@@ -59,10 +59,10 @@
59
59
  margin-left: $popover-arrow-height;
60
60
 
61
61
  > .arrow {
62
- left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
62
+ left: subtract(-$popover-arrow-height, $popover-border-width);
63
63
  width: $popover-arrow-height;
64
64
  height: $popover-arrow-width;
65
- margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
65
+ margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners
66
66
 
67
67
  &::before {
68
68
  left: 0;
@@ -82,7 +82,7 @@
82
82
  margin-top: $popover-arrow-height;
83
83
 
84
84
  > .arrow {
85
- top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
85
+ top: subtract(-$popover-arrow-height, $popover-border-width);
86
86
 
87
87
  &::before {
88
88
  top: 0;
@@ -114,10 +114,10 @@
114
114
  margin-right: $popover-arrow-height;
115
115
 
116
116
  > .arrow {
117
- right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
117
+ right: subtract(-$popover-arrow-height, $popover-border-width);
118
118
  width: $popover-arrow-height;
119
119
  height: $popover-arrow-width;
120
- margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
120
+ margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners
121
121
 
122
122
  &::before {
123
123
  right: 0;
@@ -157,8 +157,7 @@
157
157
  color: $popover-header-color;
158
158
  background-color: $popover-header-bg;
159
159
  border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);
160
- $offset-border-width: calc(#{$border-radius-lg} - #{$popover-border-width});
161
- @include border-top-radius($offset-border-width);
160
+ @include border-top-radius($popover-inner-border-radius);
162
161
 
163
162
  &:empty {
164
163
  display: none;
@@ -1,6 +1,6 @@
1
1
  // stylelint-disable declaration-no-important, selector-no-qualifying-type
2
2
 
3
- // Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css
3
+ // Source: https://github.com/h5bp/main.css/blob/master/src/_print.css
4
4
 
5
5
  // ==========================================================================
6
6
  // Print styles.
@@ -57,7 +57,7 @@
57
57
 
58
58
  //
59
59
  // Printing Tables:
60
- // http://css-discuss.incutio.com/wiki/Printing_Tables
60
+ // https://web.archive.org/web/20180815150934/http://css-discuss.incutio.com/wiki/Printing_Tables
61
61
  //
62
62
 
63
63
  thead {
@@ -10,6 +10,7 @@
10
10
  display: flex;
11
11
  height: $progress-height;
12
12
  overflow: hidden; // force rounded corners by cropping it
13
+ line-height: 0;
13
14
  @include font-size($progress-font-size);
14
15
  background-color: $progress-bg;
15
16
  @include border-radius($progress-border-radius);
@@ -20,6 +21,7 @@
20
21
  display: flex;
21
22
  flex-direction: column;
22
23
  justify-content: center;
24
+ overflow: hidden;
23
25
  color: $progress-bar-color;
24
26
  text-align: center;
25
27
  white-space: nowrap;
@@ -36,8 +38,10 @@
36
38
  .progress-bar-animated {
37
39
  animation: progress-bar-stripes $progress-bar-animation-timing;
38
40
 
39
- @media (prefers-reduced-motion: reduce) {
40
- animation: none;
41
+ @if $enable-prefers-reduced-motion-media-query {
42
+ @media (prefers-reduced-motion: reduce) {
43
+ animation: none;
44
+ }
41
45
  }
42
46
  }
43
47
  }
@@ -54,12 +54,16 @@ body {
54
54
  background-color: $body-bg; // 2
55
55
  }
56
56
 
57
- // Suppress the focus outline on elements that cannot be accessed via keyboard.
58
- // This prevents an unwanted focus outline from appearing around elements that
59
- // might still respond to pointer events.
60
- //
61
- // Credit: https://github.com/suitcss/base
62
- [tabindex="-1"]:focus {
57
+ // Future-proof rule: in browsers that support :focus-visible, suppress the focus outline
58
+ // on elements that programmatically receive focus but wouldn't normally show a visible
59
+ // focus outline. In general, this would mean that the outline is only applied if the
60
+ // interaction that led to the element receiving programmatic focus was a keyboard interaction,
61
+ // or the browser has somehow determined that the user is primarily a keyboard user and/or
62
+ // wants focus outlines to always be presented.
63
+ //
64
+ // See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible
65
+ // and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/
66
+ [tabindex="-1"]:focus:not(:focus-visible) {
63
67
  outline: 0 !important;
64
68
  }
65
69
 
@@ -184,30 +188,25 @@ a {
184
188
  text-decoration: $link-decoration;
185
189
  background-color: transparent; // Remove the gray background on active links in IE 10.
186
190
 
187
- @include hover {
191
+ @include hover() {
188
192
  color: $link-hover-color;
189
193
  text-decoration: $link-hover-decoration;
190
194
  }
191
195
  }
192
196
 
193
- // And undo these styles for placeholder links/named anchors (without href)
194
- // which have not been made explicitly keyboard-focusable (without tabindex).
197
+ // And undo these styles for placeholder links/named anchors (without href).
195
198
  // It would be more straightforward to just use a[href] in previous block, but that
196
199
  // causes specificity issues in many other styles that are too complex to fix.
197
200
  // See https://github.com/twbs/bootstrap/issues/19402
198
201
 
199
- a:not([href]):not([tabindex]) {
202
+ a:not([href]) {
200
203
  color: inherit;
201
204
  text-decoration: none;
202
205
 
203
- @include hover-focus {
206
+ @include hover() {
204
207
  color: inherit;
205
208
  text-decoration: none;
206
209
  }
207
-
208
- &:focus {
209
- outline: 0;
210
- }
211
210
  }
212
211
 
213
212
 
@@ -230,6 +229,9 @@ pre {
230
229
  margin-bottom: 1rem;
231
230
  // Don't allow content to break outside
232
231
  overflow: auto;
232
+ // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,
233
+ // making it impossible to interact with the content
234
+ -ms-overflow-style: scrollbar;
233
235
  }
234
236
 
235
237
 
@@ -331,6 +333,13 @@ select {
331
333
  text-transform: none; // Remove the inheritance of text transform in Firefox
332
334
  }
333
335
 
336
+ // Set the cursor for non-`<button>` buttons
337
+ //
338
+ // Details at https://github.com/twbs/bootstrap/pull/30562
339
+ [role="button"] {
340
+ cursor: pointer;
341
+ }
342
+
334
343
  // Remove the inheritance of word-wrap in Safari.
335
344
  //
336
345
  // Details at https://github.com/twbs/bootstrap/issues/24990
@@ -377,18 +386,6 @@ input[type="checkbox"] {
377
386
  }
378
387
 
379
388
 
380
- input[type="date"],
381
- input[type="time"],
382
- input[type="datetime-local"],
383
- input[type="month"] {
384
- // Remove the default appearance of temporal inputs to avoid a Mobile Safari
385
- // bug where setting a custom line-height prevents text from being vertically
386
- // centered within the input.
387
- // See https://bugs.webkit.org/show_bug.cgi?id=139848
388
- // and https://github.com/twbs/bootstrap/issues/11266
389
- -webkit-appearance: listbox;
390
- }
391
-
392
389
  textarea {
393
390
  overflow: auto; // Remove the default vertical scrollbar in IE.
394
391
  // Textareas should really only resize vertically so they don't break their (horizontal) containers.
@@ -1,3 +1,4 @@
1
+ // Do not forget to update getting-started/theming.md!
1
2
  :root {
2
3
  // Custom variable values only support SassScript inside `#{}`.
3
4
  @each $color, $value in $colors {
@@ -34,6 +34,7 @@
34
34
  }
35
35
  50% {
36
36
  opacity: 1;
37
+ transform: none;
37
38
  }
38
39
  }
39
40
 
@@ -84,7 +84,7 @@
84
84
 
85
85
  .table-hover {
86
86
  tbody tr {
87
- @include hover {
87
+ @include hover() {
88
88
  color: $table-hover-color;
89
89
  background-color: $table-hover-bg;
90
90
  }
@@ -142,14 +142,14 @@
142
142
  }
143
143
 
144
144
  &.table-striped {
145
- tbody tr:nth-of-type(odd) {
145
+ tbody tr:nth-of-type(#{$table-striped-order}) {
146
146
  background-color: $table-dark-accent-bg;
147
147
  }
148
148
  }
149
149
 
150
150
  &.table-hover {
151
151
  tbody tr {
152
- @include hover {
152
+ @include hover() {
153
153
  color: $table-dark-hover-color;
154
154
  background-color: $table-dark-hover-bg;
155
155
  }
@@ -82,12 +82,12 @@ mark,
82
82
  //
83
83
 
84
84
  .list-unstyled {
85
- @include list-unstyled;
85
+ @include list-unstyled();
86
86
  }
87
87
 
88
88
  // Inline turns list items into inline-block
89
89
  .list-inline {
90
- @include list-unstyled;
90
+ @include list-unstyled();
91
91
  }
92
92
  .list-inline-item {
93
93
  display: inline-block;
@@ -6,12 +6,13 @@
6
6
  @import "utilities/embed";
7
7
  @import "utilities/flex";
8
8
  @import "utilities/float";
9
+ @import "utilities/interactions";
9
10
  @import "utilities/overflow";
10
11
  @import "utilities/position";
11
12
  @import "utilities/screenreaders";
12
13
  @import "utilities/shadows";
13
14
  @import "utilities/sizing";
14
- @import "utilities/stretched-link";
15
15
  @import "utilities/spacing";
16
+ @import "utilities/stretched-link";
16
17
  @import "utilities/text";
17
18
  @import "utilities/visibility";