bootstrap 4.0.0.beta3 → 4.6.2
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 +5 -5
- data/.travis.yml +15 -1
- data/CHANGELOG.md +2 -2
- data/README.md +2 -2
- data/Rakefile +4 -2
- data/assets/javascripts/bootstrap/alert.js +79 -68
- data/assets/javascripts/bootstrap/button.js +140 -78
- data/assets/javascripts/bootstrap/carousel.js +294 -158
- data/assets/javascripts/bootstrap/collapse.js +157 -133
- data/assets/javascripts/bootstrap/dropdown.js +257 -167
- data/assets/javascripts/bootstrap/modal.js +285 -204
- data/assets/javascripts/bootstrap/popover.js +101 -60
- data/assets/javascripts/bootstrap/scrollspy.js +127 -106
- data/assets/javascripts/bootstrap/tab.js +113 -101
- data/assets/javascripts/bootstrap/toast.js +267 -0
- data/assets/javascripts/bootstrap/tooltip.js +406 -188
- data/assets/javascripts/bootstrap/util.js +106 -55
- data/assets/javascripts/bootstrap-sprockets.js +1 -0
- data/assets/javascripts/bootstrap.js +1946 -1482
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/stylesheets/_bootstrap-grid.scss +7 -12
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
- data/assets/stylesheets/_bootstrap.scss +6 -4
- data/assets/stylesheets/bootstrap/_alert.scss +3 -2
- data/assets/stylesheets/bootstrap/_badge.scss +8 -1
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +10 -6
- data/assets/stylesheets/bootstrap/_button-group.scss +17 -20
- data/assets/stylesheets/bootstrap/_buttons.scss +23 -28
- data/assets/stylesheets/bootstrap/_card.scss +77 -61
- data/assets/stylesheets/bootstrap/_carousel.scss +72 -63
- data/assets/stylesheets/bootstrap/_close.scss +15 -9
- data/assets/stylesheets/bootstrap/_code.scss +6 -14
- data/assets/stylesheets/bootstrap/_custom-forms.scss +287 -43
- data/assets/stylesheets/bootstrap/_dropdown.scss +70 -9
- data/assets/stylesheets/bootstrap/_forms.scss +56 -42
- data/assets/stylesheets/bootstrap/_functions.scss +117 -13
- data/assets/stylesheets/bootstrap/_grid.scss +32 -11
- data/assets/stylesheets/bootstrap/_images.scss +4 -4
- data/assets/stylesheets/bootstrap/_input-group.scss +80 -25
- data/assets/stylesheets/bootstrap/_jumbotron.scss +2 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +63 -24
- data/assets/stylesheets/bootstrap/_mixins.scss +9 -4
- data/assets/stylesheets/bootstrap/_modal.scss +96 -24
- data/assets/stylesheets/bootstrap/_nav.scss +14 -7
- data/assets/stylesheets/bootstrap/_navbar.scss +66 -45
- data/assets/stylesheets/bootstrap/_pagination.scss +10 -8
- data/assets/stylesheets/bootstrap/_popover.scss +56 -69
- data/assets/stylesheets/bootstrap/_print.scss +41 -19
- data/assets/stylesheets/bootstrap/_progress.scss +20 -6
- data/assets/stylesheets/bootstrap/_reboot.scss +88 -109
- data/assets/stylesheets/bootstrap/_spinners.scss +65 -0
- data/assets/stylesheets/bootstrap/_tables.scss +19 -14
- data/assets/stylesheets/bootstrap/_toasts.scss +46 -0
- data/assets/stylesheets/bootstrap/_tooltip.scss +6 -6
- data/assets/stylesheets/bootstrap/_transitions.scss +10 -20
- data/assets/stylesheets/bootstrap/_type.scss +19 -19
- data/assets/stylesheets/bootstrap/_utilities.scss +4 -0
- data/assets/stylesheets/bootstrap/_variables.scss +492 -215
- data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
- data/assets/stylesheets/bootstrap/mixins/_badge.scss +8 -3
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +51 -10
- data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +16 -1
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -9
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +35 -26
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +13 -16
- data/assets/stylesheets/bootstrap/mixins/_deprecate.scss +10 -0
- data/assets/stylesheets/bootstrap/mixins/_float.scss +6 -3
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +102 -40
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +7 -7
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +36 -25
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +34 -17
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +27 -51
- data/assets/stylesheets/bootstrap/mixins/_image.scss +4 -4
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +10 -13
- data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +3 -2
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +5 -6
- data/assets/stylesheets/bootstrap/mixins/_size.scss +1 -0
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +11 -2
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +7 -4
- data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +3 -1
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +20 -3
- data/assets/stylesheets/bootstrap/mixins/_visibility.scss +1 -0
- data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
- data/assets/stylesheets/bootstrap/utilities/_borders.scss +23 -2
- data/assets/stylesheets/bootstrap/utilities/_display.scss +6 -36
- data/assets/stylesheets/bootstrap/utilities/_embed.scss +7 -20
- data/assets/stylesheets/bootstrap/utilities/_flex.scss +5 -0
- data/assets/stylesheets/bootstrap/utilities/_float.scss +5 -3
- data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
- data/assets/stylesheets/bootstrap/utilities/_overflow.scss +5 -0
- data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -4
- data/assets/stylesheets/bootstrap/utilities/_shadows.scss +6 -0
- data/assets/stylesheets/bootstrap/utilities/_sizing.scss +8 -0
- data/assets/stylesheets/bootstrap/utilities/_spacing.scss +23 -1
- data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +19 -0
- data/assets/stylesheets/bootstrap/utilities/_text.scss +28 -8
- data/assets/stylesheets/bootstrap/utilities/_visibility.scss +4 -2
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +228 -0
- data/bootstrap.gemspec +7 -4
- data/lib/bootstrap/engine.rb +3 -0
- data/lib/bootstrap/version.rb +4 -2
- data/lib/bootstrap.rb +10 -7
- 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/support/dummy_rails_integration.rb +3 -1
- data/test/test_helper.rb +21 -15
- metadata +29 -16
- data/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +0 -10
|
@@ -2,20 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
// Contextual backgrounds
|
|
4
4
|
|
|
5
|
-
@mixin bg-variant($parent, $color) {
|
|
5
|
+
@mixin bg-variant($parent, $color, $ignore-warning: false) {
|
|
6
6
|
#{$parent} {
|
|
7
7
|
background-color: $color !important;
|
|
8
8
|
}
|
|
9
9
|
a#{$parent},
|
|
10
10
|
button#{$parent} {
|
|
11
|
-
@include hover-focus {
|
|
11
|
+
@include hover-focus() {
|
|
12
12
|
background-color: darken($color, 10%) !important;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
@include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning);
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
@mixin bg-gradient-variant($parent, $color) {
|
|
18
|
+
@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {
|
|
18
19
|
#{$parent} {
|
|
19
20
|
background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
|
|
20
21
|
}
|
|
22
|
+
@include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning);
|
|
21
23
|
}
|
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
color: color-yiq($bg);
|
|
3
3
|
background-color: $bg;
|
|
4
4
|
|
|
5
|
-
&
|
|
6
|
-
@include hover-focus {
|
|
5
|
+
@at-root a#{&} {
|
|
6
|
+
@include hover-focus() {
|
|
7
7
|
color: color-yiq($bg);
|
|
8
|
-
text-decoration: none;
|
|
9
8
|
background-color: darken($bg, 10%);
|
|
10
9
|
}
|
|
10
|
+
|
|
11
|
+
&:focus,
|
|
12
|
+
&.focus {
|
|
13
|
+
outline: 0;
|
|
14
|
+
box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);
|
|
15
|
+
}
|
|
11
16
|
}
|
|
12
17
|
}
|
|
@@ -1,35 +1,76 @@
|
|
|
1
|
+
// stylelint-disable property-disallowed-list
|
|
1
2
|
// Single side border-radius
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
// Helper function to replace negative values with 0
|
|
5
|
+
@function valid-radius($radius) {
|
|
6
|
+
$return: ();
|
|
7
|
+
@each $value in $radius {
|
|
8
|
+
@if type-of($value) == number {
|
|
9
|
+
$return: append($return, max($value, 0));
|
|
10
|
+
} @else {
|
|
11
|
+
$return: append($return, $value);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
@return $return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
|
|
4
18
|
@if $enable-rounded {
|
|
5
|
-
border-radius: $radius;
|
|
19
|
+
border-radius: valid-radius($radius);
|
|
20
|
+
}
|
|
21
|
+
@else if $fallback-border-radius != false {
|
|
22
|
+
border-radius: $fallback-border-radius;
|
|
6
23
|
}
|
|
7
24
|
}
|
|
8
25
|
|
|
9
26
|
@mixin border-top-radius($radius) {
|
|
10
27
|
@if $enable-rounded {
|
|
11
|
-
border-top-left-radius: $radius;
|
|
12
|
-
border-top-right-radius: $radius;
|
|
28
|
+
border-top-left-radius: valid-radius($radius);
|
|
29
|
+
border-top-right-radius: valid-radius($radius);
|
|
13
30
|
}
|
|
14
31
|
}
|
|
15
32
|
|
|
16
33
|
@mixin border-right-radius($radius) {
|
|
17
34
|
@if $enable-rounded {
|
|
18
|
-
border-top-right-radius: $radius;
|
|
19
|
-
border-bottom-right-radius: $radius;
|
|
35
|
+
border-top-right-radius: valid-radius($radius);
|
|
36
|
+
border-bottom-right-radius: valid-radius($radius);
|
|
20
37
|
}
|
|
21
38
|
}
|
|
22
39
|
|
|
23
40
|
@mixin border-bottom-radius($radius) {
|
|
24
41
|
@if $enable-rounded {
|
|
25
|
-
border-bottom-right-radius: $radius;
|
|
26
|
-
border-bottom-left-radius: $radius;
|
|
42
|
+
border-bottom-right-radius: valid-radius($radius);
|
|
43
|
+
border-bottom-left-radius: valid-radius($radius);
|
|
27
44
|
}
|
|
28
45
|
}
|
|
29
46
|
|
|
30
47
|
@mixin border-left-radius($radius) {
|
|
31
48
|
@if $enable-rounded {
|
|
32
|
-
border-top-left-radius: $radius;
|
|
33
|
-
border-bottom-left-radius: $radius;
|
|
49
|
+
border-top-left-radius: valid-radius($radius);
|
|
50
|
+
border-bottom-left-radius: valid-radius($radius);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@mixin border-top-left-radius($radius) {
|
|
55
|
+
@if $enable-rounded {
|
|
56
|
+
border-top-left-radius: valid-radius($radius);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@mixin border-top-right-radius($radius) {
|
|
61
|
+
@if $enable-rounded {
|
|
62
|
+
border-top-right-radius: valid-radius($radius);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@mixin border-bottom-right-radius($radius) {
|
|
67
|
+
@if $enable-rounded {
|
|
68
|
+
border-bottom-right-radius: valid-radius($radius);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@mixin border-bottom-left-radius($radius) {
|
|
73
|
+
@if $enable-rounded {
|
|
74
|
+
border-bottom-left-radius: valid-radius($radius);
|
|
34
75
|
}
|
|
35
76
|
}
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
@mixin box-shadow($shadow...) {
|
|
2
2
|
@if $enable-shadows {
|
|
3
|
-
|
|
3
|
+
$result: ();
|
|
4
|
+
|
|
5
|
+
@if (length($shadow) == 1) {
|
|
6
|
+
// We can pass `@include box-shadow(none);`
|
|
7
|
+
$result: $shadow;
|
|
8
|
+
} @else {
|
|
9
|
+
// Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;`
|
|
10
|
+
@for $i from 1 through length($shadow) {
|
|
11
|
+
@if nth($shadow, $i) != "none" {
|
|
12
|
+
$result: append($result, nth($shadow, $i), "comma");
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
@if (length($result) > 0) {
|
|
17
|
+
box-shadow: $result;
|
|
18
|
+
}
|
|
4
19
|
}
|
|
5
20
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// md
|
|
17
17
|
@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
|
|
18
18
|
$n: index($breakpoint-names, $name);
|
|
19
|
-
@return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
|
|
19
|
+
@return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
// Minimum breakpoint width. Null for the smallest (first) breakpoint.
|
|
@@ -29,18 +29,20 @@
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// Maximum breakpoint width. Null for the largest (last) breakpoint.
|
|
32
|
-
// The maximum value is calculated as the minimum of the next one less 0.
|
|
32
|
+
// The maximum value is calculated as the minimum of the next one less 0.02px
|
|
33
33
|
// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.
|
|
34
34
|
// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max
|
|
35
|
+
// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.
|
|
36
|
+
// See https://bugs.webkit.org/show_bug.cgi?id=178261
|
|
35
37
|
//
|
|
36
38
|
// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
|
|
37
|
-
//
|
|
39
|
+
// 767.98px
|
|
38
40
|
@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {
|
|
39
41
|
$next: breakpoint-next($name, $breakpoints);
|
|
40
|
-
@return if($next, breakpoint-min($next, $breakpoints) - .
|
|
42
|
+
@return if($next, breakpoint-min($next, $breakpoints) - .02, null);
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash
|
|
45
|
+
// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.
|
|
44
46
|
// Useful for making responsive utilities.
|
|
45
47
|
//
|
|
46
48
|
// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
|
|
@@ -88,11 +90,11 @@
|
|
|
88
90
|
@content;
|
|
89
91
|
}
|
|
90
92
|
} @else if $max == null {
|
|
91
|
-
@include media-breakpoint-up($lower) {
|
|
93
|
+
@include media-breakpoint-up($lower, $breakpoints) {
|
|
92
94
|
@content;
|
|
93
95
|
}
|
|
94
96
|
} @else if $min == null {
|
|
95
|
-
@include media-breakpoint-down($upper) {
|
|
97
|
+
@include media-breakpoint-down($upper, $breakpoints) {
|
|
96
98
|
@content;
|
|
97
99
|
}
|
|
98
100
|
}
|
|
@@ -110,11 +112,11 @@
|
|
|
110
112
|
@content;
|
|
111
113
|
}
|
|
112
114
|
} @else if $max == null {
|
|
113
|
-
@include media-breakpoint-up($name) {
|
|
115
|
+
@include media-breakpoint-up($name, $breakpoints) {
|
|
114
116
|
@content;
|
|
115
117
|
}
|
|
116
118
|
} @else if $min == null {
|
|
117
|
-
@include media-breakpoint-down($name) {
|
|
119
|
+
@include media-breakpoint-down($name, $breakpoints) {
|
|
118
120
|
@content;
|
|
119
121
|
}
|
|
120
122
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
border-color: $border;
|
|
10
10
|
@include box-shadow($btn-box-shadow);
|
|
11
11
|
|
|
12
|
-
@include hover {
|
|
12
|
+
@include hover() {
|
|
13
13
|
color: color-yiq($hover-background);
|
|
14
14
|
@include gradient-bg($hover-background);
|
|
15
15
|
border-color: $hover-border;
|
|
@@ -17,23 +17,31 @@
|
|
|
17
17
|
|
|
18
18
|
&:focus,
|
|
19
19
|
&.focus {
|
|
20
|
-
|
|
20
|
+
color: color-yiq($hover-background);
|
|
21
|
+
@include gradient-bg($hover-background);
|
|
22
|
+
border-color: $hover-border;
|
|
21
23
|
@if $enable-shadows {
|
|
22
|
-
box-shadow
|
|
24
|
+
@include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));
|
|
23
25
|
} @else {
|
|
24
|
-
|
|
26
|
+
// Avoid using mixin so we can pass custom focus shadow properly
|
|
27
|
+
box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
// Disabled comes first so active can properly restyle
|
|
29
32
|
&.disabled,
|
|
30
33
|
&:disabled {
|
|
34
|
+
color: color-yiq($background);
|
|
31
35
|
background-color: $background;
|
|
32
36
|
border-color: $border;
|
|
37
|
+
// Remove CSS gradients if they're enabled
|
|
38
|
+
@if $enable-gradients {
|
|
39
|
+
background-image: none;
|
|
40
|
+
}
|
|
33
41
|
}
|
|
34
42
|
|
|
35
|
-
&:not(
|
|
36
|
-
&:not(
|
|
43
|
+
&:not(:disabled):not(.disabled):active,
|
|
44
|
+
&:not(:disabled):not(.disabled).active,
|
|
37
45
|
.show > &.dropdown-toggle {
|
|
38
46
|
color: color-yiq($active-background);
|
|
39
47
|
background-color: $active-background;
|
|
@@ -43,24 +51,22 @@
|
|
|
43
51
|
border-color: $active-border;
|
|
44
52
|
|
|
45
53
|
&:focus {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);
|
|
54
|
+
@if $enable-shadows and $btn-active-box-shadow != none {
|
|
55
|
+
@include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));
|
|
49
56
|
} @else {
|
|
50
|
-
|
|
57
|
+
// Avoid using mixin so we can pass custom focus shadow properly
|
|
58
|
+
box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
|
|
51
59
|
}
|
|
52
60
|
}
|
|
53
61
|
}
|
|
54
62
|
}
|
|
55
63
|
|
|
56
|
-
@mixin button-outline-variant($color, $color-hover:
|
|
64
|
+
@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {
|
|
57
65
|
color: $color;
|
|
58
|
-
background-color: transparent;
|
|
59
|
-
background-image: none;
|
|
60
66
|
border-color: $color;
|
|
61
67
|
|
|
62
|
-
|
|
63
|
-
color: color-
|
|
68
|
+
@include hover() {
|
|
69
|
+
color: $color-hover;
|
|
64
70
|
background-color: $active-background;
|
|
65
71
|
border-color: $active-border;
|
|
66
72
|
}
|
|
@@ -76,26 +82,29 @@
|
|
|
76
82
|
background-color: transparent;
|
|
77
83
|
}
|
|
78
84
|
|
|
79
|
-
&:not(
|
|
80
|
-
&:not(
|
|
85
|
+
&:not(:disabled):not(.disabled):active,
|
|
86
|
+
&:not(:disabled):not(.disabled).active,
|
|
81
87
|
.show > &.dropdown-toggle {
|
|
82
|
-
color: color-yiq($
|
|
88
|
+
color: color-yiq($active-background);
|
|
83
89
|
background-color: $active-background;
|
|
84
90
|
border-color: $active-border;
|
|
85
|
-
|
|
86
|
-
|
|
91
|
+
|
|
92
|
+
&:focus {
|
|
93
|
+
@if $enable-shadows and $btn-active-box-shadow != none {
|
|
94
|
+
@include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));
|
|
95
|
+
} @else {
|
|
96
|
+
// Avoid using mixin so we can pass custom focus shadow properly
|
|
97
|
+
box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
87
100
|
}
|
|
88
101
|
}
|
|
89
102
|
|
|
90
103
|
// Button sizes
|
|
91
104
|
@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
|
|
92
105
|
padding: $padding-y $padding-x;
|
|
93
|
-
font-size
|
|
106
|
+
@include font-size($font-size);
|
|
94
107
|
line-height: $line-height;
|
|
95
108
|
// Manually declare to provide an override to the browser default
|
|
96
|
-
@
|
|
97
|
-
border-radius: $border-radius;
|
|
98
|
-
} @else {
|
|
99
|
-
border-radius: 0;
|
|
100
|
-
}
|
|
109
|
+
@include border-radius($border-radius, 0);
|
|
101
110
|
}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
@mixin caret-down {
|
|
1
|
+
@mixin caret-down() {
|
|
2
2
|
border-top: $caret-width solid;
|
|
3
3
|
border-right: $caret-width solid transparent;
|
|
4
4
|
border-bottom: 0;
|
|
5
5
|
border-left: $caret-width solid transparent;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
@mixin caret-up {
|
|
8
|
+
@mixin caret-up() {
|
|
9
9
|
border-top: 0;
|
|
10
10
|
border-right: $caret-width solid transparent;
|
|
11
11
|
border-bottom: $caret-width solid;
|
|
12
12
|
border-left: $caret-width solid transparent;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
@mixin caret-right {
|
|
15
|
+
@mixin caret-right() {
|
|
16
16
|
border-top: $caret-width solid transparent;
|
|
17
|
+
border-right: 0;
|
|
17
18
|
border-bottom: $caret-width solid transparent;
|
|
18
19
|
border-left: $caret-width solid;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
@mixin caret-left {
|
|
22
|
+
@mixin caret-left() {
|
|
22
23
|
border-top: $caret-width solid transparent;
|
|
23
24
|
border-right: $caret-width solid;
|
|
24
25
|
border-bottom: $caret-width solid transparent;
|
|
@@ -28,17 +29,15 @@
|
|
|
28
29
|
@if $enable-caret {
|
|
29
30
|
&::after {
|
|
30
31
|
display: inline-block;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
margin-left: $caret-width * .85;
|
|
34
|
-
vertical-align: $caret-width * .85;
|
|
32
|
+
margin-left: $caret-spacing;
|
|
33
|
+
vertical-align: $caret-vertical-align;
|
|
35
34
|
content: "";
|
|
36
35
|
@if $direction == down {
|
|
37
|
-
@include caret-down;
|
|
36
|
+
@include caret-down();
|
|
38
37
|
} @else if $direction == up {
|
|
39
|
-
@include caret-up;
|
|
38
|
+
@include caret-up();
|
|
40
39
|
} @else if $direction == right {
|
|
41
|
-
@include caret-right;
|
|
40
|
+
@include caret-right();
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
43
|
|
|
@@ -49,12 +48,10 @@
|
|
|
49
48
|
|
|
50
49
|
&::before {
|
|
51
50
|
display: inline-block;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
margin-right: $caret-width * .85;
|
|
55
|
-
vertical-align: $caret-width * .85;
|
|
51
|
+
margin-right: $caret-spacing;
|
|
52
|
+
vertical-align: $caret-vertical-align;
|
|
56
53
|
content: "";
|
|
57
|
-
@include caret-left;
|
|
54
|
+
@include caret-left();
|
|
58
55
|
}
|
|
59
56
|
}
|
|
60
57
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Deprecate mixin
|
|
2
|
+
//
|
|
3
|
+
// This mixin can be used to deprecate mixins or functions.
|
|
4
|
+
// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to
|
|
5
|
+
// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)
|
|
6
|
+
@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {
|
|
7
|
+
@if ($enable-deprecation-messages != false and $ignore-warning != true) {
|
|
8
|
+
@warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
// stylelint-disable declaration-no-important
|
|
2
2
|
|
|
3
|
-
@mixin float-left {
|
|
3
|
+
@mixin float-left() {
|
|
4
4
|
float: left !important;
|
|
5
|
+
@include deprecate("The `float-left` mixin", "v4.3.0", "v5");
|
|
5
6
|
}
|
|
6
|
-
@mixin float-right {
|
|
7
|
+
@mixin float-right() {
|
|
7
8
|
float: right !important;
|
|
9
|
+
@include deprecate("The `float-right` mixin", "v4.3.0", "v5");
|
|
8
10
|
}
|
|
9
|
-
@mixin float-none {
|
|
11
|
+
@mixin float-none() {
|
|
10
12
|
float: none !important;
|
|
13
|
+
@include deprecate("The `float-none` mixin", "v4.3.0", "v5");
|
|
11
14
|
}
|
|
@@ -10,99 +10,168 @@
|
|
|
10
10
|
//
|
|
11
11
|
// Example usage: change the default blue border and shadow to white for better
|
|
12
12
|
// contrast against a dark gray background.
|
|
13
|
-
@mixin form-control-focus() {
|
|
13
|
+
@mixin form-control-focus($ignore-warning: false) {
|
|
14
14
|
&:focus {
|
|
15
15
|
color: $input-focus-color;
|
|
16
16
|
background-color: $input-focus-bg;
|
|
17
17
|
border-color: $input-focus-border-color;
|
|
18
18
|
outline: 0;
|
|
19
|
-
// Avoid using mixin so we can pass custom focus shadow properly
|
|
20
19
|
@if $enable-shadows {
|
|
21
|
-
box-shadow
|
|
20
|
+
@include box-shadow($input-box-shadow, $input-focus-box-shadow);
|
|
22
21
|
} @else {
|
|
22
|
+
// Avoid using mixin so we can pass custom focus shadow properly
|
|
23
23
|
box-shadow: $input-focus-box-shadow;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
@include deprecate("The `form-control-focus()` mixin", "v4.4.0", "v5", $ignore-warning);
|
|
26
27
|
}
|
|
27
28
|
|
|
29
|
+
// This mixin uses an `if()` technique to be compatible with Dart Sass
|
|
30
|
+
// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details
|
|
31
|
+
@mixin form-validation-state-selector($state) {
|
|
32
|
+
@if ($state == "valid" or $state == "invalid") {
|
|
33
|
+
.was-validated #{if(&, "&", "")}:#{$state},
|
|
34
|
+
#{if(&, "&", "")}.is-#{$state} {
|
|
35
|
+
@content;
|
|
36
|
+
}
|
|
37
|
+
} @else {
|
|
38
|
+
#{if(&, "&", "")}.is-#{$state} {
|
|
39
|
+
@content;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
28
43
|
|
|
29
|
-
@mixin form-validation-state($state, $color) {
|
|
30
|
-
|
|
44
|
+
@mixin form-validation-state($state, $color, $icon) {
|
|
31
45
|
.#{$state}-feedback {
|
|
32
46
|
display: none;
|
|
33
47
|
width: 100%;
|
|
34
48
|
margin-top: $form-feedback-margin-top;
|
|
35
|
-
font-size
|
|
49
|
+
@include font-size($form-feedback-font-size);
|
|
36
50
|
color: $color;
|
|
37
51
|
}
|
|
38
52
|
|
|
39
53
|
.#{$state}-tooltip {
|
|
40
54
|
position: absolute;
|
|
41
55
|
top: 100%;
|
|
56
|
+
left: 0;
|
|
42
57
|
z-index: 5;
|
|
43
58
|
display: none;
|
|
44
|
-
width:
|
|
45
|
-
padding:
|
|
59
|
+
max-width: 100%; // Contain to parent when possible
|
|
60
|
+
padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
|
|
46
61
|
margin-top: .1rem;
|
|
47
|
-
font-size
|
|
48
|
-
line-height:
|
|
49
|
-
color:
|
|
50
|
-
background-color: rgba($color,
|
|
51
|
-
border-radius
|
|
62
|
+
@include font-size($form-feedback-tooltip-font-size);
|
|
63
|
+
line-height: $form-feedback-tooltip-line-height;
|
|
64
|
+
color: color-yiq($color);
|
|
65
|
+
background-color: rgba($color, $form-feedback-tooltip-opacity);
|
|
66
|
+
@include border-radius($form-feedback-tooltip-border-radius);
|
|
67
|
+
|
|
68
|
+
// See https://github.com/twbs/bootstrap/pull/31557
|
|
69
|
+
// Align tooltip to form elements
|
|
70
|
+
.form-row > .col > &,
|
|
71
|
+
.form-row > [class*="col-"] > & {
|
|
72
|
+
left: $form-grid-gutter-width * .5;
|
|
73
|
+
}
|
|
52
74
|
}
|
|
53
75
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
76
|
+
@include form-validation-state-selector($state) {
|
|
77
|
+
~ .#{$state}-feedback,
|
|
78
|
+
~ .#{$state}-tooltip {
|
|
79
|
+
display: block;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.form-control {
|
|
84
|
+
@include form-validation-state-selector($state) {
|
|
58
85
|
border-color: $color;
|
|
59
86
|
|
|
87
|
+
@if $enable-validation-icons {
|
|
88
|
+
padding-right: $input-height-inner !important; // stylelint-disable-line declaration-no-important
|
|
89
|
+
background-image: escape-svg($icon);
|
|
90
|
+
background-repeat: no-repeat;
|
|
91
|
+
background-position: right $input-height-inner-quarter center;
|
|
92
|
+
background-size: $input-height-inner-half $input-height-inner-half;
|
|
93
|
+
}
|
|
94
|
+
|
|
60
95
|
&:focus {
|
|
61
96
|
border-color: $color;
|
|
62
97
|
box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
|
|
63
98
|
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// stylelint-disable-next-line selector-no-qualifying-type
|
|
103
|
+
select.form-control {
|
|
104
|
+
@include form-validation-state-selector($state) {
|
|
105
|
+
@if $enable-validation-icons {
|
|
106
|
+
padding-right: $input-padding-x * 4 !important; // stylelint-disable-line declaration-no-important
|
|
107
|
+
background-position: right $input-padding-x * 2 center;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
64
111
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
112
|
+
// stylelint-disable-next-line selector-no-qualifying-type
|
|
113
|
+
textarea.form-control {
|
|
114
|
+
@include form-validation-state-selector($state) {
|
|
115
|
+
@if $enable-validation-icons {
|
|
116
|
+
padding-right: $input-height-inner;
|
|
117
|
+
background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.custom-select {
|
|
123
|
+
@include form-validation-state-selector($state) {
|
|
124
|
+
border-color: $color;
|
|
125
|
+
|
|
126
|
+
@if $enable-validation-icons {
|
|
127
|
+
padding-right: $custom-select-feedback-icon-padding-right !important; // stylelint-disable-line declaration-no-important
|
|
128
|
+
background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
&:focus {
|
|
132
|
+
border-color: $color;
|
|
133
|
+
box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
|
|
68
134
|
}
|
|
69
135
|
}
|
|
70
136
|
}
|
|
71
137
|
|
|
72
138
|
.form-check-input {
|
|
73
|
-
|
|
74
|
-
&.is-#{$state} {
|
|
139
|
+
@include form-validation-state-selector($state) {
|
|
75
140
|
~ .form-check-label {
|
|
76
141
|
color: $color;
|
|
77
142
|
}
|
|
143
|
+
|
|
144
|
+
~ .#{$state}-feedback,
|
|
145
|
+
~ .#{$state}-tooltip {
|
|
146
|
+
display: block;
|
|
147
|
+
}
|
|
78
148
|
}
|
|
79
149
|
}
|
|
80
150
|
|
|
81
151
|
.custom-control-input {
|
|
82
|
-
|
|
83
|
-
&.is-#{$state} {
|
|
152
|
+
@include form-validation-state-selector($state) {
|
|
84
153
|
~ .custom-control-label {
|
|
85
154
|
color: $color;
|
|
86
155
|
|
|
87
156
|
&::before {
|
|
88
|
-
|
|
157
|
+
border-color: $color;
|
|
89
158
|
}
|
|
90
159
|
}
|
|
91
160
|
|
|
92
|
-
~ .#{$state}-feedback,
|
|
93
|
-
~ .#{$state}-tooltip {
|
|
94
|
-
display: block;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
161
|
&:checked {
|
|
98
162
|
~ .custom-control-label::before {
|
|
163
|
+
border-color: lighten($color, 10%);
|
|
99
164
|
@include gradient-bg(lighten($color, 10%));
|
|
100
165
|
}
|
|
101
166
|
}
|
|
102
167
|
|
|
103
168
|
&:focus {
|
|
104
169
|
~ .custom-control-label::before {
|
|
105
|
-
box-shadow: 0 0 0
|
|
170
|
+
box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
&:not(:checked) ~ .custom-control-label::before {
|
|
174
|
+
border-color: $color;
|
|
106
175
|
}
|
|
107
176
|
}
|
|
108
177
|
}
|
|
@@ -110,21 +179,14 @@
|
|
|
110
179
|
|
|
111
180
|
// custom file
|
|
112
181
|
.custom-file-input {
|
|
113
|
-
|
|
114
|
-
&.is-#{$state} {
|
|
182
|
+
@include form-validation-state-selector($state) {
|
|
115
183
|
~ .custom-file-label {
|
|
116
184
|
border-color: $color;
|
|
117
|
-
|
|
118
|
-
&::before { border-color: inherit; }
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
~ .#{$state}-feedback,
|
|
122
|
-
~ .#{$state}-tooltip {
|
|
123
|
-
display: block;
|
|
124
185
|
}
|
|
125
186
|
|
|
126
187
|
&:focus {
|
|
127
188
|
~ .custom-file-label {
|
|
189
|
+
border-color: $color;
|
|
128
190
|
box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
|
|
129
191
|
}
|
|
130
192
|
}
|