bootstrap 4.3.1 → 4.6.2.1

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 +15 -1
  3. data/CHANGELOG.md +4 -12
  4. data/README.md +7 -1
  5. data/Rakefile +16 -4
  6. data/assets/javascripts/bootstrap/alert.js +43 -55
  7. data/assets/javascripts/bootstrap/button.js +112 -70
  8. data/assets/javascripts/bootstrap/carousel.js +164 -189
  9. data/assets/javascripts/bootstrap/collapse.js +98 -129
  10. data/assets/javascripts/bootstrap/dropdown.js +165 -200
  11. data/assets/javascripts/bootstrap/modal.js +218 -205
  12. data/assets/javascripts/bootstrap/popover.js +63 -79
  13. data/assets/javascripts/bootstrap/scrollspy.js +82 -119
  14. data/assets/javascripts/bootstrap/tab.js +79 -85
  15. data/assets/javascripts/bootstrap/toast.js +100 -115
  16. data/assets/javascripts/bootstrap/tooltip.js +207 -225
  17. data/assets/javascripts/bootstrap/util.js +41 -23
  18. data/assets/javascripts/bootstrap.js +1235 -1314
  19. data/assets/javascripts/bootstrap.min.js +4 -4
  20. data/assets/stylesheets/_bootstrap-grid.scss +5 -4
  21. data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
  22. data/assets/stylesheets/_bootstrap.scss +4 -4
  23. data/assets/stylesheets/bootstrap/_alert.scss +1 -0
  24. data/assets/stylesheets/bootstrap/_badge.scss +1 -1
  25. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -2
  26. data/assets/stylesheets/bootstrap/_button-group.scss +1 -1
  27. data/assets/stylesheets/bootstrap/_buttons.scss +13 -8
  28. data/assets/stylesheets/bootstrap/_card.scss +47 -50
  29. data/assets/stylesheets/bootstrap/_carousel.scss +12 -9
  30. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  31. data/assets/stylesheets/bootstrap/_code.scss +1 -1
  32. data/assets/stylesheets/bootstrap/_custom-forms.scss +43 -24
  33. data/assets/stylesheets/bootstrap/_dropdown.scss +7 -6
  34. data/assets/stylesheets/bootstrap/_forms.scss +30 -13
  35. data/assets/stylesheets/bootstrap/_functions.scss +110 -6
  36. data/assets/stylesheets/bootstrap/_grid.scss +32 -11
  37. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  38. data/assets/stylesheets/bootstrap/_input-group.scss +23 -5
  39. data/assets/stylesheets/bootstrap/_jumbotron.scss +1 -1
  40. data/assets/stylesheets/bootstrap/_list-group.scss +36 -31
  41. data/assets/stylesheets/bootstrap/_mixins.scss +3 -3
  42. data/assets/stylesheets/bootstrap/_modal.scss +26 -15
  43. data/assets/stylesheets/bootstrap/_nav.scss +12 -7
  44. data/assets/stylesheets/bootstrap/_navbar.scss +55 -17
  45. data/assets/stylesheets/bootstrap/_pagination.scss +5 -4
  46. data/assets/stylesheets/bootstrap/_popover.scss +17 -18
  47. data/assets/stylesheets/bootstrap/_print.scss +1 -10
  48. data/assets/stylesheets/bootstrap/_progress.scss +7 -3
  49. data/assets/stylesheets/bootstrap/_reboot.scss +39 -38
  50. data/assets/stylesheets/bootstrap/_spinners.scss +18 -8
  51. data/assets/stylesheets/bootstrap/_tables.scss +3 -3
  52. data/assets/stylesheets/bootstrap/_toasts.scss +4 -2
  53. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
  54. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  55. data/assets/stylesheets/bootstrap/_type.scss +3 -3
  56. data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
  57. data/assets/stylesheets/bootstrap/_variables.scss +71 -45
  58. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
  59. data/assets/stylesheets/bootstrap/mixins/_badge.scss +1 -1
  60. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +27 -14
  61. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +11 -8
  62. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  63. data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -3
  64. data/assets/stylesheets/bootstrap/mixins/_forms.scss +52 -49
  65. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +31 -17
  66. data/assets/stylesheets/bootstrap/mixins/_grid.scss +32 -14
  67. data/assets/stylesheets/bootstrap/mixins/_hover.scss +4 -4
  68. data/assets/stylesheets/bootstrap/mixins/_image.scss +2 -2
  69. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
  70. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  71. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -1
  72. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  73. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +5 -4
  74. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +1 -1
  75. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +3 -2
  76. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  77. data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
  78. data/assets/stylesheets/bootstrap/utilities/_borders.scss +1 -1
  79. data/assets/stylesheets/bootstrap/utilities/_embed.scss +1 -1
  80. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  81. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +1 -1
  82. data/assets/stylesheets/bootstrap/utilities/_text.scss +4 -4
  83. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +126 -102
  84. data/bootstrap.gemspec +2 -4
  85. data/lib/bootstrap/engine.rb +17 -1
  86. data/lib/bootstrap/version.rb +2 -2
  87. data/tasks/updater/js.rb +18 -6
  88. data/tasks/updater/network.rb +8 -2
  89. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  90. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  91. data/test/gemfiles/rails_6_0.gemfile +7 -0
  92. data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
  93. data/test/gemfiles/rails_7_0_sassc.gemfile +8 -0
  94. data/test/support/dummy_rails_integration.rb +3 -1
  95. data/test/test_helper.rb +18 -13
  96. metadata +17 -21
@@ -7,6 +7,7 @@
7
7
  display: flex;
8
8
  flex-direction: column;
9
9
  min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
10
+ height: $card-height;
10
11
  word-wrap: break-word;
11
12
  background-color: $card-bg;
12
13
  background-clip: border-box;
@@ -18,23 +19,36 @@
18
19
  margin-left: 0;
19
20
  }
20
21
 
21
- > .list-group:first-child {
22
- .list-group-item:first-child {
23
- @include border-top-radius($card-border-radius);
22
+ > .list-group {
23
+ border-top: inherit;
24
+ border-bottom: inherit;
25
+
26
+ &:first-child {
27
+ border-top-width: 0;
28
+ @include border-top-radius($card-inner-border-radius);
24
29
  }
25
- }
26
30
 
27
- > .list-group:last-child {
28
- .list-group-item:last-child {
29
- @include border-bottom-radius($card-border-radius);
31
+ &:last-child {
32
+ border-bottom-width: 0;
33
+ @include border-bottom-radius($card-inner-border-radius);
30
34
  }
31
35
  }
36
+
37
+ // Due to specificity of the above selector (`.card > .list-group`), we must
38
+ // use a child selector here to prevent double borders.
39
+ > .card-header + .list-group,
40
+ > .list-group + .card-footer {
41
+ border-top: 0;
42
+ }
32
43
  }
33
44
 
34
45
  .card-body {
35
46
  // Enable `flex-grow: 1` for decks and groups so that card blocks take up
36
47
  // as much space as possible, ensuring footers are aligned to the bottom.
37
48
  flex: 1 1 auto;
49
+ // Workaround for the image size bug in IE
50
+ // See: https://github.com/twbs/bootstrap/pull/28855
51
+ min-height: 1px;
38
52
  padding: $card-spacer-x;
39
53
  color: $card-color;
40
54
  }
@@ -44,7 +58,7 @@
44
58
  }
45
59
 
46
60
  .card-subtitle {
47
- margin-top: -$card-spacer-y / 2;
61
+ margin-top: -$card-spacer-y * .5;
48
62
  margin-bottom: 0;
49
63
  }
50
64
 
@@ -53,7 +67,7 @@
53
67
  }
54
68
 
55
69
  .card-link {
56
- @include hover {
70
+ @include hover() {
57
71
  text-decoration: none;
58
72
  }
59
73
 
@@ -76,16 +90,11 @@
76
90
  &:first-child {
77
91
  @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
78
92
  }
79
-
80
- + .list-group {
81
- .list-group-item:first-child {
82
- border-top: 0;
83
- }
84
- }
85
93
  }
86
94
 
87
95
  .card-footer {
88
96
  padding: $card-spacer-y $card-spacer-x;
97
+ color: $card-cap-color;
89
98
  background-color: $card-cap-bg;
90
99
  border-top: $card-border-width solid $card-border-color;
91
100
 
@@ -100,15 +109,15 @@
100
109
  //
101
110
 
102
111
  .card-header-tabs {
103
- margin-right: -$card-spacer-x / 2;
112
+ margin-right: -$card-spacer-x * .5;
104
113
  margin-bottom: -$card-spacer-y;
105
- margin-left: -$card-spacer-x / 2;
114
+ margin-left: -$card-spacer-x * .5;
106
115
  border-bottom: 0;
107
116
  }
108
117
 
109
118
  .card-header-pills {
110
- margin-right: -$card-spacer-x / 2;
111
- margin-left: -$card-spacer-x / 2;
119
+ margin-right: -$card-spacer-x * .5;
120
+ margin-left: -$card-spacer-x * .5;
112
121
  }
113
122
 
114
123
  // Card image
@@ -119,21 +128,23 @@
119
128
  bottom: 0;
120
129
  left: 0;
121
130
  padding: $card-img-overlay-padding;
131
+ @include border-radius($card-inner-border-radius);
122
132
  }
123
133
 
124
- .card-img {
134
+ .card-img,
135
+ .card-img-top,
136
+ .card-img-bottom {
137
+ flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396
125
138
  width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
126
- @include border-radius($card-inner-border-radius);
127
139
  }
128
140
 
129
- // Card image caps
141
+ .card-img,
130
142
  .card-img-top {
131
- width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
132
143
  @include border-top-radius($card-inner-border-radius);
133
144
  }
134
145
 
146
+ .card-img,
135
147
  .card-img-bottom {
136
- width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
137
148
  @include border-bottom-radius($card-inner-border-radius);
138
149
  }
139
150
 
@@ -141,23 +152,19 @@
141
152
  // Card deck
142
153
 
143
154
  .card-deck {
144
- display: flex;
145
- flex-direction: column;
146
-
147
155
  .card {
148
156
  margin-bottom: $card-deck-margin;
149
157
  }
150
158
 
151
159
  @include media-breakpoint-up(sm) {
160
+ display: flex;
152
161
  flex-flow: row wrap;
153
162
  margin-right: -$card-deck-margin;
154
163
  margin-left: -$card-deck-margin;
155
164
 
156
165
  .card {
157
- display: flex;
158
166
  // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
159
167
  flex: 1 0 0%;
160
- flex-direction: column;
161
168
  margin-right: $card-deck-margin;
162
169
  margin-bottom: 0; // Override the default
163
170
  margin-left: $card-deck-margin;
@@ -171,9 +178,6 @@
171
178
  //
172
179
 
173
180
  .card-group {
174
- display: flex;
175
- flex-direction: column;
176
-
177
181
  // The child selector allows nested `.card` within `.card-group`
178
182
  // to display properly.
179
183
  > .card {
@@ -181,6 +185,7 @@
181
185
  }
182
186
 
183
187
  @include media-breakpoint-up(sm) {
188
+ display: flex;
184
189
  flex-flow: row wrap;
185
190
  // The child selector allows nested `.card` within `.card-group`
186
191
  // to display properly.
@@ -201,12 +206,12 @@
201
206
 
202
207
  .card-img-top,
203
208
  .card-header {
204
- // stylelint-disable-next-line property-blacklist
209
+ // stylelint-disable-next-line property-disallowed-list
205
210
  border-top-right-radius: 0;
206
211
  }
207
212
  .card-img-bottom,
208
213
  .card-footer {
209
- // stylelint-disable-next-line property-blacklist
214
+ // stylelint-disable-next-line property-disallowed-list
210
215
  border-bottom-right-radius: 0;
211
216
  }
212
217
  }
@@ -216,12 +221,12 @@
216
221
 
217
222
  .card-img-top,
218
223
  .card-header {
219
- // stylelint-disable-next-line property-blacklist
224
+ // stylelint-disable-next-line property-disallowed-list
220
225
  border-top-left-radius: 0;
221
226
  }
222
227
  .card-img-bottom,
223
228
  .card-footer {
224
- // stylelint-disable-next-line property-blacklist
229
+ // stylelint-disable-next-line property-disallowed-list
225
230
  border-bottom-left-radius: 0;
226
231
  }
227
232
  }
@@ -259,30 +264,22 @@
259
264
  //
260
265
 
261
266
  .accordion {
267
+ overflow-anchor: none;
268
+
262
269
  > .card {
263
270
  overflow: hidden;
264
271
 
265
- &:not(:first-of-type) {
266
- .card-header:first-child {
267
- @include border-radius(0);
268
- }
269
-
270
- &:not(:last-of-type) {
271
- border-bottom: 0;
272
- @include border-radius(0);
273
- }
274
- }
275
-
276
- &:first-of-type {
272
+ &:not(:last-of-type) {
277
273
  border-bottom: 0;
278
274
  @include border-bottom-radius(0);
279
275
  }
280
276
 
281
- &:last-of-type {
277
+ &:not(:first-of-type) {
282
278
  @include border-top-radius(0);
283
279
  }
284
280
 
285
- .card-header {
281
+ > .card-header {
282
+ @include border-radius(0);
286
283
  margin-bottom: -$card-border-width;
287
284
  }
288
285
  }
@@ -75,7 +75,7 @@
75
75
  .active.carousel-item-right {
76
76
  z-index: 0;
77
77
  opacity: 0;
78
- @include transition(0s $carousel-transition-duration opacity);
78
+ @include transition(opacity 0s $carousel-transition-duration);
79
79
  }
80
80
  }
81
81
 
@@ -95,13 +95,16 @@
95
95
  align-items: center; // 2. vertically center contents
96
96
  justify-content: center; // 3. horizontally center contents
97
97
  width: $carousel-control-width;
98
+ padding: 0;
98
99
  color: $carousel-control-color;
99
100
  text-align: center;
101
+ background: none;
102
+ border: 0;
100
103
  opacity: $carousel-control-opacity;
101
104
  @include transition($carousel-control-transition);
102
105
 
103
106
  // Hover/focus state
104
- @include hover-focus {
107
+ @include hover-focus() {
105
108
  color: $carousel-control-color;
106
109
  text-decoration: none;
107
110
  outline: 0;
@@ -111,13 +114,13 @@
111
114
  .carousel-control-prev {
112
115
  left: 0;
113
116
  @if $enable-gradients {
114
- background: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
117
+ background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
115
118
  }
116
119
  }
117
120
  .carousel-control-next {
118
121
  right: 0;
119
122
  @if $enable-gradients {
120
- background: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
123
+ background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
121
124
  }
122
125
  }
123
126
 
@@ -127,13 +130,13 @@
127
130
  display: inline-block;
128
131
  width: $carousel-control-icon-width;
129
132
  height: $carousel-control-icon-width;
130
- background: no-repeat 50% / 100% 100%;
133
+ background: 50% / 100% 100% no-repeat;
131
134
  }
132
135
  .carousel-control-prev-icon {
133
- background-image: $carousel-control-prev-icon-bg;
136
+ background-image: escape-svg($carousel-control-prev-icon-bg);
134
137
  }
135
138
  .carousel-control-next-icon {
136
- background-image: $carousel-control-next-icon-bg;
139
+ background-image: escape-svg($carousel-control-next-icon-bg);
137
140
  }
138
141
 
139
142
 
@@ -186,9 +189,9 @@
186
189
 
187
190
  .carousel-caption {
188
191
  position: absolute;
189
- right: (100% - $carousel-caption-width) / 2;
192
+ right: (100% - $carousel-caption-width) * .5;
190
193
  bottom: 20px;
191
- left: (100% - $carousel-caption-width) / 2;
194
+ left: (100% - $carousel-caption-width) * .5;
192
195
  z-index: 10;
193
196
  padding-top: 20px;
194
197
  padding-bottom: 20px;
@@ -8,13 +8,13 @@
8
8
  opacity: .5;
9
9
 
10
10
  // Override <a>'s hover style
11
- @include hover {
11
+ @include hover() {
12
12
  color: $close-color;
13
13
  text-decoration: none;
14
14
  }
15
15
 
16
16
  &:not(:disabled):not(.disabled) {
17
- @include hover-focus {
17
+ @include hover-focus() {
18
18
  opacity: .75;
19
19
  }
20
20
  }
@@ -30,7 +30,6 @@ button.close {
30
30
  padding: 0;
31
31
  background-color: transparent;
32
32
  border: 0;
33
- appearance: none;
34
33
  }
35
34
 
36
35
  // Future-proof disabling of clicks on `<a>` elements
@@ -2,7 +2,7 @@
2
2
  code {
3
3
  @include font-size($code-font-size);
4
4
  color: $code-color;
5
- word-break: break-word;
5
+ word-wrap: break-word;
6
6
 
7
7
  // Streamline the style when inside anchors to avoid broken underline and more
8
8
  a > & {
@@ -9,9 +9,11 @@
9
9
 
10
10
  .custom-control {
11
11
  position: relative;
12
+ z-index: 1;
12
13
  display: block;
13
14
  min-height: $font-size-base * $line-height-base;
14
15
  padding-left: $custom-control-gutter + $custom-control-indicator-size;
16
+ print-color-adjust: exact; // Keep themed appearance for print
15
17
  }
16
18
 
17
19
  .custom-control-inline {
@@ -21,7 +23,10 @@
21
23
 
22
24
  .custom-control-input {
23
25
  position: absolute;
26
+ left: 0;
24
27
  z-index: -1; // Put the input behind the label so it doesn't overlay text
28
+ width: $custom-control-indicator-size;
29
+ height: ($font-size-base * $line-height-base + $custom-control-indicator-size) * .5;
25
30
  opacity: 0;
26
31
 
27
32
  &:checked ~ .custom-control-label::before {
@@ -34,7 +39,7 @@
34
39
  &:focus ~ .custom-control-label::before {
35
40
  // the mixin is not used here to make sure there is feedback
36
41
  @if $enable-shadows {
37
- box-shadow: $input-box-shadow, $input-focus-box-shadow;
42
+ box-shadow: $input-box-shadow, $custom-control-indicator-focus-box-shadow;
38
43
  } @else {
39
44
  box-shadow: $custom-control-indicator-focus-box-shadow;
40
45
  }
@@ -51,6 +56,8 @@
51
56
  @include box-shadow($custom-control-indicator-active-box-shadow);
52
57
  }
53
58
 
59
+ // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247
60
+ &[disabled],
54
61
  &:disabled {
55
62
  ~ .custom-control-label {
56
63
  color: $custom-control-label-disabled-color;
@@ -69,12 +76,14 @@
69
76
  .custom-control-label {
70
77
  position: relative;
71
78
  margin-bottom: 0;
79
+ color: $custom-control-label-color;
72
80
  vertical-align: top;
81
+ cursor: $custom-control-cursor;
73
82
 
74
83
  // Background-color and (when enabled) gradient
75
84
  &::before {
76
85
  position: absolute;
77
- top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;
86
+ top: ($font-size-base * $line-height-base - $custom-control-indicator-size) * .5;
78
87
  left: -($custom-control-gutter + $custom-control-indicator-size);
79
88
  display: block;
80
89
  width: $custom-control-indicator-size;
@@ -82,20 +91,20 @@
82
91
  pointer-events: none;
83
92
  content: "";
84
93
  background-color: $custom-control-indicator-bg;
85
- border: $custom-control-indicator-border-color solid $custom-control-indicator-border-width;
94
+ border: $custom-control-indicator-border-width solid $custom-control-indicator-border-color;
86
95
  @include box-shadow($custom-control-indicator-box-shadow);
87
96
  }
88
97
 
89
98
  // Foreground (icon)
90
99
  &::after {
91
100
  position: absolute;
92
- top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;
101
+ top: ($font-size-base * $line-height-base - $custom-control-indicator-size) * .5;
93
102
  left: -($custom-control-gutter + $custom-control-indicator-size);
94
103
  display: block;
95
104
  width: $custom-control-indicator-size;
96
105
  height: $custom-control-indicator-size;
97
106
  content: "";
98
- background: no-repeat 50% / #{$custom-control-indicator-bg-size};
107
+ background: 50% / #{$custom-control-indicator-bg-size} no-repeat;
99
108
  }
100
109
  }
101
110
 
@@ -111,7 +120,7 @@
111
120
 
112
121
  .custom-control-input:checked ~ .custom-control-label {
113
122
  &::after {
114
- background-image: $custom-checkbox-indicator-icon-checked;
123
+ background-image: escape-svg($custom-checkbox-indicator-icon-checked);
115
124
  }
116
125
  }
117
126
 
@@ -122,16 +131,16 @@
122
131
  @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);
123
132
  }
124
133
  &::after {
125
- background-image: $custom-checkbox-indicator-icon-indeterminate;
134
+ background-image: escape-svg($custom-checkbox-indicator-icon-indeterminate);
126
135
  }
127
136
  }
128
137
 
129
138
  .custom-control-input:disabled {
130
139
  &:checked ~ .custom-control-label::before {
131
- background-color: $custom-control-indicator-checked-disabled-bg;
140
+ @include gradient-bg($custom-control-indicator-checked-disabled-bg);
132
141
  }
133
142
  &:indeterminate ~ .custom-control-label::before {
134
- background-color: $custom-control-indicator-checked-disabled-bg;
143
+ @include gradient-bg($custom-control-indicator-checked-disabled-bg);
135
144
  }
136
145
  }
137
146
  }
@@ -142,19 +151,19 @@
142
151
 
143
152
  .custom-radio {
144
153
  .custom-control-label::before {
145
- // stylelint-disable-next-line property-blacklist
154
+ // stylelint-disable-next-line property-disallowed-list
146
155
  border-radius: $custom-radio-indicator-border-radius;
147
156
  }
148
157
 
149
158
  .custom-control-input:checked ~ .custom-control-label {
150
159
  &::after {
151
- background-image: $custom-radio-indicator-icon-checked;
160
+ background-image: escape-svg($custom-radio-indicator-icon-checked);
152
161
  }
153
162
  }
154
163
 
155
164
  .custom-control-input:disabled {
156
165
  &:checked ~ .custom-control-label::before {
157
- background-color: $custom-control-indicator-checked-disabled-bg;
166
+ @include gradient-bg($custom-control-indicator-checked-disabled-bg);
158
167
  }
159
168
  }
160
169
  }
@@ -172,17 +181,17 @@
172
181
  left: -($custom-switch-width + $custom-control-gutter);
173
182
  width: $custom-switch-width;
174
183
  pointer-events: all;
175
- // stylelint-disable-next-line property-blacklist
184
+ // stylelint-disable-next-line property-disallowed-list
176
185
  border-radius: $custom-switch-indicator-border-radius;
177
186
  }
178
187
 
179
188
  &::after {
180
- top: calc(#{(($font-size-base * $line-height-base - $custom-control-indicator-size) / 2)} + #{$custom-control-indicator-border-width * 2});
181
- left: calc(#{-($custom-switch-width + $custom-control-gutter)} + #{$custom-control-indicator-border-width * 2});
189
+ top: add(($font-size-base * $line-height-base - $custom-control-indicator-size) * .5, $custom-control-indicator-border-width * 2);
190
+ left: add(-($custom-switch-width + $custom-control-gutter), $custom-control-indicator-border-width * 2);
182
191
  width: $custom-switch-indicator-size;
183
192
  height: $custom-switch-indicator-size;
184
193
  background-color: $custom-control-indicator-border-color;
185
- // stylelint-disable-next-line property-blacklist
194
+ // stylelint-disable-next-line property-disallowed-list
186
195
  border-radius: $custom-switch-indicator-border-radius;
187
196
  @include transition(transform .15s ease-in-out, $custom-forms-transition);
188
197
  }
@@ -197,7 +206,7 @@
197
206
 
198
207
  .custom-control-input:disabled {
199
208
  &:checked ~ .custom-control-label::before {
200
- background-color: $custom-control-indicator-checked-disabled-bg;
209
+ @include gradient-bg($custom-control-indicator-checked-disabled-bg);
201
210
  }
202
211
  }
203
212
  }
@@ -220,8 +229,7 @@
220
229
  line-height: $custom-select-line-height;
221
230
  color: $custom-select-color;
222
231
  vertical-align: middle;
223
- background: $custom-select-background;
224
- background-color: $custom-select-bg;
232
+ background: $custom-select-bg $custom-select-background;
225
233
  border: $custom-select-border-width solid $custom-select-border-color;
226
234
  @include border-radius($custom-select-border-radius, 0);
227
235
  @include box-shadow($custom-select-box-shadow);
@@ -231,8 +239,9 @@
231
239
  border-color: $custom-select-focus-border-color;
232
240
  outline: 0;
233
241
  @if $enable-shadows {
234
- box-shadow: $custom-select-box-shadow, $custom-select-focus-box-shadow;
242
+ @include box-shadow($custom-select-box-shadow, $custom-select-focus-box-shadow);
235
243
  } @else {
244
+ // Avoid using mixin so we can pass custom focus shadow properly
236
245
  box-shadow: $custom-select-focus-box-shadow;
237
246
  }
238
247
 
@@ -263,6 +272,12 @@
263
272
  &::-ms-expand {
264
273
  display: none;
265
274
  }
275
+
276
+ // Remove outline from select box in FF
277
+ &:-moz-focusring {
278
+ color: transparent;
279
+ text-shadow: 0 0 0 $custom-select-color;
280
+ }
266
281
  }
267
282
 
268
283
  .custom-select-sm {
@@ -300,6 +315,7 @@
300
315
  width: 100%;
301
316
  height: $custom-file-height;
302
317
  margin: 0;
318
+ overflow: hidden;
303
319
  opacity: 0;
304
320
 
305
321
  &:focus ~ .custom-file-label {
@@ -307,6 +323,8 @@
307
323
  box-shadow: $custom-file-focus-box-shadow;
308
324
  }
309
325
 
326
+ // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247
327
+ &[disabled] ~ .custom-file-label,
310
328
  &:disabled ~ .custom-file-label {
311
329
  background-color: $custom-file-disabled-bg;
312
330
  }
@@ -330,6 +348,7 @@
330
348
  z-index: 1;
331
349
  height: $custom-file-height;
332
350
  padding: $custom-file-padding-y $custom-file-padding-x;
351
+ overflow: hidden;
333
352
  font-family: $custom-file-font-family;
334
353
  font-weight: $custom-file-font-weight;
335
354
  line-height: $custom-file-line-height;
@@ -365,13 +384,13 @@
365
384
 
366
385
  .custom-range {
367
386
  width: 100%;
368
- height: calc(#{$custom-range-thumb-height} + #{$custom-range-thumb-focus-box-shadow-width * 2});
387
+ height: add($custom-range-thumb-height, $custom-range-thumb-focus-box-shadow-width * 2);
369
388
  padding: 0; // Need to reset padding
370
389
  background-color: transparent;
371
390
  appearance: none;
372
391
 
373
392
  &:focus {
374
- outline: none;
393
+ outline: 0;
375
394
 
376
395
  // Pseudo-elements must be split across multiple rulesets to have an effect.
377
396
  // No box-shadow() mixin for focus accessibility.
@@ -387,7 +406,7 @@
387
406
  &::-webkit-slider-thumb {
388
407
  width: $custom-range-thumb-width;
389
408
  height: $custom-range-thumb-height;
390
- margin-top: ($custom-range-track-height - $custom-range-thumb-height) / 2; // Webkit specific
409
+ margin-top: ($custom-range-track-height - $custom-range-thumb-height) * .5; // Webkit specific
391
410
  @include gradient-bg($custom-range-thumb-bg);
392
411
  border: $custom-range-thumb-border;
393
412
  @include border-radius($custom-range-thumb-border-radius);
@@ -462,7 +481,7 @@
462
481
  cursor: $custom-range-track-cursor;
463
482
  background-color: transparent;
464
483
  border-color: transparent;
465
- border-width: $custom-range-thumb-height / 2;
484
+ border-width: $custom-range-thumb-height * .5;
466
485
  @include box-shadow($custom-range-track-box-shadow);
467
486
  }
468
487
 
@@ -10,7 +10,7 @@
10
10
  white-space: nowrap;
11
11
 
12
12
  // Generate the caret automatically
13
- @include caret;
13
+ @include caret();
14
14
  }
15
15
 
16
16
  // The dropdown menu
@@ -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"],
@@ -114,7 +114,7 @@
114
114
 
115
115
  // Dividers (basically an `<hr>`) within the dropdown
116
116
  .dropdown-divider {
117
- @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y);
117
+ @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y, true);
118
118
  }
119
119
 
120
120
  // Links, buttons, and more within the dropdown menu
@@ -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
@@ -144,7 +145,7 @@
144
145
  }
145
146
  }
146
147
 
147
- @include hover-focus {
148
+ @include hover-focus() {
148
149
  color: $dropdown-link-hover-color;
149
150
  text-decoration: none;
150
151
  @include gradient-bg($dropdown-link-hover-bg);
@@ -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;