bootstrap 4.3.1 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of bootstrap might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +15 -1
- data/CHANGELOG.md +2 -14
- data/README.md +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +7 -7
- data/assets/javascripts/bootstrap.js +1073 -1076
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/javascripts/bootstrap/alert.js +42 -49
- data/assets/javascripts/bootstrap/button.js +111 -64
- data/assets/javascripts/bootstrap/carousel.js +162 -177
- data/assets/javascripts/bootstrap/collapse.js +97 -122
- data/assets/javascripts/bootstrap/dropdown.js +163 -189
- data/assets/javascripts/bootstrap/modal.js +213 -194
- data/assets/javascripts/bootstrap/popover.js +51 -72
- data/assets/javascripts/bootstrap/scrollspy.js +80 -109
- data/assets/javascripts/bootstrap/tab.js +72 -79
- data/assets/javascripts/bootstrap/toast.js +96 -107
- data/assets/javascripts/bootstrap/tooltip.js +186 -201
- data/assets/javascripts/bootstrap/util.js +41 -20
- 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 +42 -45
- data/assets/stylesheets/bootstrap/_carousel.scss +7 -7
- data/assets/stylesheets/bootstrap/_close.scss +2 -3
- data/assets/stylesheets/bootstrap/_code.scss +1 -1
- data/assets/stylesheets/bootstrap/_custom-forms.scss +38 -19
- data/assets/stylesheets/bootstrap/_dropdown.scss +7 -6
- data/assets/stylesheets/bootstrap/_forms.scss +26 -9
- data/assets/stylesheets/bootstrap/_functions.scss +63 -5
- data/assets/stylesheets/bootstrap/_grid.scss +32 -11
- data/assets/stylesheets/bootstrap/_images.scss +2 -2
- data/assets/stylesheets/bootstrap/_input-group.scss +21 -6
- 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 +7 -7
- data/assets/stylesheets/bootstrap/_navbar.scss +55 -17
- data/assets/stylesheets/bootstrap/_pagination.scss +5 -4
- data/assets/stylesheets/bootstrap/_popover.scss +8 -9
- data/assets/stylesheets/bootstrap/_print.scss +2 -2
- data/assets/stylesheets/bootstrap/_progress.scss +7 -3
- data/assets/stylesheets/bootstrap/_reboot.scss +39 -38
- data/assets/stylesheets/bootstrap/_spinners.scss +14 -4
- data/assets/stylesheets/bootstrap/_tables.scss +3 -3
- data/assets/stylesheets/bootstrap/_toasts.scss +4 -2
- data/assets/stylesheets/bootstrap/_type.scss +3 -3
- data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
- data/assets/stylesheets/bootstrap/_variables.scss +58 -35
- 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 +42 -49
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +29 -15
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +25 -7
- 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 +1 -1
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +4 -3
- 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/_interactions.scss +5 -0
- data/assets/stylesheets/bootstrap/utilities/_text.scss +4 -4
- data/bootstrap.gemspec +1 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/network.rb +2 -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 +18 -13
- metadata +11 -5
| @@ -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 | 
| 78 | 
            +
                @include transition(opacity 0s $carousel-transition-duration);
         | 
| 79 79 | 
             
              }
         | 
| 80 80 | 
             
            }
         | 
| 81 81 |  | 
| @@ -101,7 +101,7 @@ | |
| 101 101 | 
             
              @include transition($carousel-control-transition);
         | 
| 102 102 |  | 
| 103 103 | 
             
              // Hover/focus state
         | 
| 104 | 
            -
              @include hover-focus {
         | 
| 104 | 
            +
              @include hover-focus() {
         | 
| 105 105 | 
             
                color: $carousel-control-color;
         | 
| 106 106 | 
             
                text-decoration: none;
         | 
| 107 107 | 
             
                outline: 0;
         | 
| @@ -111,13 +111,13 @@ | |
| 111 111 | 
             
            .carousel-control-prev {
         | 
| 112 112 | 
             
              left: 0;
         | 
| 113 113 | 
             
              @if $enable-gradients {
         | 
| 114 | 
            -
                background: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
         | 
| 114 | 
            +
                background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
         | 
| 115 115 | 
             
              }
         | 
| 116 116 | 
             
            }
         | 
| 117 117 | 
             
            .carousel-control-next {
         | 
| 118 118 | 
             
              right: 0;
         | 
| 119 119 | 
             
              @if $enable-gradients {
         | 
| 120 | 
            -
                background: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
         | 
| 120 | 
            +
                background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
         | 
| 121 121 | 
             
              }
         | 
| 122 122 | 
             
            }
         | 
| 123 123 |  | 
| @@ -127,13 +127,13 @@ | |
| 127 127 | 
             
              display: inline-block;
         | 
| 128 128 | 
             
              width: $carousel-control-icon-width;
         | 
| 129 129 | 
             
              height: $carousel-control-icon-width;
         | 
| 130 | 
            -
              background:  | 
| 130 | 
            +
              background: 50% / 100% 100% no-repeat;
         | 
| 131 131 | 
             
            }
         | 
| 132 132 | 
             
            .carousel-control-prev-icon {
         | 
| 133 | 
            -
              background-image: $carousel-control-prev-icon-bg;
         | 
| 133 | 
            +
              background-image: escape-svg($carousel-control-prev-icon-bg);
         | 
| 134 134 | 
             
            }
         | 
| 135 135 | 
             
            .carousel-control-next-icon {
         | 
| 136 | 
            -
              background-image: $carousel-control-next-icon-bg;
         | 
| 136 | 
            +
              background-image: escape-svg($carousel-control-next-icon-bg);
         | 
| 137 137 | 
             
            }
         | 
| 138 138 |  | 
| 139 139 |  | 
| @@ -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
         | 
| @@ -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 | 
            +
              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) / 2;
         | 
| 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, $ | 
| 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,7 +76,9 @@ | |
| 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 {
         | 
| @@ -95,7 +104,7 @@ | |
| 95 104 | 
             
                width: $custom-control-indicator-size;
         | 
| 96 105 | 
             
                height: $custom-control-indicator-size;
         | 
| 97 106 | 
             
                content: "";
         | 
| 98 | 
            -
                background:  | 
| 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 | 
            -
                   | 
| 140 | 
            +
                  @include gradient-bg($custom-control-indicator-checked-disabled-bg);
         | 
| 132 141 | 
             
                }
         | 
| 133 142 | 
             
                &:indeterminate ~ .custom-control-label::before {
         | 
| 134 | 
            -
                   | 
| 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- | 
| 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 | 
            -
                   | 
| 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- | 
| 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:  | 
| 181 | 
            -
                  left:  | 
| 189 | 
            +
                  top: add(($font-size-base * $line-height-base - $custom-control-indicator-size) / 2, $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- | 
| 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 | 
            -
                   | 
| 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 | 
| 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:  | 
| 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:  | 
| 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.
         | 
| @@ -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  | 
| 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 | 
| 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- | 
| 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;
         | 
| @@ -30,8 +30,14 @@ | |
| 30 30 | 
             
                border: 0;
         | 
| 31 31 | 
             
              }
         | 
| 32 32 |  | 
| 33 | 
            +
              // Remove select outline from select box in FF
         | 
| 34 | 
            +
              &:-moz-focusring {
         | 
| 35 | 
            +
                color: transparent;
         | 
| 36 | 
            +
                text-shadow: 0 0 0 $input-color;
         | 
| 37 | 
            +
              }
         | 
| 38 | 
            +
             | 
| 33 39 | 
             
              // Customize the `:focus` state to imitate native WebKit styles.
         | 
| 34 | 
            -
              @include form-control-focus();
         | 
| 40 | 
            +
              @include form-control-focus($ignore-warning: true);
         | 
| 35 41 |  | 
| 36 42 | 
             
              // Placeholder
         | 
| 37 43 | 
             
              &::placeholder {
         | 
| @@ -53,6 +59,15 @@ | |
| 53 59 | 
             
              }
         | 
| 54 60 | 
             
            }
         | 
| 55 61 |  | 
| 62 | 
            +
            input[type="date"],
         | 
| 63 | 
            +
            input[type="time"],
         | 
| 64 | 
            +
            input[type="datetime-local"],
         | 
| 65 | 
            +
            input[type="month"] {
         | 
| 66 | 
            +
              &.form-control {
         | 
| 67 | 
            +
                appearance: none; // Fix appearance for date inputs in Safari
         | 
| 68 | 
            +
              }
         | 
| 69 | 
            +
            }
         | 
| 70 | 
            +
             | 
| 56 71 | 
             
            select.form-control {
         | 
| 57 72 | 
             
              &:focus::-ms-value {
         | 
| 58 73 | 
             
                // Suppress the nested default white text on blue background highlight given to
         | 
| @@ -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;
         | 
| @@ -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,6 +50,25 @@ | |
| 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);
         | 
| @@ -84,3 +105,40 @@ | |
| 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 | 
            +
              @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2);
         | 
| 144 | 
            +
            }
         |