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.
- checksums.yaml +4 -4
- data/.travis.yml +15 -1
- data/CHANGELOG.md +4 -12
- data/README.md +7 -1
- data/Rakefile +16 -4
- data/assets/javascripts/bootstrap/alert.js +43 -55
- data/assets/javascripts/bootstrap/button.js +112 -70
- data/assets/javascripts/bootstrap/carousel.js +164 -189
- data/assets/javascripts/bootstrap/collapse.js +98 -129
- data/assets/javascripts/bootstrap/dropdown.js +165 -200
- data/assets/javascripts/bootstrap/modal.js +218 -205
- data/assets/javascripts/bootstrap/popover.js +63 -79
- data/assets/javascripts/bootstrap/scrollspy.js +82 -119
- data/assets/javascripts/bootstrap/tab.js +79 -85
- data/assets/javascripts/bootstrap/toast.js +100 -115
- data/assets/javascripts/bootstrap/tooltip.js +207 -225
- data/assets/javascripts/bootstrap/util.js +41 -23
- data/assets/javascripts/bootstrap.js +1235 -1314
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/stylesheets/_bootstrap-grid.scss +5 -4
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
- data/assets/stylesheets/_bootstrap.scss +4 -4
- data/assets/stylesheets/bootstrap/_alert.scss +1 -0
- data/assets/stylesheets/bootstrap/_badge.scss +1 -1
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -2
- data/assets/stylesheets/bootstrap/_button-group.scss +1 -1
- data/assets/stylesheets/bootstrap/_buttons.scss +13 -8
- data/assets/stylesheets/bootstrap/_card.scss +47 -50
- data/assets/stylesheets/bootstrap/_carousel.scss +12 -9
- data/assets/stylesheets/bootstrap/_close.scss +2 -3
- data/assets/stylesheets/bootstrap/_code.scss +1 -1
- data/assets/stylesheets/bootstrap/_custom-forms.scss +43 -24
- data/assets/stylesheets/bootstrap/_dropdown.scss +7 -6
- data/assets/stylesheets/bootstrap/_forms.scss +30 -13
- data/assets/stylesheets/bootstrap/_functions.scss +110 -6
- data/assets/stylesheets/bootstrap/_grid.scss +32 -11
- data/assets/stylesheets/bootstrap/_images.scss +3 -3
- data/assets/stylesheets/bootstrap/_input-group.scss +23 -5
- data/assets/stylesheets/bootstrap/_jumbotron.scss +1 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +36 -31
- data/assets/stylesheets/bootstrap/_mixins.scss +3 -3
- data/assets/stylesheets/bootstrap/_modal.scss +26 -15
- data/assets/stylesheets/bootstrap/_nav.scss +12 -7
- data/assets/stylesheets/bootstrap/_navbar.scss +55 -17
- data/assets/stylesheets/bootstrap/_pagination.scss +5 -4
- data/assets/stylesheets/bootstrap/_popover.scss +17 -18
- data/assets/stylesheets/bootstrap/_print.scss +1 -10
- data/assets/stylesheets/bootstrap/_progress.scss +7 -3
- data/assets/stylesheets/bootstrap/_reboot.scss +39 -38
- data/assets/stylesheets/bootstrap/_spinners.scss +18 -8
- data/assets/stylesheets/bootstrap/_tables.scss +3 -3
- data/assets/stylesheets/bootstrap/_toasts.scss +4 -2
- data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
- data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
- data/assets/stylesheets/bootstrap/_type.scss +3 -3
- data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
- data/assets/stylesheets/bootstrap/_variables.scss +71 -45
- data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
- data/assets/stylesheets/bootstrap/mixins/_badge.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +27 -14
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +11 -8
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
- data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -3
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +52 -49
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +31 -17
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +32 -14
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +4 -4
- data/assets/stylesheets/bootstrap/mixins/_image.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -1
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +5 -4
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +3 -2
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
- data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
- data/assets/stylesheets/bootstrap/utilities/_borders.scss +1 -1
- data/assets/stylesheets/bootstrap/utilities/_embed.scss +1 -1
- data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
- data/assets/stylesheets/bootstrap/utilities/_spacing.scss +1 -1
- data/assets/stylesheets/bootstrap/utilities/_text.scss +4 -4
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +126 -102
- data/bootstrap.gemspec +2 -4
- data/lib/bootstrap/engine.rb +17 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +18 -6
- data/tasks/updater/network.rb +8 -2
- data/test/dummy_rails/app/assets/config/manifest.js +3 -0
- data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
- data/test/gemfiles/rails_6_0.gemfile +7 -0
- data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
- data/test/gemfiles/rails_7_0_sassc.gemfile +8 -0
- data/test/support/dummy_rails_integration.rb +3 -1
- data/test/test_helper.rb +18 -13
- metadata +17 -21
@@ -31,7 +31,7 @@
|
|
31
31
|
}
|
32
32
|
|
33
33
|
// Customize the `:focus` state to imitate native WebKit styles.
|
34
|
-
@include form-control-focus();
|
34
|
+
@include form-control-focus($ignore-warning: true);
|
35
35
|
|
36
36
|
// Placeholder
|
37
37
|
&::placeholder {
|
@@ -53,7 +53,22 @@
|
|
53
53
|
}
|
54
54
|
}
|
55
55
|
|
56
|
+
input[type="date"],
|
57
|
+
input[type="time"],
|
58
|
+
input[type="datetime-local"],
|
59
|
+
input[type="month"] {
|
60
|
+
&.form-control {
|
61
|
+
appearance: none; // Fix appearance for date inputs in Safari
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
56
65
|
select.form-control {
|
66
|
+
// Remove select outline from select box in FF
|
67
|
+
&:-moz-focusring {
|
68
|
+
color: transparent;
|
69
|
+
text-shadow: 0 0 0 $input-color;
|
70
|
+
}
|
71
|
+
|
57
72
|
&:focus::-ms-value {
|
58
73
|
// Suppress the nested default white text on blue background highlight given to
|
59
74
|
// the selected option text when the (still closed) <select> receives focus
|
@@ -80,23 +95,23 @@ select.form-control {
|
|
80
95
|
// For use with horizontal and inline forms, when you need the label (or legend)
|
81
96
|
// text to align with the form controls.
|
82
97
|
.col-form-label {
|
83
|
-
padding-top:
|
84
|
-
padding-bottom:
|
98
|
+
padding-top: add($input-padding-y, $input-border-width);
|
99
|
+
padding-bottom: add($input-padding-y, $input-border-width);
|
85
100
|
margin-bottom: 0; // Override the `<label>/<legend>` default
|
86
101
|
@include font-size(inherit); // Override the `<legend>` default
|
87
102
|
line-height: $input-line-height;
|
88
103
|
}
|
89
104
|
|
90
105
|
.col-form-label-lg {
|
91
|
-
padding-top:
|
92
|
-
padding-bottom:
|
106
|
+
padding-top: add($input-padding-y-lg, $input-border-width);
|
107
|
+
padding-bottom: add($input-padding-y-lg, $input-border-width);
|
93
108
|
@include font-size($input-font-size-lg);
|
94
109
|
line-height: $input-line-height-lg;
|
95
110
|
}
|
96
111
|
|
97
112
|
.col-form-label-sm {
|
98
|
-
padding-top:
|
99
|
-
padding-bottom:
|
113
|
+
padding-top: add($input-padding-y-sm, $input-border-width);
|
114
|
+
padding-bottom: add($input-padding-y-sm, $input-border-width);
|
100
115
|
@include font-size($input-font-size-sm);
|
101
116
|
line-height: $input-line-height-sm;
|
102
117
|
}
|
@@ -110,9 +125,9 @@ select.form-control {
|
|
110
125
|
.form-control-plaintext {
|
111
126
|
display: block;
|
112
127
|
width: 100%;
|
113
|
-
padding
|
114
|
-
padding-bottom: $input-padding-y;
|
128
|
+
padding: $input-padding-y 0;
|
115
129
|
margin-bottom: 0; // match inputs if this class comes on inputs with default margins
|
130
|
+
@include font-size($input-font-size);
|
116
131
|
line-height: $input-line-height;
|
117
132
|
color: $input-plaintext-color;
|
118
133
|
background-color: transparent;
|
@@ -184,13 +199,13 @@ textarea.form-control {
|
|
184
199
|
.form-row {
|
185
200
|
display: flex;
|
186
201
|
flex-wrap: wrap;
|
187
|
-
margin-right: -$form-grid-gutter-width
|
188
|
-
margin-left: -$form-grid-gutter-width
|
202
|
+
margin-right: -$form-grid-gutter-width * .5;
|
203
|
+
margin-left: -$form-grid-gutter-width * .5;
|
189
204
|
|
190
205
|
> .col,
|
191
206
|
> [class*="col-"] {
|
192
|
-
padding-right: $form-grid-gutter-width
|
193
|
-
padding-left: $form-grid-gutter-width
|
207
|
+
padding-right: $form-grid-gutter-width * .5;
|
208
|
+
padding-left: $form-grid-gutter-width * .5;
|
194
209
|
}
|
195
210
|
}
|
196
211
|
|
@@ -210,6 +225,8 @@ textarea.form-control {
|
|
210
225
|
margin-top: $form-check-input-margin-y;
|
211
226
|
margin-left: -$form-check-input-gutter;
|
212
227
|
|
228
|
+
// Use [disabled] and :disabled for workaround https://github.com/twbs/bootstrap/issues/28247
|
229
|
+
&[disabled] ~ .form-check-label,
|
213
230
|
&:disabled ~ .form-check-label {
|
214
231
|
color: $text-muted;
|
215
232
|
}
|
@@ -8,7 +8,7 @@
|
|
8
8
|
$prev-key: null;
|
9
9
|
$prev-num: null;
|
10
10
|
@each $key, $num in $map {
|
11
|
-
@if $prev-num == null or unit($num) == "%" {
|
11
|
+
@if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" {
|
12
12
|
// Do nothing
|
13
13
|
} @else if not comparable($prev-num, $num) {
|
14
14
|
@warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
|
@@ -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
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@
|
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
|
|
@@ -48,13 +50,32 @@
|
|
48
50
|
@return $string;
|
49
51
|
}
|
50
52
|
|
53
|
+
// See https://codepen.io/kevinweber/pen/dXWoRw
|
54
|
+
//
|
55
|
+
// Requires the use of quotes around data URIs.
|
56
|
+
|
57
|
+
@function escape-svg($string) {
|
58
|
+
@if str-index($string, "data:image/svg+xml") {
|
59
|
+
@each $char, $encoded in $escaped-characters {
|
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
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
@return $string;
|
70
|
+
}
|
71
|
+
|
51
72
|
// Color contrast
|
52
73
|
@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {
|
53
74
|
$r: red($color);
|
54
75
|
$g: green($color);
|
55
76
|
$b: blue($color);
|
56
77
|
|
57
|
-
$yiq: (($r * 299) + ($g * 587) + ($b * 114))
|
78
|
+
$yiq: (($r * 299) + ($g * 587) + ($b * 114)) * .001;
|
58
79
|
|
59
80
|
@if ($yiq >= $yiq-contrasted-threshold) {
|
60
81
|
@return $dark;
|
@@ -84,3 +105,86 @@
|
|
84
105
|
|
85
106
|
@return mix($color-base, $color, $level * $theme-color-interval);
|
86
107
|
}
|
108
|
+
|
109
|
+
// Return valid calc
|
110
|
+
@function add($value1, $value2, $return-calc: true) {
|
111
|
+
@if $value1 == null {
|
112
|
+
@return $value2;
|
113
|
+
}
|
114
|
+
|
115
|
+
@if $value2 == null {
|
116
|
+
@return $value1;
|
117
|
+
}
|
118
|
+
|
119
|
+
@if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {
|
120
|
+
@return $value1 + $value2;
|
121
|
+
}
|
122
|
+
|
123
|
+
@return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2);
|
124
|
+
}
|
125
|
+
|
126
|
+
@function subtract($value1, $value2, $return-calc: true) {
|
127
|
+
@if $value1 == null and $value2 == null {
|
128
|
+
@return null;
|
129
|
+
}
|
130
|
+
|
131
|
+
@if $value1 == null {
|
132
|
+
@return -$value2;
|
133
|
+
}
|
134
|
+
|
135
|
+
@if $value2 == null {
|
136
|
+
@return $value1;
|
137
|
+
}
|
138
|
+
|
139
|
+
@if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {
|
140
|
+
@return $value1 - $value2;
|
141
|
+
}
|
142
|
+
|
143
|
+
@if type-of($value2) != number {
|
144
|
+
$value2: unquote("(") + $value2 + unquote(")");
|
145
|
+
}
|
146
|
+
|
147
|
+
@return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2);
|
148
|
+
}
|
149
|
+
|
150
|
+
@function divide($dividend, $divisor, $precision: 10) {
|
151
|
+
$sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
|
152
|
+
$dividend: abs($dividend);
|
153
|
+
$divisor: abs($divisor);
|
154
|
+
@if $dividend == 0 {
|
155
|
+
@return 0;
|
156
|
+
}
|
157
|
+
@if $divisor == 0 {
|
158
|
+
@error "Cannot divide by 0";
|
159
|
+
}
|
160
|
+
$remainder: $dividend;
|
161
|
+
$result: 0;
|
162
|
+
$factor: 10;
|
163
|
+
@while ($remainder > 0 and $precision >= 0) {
|
164
|
+
$quotient: 0;
|
165
|
+
@while ($remainder >= $divisor) {
|
166
|
+
$remainder: $remainder - $divisor;
|
167
|
+
$quotient: $quotient + 1;
|
168
|
+
}
|
169
|
+
$result: $result * 10 + $quotient;
|
170
|
+
$factor: $factor * .1;
|
171
|
+
$remainder: $remainder * 10;
|
172
|
+
$precision: $precision - 1;
|
173
|
+
@if ($precision < 0 and $remainder >= $divisor * 5) {
|
174
|
+
$result: $result + 1;
|
175
|
+
}
|
176
|
+
}
|
177
|
+
$result: $result * $factor * $sign;
|
178
|
+
$dividend-unit: unit($dividend);
|
179
|
+
$divisor-unit: unit($divisor);
|
180
|
+
$unit-map: (
|
181
|
+
"px": 1px,
|
182
|
+
"rem": 1rem,
|
183
|
+
"em": 1em,
|
184
|
+
"%": 1%
|
185
|
+
);
|
186
|
+
@if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {
|
187
|
+
$result: $result * map-get($unit-map, $dividend-unit);
|
188
|
+
}
|
189
|
+
@return $result;
|
190
|
+
}
|
@@ -3,26 +3,47 @@
|
|
3
3
|
// Set the container width, and override it for fixed navbars in media queries.
|
4
4
|
|
5
5
|
@if $enable-grid-classes {
|
6
|
-
|
6
|
+
// Single container class with breakpoint max-widths
|
7
|
+
.container,
|
8
|
+
// 100% wide container at all breakpoints
|
9
|
+
.container-fluid {
|
7
10
|
@include make-container();
|
8
|
-
@include make-container-max-widths();
|
9
11
|
}
|
10
|
-
}
|
11
12
|
|
12
|
-
//
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
// Responsive containers that are 100% wide until a breakpoint
|
14
|
+
@each $breakpoint, $container-max-width in $container-max-widths {
|
15
|
+
.container-#{$breakpoint} {
|
16
|
+
@extend .container-fluid;
|
17
|
+
}
|
16
18
|
|
17
|
-
@
|
18
|
-
|
19
|
-
|
19
|
+
@include media-breakpoint-up($breakpoint, $grid-breakpoints) {
|
20
|
+
%responsive-container-#{$breakpoint} {
|
21
|
+
max-width: $container-max-width;
|
22
|
+
}
|
23
|
+
|
24
|
+
// Extend each breakpoint which is smaller or equal to the current breakpoint
|
25
|
+
$extend-breakpoint: true;
|
26
|
+
|
27
|
+
@each $name, $width in $grid-breakpoints {
|
28
|
+
@if ($extend-breakpoint) {
|
29
|
+
.container#{breakpoint-infix($name, $grid-breakpoints)} {
|
30
|
+
@extend %responsive-container-#{$breakpoint};
|
31
|
+
}
|
32
|
+
|
33
|
+
// Once the current breakpoint is reached, stop extending
|
34
|
+
@if ($breakpoint == $name) {
|
35
|
+
$extend-breakpoint: false;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
20
40
|
}
|
21
41
|
}
|
22
42
|
|
43
|
+
|
23
44
|
// Row
|
24
45
|
//
|
25
|
-
// Rows contain
|
46
|
+
// Rows contain your columns.
|
26
47
|
|
27
48
|
@if $enable-grid-classes {
|
28
49
|
.row {
|
@@ -6,7 +6,7 @@
|
|
6
6
|
// which weren't expecting the images within themselves to be involuntarily resized.
|
7
7
|
// See also https://github.com/twbs/bootstrap/issues/18178
|
8
8
|
.img-fluid {
|
9
|
-
@include img-fluid;
|
9
|
+
@include img-fluid();
|
10
10
|
}
|
11
11
|
|
12
12
|
|
@@ -19,7 +19,7 @@
|
|
19
19
|
@include box-shadow($thumbnail-box-shadow);
|
20
20
|
|
21
21
|
// Keep them at most 100% wide
|
22
|
-
@include img-fluid;
|
22
|
+
@include img-fluid();
|
23
23
|
}
|
24
24
|
|
25
25
|
//
|
@@ -32,7 +32,7 @@
|
|
32
32
|
}
|
33
33
|
|
34
34
|
.figure-img {
|
35
|
-
margin-bottom: $spacer
|
35
|
+
margin-bottom: $spacer * .5;
|
36
36
|
line-height: 1;
|
37
37
|
}
|
38
38
|
|
@@ -17,9 +17,8 @@
|
|
17
17
|
> .custom-file {
|
18
18
|
position: relative; // For focus state's z-index
|
19
19
|
flex: 1 1 auto;
|
20
|
-
// Add width 1% and flex-basis auto to ensure that button will not wrap out
|
21
|
-
// the column. Applies to IE Edge+ and Firefox. Chrome does not require this.
|
22
20
|
width: 1%;
|
21
|
+
min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size
|
23
22
|
margin-bottom: 0;
|
24
23
|
|
25
24
|
+ .form-control,
|
@@ -43,7 +42,6 @@
|
|
43
42
|
|
44
43
|
> .form-control,
|
45
44
|
> .custom-select {
|
46
|
-
&:not(:last-child) { @include border-right-radius(0); }
|
47
45
|
&:not(:first-child) { @include border-left-radius(0); }
|
48
46
|
}
|
49
47
|
|
@@ -57,6 +55,24 @@
|
|
57
55
|
&:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
|
58
56
|
&:not(:first-child) .custom-file-label { @include border-left-radius(0); }
|
59
57
|
}
|
58
|
+
|
59
|
+
&:not(.has-validation) {
|
60
|
+
> .form-control:not(:last-child),
|
61
|
+
> .custom-select:not(:last-child),
|
62
|
+
> .custom-file:not(:last-child) .custom-file-label,
|
63
|
+
> .custom-file:not(:last-child) .custom-file-label::after {
|
64
|
+
@include border-right-radius(0);
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
&.has-validation {
|
69
|
+
> .form-control:nth-last-child(n + 3),
|
70
|
+
> .custom-select:nth-last-child(n + 3),
|
71
|
+
> .custom-file:nth-last-child(n + 3) .custom-file-label,
|
72
|
+
> .custom-file:nth-last-child(n + 3) .custom-file-label::after {
|
73
|
+
@include border-right-radius(0);
|
74
|
+
}
|
75
|
+
}
|
60
76
|
}
|
61
77
|
|
62
78
|
|
@@ -176,8 +192,10 @@
|
|
176
192
|
|
177
193
|
.input-group > .input-group-prepend > .btn,
|
178
194
|
.input-group > .input-group-prepend > .input-group-text,
|
179
|
-
.input-group > .input-group-append:not(:last-child) > .btn,
|
180
|
-
.input-group > .input-group-append:not(:last-child) > .input-group-text,
|
195
|
+
.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
|
196
|
+
.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
|
197
|
+
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,
|
198
|
+
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,
|
181
199
|
.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
|
182
200
|
.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
|
183
201
|
@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
|
|
@@ -23,7 +24,7 @@
|
|
23
24
|
text-align: inherit; // For `<button>`s (anchors inherit)
|
24
25
|
|
25
26
|
// Hover state
|
26
|
-
@include hover-focus {
|
27
|
+
@include hover-focus() {
|
27
28
|
z-index: 1; // Place hover/focus items above their siblings for proper border styling
|
28
29
|
color: $list-group-action-hover-color;
|
29
30
|
text-decoration: none;
|
@@ -45,19 +46,17 @@
|
|
45
46
|
position: relative;
|
46
47
|
display: block;
|
47
48
|
padding: $list-group-item-padding-y $list-group-item-padding-x;
|
48
|
-
// Place the border on the list items and negative margin up for better styling
|
49
|
-
margin-bottom: -$list-group-border-width;
|
50
49
|
color: $list-group-color;
|
50
|
+
text-decoration: if($link-decoration == none, null, none);
|
51
51
|
background-color: $list-group-bg;
|
52
52
|
border: $list-group-border-width solid $list-group-border-color;
|
53
53
|
|
54
54
|
&:first-child {
|
55
|
-
@include border-top-radius(
|
55
|
+
@include border-top-radius(inherit);
|
56
56
|
}
|
57
57
|
|
58
58
|
&:last-child {
|
59
|
-
|
60
|
-
@include border-bottom-radius($list-group-border-radius);
|
59
|
+
@include border-bottom-radius(inherit);
|
61
60
|
}
|
62
61
|
|
63
62
|
&.disabled,
|
@@ -74,6 +73,15 @@
|
|
74
73
|
background-color: $list-group-active-bg;
|
75
74
|
border-color: $list-group-active-border-color;
|
76
75
|
}
|
76
|
+
|
77
|
+
& + & {
|
78
|
+
border-top-width: 0;
|
79
|
+
|
80
|
+
&.active {
|
81
|
+
margin-top: -$list-group-border-width;
|
82
|
+
border-top-width: $list-group-border-width;
|
83
|
+
}
|
84
|
+
}
|
77
85
|
}
|
78
86
|
|
79
87
|
|
@@ -88,20 +96,30 @@
|
|
88
96
|
.list-group-horizontal#{$infix} {
|
89
97
|
flex-direction: row;
|
90
98
|
|
91
|
-
.list-group-item {
|
92
|
-
margin-right: -$list-group-border-width;
|
93
|
-
margin-bottom: 0;
|
94
|
-
|
99
|
+
> .list-group-item {
|
95
100
|
&:first-child {
|
96
|
-
@include border-left-radius($list-group-border-radius);
|
101
|
+
@include border-bottom-left-radius($list-group-border-radius);
|
97
102
|
@include border-top-right-radius(0);
|
98
103
|
}
|
99
104
|
|
100
105
|
&:last-child {
|
101
|
-
|
102
|
-
@include border-right-radius($list-group-border-radius);
|
106
|
+
@include border-top-right-radius($list-group-border-radius);
|
103
107
|
@include border-bottom-left-radius(0);
|
104
108
|
}
|
109
|
+
|
110
|
+
&.active {
|
111
|
+
margin-top: 0;
|
112
|
+
}
|
113
|
+
|
114
|
+
+ .list-group-item {
|
115
|
+
border-top-width: $list-group-border-width;
|
116
|
+
border-left-width: 0;
|
117
|
+
|
118
|
+
&.active {
|
119
|
+
margin-left: -$list-group-border-width;
|
120
|
+
border-left-width: $list-group-border-width;
|
121
|
+
}
|
122
|
+
}
|
105
123
|
}
|
106
124
|
}
|
107
125
|
}
|
@@ -114,26 +132,13 @@
|
|
114
132
|
// useful within other components (e.g., cards).
|
115
133
|
|
116
134
|
.list-group-flush {
|
117
|
-
|
118
|
-
border-right: 0;
|
119
|
-
border-left: 0;
|
120
|
-
@include border-radius(0);
|
135
|
+
@include border-radius(0);
|
121
136
|
|
122
|
-
|
123
|
-
|
124
|
-
}
|
125
|
-
}
|
137
|
+
> .list-group-item {
|
138
|
+
border-width: 0 0 $list-group-border-width;
|
126
139
|
|
127
|
-
|
128
|
-
|
129
|
-
border-top: 0;
|
130
|
-
}
|
131
|
-
}
|
132
|
-
|
133
|
-
&:last-child {
|
134
|
-
.list-group-item:last-child {
|
135
|
-
margin-bottom: 0;
|
136
|
-
border-bottom: 0;
|
140
|
+
&:last-child {
|
141
|
+
border-bottom-width: 0;
|
137
142
|
}
|
138
143
|
}
|
139
144
|
}
|
@@ -22,7 +22,7 @@
|
|
22
22
|
@import "mixins/text-truncate";
|
23
23
|
@import "mixins/visibility";
|
24
24
|
|
25
|
-
//
|
25
|
+
// Components
|
26
26
|
@import "mixins/alert";
|
27
27
|
@import "mixins/buttons";
|
28
28
|
@import "mixins/caret";
|
@@ -33,14 +33,14 @@
|
|
33
33
|
@import "mixins/forms";
|
34
34
|
@import "mixins/table-row";
|
35
35
|
|
36
|
-
//
|
36
|
+
// Skins
|
37
37
|
@import "mixins/background-variant";
|
38
38
|
@import "mixins/border-radius";
|
39
39
|
@import "mixins/box-shadow";
|
40
40
|
@import "mixins/gradients";
|
41
41
|
@import "mixins/transition";
|
42
42
|
|
43
|
-
//
|
43
|
+
// Layout
|
44
44
|
@import "mixins/clearfix";
|
45
45
|
@import "mixins/grid-framework";
|
46
46
|
@import "mixins/grid";
|
@@ -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:
|
60
|
+
max-height: subtract(100%, $modal-dialog-margin * 2);
|
56
61
|
|
57
62
|
.modal-content {
|
58
|
-
max-height:
|
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:
|
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:
|
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
|
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,19 @@
|
|
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 * .5;
|
172
179
|
border-top: $modal-footer-border-width solid $modal-footer-border-color;
|
173
|
-
@include border-bottom-radius($modal-content-border-radius);
|
180
|
+
@include border-bottom-radius($modal-content-inner-border-radius);
|
174
181
|
|
175
|
-
//
|
176
|
-
|
177
|
-
|
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
|
+
> * {
|
186
|
+
margin: $modal-footer-margin-between * .5;
|
187
|
+
}
|
178
188
|
}
|
179
189
|
|
180
190
|
// Measure scrollbar width for padding body during modal show/hide
|
@@ -195,18 +205,19 @@
|
|
195
205
|
}
|
196
206
|
|
197
207
|
.modal-dialog-scrollable {
|
198
|
-
max-height:
|
208
|
+
max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
|
199
209
|
|
200
210
|
.modal-content {
|
201
|
-
max-height:
|
211
|
+
max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);
|
202
212
|
}
|
203
213
|
}
|
204
214
|
|
205
215
|
.modal-dialog-centered {
|
206
|
-
min-height:
|
216
|
+
min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
|
207
217
|
|
208
218
|
&::before {
|
209
|
-
height:
|
219
|
+
height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);
|
220
|
+
height: min-content;
|
210
221
|
}
|
211
222
|
}
|
212
223
|
|