bootstrap 4.3.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +17 -2
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +7 -4
  5. data/assets/javascripts/bootstrap/alert.js +173 -137
  6. data/assets/javascripts/bootstrap/base-component.js +182 -0
  7. data/assets/javascripts/bootstrap/button.js +102 -143
  8. data/assets/javascripts/bootstrap/carousel.js +481 -410
  9. data/assets/javascripts/bootstrap/collapse.js +340 -274
  10. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  11. data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
  12. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  13. data/assets/javascripts/bootstrap/dom/selector-engine.js +127 -0
  14. data/assets/javascripts/bootstrap/dropdown.js +494 -400
  15. data/assets/javascripts/bootstrap/modal.js +834 -450
  16. data/assets/javascripts/bootstrap/offcanvas.js +866 -0
  17. data/assets/javascripts/bootstrap/popover.js +122 -199
  18. data/assets/javascripts/bootstrap/scrollspy.js +257 -241
  19. data/assets/javascripts/bootstrap/tab.js +219 -155
  20. data/assets/javascripts/bootstrap/toast.js +330 -190
  21. data/assets/javascripts/bootstrap/tooltip.js +710 -472
  22. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  23. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  24. data/assets/javascripts/bootstrap-sprockets.js +8 -1
  25. data/assets/javascripts/bootstrap.js +3547 -2809
  26. data/assets/javascripts/bootstrap.min.js +4 -4
  27. data/assets/stylesheets/_bootstrap-grid.scss +54 -18
  28. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  29. data/assets/stylesheets/_bootstrap.scss +20 -11
  30. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  31. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  32. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  33. data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
  34. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  35. data/assets/stylesheets/bootstrap/_buttons.scss +28 -54
  36. data/assets/stylesheets/bootstrap/_card.scss +52 -125
  37. data/assets/stylesheets/bootstrap/_carousel.scss +70 -38
  38. data/assets/stylesheets/bootstrap/_close.scss +30 -31
  39. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  40. data/assets/stylesheets/bootstrap/_dropdown.scss +88 -39
  41. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  42. data/assets/stylesheets/bootstrap/_functions.scss +237 -27
  43. data/assets/stylesheets/bootstrap/_grid.scss +14 -33
  44. data/assets/stylesheets/bootstrap/_helpers.scss +9 -0
  45. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  46. data/assets/stylesheets/bootstrap/_list-group.scss +61 -36
  47. data/assets/stylesheets/bootstrap/_mixins.scss +12 -16
  48. data/assets/stylesheets/bootstrap/_modal.scss +64 -84
  49. data/assets/stylesheets/bootstrap/_nav.scss +29 -10
  50. data/assets/stylesheets/bootstrap/_navbar.scss +93 -52
  51. data/assets/stylesheets/bootstrap/_offcanvas.scss +83 -0
  52. data/assets/stylesheets/bootstrap/_pagination.scss +13 -22
  53. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  54. data/assets/stylesheets/bootstrap/_popover.scss +29 -42
  55. data/assets/stylesheets/bootstrap/_progress.scss +10 -5
  56. data/assets/stylesheets/bootstrap/_reboot.scss +350 -208
  57. data/assets/stylesheets/bootstrap/_root.scss +42 -8
  58. data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
  59. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  60. data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +21 -21
  62. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  63. data/assets/stylesheets/bootstrap/_type.scss +40 -61
  64. data/assets/stylesheets/bootstrap/_utilities.scss +630 -17
  65. data/assets/stylesheets/bootstrap/_variables.scss +993 -487
  66. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  67. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +63 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  70. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  71. data/assets/stylesheets/bootstrap/forms/_form-select.scss +70 -0
  72. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  74. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  75. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  76. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  77. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  78. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  79. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  80. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  81. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  82. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  83. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  84. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  85. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  86. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  87. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  88. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  89. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  90. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -51
  91. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  92. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  93. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  94. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  95. data/assets/stylesheets/bootstrap/mixins/_forms.scss +67 -115
  96. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  97. data/assets/stylesheets/bootstrap/mixins/_grid.scss +131 -32
  98. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  99. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  100. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  101. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  102. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  103. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  104. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +89 -0
  105. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  106. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  107. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +274 -132
  108. data/bootstrap.gemspec +4 -6
  109. data/lib/bootstrap/version.rb +2 -2
  110. data/tasks/updater/js.rb +25 -6
  111. data/tasks/updater/network.rb +8 -2
  112. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  113. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  114. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  115. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  116. data/test/dummy_rails/app/views/pages/root.html +89 -0
  117. data/test/dummy_rails/config/application.rb +0 -3
  118. data/test/gemfiles/rails_6_0.gemfile +7 -0
  119. data/test/gemfiles/rails_6_1.gemfile +7 -0
  120. data/test/support/dummy_rails_integration.rb +3 -1
  121. data/test/test_helper.rb +18 -13
  122. metadata +61 -79
  123. data/assets/javascripts/bootstrap/util.js +0 -171
  124. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  125. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  126. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  127. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  128. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  129. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  130. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  131. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  132. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  133. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  134. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  135. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  136. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
  137. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  138. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  139. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  140. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  141. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  142. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  143. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  144. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  145. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  146. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  147. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  148. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  149. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  150. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  151. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  152. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  153. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  154. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  155. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  156. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  157. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  158. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -0,0 +1,7 @@
1
+ //
2
+ // Text truncation
3
+ //
4
+
5
+ .text-truncate {
6
+ @include text-truncate();
7
+ }
@@ -0,0 +1,8 @@
1
+ //
2
+ // Visually hidden
3
+ //
4
+
5
+ .visually-hidden,
6
+ .visually-hidden-focusable:not(:focus):not(:focus-within) {
7
+ @include visually-hidden();
8
+ }
@@ -0,0 +1,8 @@
1
+ .vr {
2
+ display: inline-block;
3
+ align-self: stretch;
4
+ width: 1px;
5
+ min-height: 1em;
6
+ background-color: currentColor;
7
+ opacity: $hr-opacity;
8
+ }
@@ -1,13 +1,11 @@
1
+ // scss-docs-start alert-variant-mixin
1
2
  @mixin alert-variant($background, $border, $color) {
2
3
  color: $color;
3
4
  @include gradient-bg($background);
4
5
  border-color: $border;
5
6
 
6
- hr {
7
- border-top-color: darken($border, 5%);
8
- }
9
-
10
7
  .alert-link {
11
- color: darken($color, 10%);
8
+ color: shade-color($color, 20%);
12
9
  }
13
10
  }
11
+ // scss-docs-end alert-variant-mixin
@@ -0,0 +1,14 @@
1
+ // Shared between modals and offcanvases
2
+ @mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {
3
+ position: fixed;
4
+ top: 0;
5
+ left: 0;
6
+ z-index: $zindex;
7
+ width: 100vw;
8
+ height: 100vh;
9
+ background-color: $backdrop-bg;
10
+
11
+ // Fade for backdrop
12
+ &.fade { opacity: 0; }
13
+ &.show { opacity: $backdrop-opacity; }
14
+ }
@@ -1,63 +1,78 @@
1
- // stylelint-disable property-blacklist
1
+ // stylelint-disable property-disallowed-list
2
2
  // Single side border-radius
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
+ // scss-docs-start border-radius-mixins
4
18
  @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
5
19
  @if $enable-rounded {
6
- border-radius: $radius;
20
+ border-radius: valid-radius($radius);
7
21
  }
8
22
  @else if $fallback-border-radius != false {
9
23
  border-radius: $fallback-border-radius;
10
24
  }
11
25
  }
12
26
 
13
- @mixin border-top-radius($radius) {
27
+ @mixin border-top-radius($radius: $border-radius) {
14
28
  @if $enable-rounded {
15
- border-top-left-radius: $radius;
16
- border-top-right-radius: $radius;
29
+ border-top-left-radius: valid-radius($radius);
30
+ border-top-right-radius: valid-radius($radius);
17
31
  }
18
32
  }
19
33
 
20
- @mixin border-right-radius($radius) {
34
+ @mixin border-end-radius($radius: $border-radius) {
21
35
  @if $enable-rounded {
22
- border-top-right-radius: $radius;
23
- border-bottom-right-radius: $radius;
36
+ border-top-right-radius: valid-radius($radius);
37
+ border-bottom-right-radius: valid-radius($radius);
24
38
  }
25
39
  }
26
40
 
27
- @mixin border-bottom-radius($radius) {
41
+ @mixin border-bottom-radius($radius: $border-radius) {
28
42
  @if $enable-rounded {
29
- border-bottom-right-radius: $radius;
30
- border-bottom-left-radius: $radius;
43
+ border-bottom-right-radius: valid-radius($radius);
44
+ border-bottom-left-radius: valid-radius($radius);
31
45
  }
32
46
  }
33
47
 
34
- @mixin border-left-radius($radius) {
48
+ @mixin border-start-radius($radius: $border-radius) {
35
49
  @if $enable-rounded {
36
- border-top-left-radius: $radius;
37
- border-bottom-left-radius: $radius;
50
+ border-top-left-radius: valid-radius($radius);
51
+ border-bottom-left-radius: valid-radius($radius);
38
52
  }
39
53
  }
40
54
 
41
- @mixin border-top-left-radius($radius) {
55
+ @mixin border-top-start-radius($radius: $border-radius) {
42
56
  @if $enable-rounded {
43
- border-top-left-radius: $radius;
57
+ border-top-left-radius: valid-radius($radius);
44
58
  }
45
59
  }
46
60
 
47
- @mixin border-top-right-radius($radius) {
61
+ @mixin border-top-end-radius($radius: $border-radius) {
48
62
  @if $enable-rounded {
49
- border-top-right-radius: $radius;
63
+ border-top-right-radius: valid-radius($radius);
50
64
  }
51
65
  }
52
66
 
53
- @mixin border-bottom-right-radius($radius) {
67
+ @mixin border-bottom-end-radius($radius: $border-radius) {
54
68
  @if $enable-rounded {
55
- border-bottom-right-radius: $radius;
69
+ border-bottom-right-radius: valid-radius($radius);
56
70
  }
57
71
  }
58
72
 
59
- @mixin border-bottom-left-radius($radius) {
73
+ @mixin border-bottom-start-radius($radius: $border-radius) {
60
74
  @if $enable-rounded {
61
- border-bottom-left-radius: $radius;
75
+ border-bottom-left-radius: valid-radius($radius);
62
76
  }
63
77
  }
78
+ // scss-docs-end border-radius-mixins
@@ -2,17 +2,15 @@
2
2
  @if $enable-shadows {
3
3
  $result: ();
4
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
- }
5
+ @each $value in $shadow {
6
+ @if $value != null {
7
+ $result: append($result, $value, "comma");
8
+ }
9
+ @if $value == none and length($shadow) > 1 {
10
+ @warn "The keyword 'none' must be used as a single argument.";
14
11
  }
15
12
  }
13
+
16
14
  @if (length($result) > 0) {
17
15
  box-shadow: $result;
18
16
  }
@@ -16,7 +16,10 @@
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 != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
19
+ @if not $n {
20
+ @error "breakpoint `#{$name}` not found in `#{$breakpoints}`";
21
+ }
22
+ @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
20
23
  }
21
24
 
22
25
  // Minimum breakpoint width. Null for the smallest (first) breakpoint.
@@ -28,18 +31,18 @@
28
31
  @return if($min != 0, $min, null);
29
32
  }
30
33
 
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.02px
33
- // to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.
34
+ // Maximum breakpoint width.
35
+ // The maximum value is reduced by 0.02px to work around the limitations of
36
+ // `min-` and `max-` prefixes and viewports with fractional widths.
34
37
  // See https://www.w3.org/TR/mediaqueries-4/#mq-min-max
35
38
  // Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.
36
39
  // See https://bugs.webkit.org/show_bug.cgi?id=178261
37
40
  //
38
- // >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
41
+ // >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
39
42
  // 767.98px
40
43
  @function breakpoint-max($name, $breakpoints: $grid-breakpoints) {
41
- $next: breakpoint-next($name, $breakpoints);
42
- @return if($next, breakpoint-min($next, $breakpoints) - .02, null);
44
+ $max: map-get($breakpoints, $name);
45
+ @return if($max and $max > 0, $max - .02, null);
43
46
  }
44
47
 
45
48
  // Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.
@@ -104,8 +107,9 @@
104
107
  // No minimum for the smallest breakpoint, and no maximum for the largest one.
105
108
  // Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.
106
109
  @mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {
107
- $min: breakpoint-min($name, $breakpoints);
108
- $max: breakpoint-max($name, $breakpoints);
110
+ $min: breakpoint-min($name, $breakpoints);
111
+ $next: breakpoint-next($name, $breakpoints);
112
+ $max: breakpoint-max($next);
109
113
 
110
114
  @if $min != null and $max != null {
111
115
  @media (min-width: $min) and (max-width: $max) {
@@ -116,7 +120,7 @@
116
120
  @content;
117
121
  }
118
122
  } @else if $min == null {
119
- @include media-breakpoint-down($name, $breakpoints) {
123
+ @include media-breakpoint-down($next, $breakpoints) {
120
124
  @content;
121
125
  }
122
126
  }
@@ -3,105 +3,131 @@
3
3
  // Easily pump out default styles, as well as :hover, :focus, :active,
4
4
  // and disabled options for all buttons
5
5
 
6
- @mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {
7
- color: color-yiq($background);
6
+ // scss-docs-start btn-variant-mixin
7
+ @mixin button-variant(
8
+ $background,
9
+ $border,
10
+ $color: color-contrast($background),
11
+ $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),
12
+ $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),
13
+ $hover-color: color-contrast($hover-background),
14
+ $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),
15
+ $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),
16
+ $active-color: color-contrast($active-background),
17
+ $disabled-background: $background,
18
+ $disabled-border: $border,
19
+ $disabled-color: color-contrast($disabled-background)
20
+ ) {
21
+ color: $color;
8
22
  @include gradient-bg($background);
9
23
  border-color: $border;
10
24
  @include box-shadow($btn-box-shadow);
11
25
 
12
- @include hover {
13
- color: color-yiq($hover-background);
26
+ &:hover {
27
+ color: $hover-color;
14
28
  @include gradient-bg($hover-background);
15
29
  border-color: $hover-border;
16
30
  }
17
31
 
18
- &:focus,
19
- &.focus {
20
- // Avoid using mixin so we can pass custom focus shadow properly
32
+ .btn-check:focus + &,
33
+ &:focus {
34
+ color: $hover-color;
35
+ @include gradient-bg($hover-background);
36
+ border-color: $hover-border;
21
37
  @if $enable-shadows {
22
- box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
38
+ @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));
23
39
  } @else {
24
- box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
25
- }
26
- }
27
-
28
- // Disabled comes first so active can properly restyle
29
- &.disabled,
30
- &:disabled {
31
- color: color-yiq($background);
32
- background-color: $background;
33
- border-color: $border;
34
- // Remove CSS gradients if they're enabled
35
- @if $enable-gradients {
36
- background-image: none;
40
+ // Avoid using mixin so we can pass custom focus shadow properly
41
+ box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);
37
42
  }
38
43
  }
39
44
 
40
- &:not(:disabled):not(.disabled):active,
41
- &:not(:disabled):not(.disabled).active,
45
+ .btn-check:checked + &,
46
+ .btn-check:active + &,
47
+ &:active,
48
+ &.active,
42
49
  .show > &.dropdown-toggle {
43
- color: color-yiq($active-background);
50
+ color: $active-color;
44
51
  background-color: $active-background;
45
- @if $enable-gradients {
46
- background-image: none; // Remove the gradient for the pressed/active state
47
- }
52
+ // Remove CSS gradients if they're enabled
53
+ background-image: if($enable-gradients, none, null);
48
54
  border-color: $active-border;
49
55
 
50
56
  &:focus {
51
- // Avoid using mixin so we can pass custom focus shadow properly
52
- @if $enable-shadows and $btn-active-box-shadow != none {
53
- box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
57
+ @if $enable-shadows {
58
+ @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));
54
59
  } @else {
55
- box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
60
+ // Avoid using mixin so we can pass custom focus shadow properly
61
+ box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);
56
62
  }
57
63
  }
58
64
  }
65
+
66
+ &:disabled,
67
+ &.disabled {
68
+ color: $disabled-color;
69
+ background-color: $disabled-background;
70
+ // Remove CSS gradients if they're enabled
71
+ background-image: if($enable-gradients, none, null);
72
+ border-color: $disabled-border;
73
+ }
59
74
  }
75
+ // scss-docs-end btn-variant-mixin
60
76
 
61
- @mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {
77
+ // scss-docs-start btn-outline-variant-mixin
78
+ @mixin button-outline-variant(
79
+ $color,
80
+ $color-hover: color-contrast($color),
81
+ $active-background: $color,
82
+ $active-border: $color,
83
+ $active-color: color-contrast($active-background)
84
+ ) {
62
85
  color: $color;
63
86
  border-color: $color;
64
87
 
65
- @include hover {
88
+ &:hover {
66
89
  color: $color-hover;
67
90
  background-color: $active-background;
68
91
  border-color: $active-border;
69
92
  }
70
93
 
71
- &:focus,
72
- &.focus {
94
+ .btn-check:focus + &,
95
+ &:focus {
73
96
  box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
74
97
  }
75
98
 
76
- &.disabled,
77
- &:disabled {
78
- color: $color;
79
- background-color: transparent;
80
- }
81
-
82
- &:not(:disabled):not(.disabled):active,
83
- &:not(:disabled):not(.disabled).active,
84
- .show > &.dropdown-toggle {
85
- color: color-yiq($active-background);
99
+ .btn-check:checked + &,
100
+ .btn-check:active + &,
101
+ &:active,
102
+ &.active,
103
+ &.dropdown-toggle.show {
104
+ color: $active-color;
86
105
  background-color: $active-background;
87
106
  border-color: $active-border;
88
107
 
89
108
  &:focus {
90
- // Avoid using mixin so we can pass custom focus shadow properly
91
- @if $enable-shadows and $btn-active-box-shadow != none {
92
- box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5);
109
+ @if $enable-shadows {
110
+ @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));
93
111
  } @else {
112
+ // Avoid using mixin so we can pass custom focus shadow properly
94
113
  box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
95
114
  }
96
115
  }
97
116
  }
117
+
118
+ &:disabled,
119
+ &.disabled {
120
+ color: $color;
121
+ background-color: transparent;
122
+ }
98
123
  }
124
+ // scss-docs-end btn-outline-variant-mixin
99
125
 
100
- // Button sizes
101
- @mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
126
+ // scss-docs-start btn-size-mixin
127
+ @mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
102
128
  padding: $padding-y $padding-x;
103
129
  @include font-size($font-size);
104
- line-height: $line-height;
105
130
  // Manually declare to provide an override to the browser default
106
131
  @include border-radius($border-radius, 0);
107
132
  }
133
+ // scss-docs-end btn-size-mixin
@@ -1,3 +1,4 @@
1
+ // scss-docs-start caret-mixins
1
2
  @mixin caret-down {
2
3
  border-top: $caret-width solid;
3
4
  border-right: $caret-width solid transparent;
@@ -12,14 +13,14 @@
12
13
  border-left: $caret-width solid transparent;
13
14
  }
14
15
 
15
- @mixin caret-right {
16
+ @mixin caret-end {
16
17
  border-top: $caret-width solid transparent;
17
18
  border-right: 0;
18
19
  border-bottom: $caret-width solid transparent;
19
20
  border-left: $caret-width solid;
20
21
  }
21
22
 
22
- @mixin caret-left {
23
+ @mixin caret-start {
23
24
  border-top: $caret-width solid transparent;
24
25
  border-right: $caret-width solid;
25
26
  border-bottom: $caret-width solid transparent;
@@ -33,15 +34,15 @@
33
34
  vertical-align: $caret-vertical-align;
34
35
  content: "";
35
36
  @if $direction == down {
36
- @include caret-down;
37
+ @include caret-down();
37
38
  } @else if $direction == up {
38
- @include caret-up;
39
- } @else if $direction == right {
40
- @include caret-right;
39
+ @include caret-up();
40
+ } @else if $direction == end {
41
+ @include caret-end();
41
42
  }
42
43
  }
43
44
 
44
- @if $direction == left {
45
+ @if $direction == start {
45
46
  &::after {
46
47
  display: none;
47
48
  }
@@ -51,7 +52,7 @@
51
52
  margin-right: $caret-spacing;
52
53
  vertical-align: $caret-vertical-align;
53
54
  content: "";
54
- @include caret-left;
55
+ @include caret-start();
55
56
  }
56
57
  }
57
58
 
@@ -60,3 +61,4 @@
60
61
  }
61
62
  }
62
63
  }
64
+ // scss-docs-end caret-mixins