diff options
author | Gleb Mazovetskiy <glex.spb@gmail.com> | 2017-07-06 02:56:19 +0300 |
---|---|---|
committer | Gleb Mazovetskiy <glex.spb@gmail.com> | 2017-07-06 02:56:19 +0300 |
commit | b156edfee2b9629ad4751ee2a118a04f824ef9eb (patch) | |
tree | 6d9003fe75087f5b95a281d5537109b38515d2a8 /assets/stylesheets/bootstrap | |
parent | 7cdeca9a0e8db3bb7548d9fa5bdaad9b644fca32 (diff) |
rake update[v4-dev]
Diffstat (limited to 'assets/stylesheets/bootstrap')
34 files changed, 600 insertions, 825 deletions
diff --git a/assets/stylesheets/bootstrap/_alert.scss b/assets/stylesheets/bootstrap/_alert.scss index 562821a..3dfd13f 100644 --- a/assets/stylesheets/bootstrap/_alert.scss +++ b/assets/stylesheets/bootstrap/_alert.scss @@ -41,15 +41,8 @@ // // Generate contextual modifier classes for colorizing the alert. -.alert-success { - @include alert-variant($alert-success-bg, $alert-success-border-color, $alert-success-text); -} -.alert-info { - @include alert-variant($alert-info-bg, $alert-info-border-color, $alert-info-text); -} -.alert-warning { - @include alert-variant($alert-warning-bg, $alert-warning-border-color, $alert-warning-text); -} -.alert-danger { - @include alert-variant($alert-danger-bg, $alert-danger-border-color, $alert-danger-text); +@each $color, $value in $theme-colors { + .alert-#{$color} { + @include alert-variant(theme-color-level($color, -10), theme-color-level($color, -9), theme-color-level($color, 6)); + } } diff --git a/assets/stylesheets/bootstrap/_badge.scss b/assets/stylesheets/bootstrap/_badge.scss index 175b19d..8a76263 100644 --- a/assets/stylesheets/bootstrap/_badge.scss +++ b/assets/stylesheets/bootstrap/_badge.scss @@ -27,16 +27,6 @@ top: -1px; } -// scss-lint:disable QualifyingElement -// Add hover effects, but only for links -a.badge { - @include hover-focus { - color: $badge-link-hover-color; - text-decoration: none; - } -} -// scss-lint:enable QualifyingElement - // Pill badges // // Make them extra rounded with a modifier to replace v3's badges. @@ -51,26 +41,8 @@ a.badge { // // Contextual variations (linked badges get darker on :hover). -.badge-default { - @include badge-variant($badge-default-bg); -} - -.badge-primary { - @include badge-variant($badge-primary-bg); -} - -.badge-success { - @include badge-variant($badge-success-bg); -} - -.badge-info { - @include badge-variant($badge-info-bg); -} - -.badge-warning { - @include badge-variant($badge-warning-bg); -} - -.badge-danger { - @include badge-variant($badge-danger-bg); +@each $color, $value in $theme-colors { + .badge-#{$color} { + @include badge-variant($value); + } } diff --git a/assets/stylesheets/bootstrap/_buttons.scss b/assets/stylesheets/bootstrap/_buttons.scss index 05c54e4..607f24a 100644 --- a/assets/stylesheets/bootstrap/_buttons.scss +++ b/assets/stylesheets/bootstrap/_buttons.scss @@ -50,43 +50,16 @@ fieldset[disabled] a.btn { // Alternate buttons // -.btn-primary { - @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border-color); -} -.btn-secondary { - @include button-variant($btn-secondary-color, $btn-secondary-bg, $btn-secondary-border-color); -} -.btn-info { - @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border-color); -} -.btn-success { - @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border-color); -} -.btn-warning { - @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border-color); -} -.btn-danger { - @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border-color); +@each $color, $value in $theme-colors { + .btn-#{$color} { + @include button-variant($value, $value); + } } -// Remove all backgrounds -.btn-outline-primary { - @include button-outline-variant($btn-primary-bg, $btn-primary-color); -} -.btn-outline-secondary { - @include button-outline-variant($btn-secondary-border-color, $btn-secondary-color); -} -.btn-outline-info { - @include button-outline-variant($btn-info-bg, $btn-info-color); -} -.btn-outline-success { - @include button-outline-variant($btn-success-bg, $btn-success-color); -} -.btn-outline-warning { - @include button-outline-variant($btn-warning-bg, $btn-warning-color); -} -.btn-outline-danger { - @include button-outline-variant($btn-danger-bg, $btn-danger-color); +@each $color, $value in $theme-colors { + .btn-outline-#{$color} { + @include button-outline-variant($value, #fff); + } } @@ -111,6 +84,7 @@ fieldset[disabled] a.btn { &:focus, &:active { border-color: transparent; + box-shadow: none; } @include hover { border-color: transparent; diff --git a/assets/stylesheets/bootstrap/_card.scss b/assets/stylesheets/bootstrap/_card.scss index e45af7b..1ab85a4 100644 --- a/assets/stylesheets/bootstrap/_card.scss +++ b/assets/stylesheets/bootstrap/_card.scss @@ -9,11 +9,12 @@ min-width: 0; word-wrap: break-word; background-color: $card-bg; + background-clip: border-box; border: $card-border-width solid $card-border-color; @include border-radius($card-border-radius); } -.card-block { +.card-body { // Enable `flex-grow: 1` for decks and groups so that card blocks take up // as much space as possible, ensuring footers are aligned to the bottom. flex: 1 1 auto; @@ -100,65 +101,6 @@ margin-left: -($card-spacer-x / 2); } - -// -// Background variations -// - -.card-primary { - @include card-variant($brand-primary, $brand-primary); -} -.card-success { - @include card-variant($brand-success, $brand-success); -} -.card-info { - @include card-variant($brand-info, $brand-info); -} -.card-warning { - @include card-variant($brand-warning, $brand-warning); -} -.card-danger { - @include card-variant($brand-danger, $brand-danger); -} - -// Remove all backgrounds -.card-outline-primary { - @include card-outline-variant($btn-primary-bg); -} -.card-outline-secondary { - @include card-outline-variant($btn-secondary-border-color); -} -.card-outline-info { - @include card-outline-variant($btn-info-bg); -} -.card-outline-success { - @include card-outline-variant($btn-success-bg); -} -.card-outline-warning { - @include card-outline-variant($btn-warning-bg); -} -.card-outline-danger { - @include card-outline-variant($btn-danger-bg); -} - -// -// Inverse text within a card for use with dark backgrounds -// - -.card-inverse { - @include card-inverse; -} - -// -// Blockquote -// - -.card-blockquote { - padding: 0; - margin-bottom: 0; - border-left: 0; -} - // Card image .card-img-overlay { position: absolute; @@ -197,7 +139,7 @@ .card { display: flex; - flex: 1 0 0; + flex: 1 0 0%; flex-direction: column; margin-right: $card-deck-margin; margin-left: $card-deck-margin; @@ -216,7 +158,7 @@ flex-flow: row wrap; .card { - flex: 1 0 0; + flex: 1 0 0%; + .card { margin-left: 0; diff --git a/assets/stylesheets/bootstrap/_carousel.scss b/assets/stylesheets/bootstrap/_carousel.scss index 41eca94..8aa14ac 100644 --- a/assets/stylesheets/bootstrap/_carousel.scss +++ b/assets/stylesheets/bootstrap/_carousel.scss @@ -22,7 +22,7 @@ .carousel-item.active, .carousel-item-next, .carousel-item-prev { - display: flex; + display: block; } .carousel-item-next, @@ -34,17 +34,29 @@ // CSS3 transforms when supported by the browser .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { - transform: translate3d(0, 0, 0); + transform: translateX(0); + + @supports (transform-style: preserve-3d) { + transform: translate3d(0, 0, 0); + } } .carousel-item-next, .active.carousel-item-right { - transform: translate3d(100%, 0, 0); + transform: translateX(100%); + + @supports (transform-style: preserve-3d) { + transform: translate3d(100%, 0, 0); + } } .carousel-item-prev, .active.carousel-item-left { - transform: translate3d(-100%, 0, 0); + transform: translateX(-100%); + + @supports (transform-style: preserve-3d) { + transform: translate3d(-100%, 0, 0); + } } @@ -121,8 +133,8 @@ li { position: relative; - flex: 1 0 auto; - max-width: $carousel-indicator-width; + flex: 0 1 auto; + width: $carousel-indicator-width; height: $carousel-indicator-height; margin-right: $carousel-indicator-spacer; margin-left: $carousel-indicator-spacer; diff --git a/assets/stylesheets/bootstrap/_custom-forms.scss b/assets/stylesheets/bootstrap/_custom-forms.scss index 9133f7d..b58fffb 100644 --- a/assets/stylesheets/bootstrap/_custom-forms.scss +++ b/assets/stylesheets/bootstrap/_custom-forms.scss @@ -23,29 +23,29 @@ opacity: 0; &:checked ~ .custom-control-indicator { - color: $custom-control-checked-indicator-color; - background-color: $custom-control-checked-indicator-bg; - @include box-shadow($custom-control-checked-indicator-box-shadow); + color: $custom-control-indicator-checked-color; + background-color: $custom-control-indicator-checked-bg; + @include box-shadow($custom-control-indicator-checked-box-shadow); } &:focus ~ .custom-control-indicator { // the mixin is not used here to make sure there is feedback - box-shadow: $custom-control-focus-indicator-box-shadow; + box-shadow: $custom-control-indicator-focus-box-shadow; } &:active ~ .custom-control-indicator { - color: $custom-control-active-indicator-color; - background-color: $custom-control-active-indicator-bg; - @include box-shadow($custom-control-active-indicator-box-shadow); + color: $custom-control-indicator-active-color; + background-color: $custom-control-indicator-active-bg; + @include box-shadow($custom-control-indicator-active-box-shadow); } &:disabled { ~ .custom-control-indicator { - background-color: $custom-control-disabled-indicator-bg; + background-color: $custom-control-indicator-disabled-bg; } ~ .custom-control-description { - color: $custom-control-disabled-description-color; + color: $custom-control-description-disabled-color; } } } @@ -76,16 +76,16 @@ .custom-checkbox { .custom-control-indicator { - @include border-radius($custom-checkbox-radius); + @include border-radius($custom-checkbox-border-radius); } .custom-control-input:checked ~ .custom-control-indicator { - background-image: $custom-checkbox-checked-icon; + background-image: $custom-checkbox-icon-checked; } .custom-control-input:indeterminate ~ .custom-control-indicator { background-color: $custom-checkbox-indeterminate-bg; - background-image: $custom-checkbox-indeterminate-icon; + background-image: $custom-checkbox-icon-indeterminate; @include box-shadow($custom-checkbox-indeterminate-box-shadow); } } @@ -96,11 +96,11 @@ .custom-radio { .custom-control-indicator { - border-radius: $custom-radio-radius; + border-radius: $custom-radio-border-radius; } .custom-control-input:checked ~ .custom-control-indicator { - background-image: $custom-radio-checked-icon; + background-image: $custom-radio-icon-checked; } } @@ -133,8 +133,7 @@ .custom-select { display: inline-block; max-width: 100%; - $select-border-width: ($custom-select-border-width * 2); - height: calc(#{$input-height} + #{$select-border-width}); + height: $input-height; padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x; line-height: $custom-select-line-height; color: $custom-select-color; @@ -142,7 +141,11 @@ background: $custom-select-bg $custom-select-indicator no-repeat right $custom-select-padding-x center; background-size: $custom-select-bg-size; border: $custom-select-border-width solid $custom-select-border-color; - @include border-radius($custom-select-border-radius); + @if $enable-rounded { + border-radius: $custom-select-border-radius; + } @else { + border-radius: 0; + } appearance: none; &:focus { @@ -173,14 +176,10 @@ } .custom-select-sm { + height: $custom-select-height-sm; padding-top: $custom-select-padding-y; padding-bottom: $custom-select-padding-y; - font-size: $custom-select-sm-font-size; - - // &:not([multiple]) { - // height: 26px; - // min-height: 26px; - // } + font-size: $custom-select-font-size-sm; } diff --git a/assets/stylesheets/bootstrap/_custom.scss b/assets/stylesheets/bootstrap/_custom.scss deleted file mode 100644 index 88ccf20..0000000 --- a/assets/stylesheets/bootstrap/_custom.scss +++ /dev/null @@ -1,4 +0,0 @@ -// Bootstrap overrides -// -// Copy variables from `_variables.scss` to this file to override default values -// without modifying source files. diff --git a/assets/stylesheets/bootstrap/_forms.scss b/assets/stylesheets/bootstrap/_forms.scss index 55e8cb4..519554b 100644 --- a/assets/stylesheets/bootstrap/_forms.scss +++ b/assets/stylesheets/bootstrap/_forms.scss @@ -42,7 +42,7 @@ // Placeholder &::placeholder { - color: $input-color-placeholder; + color: $input-placeholder-color; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526. opacity: 1; } @@ -54,7 +54,7 @@ // don't honor that edge case; we style them as disabled anyway. &:disabled, &[readonly] { - background-color: $input-bg-disabled; + background-color: $input-disabled-bg; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655. opacity: 1; } @@ -62,8 +62,7 @@ select.form-control { &:not([size]):not([multiple]) { - $select-border-width: ($border-width * 2); - height: calc(#{$input-height} + #{$select-border-width}); + height: $input-height; } &:focus::-ms-value { @@ -123,12 +122,12 @@ select.form-control { } -// Static form control text +// Readonly controls as plain text // -// Apply class to an element to make any string of text align with labels in a -// horizontal form layout. +// Apply class to a readonly input to make it appear like regular plain +// text (without any border, background color, focus indicator) -.form-control-static { +.form-control-plaintext { padding-top: $input-btn-padding-y; padding-bottom: $input-btn-padding-y; margin-bottom: 0; // match inputs if this class comes on inputs with default margins @@ -161,8 +160,7 @@ select.form-control { select.form-control-sm { &:not([size]):not([multiple]) { - $select-border-width: ($border-width * 2); - height: calc(#{$input-height-sm} + #{$select-border-width}); + height: $input-height-sm; } } @@ -175,8 +173,7 @@ select.form-control-sm { select.form-control-lg { &:not([size]):not([multiple]) { - $select-border-width: ($border-width * 2); - height: calc(#{$input-height-lg} + #{$select-border-width}); + height: $input-height-lg; } } @@ -196,6 +193,24 @@ select.form-control-lg { } +// Form grid +// +// Special replacement for our grid system's `.row` for tighter form layouts. + +.form-row { + display: flex; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; + + > .col, + > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; + } +} + + // Checkboxes and radios // // Indent the labels to position radios/checkboxes as hanging controls. @@ -241,48 +256,37 @@ select.form-control-lg { } -// Form control feedback states +// Form validation // -// Apply contextual and semantic states to individual form controls. - -.form-control-feedback { - margin-top: $form-feedback-margin-top; +// Provide feedback to users when form field values are valid or invalid. Works +// primarily for client-side validation via scoped `:invalid` and `:valid` +// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for +// server side validation. + +.invalid-feedback { + display: none; + margin-top: .25rem; + font-size: .875rem; + color: $form-feedback-invalid-color; } -.form-control-success, -.form-control-warning, -.form-control-danger { - padding-right: ($input-btn-padding-x * 3); - background-repeat: no-repeat; - background-position: center right ($input-height / 4); - background-size: ($input-height / 2) ($input-height / 2); -} - -// Form validation states -.has-success { - @include form-control-validation($brand-success); - - .form-control-success { - background-image: $form-icon-success; - } -} - -.has-warning { - @include form-control-validation($brand-warning); - - .form-control-warning { - background-image: $form-icon-warning; - } -} - -.has-danger { - @include form-control-validation($brand-danger); - - .form-control-danger { - background-image: $form-icon-danger; - } +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + width: 250px; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba($form-feedback-invalid-color,.8); + border-radius: .2rem; } +@include form-validation-state("valid", $form-feedback-valid-color); +@include form-validation-state("invalid", $form-feedback-invalid-color); // Inline forms // @@ -331,7 +335,7 @@ select.form-control-lg { } // Make static controls behave like regular ones - .form-control-static { + .form-control-plaintext { display: inline-block; } diff --git a/assets/stylesheets/bootstrap/_functions.scss b/assets/stylesheets/bootstrap/_functions.scss new file mode 100644 index 0000000..6c0601c --- /dev/null +++ b/assets/stylesheets/bootstrap/_functions.scss @@ -0,0 +1,90 @@ +// Bootstrap functions +// +// Utility mixins and functions for evalutating source code across our variables, maps, and mixins. + +// Ascending +// Used to evaluate Sass maps like our grid breakpoints. +@mixin _assert-ascending($map, $map-name) { + $prev-key: null; + $prev-num: null; + @each $key, $num in $map { + @if $prev-num == null { + // Do nothing + } @else if not comparable($prev-num, $num) { + @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}' !"; + } @else if $prev-num >= $num { + @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; + } + $prev-key: $key; + $prev-num: $num; + } +} + +// Starts at zero +// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0. +@mixin _assert-starts-at-zero($map) { + $values: map-values($map); + $first-value: nth($values, 1); + @if $first-value != 0 { + @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; + } +} + +// Replace `$search` with `$replace` in `$string` +// Used on our SVG icon backgrounds for custom forms. +// +// @author Hugo Giraudel +// @param {String} $string - Initial string +// @param {String} $search - Substring to replace +// @param {String} $replace ('') - New value +// @return {String} - Updated string +@function str-replace($string, $search, $replace: "") { + $index: str-index($string, $search); + + @if $index { + @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); + } + + @return $string; +} + +// Color contrast +@mixin color-yiq($color) { + $r: red($color); + $g: green($color); + $b: blue($color); + + $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000; + + @if ($yiq >= 150) { + color: #111; + } @else { + color: #fff; + } +} + +// Retreive color Sass maps +@function color($key: "blue") { + @return map-get($colors, $key); +} + +@function theme-color($key: "primary") { + @return map-get($theme-colors, $key); +} + +@function grayscale($key: "100") { + @return map-get($grays, $key); +} + +// Request a theme color level +@function theme-color-level($color-name: "primary", $level: 0) { + $color: theme-color($color-name); + $color-base: if($level > 0, #000, #fff); + + @if $level < 0 { + // Lighter values need a quick double negative for the Sass math to work + @return mix($color-base, $color, $level * -1 * $theme-color-interval); + } @else { + @return mix($color-base, $color, $level * $theme-color-interval); + } +} diff --git a/assets/stylesheets/bootstrap/_list-group.scss b/assets/stylesheets/bootstrap/_list-group.scss index fef2c15..7e0b19e 100644 --- a/assets/stylesheets/bootstrap/_list-group.scss +++ b/assets/stylesheets/bootstrap/_list-group.scss @@ -19,19 +19,19 @@ .list-group-item-action { width: 100%; // For `<button>`s (anchors become 100% by default though) - color: $list-group-link-color; + color: $list-group-action-color; text-align: inherit; // For `<button>`s (anchors inherit) // Hover state @include hover-focus { - color: $list-group-link-hover-color; + color: $list-group-action-hover-color; text-decoration: none; background-color: $list-group-hover-bg; } &:active { - color: $list-group-link-active-color; - background-color: $list-group-link-active-bg; + color: $list-group-action-active-color; + background-color: $list-group-action-active-bg; } } @@ -109,7 +109,6 @@ // Add modifier classes to change text and background color on individual items. // Organizationally, this must come after the `:hover` states. -@include list-group-item-variant(success, $state-success-bg, $state-success-text); -@include list-group-item-variant(info, $state-info-bg, $state-info-text); -@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text); -@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text); +@each $color, $value in $theme-colors { + @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6)); +} diff --git a/assets/stylesheets/bootstrap/_mixins.scss b/assets/stylesheets/bootstrap/_mixins.scss index cc3394f..09035bf 100644 --- a/assets/stylesheets/bootstrap/_mixins.scss +++ b/assets/stylesheets/bootstrap/_mixins.scss @@ -19,7 +19,6 @@ // // Components @import "mixins/alert"; @import "mixins/buttons"; -@import "mixins/cards"; @import "mixins/pagination"; @import "mixins/lists"; @import "mixins/list-group"; diff --git a/assets/stylesheets/bootstrap/_modal.scss b/assets/stylesheets/bootstrap/_modal.scss index 9d2a867..c0c4067 100644 --- a/assets/stylesheets/bootstrap/_modal.scss +++ b/assets/stylesheets/bootstrap/_modal.scss @@ -54,7 +54,7 @@ background-clip: padding-box; border: $modal-content-border-width solid $modal-content-border-color; @include border-radius($border-radius-lg); - @include box-shadow($modal-content-xs-box-shadow); + @include box-shadow($modal-content-box-shadow-xs); // Remove focus outline from opened modal outline: 0; } @@ -127,11 +127,11 @@ // Automatically set modal's width for larger viewports .modal-dialog { max-width: $modal-md; - margin: $modal-dialog-sm-up-margin-y auto; + margin: $modal-dialog-margin-y-sm-up auto; } .modal-content { - @include box-shadow($modal-content-sm-up-box-shadow); + @include box-shadow($modal-content-box-shadow-sm-up); } .modal-sm { max-width: $modal-sm; } diff --git a/assets/stylesheets/bootstrap/_nav.scss b/assets/stylesheets/bootstrap/_nav.scss index 973679e..ed5d76b 100644 --- a/assets/stylesheets/bootstrap/_nav.scss +++ b/assets/stylesheets/bootstrap/_nav.scss @@ -21,7 +21,7 @@ // Disabled state lightens text &.disabled { - color: $nav-disabled-link-color; + color: $nav-link-disabled-color; } } @@ -45,7 +45,7 @@ } &.disabled { - color: $nav-disabled-link-color; + color: $nav-link-disabled-color; background-color: transparent; border-color: transparent; } @@ -53,9 +53,9 @@ .nav-link.active, .nav-item.show .nav-link { - color: $nav-tabs-active-link-color; - background-color: $nav-tabs-active-link-bg; - border-color: $nav-tabs-active-link-border-color $nav-tabs-active-link-border-color $nav-tabs-active-link-bg; + color: $nav-tabs-link-active-color; + background-color: $nav-tabs-link-active-bg; + border-color: $nav-tabs-link-active-border-color $nav-tabs-link-active-border-color $nav-tabs-link-active-bg; } .dropdown-menu { @@ -76,9 +76,9 @@ @include border-radius($nav-pills-border-radius); &.active, - .show & { - color: $nav-pills-active-link-color; - background-color: $nav-pills-active-link-bg; + .show > & { + color: $nav-pills-link-active-color; + background-color: $nav-pills-link-active-bg; } } } diff --git a/assets/stylesheets/bootstrap/_navbar.scss b/assets/stylesheets/bootstrap/_navbar.scss index 59cc52d..ab238e5 100644 --- a/assets/stylesheets/bootstrap/_navbar.scss +++ b/assets/stylesheets/bootstrap/_navbar.scss @@ -77,9 +77,8 @@ } .dropdown-menu { - position: static !important; + position: static; float: none; - transform: unset !important; } } @@ -158,8 +157,12 @@ flex-direction: row; .dropdown-menu { - position: absolute !important; - top: 100% !important; + position: absolute; + } + + .dropdown-menu-right { + right: 0; + left: auto; // Reset the default from `.dropdown-menu` } .nav-link { @@ -239,25 +242,25 @@ } // White links against a dark background -.navbar-inverse { +.navbar-dark { .navbar-brand { - color: $navbar-inverse-active-color; + color: $navbar-dark-active-color; @include hover-focus { - color: $navbar-inverse-active-color; + color: $navbar-dark-active-color; } } .navbar-nav { .nav-link { - color: $navbar-inverse-color; + color: $navbar-dark-color; @include hover-focus { - color: $navbar-inverse-hover-color; + color: $navbar-dark-hover-color; } &.disabled { - color: $navbar-inverse-disabled-color; + color: $navbar-dark-disabled-color; } } @@ -265,20 +268,20 @@ .active > .nav-link, .nav-link.show, .nav-link.active { - color: $navbar-inverse-active-color; + color: $navbar-dark-active-color; } } .navbar-toggler { - color: $navbar-inverse-color; - border-color: $navbar-inverse-toggler-border-color; + color: $navbar-dark-color; + border-color: $navbar-dark-toggler-border-color; } .navbar-toggler-icon { - background-image: $navbar-inverse-toggler-icon-bg; + background-image: $navbar-dark-toggler-icon-bg; } .navbar-text { - color: $navbar-inverse-color; + color: $navbar-dark-color; } } diff --git a/assets/stylesheets/bootstrap/_popover.scss b/assets/stylesheets/bootstrap/_popover.scss index e3a0d9d..950d6ca 100644 --- a/assets/stylesheets/bootstrap/_popover.scss +++ b/assets/stylesheets/bootstrap/_popover.scss @@ -120,8 +120,8 @@ border-bottom-color: $popover-arrow-color; } - // This will remove the popover-title's border just below the arrow - .popover-title::before { + // This will remove the popover-header's border just below the arrow + .popover-header::before { position: absolute; top: 0; left: 50%; @@ -129,7 +129,7 @@ width: 20px; margin-left: -10px; content: ""; - border-bottom: 1px solid $popover-title-bg; + border-bottom: 1px solid $popover-header-bg; } } @@ -174,13 +174,13 @@ // Offset the popover to account for the popover arrow -.popover-title { - padding: $popover-title-padding-y $popover-title-padding-x; +.popover-header { + padding: $popover-header-padding-y $popover-header-padding-x; margin-bottom: 0; // Reset the default from Reboot font-size: $font-size-base; - color: $popover-title-color; - background-color: $popover-title-bg; - border-bottom: $popover-border-width solid darken($popover-title-bg, 5%); + color: $popover-header-color; + background-color: $popover-header-bg; + border-bottom: $popover-border-width solid darken($popover-header-bg, 5%); $offset-border-width: calc(#{$border-radius-lg} - #{$popover-border-width}); @include border-top-radius($offset-border-width); @@ -189,7 +189,7 @@ } } -.popover-content { - padding: $popover-content-padding-y $popover-content-padding-x; - color: $popover-content-color; +.popover-body { + padding: $popover-body-padding-y $popover-body-padding-x; + color: $popover-body-color; } diff --git a/assets/stylesheets/bootstrap/_tables.scss b/assets/stylesheets/bootstrap/_tables.scss index 36c3dab..a652d17 100644 --- a/assets/stylesheets/bootstrap/_tables.scss +++ b/assets/stylesheets/bootstrap/_tables.scss @@ -37,7 +37,7 @@ .table-sm { th, td { - padding: $table-sm-cell-padding; + padding: $table-cell-padding-sm; } } @@ -69,7 +69,7 @@ .table-striped { tbody tr:nth-of-type(odd) { - background-color: $table-bg-accent; + background-color: $table-accent-bg; } } @@ -81,7 +81,7 @@ .table-hover { tbody tr { @include hover { - background-color: $table-bg-hover; + background-color: $table-hover-bg; } } } @@ -92,12 +92,11 @@ // Exact selectors below required to override `.table-striped` and prevent // inheritance to nested tables. -// Generate the contextual variants -@include table-row-variant(active, $table-bg-active); -@include table-row-variant(success, $state-success-bg); -@include table-row-variant(info, $state-info-bg); -@include table-row-variant(warning, $state-warning-bg); -@include table-row-variant(danger, $state-danger-bg); +@each $color, $value in $theme-colors { + @include table-row-variant($color, theme-color-level($color, -9)); +} + +@include table-row-variant(active, $table-active-bg); // Inverse styles @@ -134,14 +133,14 @@ &.table-striped { tbody tr:nth-of-type(odd) { - background-color: $table-inverse-bg-accent; + background-color: $table-inverse-accent-bg; } } &.table-hover { tbody tr { @include hover { - background-color: $table-inverse-bg-hover; + background-color: $table-inverse-hover-bg; } } } diff --git a/assets/stylesheets/bootstrap/_type.scss b/assets/stylesheets/bootstrap/_type.scss index fc9c791..8928341 100644 --- a/assets/stylesheets/bootstrap/_type.scss +++ b/assets/stylesheets/bootstrap/_type.scss @@ -11,12 +11,12 @@ h1, h2, h3, h4, h5, h6, color: $headings-color; } -h1, .h1 { font-size: $font-size-h1; } -h2, .h2 { font-size: $font-size-h2; } -h3, .h3 { font-size: $font-size-h3; } -h4, .h4 { font-size: $font-size-h4; } -h5, .h5 { font-size: $font-size-h5; } -h6, .h6 { font-size: $font-size-h6; } +h1, .h1 { font-size: $h1-font-size; } +h2, .h2 { font-size: $h2-font-size; } +h3, .h3 { font-size: $h3-font-size; } +h4, .h4 { font-size: $h4-font-size; } +h5, .h5 { font-size: $h5-font-size; } +h6, .h6 { font-size: $h6-font-size; } .lead { font-size: $lead-font-size; @@ -108,10 +108,8 @@ mark, // Blockquotes .blockquote { - padding: ($spacer / 2) $spacer; margin-bottom: $spacer; font-size: $blockquote-font-size; - border-left: $blockquote-border-width solid $blockquote-border-color; } .blockquote-footer { @@ -123,21 +121,3 @@ mark, content: "\2014 \00A0"; // em dash, nbsp } } - -// Opposite alignment of blockquote -.blockquote-reverse { - padding-right: $spacer; - padding-left: 0; - text-align: right; - border-right: $blockquote-border-width solid $blockquote-border-color; - border-left: 0; -} - -.blockquote-reverse .blockquote-footer { - &::before { - content: ""; - } - &::after { - content: "\00A0 \2014"; // nbsp, em dash - } -} diff --git a/assets/stylesheets/bootstrap/_utilities.scss b/assets/stylesheets/bootstrap/_utilities.scss index 7d08ff2..7b2a1eb 100644 --- a/assets/stylesheets/bootstrap/_utilities.scss +++ b/assets/stylesheets/bootstrap/_utilities.scss @@ -3,6 +3,7 @@ @import "utilities/borders"; @import "utilities/clearfix"; @import "utilities/display"; +@import "utilities/embed"; @import "utilities/flex"; @import "utilities/float"; @import "utilities/position"; diff --git a/assets/stylesheets/bootstrap/_variables.scss b/assets/stylesheets/bootstrap/_variables.scss index e5aa9e9..91103b6 100644 --- a/assets/stylesheets/bootstrap/_variables.scss +++ b/assets/stylesheets/bootstrap/_variables.scss @@ -2,11 +2,13 @@ // // Copy settings from this file into the provided `_custom.scss` to override // the Bootstrap defaults without modifying key, versioned files. - +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. // Table of Contents // -// Colors +// Color system // Options // Spacing // Body @@ -41,82 +43,75 @@ // Close // Code -@mixin _assert-ascending($map, $map-name) { - $prev-key: null; - $prev-num: null; - @each $key, $num in $map { - @if $prev-num == null { - // Do nothing - } @else if not comparable($prev-num, $num) { - @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}' !"; - } @else if $prev-num >= $num { - @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } - $prev-key: $key; - $prev-num: $num; - } -} - -// Replace `$search` with `$replace` in `$string` -// @author Hugo Giraudel -// @param {String} $string - Initial string -// @param {String} $search - Substring to replace -// @param {String} $replace ('') - New value -// @return {String} - Updated string -@function str-replace($string, $search, $replace: "") { - $index: str-index($string, $search); - - @if $index { - @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); - } - - @return $string; -} - -@mixin _assert-starts-at-zero($map) { - $values: map-values($map); - $first-value: nth($values, 1); - @if $first-value != 0 { - @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; - } -} - - -// General variable structure -// -// Variable format should follow the `$component-modifier-state-property` order. - -// Colors // -// Grayscale and brand colors for use across Bootstrap. +// Color system +// -// Start with assigning color names to specific hex values. $white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #868e96 !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; $black: #000 !default; -$red: #d9534f !default; -$orange: #f0ad4e !default; -$yellow: #ffd500 !default; -$green: #5cb85c !default; -$blue: #0275d8 !default; -$teal: #5bc0de !default; -$pink: #ff5b77 !default; -$purple: #613d7c !default; - -// Create grayscale -$gray-dark: #292b2c !default; -$gray: #464a4c !default; -$gray-light: #636c72 !default; -$gray-lighter: #eceeef !default; -$gray-lightest: #f7f7f9 !default; - -// Reassign color vars to semantic color scheme -$brand-primary: $blue !default; -$brand-success: $green !default; -$brand-info: $teal !default; -$brand-warning: $orange !default; -$brand-danger: $red !default; -$brand-inverse: $gray-dark !default; + +$grays: ( + 100: $gray-100, + 200: $gray-200, + 300: $gray-300, + 400: $gray-400, + 500: $gray-500, + 600: $gray-600, + 700: $gray-700, + 800: $gray-800, + 900: $gray-900 +) !default; + +$blue: #007bff !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #e83e8c !default; +$red: #dc3545 !default; +$orange: #fd7e14 !default; +$yellow: #ffc107 !default; +$green: #28a745 !default; +$teal: #20c997 !default; +$cyan: #17a2b8 !default; + +$colors: ( + blue: $blue, + indigo: $indigo, + purple: $purple, + pink: $pink, + red: $red, + orange: $orange, + yellow: $yellow, + green: $green, + teal: $teal, + cyan: $cyan, + white: $white, + gray: $gray-600, + gray-dark: $gray-800 +) !default; + +$theme-colors: ( + primary: $blue, + secondary: $gray-600, + success: $green, + info: $cyan, + warning: $yellow, + danger: $red, + light: $gray-100, + dark: $gray-800 +) !default; + +// Set a specific jump point for requesting color jumps +$theme-color-interval: 8% !default; // Options @@ -161,13 +156,13 @@ $sizes: ( // Settings for the `<body>` element. $body-bg: $white !default; -$body-color: $gray-dark !default; +$body-color: $gray-900 !default; // Links // // Style anchor elements. -$link-color: $brand-primary !default; +$link-color: theme-color("primary") !default; $link-decoration: none !default; $link-hover-color: darken($link-color, 15%) !default; $link-hover-decoration: underline !default; @@ -206,16 +201,8 @@ $container-max-widths: ( // // Set the number of columns and specify the width of the gutters. -$grid-columns: 12 !default; -$grid-gutter-width-base: 30px !default; -$grid-gutter-widths: ( - xs: $grid-gutter-width-base, - sm: $grid-gutter-width-base, - md: $grid-gutter-width-base, - lg: $grid-gutter-width-base, - xl: $grid-gutter-width-base -) !default; - +$grid-columns: 12 !default; +$grid-gutter-width: 30px !default; // Components // @@ -231,7 +218,7 @@ $border-radius-lg: .3rem !default; $border-radius-sm: .2rem !default; $component-active-color: $white !default; -$component-active-bg: $brand-primary !default; +$component-active-bg: theme-color("primary") !default; $caret-width: .3em !default; @@ -251,7 +238,6 @@ $font-family-base: $font-family-sans-serif !default; $font-size-base: 1rem !default; // Assumes the browser default, typically `16px` $font-size-lg: 1.25rem !default; $font-size-sm: .875rem !default; -$font-size-xs: .75rem !default; $font-weight-normal: normal !default; $font-weight-bold: bold !default; @@ -259,12 +245,12 @@ $font-weight-bold: bold !default; $font-weight-base: $font-weight-normal !default; $line-height-base: 1.5 !default; -$font-size-h1: 2.5rem !default; -$font-size-h2: 2rem !default; -$font-size-h3: 1.75rem !default; -$font-size-h4: 1.5rem !default; -$font-size-h5: 1.25rem !default; -$font-size-h6: 1rem !default; +$h1-font-size: 2.5rem !default; +$h2-font-size: 2rem !default; +$h3-font-size: 1.75rem !default; +$h4-font-size: 1.5rem !default; +$h5-font-size: 1.25rem !default; +$h6-font-size: 1rem !default; $headings-margin-bottom: ($spacer / 2) !default; $headings-font-family: inherit !default; @@ -288,12 +274,10 @@ $lead-font-weight: 300 !default; $small-font-size: 80% !default; -$text-muted: $gray-light !default; +$text-muted: $gray-600 !default; -$blockquote-small-color: $gray-light !default; +$blockquote-small-color: $gray-600 !default; $blockquote-font-size: ($font-size-base * 1.25) !default; -$blockquote-border-color: $gray-lighter !default; -$blockquote-border-width: .25rem !default; $hr-border-color: rgba($black,.1) !default; $hr-border-width: $border-width !default; @@ -307,29 +291,31 @@ $nested-kbd-font-weight: $font-weight-bold !default; $list-inline-padding: 5px !default; +$mark-bg: #fcf8e3 !default; + // Tables // // Customizes the `.table` component with basic values, each used across all table variations. $table-cell-padding: .75rem !default; -$table-sm-cell-padding: .3rem !default; +$table-cell-padding-sm: .3rem !default; $table-bg: transparent !default; -$table-bg-accent: rgba($black,.05) !default; -$table-bg-hover: rgba($black,.075) !default; -$table-bg-active: $table-bg-hover !default; +$table-accent-bg: rgba($black,.05) !default; +$table-hover-bg: rgba($black,.075) !default; +$table-active-bg: $table-hover-bg !default; $table-border-width: $border-width !default; -$table-border-color: $gray-lighter !default; +$table-border-color: $gray-200 !default; -$table-head-bg: $gray-lighter !default; -$table-head-color: $gray !default; +$table-head-bg: $gray-200 !default; +$table-head-color: $gray-700 !default; -$table-inverse-bg: $gray-dark !default; -$table-inverse-bg-accent: rgba($white, .05) !default; -$table-inverse-bg-hover: rgba($white, .075) !default; -$table-inverse-border-color: lighten($gray-dark, 7.5%) !default; +$table-inverse-bg: $gray-900 !default; +$table-inverse-accent-bg: rgba($white, .05) !default; +$table-inverse-hover-bg: rgba($white, .075) !default; +$table-inverse-border-color: lighten($gray-900, 7.5%) !default; $table-inverse-color: $body-bg !default; @@ -338,7 +324,7 @@ $table-inverse-color: $body-bg !default; // For each of Bootstrap's buttons, define text, background and border color. $input-btn-padding-y: .5rem !default; -$input-btn-padding-x: 1rem !default; +$input-btn-padding-x: .75rem !default; $input-btn-line-height: 1.25 !default; $input-btn-padding-y-sm: .25rem !default; @@ -351,34 +337,10 @@ $input-btn-line-height-lg: 1.5 !default; $btn-font-weight: $font-weight-normal !default; $btn-box-shadow: inset 0 1px 0 rgba($white,.15), 0 1px 1px rgba($black,.075) !default; -$btn-focus-box-shadow: 0 0 0 2px rgba($brand-primary, .25) !default; +$btn-focus-box-shadow: 0 0 0 3px rgba(theme-color("primary"), .25) !default; $btn-active-box-shadow: inset 0 3px 5px rgba($black,.125) !default; -$btn-primary-color: $white !default; -$btn-primary-bg: $brand-primary !default; -$btn-primary-border-color: $btn-primary-bg !default; - -$btn-secondary-color: $gray-dark !default; -$btn-secondary-bg: $white !default; -$btn-secondary-border-color: #ccc !default; - -$btn-info-color: $white !default; -$btn-info-bg: $brand-info !default; -$btn-info-border-color: $btn-info-bg !default; - -$btn-success-color: $white !default; -$btn-success-bg: $brand-success !default; -$btn-success-border-color: $btn-success-bg !default; - -$btn-warning-color: $white !default; -$btn-warning-bg: $brand-warning !default; -$btn-warning-border-color: $btn-warning-bg !default; - -$btn-danger-color: $white !default; -$btn-danger-bg: $brand-danger !default; -$btn-danger-border-color: $btn-danger-bg !default; - -$btn-link-disabled-color: $gray-light !default; +$btn-link-disabled-color: $gray-600 !default; $btn-block-spacing-y: .5rem !default; @@ -387,15 +349,15 @@ $btn-border-radius: $border-radius !default; $btn-border-radius-lg: $border-radius-lg !default; $btn-border-radius-sm: $border-radius-sm !default; -$btn-transition: all .2s ease-in-out !default; +$btn-transition: all .15s ease-in-out !default; // Forms $input-bg: $white !default; -$input-bg-disabled: $gray-lighter !default; +$input-disabled-bg: $gray-200 !default; -$input-color: $gray !default; +$input-color: $gray-700 !default; $input-border-color: rgba($black,.15) !default; $input-btn-border-width: $border-width !default; // For form controls and buttons $input-box-shadow: inset 0 1px 1px rgba($black,.075) !default; @@ -404,21 +366,27 @@ $input-border-radius: $border-radius !default; $input-border-radius-lg: $border-radius-lg !default; $input-border-radius-sm: $border-radius-sm !default; -$input-bg-focus: $input-bg !default; -$input-border-color-focus: lighten($brand-primary, 25%) !default; -$input-box-shadow-focus: $input-box-shadow, rgba($input-border-color-focus, .6) !default; -$input-color-focus: $input-color !default; +$input-focus-bg: $input-bg !default; +$input-focus-border-color: lighten(theme-color("primary"), 25%) !default; +$input-focus-box-shadow: $input-box-shadow, $btn-focus-box-shadow !default; +$input-focus-color: $input-color !default; + +$input-placeholder-color: $gray-600 !default; + +$input-height-border: $input-btn-border-width * 2 !default; -$input-color-placeholder: $gray-light !default; +$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default; +$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default; -$input-height: (($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2)) !default; -$input-height-lg: (($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2)) !default; -$input-height-sm: (($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2)) !default; +$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default; +$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default; + +$input-height-inner-lg: ($font-size-sm * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default; +$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default; $input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s !default; $form-text-margin-top: .25rem !default; -$form-feedback-margin-top: $form-text-margin-top !default; $form-check-margin-bottom: .5rem !default; $form-check-input-gutter: 1.25rem !default; @@ -429,7 +397,7 @@ $form-check-inline-margin-x: .75rem !default; $form-group-margin-bottom: 1rem !default; -$input-group-addon-bg: $gray-lighter !default; +$input-group-addon-bg: $gray-200 !default; $input-group-addon-border-color: $input-border-color !default; $custom-control-gutter: 1.5rem !default; @@ -441,38 +409,39 @@ $custom-control-indicator-bg: #ddd !default; $custom-control-indicator-bg-size: 50% 50% !default; $custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black,.1) !default; -$custom-control-disabled-indicator-bg: $gray-lighter !default; -$custom-control-disabled-description-color: $gray-light !default; +$custom-control-indicator-disabled-bg: $gray-200 !default; +$custom-control-description-disabled-color: $gray-600 !default; -$custom-control-checked-indicator-color: $white !default; -$custom-control-checked-indicator-bg: $brand-primary !default; -$custom-control-checked-indicator-box-shadow: none !default; +$custom-control-indicator-checked-color: $white !default; +$custom-control-indicator-checked-bg: theme-color("primary") !default; +$custom-control-indicator-checked-box-shadow: none !default; -$custom-control-focus-indicator-box-shadow: 0 0 0 1px $body-bg, 0 0 0 3px $brand-primary !default; +$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, 0 0 0 3px theme-color("primary") !default; -$custom-control-active-indicator-color: $white !default; -$custom-control-active-indicator-bg: lighten($brand-primary, 35%) !default; -$custom-control-active-indicator-box-shadow: none !default; +$custom-control-indicator-active-color: $white !default; +$custom-control-indicator-active-bg: lighten(theme-color("primary"), 35%) !default; +$custom-control-indicator-active-box-shadow: none !default; -$custom-checkbox-radius: $border-radius !default; -$custom-checkbox-checked-icon: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-checked-indicator-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default; +$custom-checkbox-border-radius: $border-radius !default; +$custom-checkbox-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default; -$custom-checkbox-indeterminate-bg: $brand-primary !default; -$custom-checkbox-indeterminate-indicator-color: $custom-control-checked-indicator-color !default; -$custom-checkbox-indeterminate-icon: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indeterminate-indicator-color}' d='M0 2h4'/%3E%3C/svg%3E"), "#", "%23") !default; +$custom-checkbox-indeterminate-bg: theme-color("primary") !default; +$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default; +$custom-checkbox-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E"), "#", "%23") !default; $custom-checkbox-indeterminate-box-shadow: none !default; -$custom-radio-radius: 50% !default; -$custom-radio-checked-icon: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-checked-indicator-color}'/%3E%3C/svg%3E"), "#", "%23") !default; +$custom-radio-border-radius: 50% !default; +$custom-radio-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), "#", "%23") !default; $custom-select-padding-y: .375rem !default; $custom-select-padding-x: .75rem !default; +$custom-select-height: $input-height !default; $custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator $custom-select-line-height: $input-btn-line-height !default; $custom-select-color: $input-color !default; -$custom-select-disabled-color: $gray-light !default; +$custom-select-disabled-color: $gray-600 !default; $custom-select-bg: $white !default; -$custom-select-disabled-bg: $gray-lighter !default; +$custom-select-disabled-bg: $gray-200 !default; $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions $custom-select-indicator-color: #333 !default; $custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E"), "#", "%23") !default; @@ -480,26 +449,27 @@ $custom-select-border-width: $input-btn-border-width !default; $custom-select-border-color: $input-border-color !default; $custom-select-border-radius: $border-radius !default; -$custom-select-focus-border-color: lighten($brand-primary, 25%) !default; +$custom-select-focus-border-color: lighten(theme-color("primary"), 25%) !default; $custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default; -$custom-select-sm-font-size: 75% !default; +$custom-select-font-size-sm: 75% !default; +$custom-select-height-sm: $input-height-sm !default; $custom-file-height: 2.5rem !default; $custom-file-width: 14rem !default; -$custom-file-focus-box-shadow: 0 0 0 .075rem $white, 0 0 0 .2rem $brand-primary !default; +$custom-file-focus-box-shadow: 0 0 0 .075rem $white, 0 0 0 .2rem theme-color("primary") !default; $custom-file-padding-y: 1rem !default; $custom-file-padding-x: .5rem !default; $custom-file-line-height: 1.5 !default; -$custom-file-color: $gray !default; +$custom-file-color: $gray-700 !default; $custom-file-bg: $white !default; $custom-file-border-width: $border-width !default; $custom-file-border-color: $input-border-color !default; $custom-file-border-radius: $border-radius !default; $custom-file-box-shadow: inset 0 .2rem .4rem rgba($black,.05) !default; $custom-file-button-color: $custom-file-color !default; -$custom-file-button-bg: $gray-lighter !default; +$custom-file-button-bg: $gray-200 !default; $custom-file-text: ( placeholder: ( en: "Choose file..." @@ -510,15 +480,9 @@ $custom-file-text: ( ) !default; -// Form validation icons -$form-icon-success-color: $brand-success !default; -$form-icon-success: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$form-icon-success-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E"), "#", "%23") !default; - -$form-icon-warning-color: $brand-warning !default; -$form-icon-warning: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$form-icon-warning-color}' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E"), "#", "%23") !default; - -$form-icon-danger-color: $brand-danger !default; -$form-icon-danger: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-icon-danger-color}' viewBox='-2 -2 7 7'%3E%3Cpath stroke='#{$form-icon-danger-color}' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E"), "#", "%23") !default; +// Form validation +$form-feedback-valid-color: theme-color("success") !default; +$form-feedback-invalid-color: theme-color("danger") !default; // Dropdowns @@ -531,22 +495,22 @@ $dropdown-margin-top: .125rem !default; $dropdown-bg: $white !default; $dropdown-border-color: rgba($black,.15) !default; $dropdown-border-width: $border-width !default; -$dropdown-divider-bg: $gray-lighter !default; +$dropdown-divider-bg: $gray-200 !default; $dropdown-box-shadow: 0 .5rem 1rem rgba($black,.175) !default; -$dropdown-link-color: $gray-dark !default; -$dropdown-link-hover-color: darken($gray-dark, 5%) !default; -$dropdown-link-hover-bg: $gray-lightest !default; +$dropdown-link-color: $gray-900 !default; +$dropdown-link-hover-color: darken($gray-900, 5%) !default; +$dropdown-link-hover-bg: $gray-100 !default; $dropdown-link-active-color: $component-active-color !default; $dropdown-link-active-bg: $component-active-bg !default; -$dropdown-link-disabled-color: $gray-light !default; +$dropdown-link-disabled-color: $gray-600 !default; $dropdown-item-padding-y: .25rem !default; $dropdown-item-padding-x: 1.5rem !default; -$dropdown-header-color: $gray-light !default; +$dropdown-header-color: $gray-600 !default; // Z-index master list @@ -566,19 +530,19 @@ $zindex-tooltip: 1070 !default; $nav-link-padding-y: .5rem !default; $nav-link-padding-x: 1rem !default; -$nav-disabled-link-color: $gray-light !default; +$nav-link-disabled-color: $gray-600 !default; $nav-tabs-border-color: #ddd !default; $nav-tabs-border-width: $border-width !default; $nav-tabs-border-radius: $border-radius !default; -$nav-tabs-link-hover-border-color: $gray-lighter !default; -$nav-tabs-active-link-color: $gray !default; -$nav-tabs-active-link-bg: $body-bg !default; -$nav-tabs-active-link-border-color: #ddd !default; +$nav-tabs-link-hover-border-color: $gray-200 !default; +$nav-tabs-link-active-color: $gray-700 !default; +$nav-tabs-link-active-bg: $body-bg !default; +$nav-tabs-link-active-border-color: #ddd !default; $nav-pills-border-radius: $border-radius !default; -$nav-pills-active-link-color: $component-active-color !default; -$nav-pills-active-link-bg: $component-active-bg !default; +$nav-pills-link-active-color: $component-active-color !default; +$nav-pills-link-active-bg: $component-active-bg !default; // Navbar @@ -596,12 +560,12 @@ $navbar-toggler-padding-x: .75rem !default; $navbar-toggler-font-size: $font-size-lg !default; $navbar-toggler-border-radius: $btn-border-radius !default; -$navbar-inverse-color: rgba($white,.5) !default; -$navbar-inverse-hover-color: rgba($white,.75) !default; -$navbar-inverse-active-color: rgba($white,1) !default; -$navbar-inverse-disabled-color: rgba($white,.25) !default; -$navbar-inverse-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-inverse-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default; -$navbar-inverse-toggler-border-color: rgba($white,.1) !default; +$navbar-dark-color: rgba($white,.5) !default; +$navbar-dark-hover-color: rgba($white,.75) !default; +$navbar-dark-active-color: rgba($white,1) !default; +$navbar-dark-disabled-color: rgba($white,.25) !default; +$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default; +$navbar-dark-toggler-border-color: rgba($white,.1) !default; $navbar-light-color: rgba($black,.5) !default; $navbar-light-hover-color: rgba($black,.7) !default; @@ -626,14 +590,14 @@ $pagination-border-width: $border-width !default; $pagination-border-color: #ddd !default; $pagination-hover-color: $link-hover-color !default; -$pagination-hover-bg: $gray-lighter !default; +$pagination-hover-bg: $gray-200 !default; $pagination-hover-border-color: #ddd !default; $pagination-active-color: $white !default; -$pagination-active-bg: $brand-primary !default; -$pagination-active-border-color: $brand-primary !default; +$pagination-active-bg: theme-color("primary") !default; +$pagination-active-border-color: theme-color("primary") !default; -$pagination-disabled-color: $gray-light !default; +$pagination-disabled-color: $gray-600 !default; $pagination-disabled-bg: $white !default; $pagination-disabled-border-color: #ddd !default; @@ -641,29 +605,7 @@ $pagination-disabled-border-color: #ddd !default; // Jumbotron $jumbotron-padding: 2rem !default; -$jumbotron-bg: $gray-lighter !default; - - -// Form states and alerts -// -// Define colors for form feedback states and, by default, alerts. - -$state-success-text: #3c763d !default; -$state-success-bg: #dff0d8 !default; -$state-success-border-color: darken($state-success-bg, 5%) !default; - -$state-info-text: #31708f !default; -$state-info-bg: #d9edf7 !default; -$state-info-border-color: darken($state-info-bg, 7%) !default; - -$state-warning-text: #8a6d3b !default; -$state-warning-bg: #fcf8e3 !default; -$mark-bg: $state-warning-bg !default; -$state-warning-border-color: darken($state-warning-bg, 5%) !default; - -$state-danger-text: #a94442 !default; -$state-danger-bg: #f2dede !default; -$state-danger-border-color: darken($state-danger-bg, 5%) !default; +$jumbotron-bg: $gray-200 !default; // Cards @@ -674,14 +616,12 @@ $card-border-width: 1px !default; $card-border-radius: $border-radius !default; $card-border-color: rgba($black,.125) !default; $card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default; -$card-cap-bg: $gray-lightest !default; +$card-cap-bg: rgba($black, .03) !default; $card-bg: $white !default; -$card-inverse-link-hover-color: $white !default; - $card-img-overlay-padding: 1.25rem !default; -$card-deck-margin: ($grid-gutter-width-base / 2) !default; +$card-deck-margin: ($grid-gutter-width / 2) !default; $card-columns-count: 3 !default; $card-columns-gap: 1.25rem !default; @@ -713,14 +653,14 @@ $popover-border-width: $border-width !default; $popover-border-color: rgba($black,.2) !default; $popover-box-shadow: 0 5px 10px rgba($black,.2) !default; -$popover-title-bg: darken($popover-bg, 3%) !default; -$popover-title-color: $headings-color !default; -$popover-title-padding-y: 8px !default; -$popover-title-padding-x: 14px !default; +$popover-header-bg: darken($popover-bg, 3%) !default; +$popover-header-color: $headings-color !default; +$popover-header-padding-y: 8px !default; +$popover-header-padding-x: 14px !default; -$popover-content-color: $body-color !default; -$popover-content-padding-y: 9px !default; -$popover-content-padding-x: 14px !default; +$popover-body-color: $body-color !default; +$popover-body-padding-y: 9px !default; +$popover-body-padding-x: 14px !default; $popover-arrow-width: 10px !default; $popover-arrow-height: 5px !default; @@ -732,15 +672,7 @@ $popover-arrow-outer-color: fade-in($popover-border-color, .05) !defau // Badges -$badge-default-bg: $gray-light !default; -$badge-primary-bg: $brand-primary !default; -$badge-success-bg: $brand-success !default; -$badge-info-bg: $brand-info !default; -$badge-warning-bg: $brand-warning !default; -$badge-danger-bg: $brand-danger !default; - $badge-color: $white !default; -$badge-link-hover-color: $white !default; $badge-font-size: 75% !default; $badge-font-weight: $font-weight-bold !default; $badge-padding-y: .25em !default; @@ -758,19 +690,19 @@ $badge-pill-border-radius: 10rem !default; $modal-inner-padding: 15px !default; $modal-dialog-margin: 10px !default; -$modal-dialog-sm-up-margin-y: 30px !default; +$modal-dialog-margin-y-sm-up: 30px !default; $modal-title-line-height: $line-height-base !default; $modal-content-bg: $white !default; $modal-content-border-color: rgba($black,.2) !default; $modal-content-border-width: $border-width !default; -$modal-content-xs-box-shadow: 0 3px 9px rgba($black,.5) !default; -$modal-content-sm-up-box-shadow: 0 5px 15px rgba($black,.5) !default; +$modal-content-box-shadow-xs: 0 3px 9px rgba($black,.5) !default; +$modal-content-box-shadow-sm-up: 0 5px 15px rgba($black,.5) !default; $modal-backdrop-bg: $black !default; $modal-backdrop-opacity: .5 !default; -$modal-header-border-color: $gray-lighter !default; +$modal-header-border-color: $gray-200 !default; $modal-footer-border-color: $modal-header-border-color !default; $modal-header-border-width: $modal-content-border-width !default; $modal-footer-border-width: $modal-header-border-width !default; @@ -794,38 +726,21 @@ $alert-border-radius: $border-radius !default; $alert-link-font-weight: $font-weight-bold !default; $alert-border-width: $border-width !default; -$alert-success-bg: $state-success-bg !default; -$alert-success-text: $state-success-text !default; -$alert-success-border-color: $state-success-border-color !default; - -$alert-info-bg: $state-info-bg !default; -$alert-info-text: $state-info-text !default; -$alert-info-border-color: $state-info-border-color !default; - -$alert-warning-bg: $state-warning-bg !default; -$alert-warning-text: $state-warning-text !default; -$alert-warning-border-color: $state-warning-border-color !default; - -$alert-danger-bg: $state-danger-bg !default; -$alert-danger-text: $state-danger-text !default; -$alert-danger-border-color: $state-danger-border-color !default; - // Progress bars $progress-height: 1rem !default; $progress-font-size: .75rem !default; -$progress-bg: $gray-lighter !default; +$progress-bg: $gray-200 !default; $progress-border-radius: $border-radius !default; $progress-box-shadow: inset 0 .1rem .1rem rgba($black,.1) !default; $progress-bar-color: $white !default; -$progress-bar-bg: $brand-primary !default; +$progress-bar-bg: theme-color("primary") !default; $progress-bar-animation-timing: 1s linear infinite !default; $progress-bar-transition: width .6s ease !default; // List group -$list-group-color: $body-color !default; $list-group-bg: $white !default; $list-group-border-color: rgba($black,.125) !default; $list-group-border-width: $border-width !default; @@ -834,19 +749,19 @@ $list-group-border-radius: $border-radius !default; $list-group-item-padding-y: .75rem !default; $list-group-item-padding-x: 1.25rem !default; -$list-group-hover-bg: $gray-lightest !default; +$list-group-hover-bg: $gray-100 !default; $list-group-active-color: $component-active-color !default; $list-group-active-bg: $component-active-bg !default; $list-group-active-border-color: $list-group-active-bg !default; -$list-group-disabled-color: $gray-light !default; +$list-group-disabled-color: $gray-600 !default; $list-group-disabled-bg: $list-group-bg !default; -$list-group-link-color: $gray !default; -$list-group-link-hover-color: $list-group-link-color !default; +$list-group-action-color: $gray-700 !default; +$list-group-action-hover-color: $list-group-action-color !default; -$list-group-link-active-color: $list-group-color !default; -$list-group-link-active-bg: $gray-lighter !default; +$list-group-action-active-color: $body-color !default; +$list-group-action-active-bg: $gray-200 !default; // Image thumbnails @@ -863,7 +778,7 @@ $thumbnail-transition: all .2s ease-in-out !default; // Figures $figure-caption-font-size: 90% !default; -$figure-caption-color: $gray-light !default; +$figure-caption-color: $gray-600 !default; // Breadcrumbs @@ -872,9 +787,9 @@ $breadcrumb-padding-y: .75rem !default; $breadcrumb-padding-x: 1rem !default; $breadcrumb-item-padding: .5rem !default; -$breadcrumb-bg: $gray-lighter !default; -$breadcrumb-divider-color: $gray-light !default; -$breadcrumb-active-color: $gray-light !default; +$breadcrumb-bg: $gray-200 !default; +$breadcrumb-divider-color: $gray-600 !default; +$breadcrumb-active-color: $gray-600 !default; $breadcrumb-divider: "/" !default; @@ -913,10 +828,10 @@ $code-font-size: 90% !default; $code-padding-y: .2rem !default; $code-padding-x: .4rem !default; $code-color: #bd4147 !default; -$code-bg: $gray-lightest !default; +$code-bg: $gray-100 !default; $kbd-color: $white !default; -$kbd-bg: $gray-dark !default; +$kbd-bg: $gray-900 !default; -$pre-color: $gray-dark !default; +$pre-color: $gray-900 !default; $pre-scrollable-max-height: 340px !default; diff --git a/assets/stylesheets/bootstrap/mixins/_alert.scss b/assets/stylesheets/bootstrap/mixins/_alert.scss index 1e9307e..d938e89 100644 --- a/assets/stylesheets/bootstrap/mixins/_alert.scss +++ b/assets/stylesheets/bootstrap/mixins/_alert.scss @@ -1,14 +1,13 @@ -// Alerts - -@mixin alert-variant($background, $border, $body-color) { - color: $body-color; +@mixin alert-variant($background, $border, $color) { + color: $color; background-color: $background; border-color: $border; hr { border-top-color: darken($border, 5%); } + .alert-link { - color: darken($body-color, 10%); + color: darken($color, 10%); } } diff --git a/assets/stylesheets/bootstrap/mixins/_badge.scss b/assets/stylesheets/bootstrap/mixins/_badge.scss index 9fa44b6..257a6ab 100644 --- a/assets/stylesheets/bootstrap/mixins/_badge.scss +++ b/assets/stylesheets/bootstrap/mixins/_badge.scss @@ -1,11 +1,12 @@ -// Badges - -@mixin badge-variant($color) { - background-color: $color; +@mixin badge-variant($bg) { + @include color-yiq($bg); + background-color: $bg; &[href] { @include hover-focus { - background-color: darken($color, 10%); + @include color-yiq($bg); + text-decoration: none; + background-color: darken($bg, 10%); } } } diff --git a/assets/stylesheets/bootstrap/mixins/_breakpoints.scss b/assets/stylesheets/bootstrap/mixins/_breakpoints.scss index be1d034..9a374fe 100644 --- a/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +++ b/assets/stylesheets/bootstrap/mixins/_breakpoints.scss @@ -93,7 +93,13 @@ $min: breakpoint-min($name, $breakpoints); $max: breakpoint-max($name, $breakpoints); - @media (min-width: $min) and (max-width: $max) { - @content; + @if $min != null and $max != null { + @media (min-width: $min) and (max-width: $max) { + @content; + } + } @else if $max == null { + @include media-breakpoint-up($name) + } @else if $min == null { + @include media-breakpoint-down($name) } } diff --git a/assets/stylesheets/bootstrap/mixins/_buttons.scss b/assets/stylesheets/bootstrap/mixins/_buttons.scss index 47f2834..f7ec576 100644 --- a/assets/stylesheets/bootstrap/mixins/_buttons.scss +++ b/assets/stylesheets/bootstrap/mixins/_buttons.scss @@ -3,28 +3,25 @@ // Easily pump out default styles, as well as :hover, :focus, :active, // and disabled options for all buttons -@mixin button-variant($color, $background, $border) { - $active-background: darken($background, 10%); - $active-border: darken($border, 12%); - - color: $color; +@mixin button-variant($background, $border, $active-background: darken($background, 7.5%), $active-border: darken($border, 10%)) { + @include color-yiq($background); background-color: $background; border-color: $border; @include box-shadow($btn-box-shadow); - // Hover and focus styles are shared - @include hover { - color: $color; + &:hover { + @include color-yiq($background); background-color: $active-background; border-color: $active-border; } + &:focus, &.focus { // Avoid using mixin so we can pass custom focus shadow properly @if $enable-shadows { - box-shadow: $btn-box-shadow, 0 0 0 2px rgba($border, .5); + box-shadow: $btn-box-shadow, 0 0 0 3px rgba($border, .5); } @else { - box-shadow: 0 0 0 2px rgba($border, .5); + box-shadow: 0 0 0 3px rgba($border, .5); } } @@ -38,7 +35,6 @@ &:active, &.active, .show > &.dropdown-toggle { - color: $color; background-color: $active-background; background-image: none; // Remove the gradient for the pressed/active state border-color: $active-border; @@ -60,7 +56,7 @@ &:focus, &.focus { - box-shadow: 0 0 0 2px rgba($color, .5); + box-shadow: 0 0 0 3px rgba($color, .5); } &.disabled, diff --git a/assets/stylesheets/bootstrap/mixins/_cards.scss b/assets/stylesheets/bootstrap/mixins/_cards.scss deleted file mode 100644 index c32ca68..0000000 --- a/assets/stylesheets/bootstrap/mixins/_cards.scss +++ /dev/null @@ -1,53 +0,0 @@ -// Card variants - -@mixin card-variant($background, $border) { - background-color: $background; - border-color: $border; - - .card-header, - .card-footer { - background-color: transparent; - } -} - -@mixin card-outline-variant($color) { - background-color: transparent; - border-color: $color; - - .card-header, - .card-footer { - background-color: transparent; - border-color: $color; - } -} - -// -// Inverse text within a card for use with dark backgrounds -// - -@mixin card-inverse { - color: rgba(255,255,255,.65); - - .card-header, - .card-footer { - background-color: transparent; - border-color: rgba(255,255,255,.2); - } - .card-header, - .card-footer, - .card-title, - .card-blockquote { - color: #fff; - } - .card-link, - .card-text, - .card-subtitle, - .card-blockquote .blockquote-footer { - color: rgba(255,255,255,.65); - } - .card-link { - @include hover-focus { - color: $card-inverse-link-hover-color; - } - } -} diff --git a/assets/stylesheets/bootstrap/mixins/_forms.scss b/assets/stylesheets/bootstrap/mixins/_forms.scss index 8607955..4a1e0bc 100644 --- a/assets/stylesheets/bootstrap/mixins/_forms.scss +++ b/assets/stylesheets/bootstrap/mixins/_forms.scss @@ -1,37 +1,3 @@ -// Form validation states -// -// Used in _forms.scss to generate the form validation CSS for warnings, errors, -// and successes. - -@mixin form-control-validation($color) { - // Color the label and help text - .form-control-feedback, - .form-control-label, - .col-form-label, - .form-check-label, - .custom-control { - color: $color; - } - - // Set the border and box shadow on specific inputs to match - .form-control, - .custom-select, - .custom-file-control { - border-color: $color; - - &:focus { - @include box-shadow($input-box-shadow, 0 0 6px lighten($color, 20%)); - } - } - - // Set validation states also for addons - .input-group-addon { - color: $color; - background-color: lighten($color, 40%); - border-color: $color; - } -} - // Form control focus state // // Generate a customized focus state and for any input with the specified color, @@ -46,10 +12,70 @@ // contrast against a dark gray background. @mixin form-control-focus() { &:focus { - color: $input-color-focus; - background-color: $input-bg-focus; - border-color: $input-border-color-focus; + color: $input-focus-color; + background-color: $input-focus-bg; + border-color: $input-focus-border-color; outline: none; - @include box-shadow($input-box-shadow-focus); + @include box-shadow($input-focus-box-shadow); + } +} + + +@mixin form-validation-state($state, $color) { + + .form-control, + .custom-select { + .was-validated &:#{$state}, + &.is-#{$state} { + border-color: $color; + + &:focus { + box-shadow: 0 0 0 .2rem rgba($color,.25); + } + + ~ .invalid-feedback, + ~ .invalid-tooltip { + display: block; + } + } + } + + + // TODO: redo check markup lol crap + .form-check-input { + .was-validated &:#{$state}, + &.is-#{$state} { + + .form-check-label { + color: $color; + } + } + } + + // custom radios and checks + .custom-control-input { + .was-validated &:#{$state}, + &.is-#{$state} { + ~ .custom-control-indicator { + background-color: rgba($color, .25); + } + ~ .custom-control-description { + color: $color; + } + } + } + + // custom file + .custom-file-input { + .was-validated &:#{$state}, + &.is-#{$state} { + ~ .custom-file-control { + border-color: $color; + + &::before { border-color: inherit; } + } + &:focus { + box-shadow: 0 0 0 .2rem rgba($color,.25); + } + } } } diff --git a/assets/stylesheets/bootstrap/mixins/_grid-framework.scss b/assets/stylesheets/bootstrap/mixins/_grid-framework.scss index ba341a6..d8195dd 100644 --- a/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +++ b/assets/stylesheets/bootstrap/mixins/_grid-framework.scss @@ -3,14 +3,14 @@ // Used only by Bootstrap to generate the correct number of grid classes given // any value of `$grid-columns`. -@mixin make-grid-columns($columns: $grid-columns, $gutters: $grid-gutter-widths, $breakpoints: $grid-breakpoints) { +@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) { // Common properties for all breakpoints %grid-column { position: relative; width: 100%; min-height: 1px; // Prevent columns from collapsing when empty - - @include make-gutters($gutters); + padding-right: ($gutter / 2); + padding-left: ($gutter / 2); } @each $breakpoint in map-keys($breakpoints) { @@ -46,20 +46,9 @@ } } - @each $modifier in (pull, push) { - @for $i from 0 through $columns { - .#{$modifier}#{$infix}-#{$i} { - @include make-col-modifier($modifier, $i, $columns) - } - } - } - - // `$columns - 1` because offsetting by the width of an entire row isn't possible - @for $i from 0 through ($columns - 1) { - @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-xs-0 - .offset#{$infix}-#{$i} { - @include make-col-modifier(offset, $i, $columns) - } + @for $i from 1 through $columns { + .order#{$infix}-#{$i} { + order: $i; } } } diff --git a/assets/stylesheets/bootstrap/mixins/_grid.scss b/assets/stylesheets/bootstrap/mixins/_grid.scss index b6d9805..5c00f57 100644 --- a/assets/stylesheets/bootstrap/mixins/_grid.scss +++ b/assets/stylesheets/bootstrap/mixins/_grid.scss @@ -2,17 +2,11 @@ // // Generate semantic grid columns with these mixins. -@mixin make-container($gutters: $grid-gutter-widths) { +@mixin make-container() { margin-right: auto; margin-left: auto; - - @each $breakpoint in map-keys($gutters) { - @include media-breakpoint-up($breakpoint) { - $gutter: map-get($gutters, $breakpoint); - padding-right: ($gutter / 2); - padding-left: ($gutter / 2); - } - } + padding-right: ($grid-gutter-width / 2); + padding-left: ($grid-gutter-width / 2); } @@ -26,44 +20,22 @@ } } -@mixin make-gutters($gutters: $grid-gutter-widths) { - @each $breakpoint in map-keys($gutters) { - @include media-breakpoint-up($breakpoint) { - $gutter: map-get($gutters, $breakpoint); - padding-right: ($gutter / 2); - padding-left: ($gutter / 2); - } - } -} - -@mixin make-row($gutters: $grid-gutter-widths) { +@mixin make-row() { display: flex; flex-wrap: wrap; - - @each $breakpoint in map-keys($gutters) { - @include media-breakpoint-up($breakpoint) { - $gutter: map-get($gutters, $breakpoint); - margin-right: ($gutter / -2); - margin-left: ($gutter / -2); - } - } + margin-right: ($grid-gutter-width / -2); + margin-left: ($grid-gutter-width / -2); } -@mixin make-col-ready($gutters: $grid-gutter-widths) { +@mixin make-col-ready() { position: relative; // Prevent columns from becoming too narrow when at smaller grid tiers by // always setting `width: 100%;`. This works because we use `flex` values // later on to override this initial width. width: 100%; min-height: 1px; // Prevent collapsing - - @each $breakpoint in map-keys($gutters) { - @include media-breakpoint-up($breakpoint) { - $gutter: map-get($gutters, $breakpoint); - padding-right: ($gutter / 2); - padding-left: ($gutter / 2); - } - } + padding-right: ($grid-gutter-width / 2); + padding-left: ($grid-gutter-width / 2); } @mixin make-col($size, $columns: $grid-columns) { @@ -73,26 +45,3 @@ // do not appear to require this. max-width: percentage($size / $columns); } - -@mixin make-col-offset($size, $columns: $grid-columns) { - margin-left: percentage($size / $columns); -} - -@mixin make-col-push($size, $columns: $grid-columns) { - left: if($size > 0, percentage($size / $columns), auto); -} - -@mixin make-col-pull($size, $columns: $grid-columns) { - right: if($size > 0, percentage($size / $columns), auto); -} - -@mixin make-col-modifier($type, $size, $columns) { - // Work around the lack of dynamic mixin @include support (https://github.com/sass/sass/issues/626) - @if $type == push { - @include make-col-push($size, $columns); - } @else if $type == pull { - @include make-col-pull($size, $columns); - } @else if $type == offset { - @include make-col-offset($size, $columns); - } -} diff --git a/assets/stylesheets/bootstrap/mixins/_pagination.scss b/assets/stylesheets/bootstrap/mixins/_pagination.scss index 8cd9317..ff36eb6 100644 --- a/assets/stylesheets/bootstrap/mixins/_pagination.scss +++ b/assets/stylesheets/bootstrap/mixins/_pagination.scss @@ -4,6 +4,7 @@ .page-link { padding: $padding-y $padding-x; font-size: $font-size; + line-height: $line-height; } .page-item { diff --git a/assets/stylesheets/bootstrap/utilities/_background.scss b/assets/stylesheets/bootstrap/utilities/_background.scss index b9ac295..f85c13c 100644 --- a/assets/stylesheets/bootstrap/utilities/_background.scss +++ b/assets/stylesheets/bootstrap/utilities/_background.scss @@ -1,19 +1,5 @@ -// -// Contextual backgrounds -// - -.bg-faded { - background-color: darken($body-bg, 3%); +@each $color, $value in $theme-colors { + @include bg-variant('.bg-#{$color}', $value); } -@include bg-variant('.bg-primary', $brand-primary); - -@include bg-variant('.bg-success', $brand-success); - -@include bg-variant('.bg-info', $brand-info); - -@include bg-variant('.bg-warning', $brand-warning); - -@include bg-variant('.bg-danger', $brand-danger); - -@include bg-variant('.bg-inverse', $brand-inverse); +.bg-transparent { background-color: transparent !important; } diff --git a/assets/stylesheets/bootstrap/utilities/_borders.scss b/assets/stylesheets/bootstrap/utilities/_borders.scss index b256881..0548058 100644 --- a/assets/stylesheets/bootstrap/utilities/_borders.scss +++ b/assets/stylesheets/bootstrap/utilities/_borders.scss @@ -2,30 +2,41 @@ // Border // +.border { border: 1px solid $gray-200 !important; } .border-0 { border: 0 !important; } .border-top-0 { border-top: 0 !important; } .border-right-0 { border-right: 0 !important; } .border-bottom-0 { border-bottom: 0 !important; } .border-left-0 { border-left: 0 !important; } +@each $color, $value in $theme-colors { + .border-#{$color} { + border-color: $value !important; + } +} + // // Border-radius // .rounded { - @include border-radius($border-radius); + border-radius: $border-radius !important; } .rounded-top { - @include border-top-radius($border-radius); + border-top-left-radius: $border-radius !important; + border-top-right-radius: $border-radius !important; } .rounded-right { - @include border-right-radius($border-radius); + border-top-right-radius: $border-radius !important; + border-bottom-right-radius: $border-radius !important; } .rounded-bottom { - @include border-bottom-radius($border-radius); + border-bottom-right-radius: $border-radius !important; + border-bottom-left-radius: $border-radius !important; } .rounded-left { - @include border-left-radius($border-radius); + border-top-left-radius: $border-radius !important; + border-bottom-left-radius: $border-radius !important; } .rounded-circle { diff --git a/assets/stylesheets/bootstrap/_responsive-embed.scss b/assets/stylesheets/bootstrap/utilities/_embed.scss index d3362b6..d3362b6 100644 --- a/assets/stylesheets/bootstrap/_responsive-embed.scss +++ b/assets/stylesheets/bootstrap/utilities/_embed.scss diff --git a/assets/stylesheets/bootstrap/utilities/_flex.scss b/assets/stylesheets/bootstrap/utilities/_flex.scss index cc69678..b28c0b9 100644 --- a/assets/stylesheets/bootstrap/utilities/_flex.scss +++ b/assets/stylesheets/bootstrap/utilities/_flex.scss @@ -6,10 +6,6 @@ @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - .order#{$infix}-first { order: -1; } - .order#{$infix}-last { order: 1; } - .order#{$infix}-0 { order: 0; } - .flex#{$infix}-row { flex-direction: row !important; } .flex#{$infix}-column { flex-direction: column !important; } .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; } diff --git a/assets/stylesheets/bootstrap/utilities/_position.scss b/assets/stylesheets/bootstrap/utilities/_position.scss index 2cf08bf..74b8d39 100644 --- a/assets/stylesheets/bootstrap/utilities/_position.scss +++ b/assets/stylesheets/bootstrap/utilities/_position.scss @@ -17,7 +17,9 @@ } .sticky-top { - position: sticky; - top: 0; - z-index: $zindex-sticky; + @supports (position: sticky) { + position: sticky; + top: 0; + z-index: $zindex-sticky; + } } diff --git a/assets/stylesheets/bootstrap/utilities/_text.scss b/assets/stylesheets/bootstrap/utilities/_text.scss index 4ac9053..d337e0d 100644 --- a/assets/stylesheets/bootstrap/utilities/_text.scss +++ b/assets/stylesheets/bootstrap/utilities/_text.scss @@ -34,25 +34,13 @@ // Contextual colors -.text-white { - color: #fff !important; -} - -@include text-emphasis-variant('.text-muted', $text-muted); - -@include text-emphasis-variant('.text-primary', $brand-primary); - -@include text-emphasis-variant('.text-success', $brand-success); +.text-white { color: #fff !important; } -@include text-emphasis-variant('.text-info', $brand-info); - -@include text-emphasis-variant('.text-warning', $brand-warning); - -@include text-emphasis-variant('.text-danger', $brand-danger); - -// Font color +@each $color, $value in $theme-colors { + @include text-emphasis-variant('.text-#{$color}', $value); +} -@include text-emphasis-variant('.text-gray-dark', $gray-dark); +.text-muted { color: $text-muted !important; } // Misc |