bootstrap 4.4.1 → 4.6.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +11 -1
  3. data/README.md +1 -1
  4. data/assets/javascripts/bootstrap-sprockets.js +6 -6
  5. data/assets/javascripts/bootstrap.js +836 -925
  6. data/assets/javascripts/bootstrap.min.js +4 -4
  7. data/assets/javascripts/bootstrap/alert.js +35 -41
  8. data/assets/javascripts/bootstrap/button.js +69 -69
  9. data/assets/javascripts/bootstrap/carousel.js +154 -182
  10. data/assets/javascripts/bootstrap/collapse.js +91 -130
  11. data/assets/javascripts/bootstrap/dropdown.js +123 -170
  12. data/assets/javascripts/bootstrap/modal.js +181 -197
  13. data/assets/javascripts/bootstrap/popover.js +45 -80
  14. data/assets/javascripts/bootstrap/scrollspy.js +74 -117
  15. data/assets/javascripts/bootstrap/tab.js +65 -71
  16. data/assets/javascripts/bootstrap/toast.js +74 -105
  17. data/assets/javascripts/bootstrap/tooltip.js +129 -166
  18. data/assets/javascripts/bootstrap/util.js +24 -20
  19. data/assets/stylesheets/_bootstrap-grid.scss +5 -4
  20. data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
  21. data/assets/stylesheets/_bootstrap.scss +4 -4
  22. data/assets/stylesheets/bootstrap/_alert.scss +1 -0
  23. data/assets/stylesheets/bootstrap/_breadcrumb.scss +1 -1
  24. data/assets/stylesheets/bootstrap/_buttons.scss +10 -7
  25. data/assets/stylesheets/bootstrap/_card.scss +25 -17
  26. data/assets/stylesheets/bootstrap/_carousel.scss +1 -1
  27. data/assets/stylesheets/bootstrap/_close.scss +0 -1
  28. data/assets/stylesheets/bootstrap/_custom-forms.scss +16 -11
  29. data/assets/stylesheets/bootstrap/_dropdown.scss +4 -3
  30. data/assets/stylesheets/bootstrap/_forms.scss +9 -0
  31. data/assets/stylesheets/bootstrap/_functions.scss +15 -5
  32. data/assets/stylesheets/bootstrap/_grid.scss +10 -6
  33. data/assets/stylesheets/bootstrap/_input-group.scss +22 -5
  34. data/assets/stylesheets/bootstrap/_list-group.scss +10 -14
  35. data/assets/stylesheets/bootstrap/_modal.scss +2 -1
  36. data/assets/stylesheets/bootstrap/_nav.scss +4 -4
  37. data/assets/stylesheets/bootstrap/_navbar.scss +10 -2
  38. data/assets/stylesheets/bootstrap/_pagination.scss +3 -2
  39. data/assets/stylesheets/bootstrap/_progress.scss +2 -1
  40. data/assets/stylesheets/bootstrap/_reboot.scss +27 -25
  41. data/assets/stylesheets/bootstrap/_root.scss +0 -1
  42. data/assets/stylesheets/bootstrap/_spinners.scss +14 -4
  43. data/assets/stylesheets/bootstrap/_toasts.scss +4 -2
  44. data/assets/stylesheets/bootstrap/_type.scss +1 -1
  45. data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
  46. data/assets/stylesheets/bootstrap/_variables.scss +20 -17
  47. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +2 -1
  48. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +27 -14
  49. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +6 -6
  50. data/assets/stylesheets/bootstrap/mixins/_forms.scss +11 -3
  51. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +24 -15
  52. data/assets/stylesheets/bootstrap/mixins/_grid.scss +8 -8
  53. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -1
  54. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +1 -1
  55. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  56. data/assets/stylesheets/bootstrap/utilities/_background.scss +1 -1
  57. data/assets/stylesheets/bootstrap/utilities/_borders.scss +1 -1
  58. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  59. data/assets/stylesheets/bootstrap/utilities/_text.scss +2 -2
  60. data/lib/bootstrap/version.rb +2 -2
  61. data/tasks/updater/network.rb +2 -2
  62. data/test/gemfiles/rails_6_0.gemfile +7 -0
  63. metadata +6 -3
@@ -22,7 +22,7 @@
22
22
  display: none; // none by default, but block on "open" of the menu
23
23
  float: left;
24
24
  min-width: $dropdown-min-width;
25
- padding: $dropdown-padding-y 0;
25
+ padding: $dropdown-padding-y $dropdown-padding-x;
26
26
  margin: $dropdown-spacer 0 0; // override default ul
27
27
  @include font-size($dropdown-font-size);
28
28
  color: $dropdown-color;
@@ -100,7 +100,7 @@
100
100
  }
101
101
  }
102
102
 
103
- // When enabled Popper.js, reset basic dropdown position
103
+ // When Popper is enabled, reset the basic dropdown position
104
104
  // stylelint-disable-next-line no-duplicate-selectors
105
105
  .dropdown-menu {
106
106
  &[x-placement^="top"],
@@ -128,6 +128,7 @@
128
128
  font-weight: $font-weight-normal;
129
129
  color: $dropdown-link-color;
130
130
  text-align: inherit; // For `<button>`s
131
+ text-decoration: if($link-decoration == none, null, none);
131
132
  white-space: nowrap; // prevent links from randomly breaking onto new lines
132
133
  background-color: transparent; // For `<button>`s
133
134
  border: 0; // For `<button>`s
@@ -176,7 +177,7 @@
176
177
  // Dropdown section headers
177
178
  .dropdown-header {
178
179
  display: block;
179
- padding: $dropdown-padding-y $dropdown-item-padding-x;
180
+ padding: $dropdown-header-padding;
180
181
  margin-bottom: 0; // for use with heading elements
181
182
  @include font-size($font-size-sm);
182
183
  color: $dropdown-header-color;
@@ -59,6 +59,15 @@
59
59
  }
60
60
  }
61
61
 
62
+ input[type="date"],
63
+ input[type="time"],
64
+ input[type="datetime-local"],
65
+ input[type="month"] {
66
+ &.form-control {
67
+ appearance: none; // Fix appearance for date inputs in Safari
68
+ }
69
+ }
70
+
62
71
  select.form-control {
63
72
  &:focus::-ms-value {
64
73
  // Suppress the nested default white text on blue background highlight given to
@@ -23,10 +23,12 @@
23
23
  // Starts at zero
24
24
  // Used to ensure the min-width of the lowest breakpoint starts at 0.
25
25
  @mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
26
- $values: map-values($map);
27
- $first-value: nth($values, 1);
28
- @if $first-value != 0 {
29
- @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
26
+ @if length($map) > 0 {
27
+ $values: map-values($map);
28
+ $first-value: nth($values, 1);
29
+ @if $first-value != 0 {
30
+ @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
31
+ }
30
32
  }
31
33
  }
32
34
 
@@ -49,10 +51,18 @@
49
51
  }
50
52
 
51
53
  // See https://codepen.io/kevinweber/pen/dXWoRw
54
+ //
55
+ // Requires the use of quotes around data URIs.
56
+
52
57
  @function escape-svg($string) {
53
58
  @if str-index($string, "data:image/svg+xml") {
54
59
  @each $char, $encoded in $escaped-characters {
55
- $string: str-replace($string, $char, $encoded);
60
+ // Do not escape the url brackets
61
+ @if str-index($string, "url(") == 1 {
62
+ $string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}");
63
+ } @else {
64
+ $string: str-replace($string, $char, $encoded);
65
+ }
56
66
  }
57
67
  }
58
68
 
@@ -4,11 +4,7 @@
4
4
 
5
5
  @if $enable-grid-classes {
6
6
  // Single container class with breakpoint max-widths
7
- .container {
8
- @include make-container();
9
- @include make-container-max-widths();
10
- }
11
-
7
+ .container,
12
8
  // 100% wide container at all breakpoints
13
9
  .container-fluid {
14
10
  @include make-container();
@@ -25,11 +21,19 @@
25
21
  max-width: $container-max-width;
26
22
  }
27
23
 
24
+ // Extend each breakpoint which is smaller or equal to the current breakpoint
25
+ $extend-breakpoint: true;
26
+
28
27
  @each $name, $width in $grid-breakpoints {
29
- @if ($container-max-width > $width or $breakpoint == $name) {
28
+ @if ($extend-breakpoint) {
30
29
  .container#{breakpoint-infix($name, $grid-breakpoints)} {
31
30
  @extend %responsive-container-#{$breakpoint};
32
31
  }
32
+
33
+ // Once the current breakpoint is reached, stop extending
34
+ @if ($breakpoint == $name) {
35
+ $extend-breakpoint: false;
36
+ }
33
37
  }
34
38
  }
35
39
  }
@@ -16,7 +16,8 @@
16
16
  > .custom-select,
17
17
  > .custom-file {
18
18
  position: relative; // For focus state's z-index
19
- flex: 1 1 0%;
19
+ flex: 1 1 auto;
20
+ width: 1%;
20
21
  min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size
21
22
  margin-bottom: 0;
22
23
 
@@ -41,7 +42,6 @@
41
42
 
42
43
  > .form-control,
43
44
  > .custom-select {
44
- &:not(:last-child) { @include border-right-radius(0); }
45
45
  &:not(:first-child) { @include border-left-radius(0); }
46
46
  }
47
47
 
@@ -52,9 +52,24 @@
52
52
  align-items: center;
53
53
 
54
54
  &:not(:last-child) .custom-file-label,
55
- &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
56
55
  &:not(:first-child) .custom-file-label { @include border-left-radius(0); }
57
56
  }
57
+
58
+ &:not(.has-validation) {
59
+ > .form-control:not(:last-child),
60
+ > .custom-select:not(:last-child),
61
+ > .custom-file:not(:last-child) .custom-file-label::after {
62
+ @include border-right-radius(0);
63
+ }
64
+ }
65
+
66
+ &.has-validation {
67
+ > .form-control:nth-last-child(n + 3),
68
+ > .custom-select:nth-last-child(n + 3),
69
+ > .custom-file:nth-last-child(n + 3) .custom-file-label::after {
70
+ @include border-right-radius(0);
71
+ }
72
+ }
58
73
  }
59
74
 
60
75
 
@@ -174,8 +189,10 @@
174
189
 
175
190
  .input-group > .input-group-prepend > .btn,
176
191
  .input-group > .input-group-prepend > .input-group-text,
177
- .input-group > .input-group-append:not(:last-child) > .btn,
178
- .input-group > .input-group-append:not(:last-child) > .input-group-text,
192
+ .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
193
+ .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
194
+ .input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,
195
+ .input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,
179
196
  .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
180
197
  .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
181
198
  @include border-right-radius(0);
@@ -9,6 +9,7 @@
9
9
  // No need to set list-style: none; since .list-group-item is block level
10
10
  padding-left: 0; // reset padding because ul and ol
11
11
  margin-bottom: 0;
12
+ @include border-radius($list-group-border-radius);
12
13
  }
13
14
 
14
15
 
@@ -46,15 +47,16 @@
46
47
  display: block;
47
48
  padding: $list-group-item-padding-y $list-group-item-padding-x;
48
49
  color: $list-group-color;
50
+ text-decoration: if($link-decoration == none, null, none);
49
51
  background-color: $list-group-bg;
50
52
  border: $list-group-border-width solid $list-group-border-color;
51
53
 
52
54
  &:first-child {
53
- @include border-top-radius($list-group-border-radius);
55
+ @include border-top-radius(inherit);
54
56
  }
55
57
 
56
58
  &:last-child {
57
- @include border-bottom-radius($list-group-border-radius);
59
+ @include border-bottom-radius(inherit);
58
60
  }
59
61
 
60
62
  &.disabled,
@@ -94,7 +96,7 @@
94
96
  .list-group-horizontal#{$infix} {
95
97
  flex-direction: row;
96
98
 
97
- .list-group-item {
99
+ > .list-group-item {
98
100
  &:first-child {
99
101
  @include border-bottom-left-radius($list-group-border-radius);
100
102
  @include border-top-right-radius(0);
@@ -109,7 +111,7 @@
109
111
  margin-top: 0;
110
112
  }
111
113
 
112
- & + .list-group-item {
114
+ + .list-group-item {
113
115
  border-top-width: $list-group-border-width;
114
116
  border-left-width: 0;
115
117
 
@@ -130,18 +132,12 @@
130
132
  // useful within other components (e.g., cards).
131
133
 
132
134
  .list-group-flush {
133
- .list-group-item {
134
- border-right-width: 0;
135
- border-left-width: 0;
136
- @include border-radius(0);
135
+ @include border-radius(0);
137
136
 
138
- &:first-child {
139
- border-top-width: 0;
140
- }
141
- }
137
+ > .list-group-item {
138
+ border-width: 0 0 $list-group-border-width;
142
139
 
143
- &:last-child {
144
- .list-group-item:last-child {
140
+ &:last-child {
145
141
  border-bottom-width: 0;
146
142
  }
147
143
  }
@@ -83,6 +83,7 @@
83
83
  &::before {
84
84
  display: block; // IE10
85
85
  height: subtract(100vh, $modal-dialog-margin * 2);
86
+ height: min-content; // Reset height to 0 except on IE
86
87
  content: "";
87
88
  }
88
89
 
@@ -181,7 +182,6 @@
181
182
  // Place margin between footer elements
182
183
  // This solution is far from ideal because of the universal selector usage,
183
184
  // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
184
- // stylelint-disable-next-line selector-max-universal
185
185
  > * {
186
186
  margin: $modal-footer-margin-between / 2;
187
187
  }
@@ -217,6 +217,7 @@
217
217
 
218
218
  &::before {
219
219
  height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);
220
+ height: min-content;
220
221
  }
221
222
  }
222
223
 
@@ -14,6 +14,7 @@
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
19
  @include hover-focus() {
19
20
  text-decoration: none;
@@ -34,11 +35,8 @@
34
35
  .nav-tabs {
35
36
  border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
36
37
 
37
- .nav-item {
38
- margin-bottom: -$nav-tabs-border-width;
39
- }
40
-
41
38
  .nav-link {
39
+ margin-bottom: -$nav-tabs-border-width;
42
40
  border: $nav-tabs-border-width solid transparent;
43
41
  @include border-top-radius($nav-tabs-border-radius);
44
42
 
@@ -91,6 +89,7 @@
91
89
  //
92
90
 
93
91
  .nav-fill {
92
+ > .nav-link,
94
93
  .nav-item {
95
94
  flex: 1 1 auto;
96
95
  text-align: center;
@@ -98,6 +97,7 @@
98
97
  }
99
98
 
100
99
  .nav-justified {
100
+ > .nav-link,
101
101
  .nav-item {
102
102
  flex-basis: 0;
103
103
  flex-grow: 1;
@@ -136,8 +136,12 @@
136
136
  height: 1.5em;
137
137
  vertical-align: middle;
138
138
  content: "";
139
- background: no-repeat center center;
140
- background-size: 100% 100%;
139
+ background: 50% / 100% 100% no-repeat;
140
+ }
141
+
142
+ .navbar-nav-scroll {
143
+ max-height: $navbar-nav-scroll-max-height;
144
+ overflow-y: auto;
141
145
  }
142
146
 
143
147
  // Generate series of `.navbar-expand-*` responsive classes for configuring
@@ -199,6 +203,10 @@
199
203
  }
200
204
  }
201
205
 
206
+ .navbar-nav-scroll {
207
+ overflow: visible;
208
+ }
209
+
202
210
  .navbar-collapse {
203
211
  display: flex !important; // stylelint-disable-line declaration-no-important
204
212
 
@@ -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
 
@@ -65,9 +66,9 @@
65
66
  //
66
67
 
67
68
  .pagination-lg {
68
- @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);
69
+ @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg);
69
70
  }
70
71
 
71
72
  .pagination-sm {
72
- @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);
73
+ @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm);
73
74
  }
@@ -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);
@@ -35,7 +36,7 @@
35
36
 
36
37
  @if $enable-transitions {
37
38
  .progress-bar-animated {
38
- animation: progress-bar-stripes $progress-bar-animation-timing;
39
+ animation: $progress-bar-animation-timing progress-bar-stripes;
39
40
 
40
41
  @if $enable-prefers-reduced-motion-media-query {
41
42
  @media (prefers-reduced-motion: reduce) {
@@ -1,4 +1,4 @@
1
- // stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix
1
+ // stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix
2
2
 
3
3
  // Reboot
4
4
  //
@@ -199,7 +199,7 @@ a {
199
199
  // causes specificity issues in many other styles that are too complex to fix.
200
200
  // See https://github.com/twbs/bootstrap/issues/19402
201
201
 
202
- a:not([href]) {
202
+ a:not([href]):not([class]) {
203
203
  color: inherit;
204
204
  text-decoration: none;
205
205
 
@@ -229,6 +229,9 @@ pre {
229
229
  margin-bottom: 1rem;
230
230
  // Don't allow content to break outside
231
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;
232
235
  }
233
236
 
234
237
 
@@ -275,10 +278,14 @@ caption {
275
278
  caption-side: bottom;
276
279
  }
277
280
 
281
+ // 1. Removes font-weight bold by inheriting
282
+ // 2. Matches default `<td>` alignment by inheriting `text-align`.
283
+ // 3. Fix alignment for Safari
284
+
278
285
  th {
279
- // Matches default `<td>` alignment by inheriting from the `<body>`, or the
280
- // closest parent with a set `text-align`.
281
- text-align: inherit;
286
+ font-weight: $table-th-font-weight; // 1
287
+ text-align: inherit; // 2
288
+ text-align: -webkit-match-parent; // 3
282
289
  }
283
290
 
284
291
 
@@ -296,17 +303,17 @@ label {
296
303
  //
297
304
  // Details at https://github.com/twbs/bootstrap/issues/24093
298
305
  button {
299
- // stylelint-disable-next-line property-blacklist
306
+ // stylelint-disable-next-line property-disallowed-list
300
307
  border-radius: 0;
301
308
  }
302
309
 
303
- // Work around a Firefox/IE bug where the transparent `button` background
304
- // results in a loss of the default `button` focus styles.
305
- //
306
- // Credit: https://github.com/suitcss/base/
307
- button:focus {
308
- outline: 1px dotted;
309
- outline: 5px auto -webkit-focus-ring-color;
310
+ // Explicitly remove focus outline in Chromium when it shouldn't be
311
+ // visible (e.g. as result of mouse click or touch tap). It already
312
+ // should be doing this automatically, but seems to currently be
313
+ // confused and applies its very visible two-tone outline anyway.
314
+
315
+ button:focus:not(:focus-visible) {
316
+ outline: 0;
310
317
  }
311
318
 
312
319
  input,
@@ -330,6 +337,13 @@ select {
330
337
  text-transform: none; // Remove the inheritance of text transform in Firefox
331
338
  }
332
339
 
340
+ // Set the cursor for non-`<button>` buttons
341
+ //
342
+ // Details at https://github.com/twbs/bootstrap/pull/30562
343
+ [role="button"] {
344
+ cursor: pointer;
345
+ }
346
+
333
347
  // Remove the inheritance of word-wrap in Safari.
334
348
  //
335
349
  // Details at https://github.com/twbs/bootstrap/issues/24990
@@ -376,18 +390,6 @@ input[type="checkbox"] {
376
390
  }
377
391
 
378
392
 
379
- input[type="date"],
380
- input[type="time"],
381
- input[type="datetime-local"],
382
- input[type="month"] {
383
- // Remove the default appearance of temporal inputs to avoid a Mobile Safari
384
- // bug where setting a custom line-height prevents text from being vertically
385
- // centered within the input.
386
- // See https://bugs.webkit.org/show_bug.cgi?id=139848
387
- // and https://github.com/twbs/bootstrap/issues/11266
388
- -webkit-appearance: listbox;
389
- }
390
-
391
393
  textarea {
392
394
  overflow: auto; // Remove the default vertical scrollbar in IE.
393
395
  // Textareas should really only resize vertically so they don't break their (horizontal) containers.