diff --git a/.prettierignore b/.prettierignore index ddbd0bd..445d61d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,5 @@ coverage public -vendor \ No newline at end of file +vendor + +assets/less \ No newline at end of file diff --git a/assets/less/bootstrap/alerts.less b/assets/less/bootstrap/alerts.less index 5f18343..bdd0df2 100644 --- a/assets/less/bootstrap/alerts.less +++ b/assets/less/bootstrap/alerts.less @@ -2,6 +2,7 @@ // Alerts // -------------------------------------------------- + // Base styles // ------------------------- @@ -14,8 +15,7 @@ // Headings for larger alerts h4 { margin-top: 0; - // Specified for the h4 to prevent conflicts of changing @headings-color - color: inherit; + color: inherit; // Specified for the h4 to prevent conflicts of changing @headings-color } // Provide class for links that match alerts @@ -38,7 +38,8 @@ // // Expand the right padding and account for the close button's positioning. -.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +// The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissable, .alert-dismissible { padding-right: (@alert-padding + 20); diff --git a/assets/less/bootstrap/badges.less b/assets/less/bootstrap/badges.less index 39d80e8..be7f8d0 100644 --- a/assets/less/bootstrap/badges.less +++ b/assets/less/bootstrap/badges.less @@ -2,6 +2,7 @@ // Badges // -------------------------------------------------- + // Base class .badge { display: inline-block; @@ -9,11 +10,11 @@ padding: 3px 7px; font-size: @font-size-small; font-weight: @badge-font-weight; - color: @badge-color; line-height: @badge-line-height; - vertical-align: middle; - white-space: nowrap; + color: @badge-color; text-align: center; + white-space: nowrap; + vertical-align: middle; background-color: @badge-bg; border-radius: @badge-border-radius; diff --git a/assets/less/bootstrap/bootstrap.less b/assets/less/bootstrap/bootstrap.less index 32c3463..d6161eb 100644 --- a/assets/less/bootstrap/bootstrap.less +++ b/assets/less/bootstrap/bootstrap.less @@ -1,56 +1,56 @@ /*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ // Core variables and mixins -@import 'variables.less'; -@import 'mixins.less'; +@import "variables.less"; +@import "mixins.less"; // Reset and dependencies -@import 'normalize.less'; -@import 'print.less'; -@import 'glyphicons.less'; +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; // Core CSS -@import 'scaffolding.less'; -@import 'type.less'; -@import 'code.less'; -@import 'grid.less'; -@import 'tables.less'; -@import 'forms.less'; -@import 'buttons.less'; +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; // Components -@import 'component-animations.less'; -@import 'dropdowns.less'; -@import 'button-groups.less'; -@import 'input-groups.less'; -@import 'navs.less'; -@import 'navbar.less'; -@import 'breadcrumbs.less'; -@import 'pagination.less'; -@import 'pager.less'; -@import 'labels.less'; -@import 'badges.less'; -@import 'jumbotron.less'; -@import 'thumbnails.less'; -@import 'alerts.less'; -@import 'progress-bars.less'; -@import 'media.less'; -@import 'list-group.less'; -@import 'panels.less'; -@import 'responsive-embed.less'; -@import 'wells.less'; -@import 'close.less'; +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; // Components w/ JavaScript -@import 'modals.less'; -@import 'tooltip.less'; -@import 'popovers.less'; -@import 'carousel.less'; +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; // Utility classes -@import 'utilities.less'; -@import 'responsive-utilities.less'; +@import "utilities.less"; +@import "responsive-utilities.less"; diff --git a/assets/less/bootstrap/breadcrumbs.less b/assets/less/bootstrap/breadcrumbs.less index 5053a0d..e4e5396 100644 --- a/assets/less/bootstrap/breadcrumbs.less +++ b/assets/less/bootstrap/breadcrumbs.less @@ -2,6 +2,7 @@ // Breadcrumbs // -------------------------------------------------- + .breadcrumb { padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; margin-bottom: @line-height-computed; @@ -13,9 +14,9 @@ display: inline-block; + li:before { - content: '@{breadcrumb-separator}\00a0'; // Unicode space added since inline-block means non-collapsing white-space padding: 0 5px; color: @breadcrumb-color; + content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space } } diff --git a/assets/less/bootstrap/button-groups.less b/assets/less/bootstrap/button-groups.less index 487846c..0472800 100644 --- a/assets/less/bootstrap/button-groups.less +++ b/assets/less/bootstrap/button-groups.less @@ -1,3 +1,5 @@ +// stylelint-disable selector-no-qualifying-type */ + // // Button groups // -------------------------------------------------- @@ -88,37 +90,33 @@ outline: 0; } + // Sizing // // Remix the default button sizing classes into new ones for easier manipulation. -.btn-group-xs > .btn { - &:extend(.btn-xs); -} -.btn-group-sm > .btn { - &:extend(.btn-sm); -} -.btn-group-lg > .btn { - &:extend(.btn-lg); -} +.btn-group-xs > .btn { &:extend(.btn-xs); } +.btn-group-sm > .btn { &:extend(.btn-sm); } +.btn-group-lg > .btn { &:extend(.btn-lg); } + // Split button dropdowns // ---------------------- // Give the line between buttons some depth .btn-group > .btn + .dropdown-toggle { - padding-left: 8px; padding-right: 8px; + padding-left: 8px; } .btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; padding-right: 12px; + padding-left: 12px; } // The clickable button for toggling the menu // Remove the gradient and set the same inset shadow as the :active state .btn-group.open .dropdown-toggle { - .box-shadow(inset 0 3px 5px rgba(0,0,0,0.125)); + .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125)); // Show no shadow for `.btn-link` since it has no other button styles. &.btn-link { @@ -126,6 +124,7 @@ } } + // Reposition the caret .btn .caret { margin-left: 0; @@ -140,6 +139,7 @@ border-width: 0 @caret-width-large @caret-width-large; } + // Vertical button groups // ---------------------- @@ -196,6 +196,7 @@ .border-top-radius(0); } + // Justified button groups // ---------------------- @@ -206,8 +207,8 @@ border-collapse: separate; > .btn, > .btn-group { - float: none; display: table-cell; + float: none; width: 1%; } > .btn-group .btn { @@ -219,6 +220,7 @@ } } + // Checkbox and radio options // // In order to support the browser's form validation feedback, powered by the @@ -231,11 +233,11 @@ // See https://github.com/twbs/bootstrap/pull/12794 and // https://github.com/twbs/bootstrap/pull/14559 for more information. -[data-toggle='buttons'] { +[data-toggle="buttons"] { > .btn, > .btn-group > .btn { - input[type='radio'], - input[type='checkbox'] { + input[type="radio"], + input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; diff --git a/assets/less/bootstrap/buttons.less b/assets/less/bootstrap/buttons.less index e42f740..17f076b 100644 --- a/assets/less/bootstrap/buttons.less +++ b/assets/less/bootstrap/buttons.less @@ -1,7 +1,10 @@ +// stylelint-disable selector-no-qualifying-type + // // Buttons // -------------------------------------------------- + // Base styles // -------------------------------------------------- @@ -10,12 +13,12 @@ margin-bottom: 0; // For input.btn font-weight: @btn-font-weight; text-align: center; + white-space: nowrap; vertical-align: middle; touch-action: manipulation; cursor: pointer; background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 border: 1px solid transparent; - white-space: nowrap; .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base); .user-select(none); @@ -37,16 +40,16 @@ &:active, &.active { - outline: 0; background-image: none; - .box-shadow(inset 0 3px 5px rgba(0,0,0,0.125)); + outline: 0; + .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125)); } &.disabled, &[disabled], fieldset[disabled] & { cursor: @cursor-disabled; - .opacity(0.65); + .opacity(.65); .box-shadow(none); } @@ -58,6 +61,7 @@ } } + // Alternate buttons // -------------------------------------------------- @@ -84,13 +88,14 @@ .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); } + // Link buttons // ------------------------- // Make a button look and behave like a link .btn-link { + font-weight: 400; color: @link-color; - font-weight: normal; border-radius: 0; &, @@ -123,6 +128,7 @@ } } + // Button Sizes // -------------------------------------------------- @@ -138,6 +144,7 @@ .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small); } + // Block button // -------------------------------------------------- @@ -152,9 +159,9 @@ } // Specificity overrides -input[type='submit'], -input[type='reset'], -input[type='button'] { +input[type="submit"], +input[type="reset"], +input[type="button"] { &.btn-block { width: 100%; } diff --git a/assets/less/bootstrap/carousel.less b/assets/less/bootstrap/carousel.less index df7bec5..1a24795 100644 --- a/assets/less/bootstrap/carousel.less +++ b/assets/less/bootstrap/carousel.less @@ -1,7 +1,10 @@ +// stylelint-disable media-feature-name-no-unknown + // // Carousel // -------------------------------------------------- + // Wrapper for the slide container and indicators .carousel { position: relative; @@ -9,13 +12,13 @@ .carousel-inner { position: relative; - overflow: hidden; width: 100%; + overflow: hidden; > .item { - display: none; position: relative; - .transition(0.6s ease-in-out left); + display: none; + .transition(.6s ease-in-out left); // Account for jankitude on images > img, @@ -26,8 +29,8 @@ // WebKit CSS3 transforms for supported devices @media all and (transform-3d), (-webkit-transform-3d) { - .transition-transform(~'0.6s ease-in-out'); - .backface-visibility(~'hidden'); + .transition-transform(~"0.6s ease-in-out"); + .backface-visibility(~"hidden"); .perspective(1000px); &.next, @@ -83,6 +86,7 @@ > .active.right { left: 100%; } + } // Left/right controls for nav @@ -91,35 +95,35 @@ .carousel-control { position: absolute; top: 0; - left: 0; bottom: 0; + left: 0; width: @carousel-control-width; - .opacity(@carousel-control-opacity); font-size: @carousel-control-font-size; color: @carousel-control-color; text-align: center; text-shadow: @carousel-text-shadow; background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug + .opacity(@carousel-control-opacity); // We can't have this transition here because WebKit cancels the carousel // animation if you trip this while in the middle of another animation. // Set gradients for backgrounds &.left { - #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));; + #gradient > .horizontal(@start-color: rgba(0, 0, 0, .5); @end-color: rgba(0, 0, 0, .0001)); } &.right { - left: auto; right: 0; - #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));; + left: auto; + #gradient > .horizontal(@start-color: rgba(0, 0, 0, .0001); @end-color: rgba(0, 0, 0, .5)); } // Hover/focus state &:hover, &:focus { - outline: 0; color: @carousel-control-color; text-decoration: none; - .opacity(0.9); + outline: 0; + .opacity(.9); } // Toggles @@ -129,9 +133,9 @@ .glyphicon-chevron-right { position: absolute; top: 50%; - margin-top: -10px; z-index: 5; display: inline-block; + margin-top: -10px; } .icon-prev, .glyphicon-chevron-left { @@ -147,18 +151,18 @@ .icon-next { width: 20px; height: 20px; - line-height: 1; font-family: serif; + line-height: 1; } .icon-prev { &:before { - content: '\2039'; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + content: "\2039";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) } } .icon-next { &:before { - content: '\203a'; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + content: "\203a";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) } } } @@ -174,10 +178,10 @@ left: 50%; z-index: 15; width: 60%; - margin-left: -30%; padding-left: 0; - list-style: none; + margin-left: -30%; text-align: center; + list-style: none; li { display: inline-block; @@ -185,10 +189,7 @@ height: 10px; margin: 1px; text-indent: -999px; - border: 1px solid @carousel-indicator-border-color; - border-radius: 10px; cursor: pointer; - // IE8-9 hack for event handling // // Internet Explorer 8-9 does not support clicks on elements without a set @@ -200,11 +201,15 @@ // set alpha transparency for the best results possible. background-color: #000 \9; // IE8 background-color: rgba(0, 0, 0, 0); // IE9 + + border: 1px solid @carousel-indicator-border-color; + border-radius: 10px; } + .active { - margin: 0; width: 12px; height: 12px; + margin: 0; background-color: @carousel-indicator-active-bg; } } @@ -214,22 +219,25 @@ // Hidden by default for smaller viewports .carousel-caption { position: absolute; - left: 15%; right: 15%; bottom: 20px; + left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: @carousel-caption-color; text-align: center; text-shadow: @carousel-text-shadow; + & .btn { text-shadow: none; // No shadow for button elements in carousel-caption } } + // Scale up controls for tablets and up @media screen and (min-width: @screen-sm-min) { + // Scale up the controls a smidge .carousel-control { .glyphicon-chevron-left, @@ -253,8 +261,8 @@ // Show and left align the captions .carousel-caption { - left: 20%; right: 20%; + left: 20%; padding-bottom: 30px; } diff --git a/assets/less/bootstrap/close.less b/assets/less/bootstrap/close.less index b1ae0dd..48baf35 100644 --- a/assets/less/bootstrap/close.less +++ b/assets/less/bootstrap/close.less @@ -1,7 +1,10 @@ +// stylelint-disable property-no-vendor-prefix + // // Close icons // -------------------------------------------------- + .close { float: right; font-size: (@font-size-base * 1.5); @@ -9,14 +12,14 @@ line-height: 1; color: @close-color; text-shadow: @close-text-shadow; - .opacity(0.2); + .opacity(.2); &:hover, &:focus { color: @close-color; text-decoration: none; cursor: pointer; - .opacity(0.5); + .opacity(.5); } // Additional properties for button version @@ -29,5 +32,6 @@ background: transparent; border: 0; -webkit-appearance: none; + appearance: none; } } diff --git a/assets/less/bootstrap/code.less b/assets/less/bootstrap/code.less index f4fd010..4e07976 100644 --- a/assets/less/bootstrap/code.less +++ b/assets/less/bootstrap/code.less @@ -2,6 +2,7 @@ // Code (inline and block) // -------------------------------------------------- + // Inline and block code styles code, kbd, @@ -26,12 +27,12 @@ kbd { color: @kbd-color; background-color: @kbd-bg; border-radius: @border-radius-small; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); kbd { padding: 0; font-size: 100%; - font-weight: bold; + font-weight: 700; box-shadow: none; } } @@ -43,9 +44,9 @@ pre { margin: 0 0 (@line-height-computed / 2); font-size: (@font-size-base - 1); // 14px to 13px line-height: @line-height-base; + color: @pre-color; word-break: break-all; word-wrap: break-word; - color: @pre-color; background-color: @pre-bg; border: 1px solid @pre-border-color; border-radius: @border-radius-base; diff --git a/assets/less/bootstrap/component-animations.less b/assets/less/bootstrap/component-animations.less index 6dceb7b..4e7cfd0 100644 --- a/assets/less/bootstrap/component-animations.less +++ b/assets/less/bootstrap/component-animations.less @@ -1,3 +1,5 @@ +// stylelint-disable selector-no-qualifying-type + // // Component animations // -------------------------------------------------- @@ -9,7 +11,8 @@ .fade { opacity: 0; - .transition(opacity 0.15s linear); + .transition(opacity .15s linear); + &.in { opacity: 1; } @@ -18,22 +21,16 @@ .collapse { display: none; - &.in { - display: block; - } - tr&.in { - display: table-row; - } - tbody&.in { - display: table-row-group; - } + &.in { display: block; } + tr&.in { display: table-row; } + tbody&.in { display: table-row-group; } } .collapsing { position: relative; height: 0; overflow: hidden; - .transition-property(~'height, visibility'); - .transition-duration(0.35s); + .transition-property(~"height, visibility"); + .transition-duration(.35s); .transition-timing-function(ease); } diff --git a/assets/less/bootstrap/dropdowns.less b/assets/less/bootstrap/dropdowns.less index cac6b80..542c004 100644 --- a/assets/less/bootstrap/dropdowns.less +++ b/assets/less/bootstrap/dropdowns.less @@ -2,6 +2,7 @@ // Dropdown menus // -------------------------------------------------- + // Dropdown arrow/caret .caret { display: inline-block; @@ -10,7 +11,7 @@ margin-left: 2px; vertical-align: middle; border-top: @caret-width-base dashed; - border-top: @caret-width-base solid ~'\9'; // IE8 + border-top: @caret-width-base solid ~"\9"; // IE8 border-right: @caret-width-base solid transparent; border-left: @caret-width-base solid transparent; } @@ -37,15 +38,15 @@ min-width: 160px; padding: 5px 0; margin: 2px 0 0; // override default ul - list-style: none; font-size: @font-size-base; text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + list-style: none; background-color: @dropdown-bg; + background-clip: padding-box; border: 1px solid @dropdown-fallback-border; // IE8 fallback border: 1px solid @dropdown-border; border-radius: @border-radius-base; - .box-shadow(0 6px 12px rgba(0,0,0,0.175)); - background-clip: padding-box; + .box-shadow(0 6px 12px rgba(0, 0, 0, .175)); // Aligns the dropdown menu to right // @@ -65,20 +66,17 @@ display: block; padding: 3px 20px; clear: both; - font-weight: normal; + font-weight: 400; line-height: @line-height-base; color: @dropdown-link-color; white-space: nowrap; // prevent links from randomly breaking onto new lines - } -} -// Hover/Focus state -.dropdown-menu > li > a { - &:hover, - &:focus { - text-decoration: none; - color: @dropdown-link-hover-color; - background-color: @dropdown-link-hover-bg; + &:hover, + &:focus { + color: @dropdown-link-hover-color; + text-decoration: none; + background-color: @dropdown-link-hover-bg; + } } } @@ -89,8 +87,8 @@ &:focus { color: @dropdown-link-active-color; text-decoration: none; - outline: 0; background-color: @dropdown-link-active-bg; + outline: 0; } } @@ -109,10 +107,10 @@ &:hover, &:focus { text-decoration: none; + cursor: @cursor-disabled; background-color: transparent; background-image: none; // Remove CSS gradient .reset-filter(); - cursor: @cursor-disabled; } } @@ -134,8 +132,8 @@ // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown // menu with the parent. .dropdown-menu-right { - left: auto; // Reset the default from `.dropdown-menu` right: 0; + left: auto; // Reset the default from `.dropdown-menu` } // With v3, we enabled auto-flipping if you have a dropdown within a right // aligned nav component. To enable the undoing of that, we provide an override @@ -144,8 +142,8 @@ // This is only for left-aligning a dropdown menu within a `.navbar-right` or // `.pull-right` nav component. .dropdown-menu-left { - left: 0; right: auto; + left: 0; } // Dropdown section headers @@ -161,10 +159,10 @@ // Backdrop to catch body clicks on mobile, etc. .dropdown-backdrop { position: fixed; - left: 0; + top: 0; right: 0; bottom: 0; - top: 0; + left: 0; z-index: (@zindex-dropdown - 10); } @@ -183,10 +181,10 @@ .navbar-fixed-bottom .dropdown { // Reverse the caret .caret { + content: ""; border-top: 0; border-bottom: @caret-width-base dashed; - border-bottom: @caret-width-base solid ~'\9'; // IE8 - content: ''; + border-bottom: @caret-width-base solid ~"\9"; // IE8 } // Different positioning for bottom up menu .dropdown-menu { @@ -196,6 +194,7 @@ } } + // Component alignment // // Reiterate per navbar.less and the modified component alignment there. diff --git a/assets/less/bootstrap/forms.less b/assets/less/bootstrap/forms.less index fe755e6..edf19bf 100644 --- a/assets/less/bootstrap/forms.less +++ b/assets/less/bootstrap/forms.less @@ -1,19 +1,22 @@ +// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix + // // Forms // -------------------------------------------------- + // Normalize non-controls // // Restyle and baseline non-control form elements. fieldset { - padding: 0; - margin: 0; - border: 0; // Chrome and Firefox set a `min-width: min-content;` on fieldsets, // so we reset that to ensure it behaves more like a standard block element. // See https://github.com/twbs/bootstrap/issues/12359. min-width: 0; + padding: 0; + margin: 0; + border: 0; } legend { @@ -32,34 +35,54 @@ label { display: inline-block; max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) margin-bottom: 5px; - font-weight: bold; + font-weight: 700; } + // Normalize form controls // // While most of our form styles require extra classes, some basic normalization // is required to ensure optimum display with or without those classes to better // address browser inconsistencies. -// Override content-box in Normalize (* isn't specific enough) -input[type='search'] { +input[type="search"] { + // Override content-box in Normalize (* isn't specific enough) .box-sizing(border-box); + + // Search inputs in iOS + // + // This overrides the extra rounded corners on search inputs in iOS so that our + // `.form-control` class can properly style them. Note that this cannot simply + // be added to `.form-control` as it's not specific enough. For details, see + // https://github.com/twbs/bootstrap/issues/11586. + -webkit-appearance: none; + appearance: none; } // Position radios and checkboxes better -input[type='radio'], -input[type='checkbox'] { +input[type="radio"], +input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; // IE8-9 line-height: normal; + + // Apply same disabled cursor tweak as for inputs + // Some special care is needed because