diff --git a/.hound.yml b/.hound.yml index d47b1677ddb1..2a6b0559242b 100644 --- a/.hound.yml +++ b/.hound.yml @@ -2,6 +2,12 @@ fail_on_violations: true stylelint: config_file: build/.stylelintrc + enabled: true + ignore_file: .houndignore + +eslint: + config_file: js/.eslintrc.json + ignore_file: .houndignore scss: enabled: false @@ -9,9 +15,5 @@ scss: jshint: enabled: false -eslint: - config_file: js/.eslintrc.json - ignore_file: .houndignore - ruby: enabled: false diff --git a/Gemfile b/Gemfile index 2c0ac91d55c9..135694ee65f9 100644 --- a/Gemfile +++ b/Gemfile @@ -4,5 +4,5 @@ group :development, :test do gem 'jekyll', '~> 3.6.0' gem 'jekyll-redirect-from', '~> 0.12.1' gem 'jekyll-sitemap', '~> 1.1.1' - gem 'jekyll-toc', '~> 0.3.0' + gem 'jekyll-toc', '~> 0.4.0.rc2' end diff --git a/Gemfile.lock b/Gemfile.lock index 99c54cc877de..0be2f9d180ba 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,7 +24,7 @@ GEM sass (~> 3.4) jekyll-sitemap (1.1.1) jekyll (~> 3.3) - jekyll-toc (0.3.0) + jekyll-toc (0.4.0.rc2) nokogiri (~> 1.6) jekyll-watch (1.5.0) listen (~> 3.0, < 3.1) @@ -39,7 +39,7 @@ GEM mini_portile2 (~> 2.3.0) nokogiri (1.8.1-x64-mingw32) mini_portile2 (~> 2.3.0) - pathutil (0.14.0) + pathutil (0.16.0) forwardable-extended (~> 2.6) public_suffix (3.0.0) rb-fsevent (0.10.2) @@ -47,7 +47,7 @@ GEM ffi (>= 0.5.0, < 2) rouge (2.2.1) safe_yaml (1.0.4) - sass (3.5.1) + sass (3.5.2) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) @@ -61,7 +61,7 @@ DEPENDENCIES jekyll (~> 3.6.0) jekyll-redirect-from (~> 0.12.1) jekyll-sitemap (~> 1.1.1) - jekyll-toc (~> 0.3.0) + jekyll-toc (~> 0.4.0.rc2) BUNDLED WITH 1.15.4 diff --git a/README.md b/README.md index b9104e7e80cd..d1b52608e7c9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- +

Bootstrap

@@ -8,13 +8,13 @@

Sleek, intuitive, and powerful front-end framework for faster and easier web development.
- Explore Bootstrap docs » + Explore Bootstrap docs »

Bootstrap Themes - · + · Job Board - · + · Blog

@@ -50,16 +50,18 @@ Read the [Getting started page](https://getbootstrap.com/getting-started/) for i ## Status [![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com/) +[![Build Status](https://img.shields.io/travis/twbs/bootstrap/v4-dev.svg)](https://travis-ci.org/twbs/bootstrap) [![npm version](https://img.shields.io/npm/v/bootstrap.svg)](https://www.npmjs.com/package/bootstrap) [![Gem version](https://img.shields.io/gem/v/bootstrap.svg)](https://rubygems.org/gems/bootstrap) -[![Build Status](https://img.shields.io/travis/twbs/bootstrap/v4-dev.svg)](https://travis-ci.org/twbs/bootstrap) -[![peerDependencies Status](https://david-dm.org/twbs/bootstrap/peer-status.svg)](https://david-dm.org/twbs/bootstrap?type=peer) -[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap?type=dev) [![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue.svg)](https://atmospherejs.com/twbs/bootstrap) [![Packagist Prerelease](https://img.shields.io/packagist/vpre/twbs/bootstrap.svg)](https://packagist.org/packages/twbs/bootstrap) [![NuGet](https://img.shields.io/nuget/vpre/bootstrap.svg)](https://www.nuget.org/packages/bootstrap/absoluteLatest) +[![peerDependencies Status](https://img.shields.io/david/peer/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap?type=peer) +[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap?type=dev) +[![CSS gzip size](http://img.badgesize.io/twbs/bootstrap/v4-dev/dist/css/bootstrap.min.css?compression=gzip&label=CSS+gzip+size)](https://github.com/twbs/bootstrap/tree/v4-dev/dist/css/bootstrap.min.css) +[![JS gzip size](http://img.badgesize.io/twbs/bootstrap/v4-dev/dist/js/bootstrap.min.js?compression=gzip&label=JS+gzip+size)](https://github.com/twbs/bootstrap/tree/v4-dev/dist/js/bootstrap.min.js) -[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) +[![Sauce Labs Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) ## What's included @@ -71,7 +73,15 @@ bootstrap/ │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css -│ └── bootstrap.min.css.map +│ ├── bootstrap.min.css.map +│ ├── bootstrap-grid.css +│ ├── bootstrap-grid.css.map +│ ├── bootstrap-grid.min.css +│ ├── bootstrap-grid.min.css.map +│ ├── bootstrap-reboot.css +│ ├── bootstrap-reboot.css.map +│ ├── bootstrap-reboot.min.css +│ └── bootstrap-reboot.min.css.map └── js/ ├── bootstrap.js └── bootstrap.min.js @@ -87,13 +97,13 @@ Have a bug or a feature request? Please first read the [issue guidelines](https: ## Documentation -Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com) and publicly hosted on GitHub Pages at . The docs may also be run locally. +Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at . The docs may also be run locally. Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in the `_scripts.html` include. ### Running documentation locally -1. Run through the [tooling setup](https://github.com/twbs/bootstrap/blob/v4-dev/docs/4.0/getting-started/build-tools.md#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`. +1. Run through the [tooling setup](https://getbootstrap.com/docs/4.0/getting-started/build-tools/#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`. 2. Run `npm install` to install Node.js dependencies. 3. Run `npm run test` (or a specific NPM script) to rebuild distributed CSS and JavaScript files, as well as our docs assets. 4. From the root `/bootstrap` directory, run `npm run docs-serve` in the command line. @@ -109,15 +119,13 @@ Learn more about using Jekyll by reading its [documentation](https://jekyllrb.co [Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. - ## Contributing Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo). -Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at . - +Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at . ## Community @@ -132,7 +140,6 @@ Get updates on Bootstrap's development and chat with the project maintainers and - Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability. - ## Versioning For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. @@ -153,7 +160,6 @@ See [the Releases section of our GitHub project](https://github.com/twbs/bootstr - - ## Copyright and license Code and documentation copyright 2011-2017 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE). diff --git a/_data/colors.yml b/_data/colors.yml index 4208ec75ac97..202270cdcb79 100644 --- a/_data/colors.yml +++ b/_data/colors.yml @@ -1,26 +1,26 @@ - name: blue - hex: "#007aff" + hex: "#007bff" - name: indigo - hex: "#2b29bb" + hex: "#6610f2" - name: purple - hex: "#882ae0" + hex: "#6f42c1" - name: pink - hex: "#f14095" + hex: "#e83e8c" - name: red - hex: "#ea0242" + hex: "#dc3545" - name: orange - hex: "#ff8d00" + hex: "#fd7e14" - name: yellow - hex: "#ffec00" + hex: "#ffc107" - name: green - hex: "#34da36" + hex: "#28a745" - name: teal - hex: "#1dde8e" + hex: "#20c997" - name: cyan - hex: "#08eff3" + hex: "#17a2b8" - name: white hex: "#fff" - name: gray - hex: "#464a4c" + hex: "#868e96" - name: gray-dark - hex: "#292b2c" + hex: "#343a40" diff --git a/_data/grays.yml b/_data/grays.yml index bf9750ee9c19..d6e50f9e140a 100644 --- a/_data/grays.yml +++ b/_data/grays.yml @@ -1,18 +1,18 @@ - name: 100 hex: "#f8f9fa" - name: 200 - hex: "#ebedef" + hex: "#e9ecef" - name: 300 - hex: "#ced3d8" + hex: "#dee2e6" - name: 400 - hex: "#abb3bd" + hex: "#ced4da" - name: 500 - hex: "#7c8a99" + hex: "#adb5bd" - name: 600 - hex: "#55626f" + hex: "#868e96" - name: 700 - hex: "#4a5560" + hex: "#495057" - name: 800 - hex: "#384048" + hex: "#343a40" - name: 900 - hex: "#131619" + hex: "#212529" diff --git a/_data/theme-colors.yml b/_data/theme-colors.yml index 92ea28838483..bef5002acd06 100644 --- a/_data/theme-colors.yml +++ b/_data/theme-colors.yml @@ -1,5 +1,5 @@ - name: primary - hex: "#007aff" + hex: "#007bff" - name: secondary hex: "#868e96" - name: success diff --git a/_includes/icons/import.svg b/_includes/icons/import.svg index 72a4b603bc4a..0a9dbb269689 100644 --- a/_includes/icons/import.svg +++ b/_includes/icons/import.svg @@ -1 +1 @@ -Import icon +Import icon diff --git a/assets/scss/_brand.scss b/assets/scss/_brand.scss index 1fb2119a257b..2d5c5a4cf45f 100644 --- a/assets/scss/_brand.scss +++ b/assets/scss/_brand.scss @@ -1,3 +1,5 @@ +// stylelint-disable no-duplicate-selectors + // // Brand guidelines // diff --git a/assets/scss/_component-examples.scss b/assets/scss/_component-examples.scss index 2a2c740b35db..3d216991afcb 100644 --- a/assets/scss/_component-examples.scss +++ b/assets/scss/_component-examples.scss @@ -1,4 +1,4 @@ -// stylelint-disable selector-no-qualifying-type +// stylelint-disable no-duplicate-selectors, selector-no-qualifying-type // // Grid examples diff --git a/assets/scss/_content.scss b/assets/scss/_content.scss index b8311495cf29..112370a2dae4 100644 --- a/assets/scss/_content.scss +++ b/assets/scss/_content.scss @@ -1,4 +1,4 @@ -// stylelint-disable selector-max-combinators, selector-max-compound-selectors, selector-max-type, selector-no-qualifying-type +// stylelint-disable no-duplicate-selectors, selector-max-combinators, selector-max-compound-selectors, selector-max-type, selector-no-qualifying-type // // Automatically style Markdown-based tables like a Bootstrap `.table`. diff --git a/build/.stylelintrc b/build/.stylelintrc index 8fa3104909b9..11a6db2845e9 100644 --- a/build/.stylelintrc +++ b/build/.stylelintrc @@ -19,7 +19,7 @@ "declaration-block-semicolon-space-after": "always-single-line", "declaration-empty-line-before": null, "declaration-no-important": true, - "font-family-name-quotes": "always-where-required", + "font-family-name-quotes": "always-where-recommended", "font-weight-notation": "numeric", "function-comma-space-after": null, "function-url-no-scheme-relative": true, @@ -32,7 +32,7 @@ "media-feature-range-operator-space-after": "always", "media-feature-range-operator-space-before": "never", "no-descending-specificity": null, - "no-duplicate-selectors": null, + "no-duplicate-selectors": true, "number-leading-zero": "never", "order/properties-order": [ "position", diff --git a/build/htmllint.js b/build/htmllint.js new file mode 100644 index 000000000000..f69d80141184 --- /dev/null +++ b/build/htmllint.js @@ -0,0 +1,46 @@ +#!/usr/bin/env node + +/*! + * Script to run vnu-jar if Java is available. + * Copyright 2017 The Bootstrap Authors + * Copyright 2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +'use strict' + +const childProcess = require('child_process') +const vnu = require('vnu-jar') + +childProcess.exec('java -version', function (error) { + if (error) { + console.error('Skipping HTML lint test; Java is missing.') + return + } + + const ignores = [ + 'Attribute “autocomplete” is only allowed when the input type is “color”, “date”, “datetime-local”, “email”, “hidden”, “month”, “number”, “password”, “range”, “search”, “tel”, “text”, “time”, “url”, or “week”.', + 'Attribute “autocomplete” not allowed on element “button” at this point.', + 'Attribute “title” not allowed on element “circle” at this point.', + 'Bad value “tablist” for attribute “role” on element “nav”.', + 'Element “img” is missing required attribute “src”.', + 'Element “legend” not allowed as child of element “div” in this context.*' + ].join('|') + + const args = [ + '-jar', + vnu, + '--asciiquotes', + '--errors-only', + '--skip-non-html', + `--filterpattern "${ignores}"`, + '_gh_pages/', + 'js/tests/' + ] + + return childProcess.spawn('java', args, { + shell: true, + stdio: 'inherit' + }) + .on('exit', process.exit) +}) diff --git a/build/postcss.config.js b/build/postcss.config.js index b34a0ce46741..425228eaaccc 100644 --- a/build/postcss.config.js +++ b/build/postcss.config.js @@ -1,7 +1,7 @@ 'use strict' module.exports = (ctx) => ({ - map: ctx.file.dirname.startsWith('docs') ? false : { + map: ctx.file.dirname.includes('examples') ? false : { inline: false, annotation: true, sourcesContent: true diff --git a/build/saucelabs-unit-test.js b/build/saucelabs-unit-test.js index cfc4ed274523..0b4a3b5f0eff 100644 --- a/build/saucelabs-unit-test.js +++ b/build/saucelabs-unit-test.js @@ -1,23 +1,32 @@ +/*! + * Script to run our Sauce Labs tests. + * Copyright 2017 The Bootstrap Authors + * Copyright 2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/* +Docs: https://wiki.saucelabs.com/display/DOCS/Platform+Configurator +Mac Opera is not currently supported by Sauce Labs +Win Opera 15+ is not currently supported by Sauce Labs +iOS Chrome is not currently supported by Sauce Labs +*/ + 'use strict' const path = require('path') const JSUnitSaucelabs = require('jsunitsaucelabs') -// Docs: https://wiki.saucelabs.com/display/DOCS/Platform+Configurator -// Mac Opera is not currently supported by Sauce Labs -// Win Opera 15+ is not currently supported by Sauce Labs -// iOS Chrome is not currently supported by Sauce Labs - const jsUnitSaucelabs = new JSUnitSaucelabs({ username: process.env.SAUCE_USERNAME, password: process.env.SAUCE_ACCESS_KEY, - build: process.env.TRAVIS_JOB_ID + build: process.env.TRAVIS_JOB_ID }) -const testURL = 'http://localhost:3000/js/tests/index.html?hidepassed' +const testURL = 'http://localhost:3000/js/tests/index.html?hidepassed' const browsersFile = require(path.resolve(__dirname, './sauce_browsers.json')) -let jobsDone = 0 -let jobsSucceeded = 0 +let jobsDone = 0 +let jobsSucceeded = 0 const waitingCallback = (error, body, id) => { if (error) { @@ -33,8 +42,8 @@ const waitingCallback = (error, body, id) => { }) }, 2000) } else { - const test = body['js tests'][0] - let passed = false + const test = body['js tests'][0] + let passed = false let errorStr = false if (test.result !== null) { @@ -46,9 +55,9 @@ const waitingCallback = (error, body, id) => { } console.log(`Tested ${testURL}`) - console.log(`Platform: ${test.platform.join(',')}`) + console.log(`Platform: ${test.platform.join(', ')}`) console.log(`Passed: ${passed.toString()}`) - console.log(`Url ${test.url} \n`) + console.log(`URL: ${test.url}\n`) if (errorStr) { console.error(errorStr) } @@ -61,7 +70,13 @@ const waitingCallback = (error, body, id) => { // Exit if (jobsDone === browsersFile.length - 1) { jsUnitSaucelabs.stop() - process.exit(jobsDone === jobsSucceeded ? 0 : 1) + if (jobsDone > jobsSucceeded) { + const failedTest = jobsDone - jobsSucceeded + throw new Error(`Some test(s) failed (${failedTest})`) + } + + console.log('All tests passed') + process.exit(0) } } } diff --git a/docs/4.0/examples/.stylelintrc b/docs/4.0/examples/.stylelintrc new file mode 100644 index 000000000000..44cf7c0e0f8a --- /dev/null +++ b/docs/4.0/examples/.stylelintrc @@ -0,0 +1,12 @@ +{ + "extends": "../../../build/.stylelintrc", + "rules": { + "at-rule-no-vendor-prefix": null, + "comment-empty-line-before": null, + "media-feature-name-no-vendor-prefix": null, + "property-no-vendor-prefix": null, + "selector-no-qualifying-type": null, + "selector-no-vendor-prefix": null, + "value-no-vendor-prefix": null + } +} diff --git a/docs/4.0/examples/blog/blog.css b/docs/4.0/examples/blog/blog.css index 6eda0a7b126b..0f319ec92c41 100644 --- a/docs/4.0/examples/blog/blog.css +++ b/docs/4.0/examples/blog/blog.css @@ -13,12 +13,18 @@ body { color: #555; } -h1, .h1, -h2, .h2, -h3, .h3, -h4, .h4, -h5, .h5, -h6, .h6 { +h1, +.h1, +h2, +.h2, +h3, +.h3, +h4, +.h4, +h5, +.h5, +h6, +.h6 { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 400; color: #333; diff --git a/docs/4.0/examples/dashboard/dashboard.css b/docs/4.0/examples/dashboard/dashboard.css index a59005148a92..ca7135b08018 100644 --- a/docs/4.0/examples/dashboard/dashboard.css +++ b/docs/4.0/examples/dashboard/dashboard.css @@ -27,18 +27,12 @@ h1 { bottom: 0; left: 0; z-index: 1000; - padding: 20px; + padding: 20px 0; overflow-x: hidden; overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ border-right: 1px solid #eee; } -/* Sidebar navigation */ -.sidebar { - padding-right: 0; - padding-left: 0; -} - .sidebar .nav { margin-bottom: 20px; } diff --git a/docs/4.0/getting-started/contents.md b/docs/4.0/getting-started/contents.md index 96acbc053713..3d5389fee370 100644 --- a/docs/4.0/getting-started/contents.md +++ b/docs/4.0/getting-started/contents.md @@ -18,7 +18,15 @@ bootstrap/ │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css -│ └── bootstrap.min.css.map +│ ├── bootstrap.min.css.map +│ ├── bootstrap-grid.css +│ ├── bootstrap-grid.css.map +│ ├── bootstrap-grid.min.css +│ ├── bootstrap-grid.min.css.map +│ ├── bootstrap-reboot.css +│ ├── bootstrap-reboot.css.map +│ ├── bootstrap-reboot.min.css +│ └── bootstrap-reboot.min.css.map └── js/ ├── bootstrap.js └── bootstrap.min.js @@ -26,6 +34,52 @@ bootstrap/ This is the most basic form of Bootstrap: precompiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. +### Comparison of CSS files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CSS filesLayoutContentComponentsUtilities
+
bootstrap.css
+
bootstrap.min.css
+
AllAllAllAll
+
bootstrap-grid.css
+
bootstrap-grid.min.css
+
Only grid systemNoNoOnly flex utilities
+
bootstrap-reboot.css
+
bootstrap-reboot.min.css
+
NoOnly RebootNoNo
+ ## Bootstrap source code The Bootstrap source code download includes the precompiled CSS and JavaScript assets, along with source Sass, JavaScript, and documentation. More specifically, it includes the following and more: diff --git a/docs/4.0/getting-started/download.md b/docs/4.0/getting-started/download.md index cce660178441..9f1199317967 100644 --- a/docs/4.0/getting-started/download.md +++ b/docs/4.0/getting-started/download.md @@ -10,7 +10,7 @@ toc: true Download ready-to-use compiled code for **Bootstrap v{{ site.current_version}}** to easily drop into your project, which includes: -- Compiled and minified CSS bundles (default, grid-only, and Reboot-only) +- Compiled and minified CSS bundles (see [CSS files comparison]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/contents/#comparison-of-css-files)) - Compiled and minified JavaScript plugins This doesn't include documentation, source files, or any optional JavaScript dependencies (jQuery and Popper.js). diff --git a/docs/4.0/getting-started/theming.md b/docs/4.0/getting-started/theming.md index c4c50dc4b168..15c5caa0be1f 100644 --- a/docs/4.0/getting-started/theming.md +++ b/docs/4.0/getting-started/theming.md @@ -228,17 +228,19 @@ Within `_variables.scss`, you'll find our color variables and Sass map. Here's a {% highlight scss %} $colors: ( + "blue": $blue, + "indigo": $indigo, + "purple": $purple, + "pink": $pink, "red": $red, "orange": $orange, "yellow": $yellow, "green": $green, "teal": $teal, - "blue": $blue, - "pink": $pink, - "purple": $purple, + "cyan": $cyan, "white": $white, "gray": $gray-600, - "gray-dark": $gray-900 + "gray-dark": $gray-800 ) !default; {% endhighlight %} diff --git a/docs/4.0/layout/grid.md b/docs/4.0/layout/grid.md index ca608477b4a9..9e81dd913976 100644 --- a/docs/4.0/layout/grid.md +++ b/docs/4.0/layout/grid.md @@ -149,9 +149,9 @@ For example, here are two grid layouts that apply to every device and viewport, {% endexample %} -Equal-width columns can be broken into multiple lines, but there is a [Safari flexbox bug](https://github.com/philipwalton/flexbugs#11-min-and-max-size-declarations-are-ignored-when-wrapping-flex-items) that prevents this from working without an explicit `flex-basis` or `border`. Our example works thanks to the `border` being set; you can do the same with `.col { border: 1px solid transparent; }`. Alternatively, you can set the flex-basis to the width of the column (e.g., `.col { flex: 1 0 50%; }`). +Equal-width columns can be broken into multiple lines, but there was a [Safari flexbox bug](https://github.com/philipwalton/flexbugs#11-min-and-max-size-declarations-are-ignored-when-wrapping-flex-items) that prevented this from working without an explicit `flex-basis` or `border`. -Both these fixes have been documented in a [reduced test case outside Bootstrap](https://output.jsbin.com/micohor). +Two workarounds have been documented in a [reduced test case outside Bootstrap](https://output.jsbin.com/micohor), though if the browser is up to date this shouldn't be necessary.
{% example html %} diff --git a/docs/4.0/migration.md b/docs/4.0/migration.md index 7c70c7221457..8a0d3d3faad6 100644 --- a/docs/4.0/migration.md +++ b/docs/4.0/migration.md @@ -69,7 +69,7 @@ Here are the big ticket items you'll want to be aware of when moving from v3 to - [Octicons](https://octicons.github.com/) - [Font Awesome](http://fontawesome.io/) - See the [Extend page]({{ site.baseurl }}/docs/{{ site.docs_version }}/extend/icons/) for a list of alternatives. Have additional suggestions? Please open an issue or PR. -- Dropped the Affix jQuery plugin. +- **Dropped the Affix jQuery plugin.** - We recommend using `position: sticky` instead. [See the HTML5 Please entry](http://html5please.com/#sticky) for details and specific polyfill recommendations. One suggestion is to use an `@supports` rule for implementing it (e.g., `@supports (position: sticky) { ... }`)/ - If you were using Affix to apply additional, non-`position` styles, the polyfills might not support your use case. One option for such uses is the third-party [ScrollPos-Styler](https://github.com/acch/scrollpos-styler) library. - **Dropped the pager component** as it was essentially slightly customized buttons. diff --git a/js/src/modal.js b/js/src/modal.js index 1ea630c4154d..399adc4c1298 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -169,12 +169,6 @@ const Modal = (() => { return } - const transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE) - - if (transition) { - this._isTransitioning = true - } - const hideEvent = $.Event(Event.HIDE) $(this._element).trigger(hideEvent) @@ -185,6 +179,12 @@ const Modal = (() => { this._isShown = false + const transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE) + + if (transition) { + this._isTransitioning = true + } + this._setEscapeEvent() this._setResizeEvent() diff --git a/js/tests/README.md b/js/tests/README.md index 72ece2d36f20..8c8c2f17e835 100644 --- a/js/tests/README.md +++ b/js/tests/README.md @@ -24,7 +24,7 @@ To run the unit test suite via a real web browser, open `index.html` in the brow * Each test should have a unique name clearly stating what unit is being tested. * Each test should test only one unit per test, although one test can include several assertions. Create multiple tests for multiple units of functionality. -* Each test should begin with [`assert.expect`](https://api.qunitjs.com/expect/) to ensure that the expected assertions are run. +* Each test should begin with [`assert.expect`](https://api.qunitjs.com/assert/expect/) to ensure that the expected assertions are run. * Each test should follow the project's [JavaScript Code Guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#js) ### Example tests @@ -33,16 +33,16 @@ To run the unit test suite via a real web browser, open `index.html` in the brow // Synchronous test QUnit.test('should describe the unit being tested', function (assert) { assert.expect(1) - var templateHTML = '
' + var templateHTML = '
' + '×' + '

Template necessary for the test.

' + '
' var $alert = $(templateHTML).appendTo('#qunit-fixture').bootstrapAlert() - $alert.find('.close').click() + $alert.find('.close').trigger('click') // Make assertion - assert.strictEqual($alert.hasClass('in'), false, 'remove .in class on .close click') + assert.strictEqual($alert.hasClass('show'), false, 'remove .show class on .close click') }) // Asynchronous test diff --git a/js/tests/visual/modal.html b/js/tests/visual/modal.html index 6e9f0f7107c4..fcc96035bd99 100644 --- a/js/tests/visual/modal.html +++ b/js/tests/visual/modal.html @@ -171,6 +171,12 @@ + +

+ +
@@ -203,6 +209,22 @@ $('#firefoxModal').on('focus', reportFirefoxTestResult.bind(false)) $('#ff-bug-input').on('focus', reportFirefoxTestResult.bind(true)) }) + + $('#btnPreventModal').on('click', function () { + $('#firefoxModal').one('shown.bs.modal', function () { + $(this).modal('hide') + }) + .one('hide.bs.modal', function (event) { + event.preventDefault() + if ($(this).data('bs.modal')._isTransitioning) { + console.error('Modal plugin should not set _isTransitioning when hide event is prevented') + } else { + console.log('Test passed') + $(this).modal('hide') // work as expected + } + }) + .modal('show') + }) }) diff --git a/package-lock.json b/package-lock.json index 4fec5a068c58..bc5c6b5fc1eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,9 +67,9 @@ } }, "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, "ansi-regex": { @@ -237,16 +237,16 @@ "dev": true }, "autoprefixer": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.4.tgz", - "integrity": "sha512-MB1XybOJqu1uAwpfSilAa1wSURNc4W310CFKvMj1fNaJBFxr1PGgz72vZaPr9ryKGqs2vYZ6jDyJ0aiGELjsoA==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.5.tgz", + "integrity": "sha512-sMN453qIm8Z+tunzYWW+Y490wWkICHhCYm/VohLjjl+N7ARSFuF5au7E6tr7oEbeeXj8mNjpSw2kxjJaO6YCOw==", "dev": true, "requires": { - "browserslist": "2.4.0", - "caniuse-lite": "1.0.30000743", + "browserslist": "2.5.1", + "caniuse-lite": "1.0.30000745", "normalize-range": "0.1.2", "num2fraction": "1.2.2", - "postcss": "6.0.12", + "postcss": "6.0.13", "postcss-value-parser": "3.3.0" } }, @@ -268,7 +268,7 @@ "integrity": "sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=", "dev": true, "requires": { - "follow-redirects": "1.2.4", + "follow-redirects": "1.2.5", "is-buffer": "1.1.5" } }, @@ -290,6 +290,14 @@ "output-file-sync": "2.0.0", "slash": "1.0.0", "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "babel-code-frame": { @@ -324,6 +332,14 @@ "micromatch": "2.3.11", "resolve": "1.4.0", "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "babel-eslint": { @@ -436,6 +452,14 @@ "lodash": "4.17.4", "source-map": "0.5.7", "trim-right": "1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "babel-helper-annotate-as-pure": { @@ -1031,7 +1055,7 @@ "babel-plugin-transform-optional-catch-binding": "7.0.0-beta.2", "babel-plugin-transform-regenerator": "7.0.0-beta.2", "babel-plugin-transform-unicode-property-regex": "2.0.5", - "browserslist": "2.4.0", + "browserslist": "2.5.1", "invariant": "2.2.2", "semver": "5.4.1" } @@ -1140,9 +1164,9 @@ } }, "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, "boom": { @@ -1216,12 +1240,12 @@ } }, "browserslist": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.4.0.tgz", - "integrity": "sha512-aM2Gt4x9bVlCUteADBS6JP0F+2tMWKM1jQzUulVROtdFWFIcIVvY76AJbr7GDqy0eDhn+PcnpzzivGxY4qiaKQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.5.1.tgz", + "integrity": "sha512-jAvM2ku7YDJ+leAq3bFH1DE0Ylw+F+EQDq4GkqZfgPEqpWYw9ofQH85uKSB9r3Tv7XDbfqVtE+sdvKJW7IlPJA==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000743", + "caniuse-lite": "1.0.30000745", "electron-to-chromium": "1.3.24" } }, @@ -1241,26 +1265,27 @@ } }, "bundlesize": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/bundlesize/-/bundlesize-0.14.4.tgz", - "integrity": "sha512-Qi04ADUB+FoeBD98XuSLNt54SW4onfMyuNHnyaHS6rq6/+D11RR+lzADoxFmf5ei9iu1sBqxdltAh6lbJGCT0Q==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/bundlesize/-/bundlesize-0.15.2.tgz", + "integrity": "sha512-qtn2xv9yd02nTSEzW/qWAEgzjrZhoqxb7v3uE0l0LyuCE3VbVjfxJ+ZmIiAN/Gxv4ystlFFSkOjNGTQDf+pCJA==", "dev": true, "requires": { "axios": "0.16.2", - "bytes": "2.5.0", + "bytes": "3.0.0", "ci-env": "1.4.0", "commander": "2.11.0", "github-build": "1.2.0", "glob": "7.1.2", - "gzip-size": "3.0.0", + "gzip-size": "4.0.0", + "opencollective": "1.0.3", "prettycli": "1.4.3", "read-pkg-up": "2.0.0" } }, "bytes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", - "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, "caller-path": { @@ -1303,15 +1328,15 @@ } }, "caniuse-db": { - "version": "1.0.30000671", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000671.tgz", - "integrity": "sha1-nwcbvHuWmUY4zLr0eCnVihV3qO0=", + "version": "1.0.30000745", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000745.tgz", + "integrity": "sha1-slmmFzej5IxPtLaxvETt6yZM1CI=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000743", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000743.tgz", - "integrity": "sha1-9PXGdQZ2/49hROpARWw3KdU0F2k=", + "version": "1.0.30000745", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000745.tgz", + "integrity": "sha1-INb+3hFXpJNRM1ApRvx+DmuIDaU=", "dev": true }, "capture-stack-trace": { @@ -1381,6 +1406,14 @@ "dev": true, "requires": { "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "clean-css-cli": { @@ -1410,9 +1443,9 @@ } }, "cli-spinners": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.0.1.tgz", - "integrity": "sha1-JnUyHBAPGVsCh3rEmemRH6NLl4M=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.1.0.tgz", + "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY=", "dev": true }, "cli-width": { @@ -1451,15 +1484,6 @@ "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } } } }, @@ -1738,9 +1762,9 @@ "dev": true }, "dependency-graph": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.5.0.tgz", - "integrity": "sha1-ce33lF27qGwbGayYK2r7ZHa1bdU=", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.5.1.tgz", + "integrity": "sha512-nk3OjiI68T3876/tsm4Hm57ye7zc4Kl87hkcALBMCuSrN1q1NvuY5HCnSSkoJjGdrMo5gmu0WTN2cV/D76q/mw==", "dev": true }, "detect-file": { @@ -1842,6 +1866,15 @@ "integrity": "sha1-m3uIuwXOufoBahd4M8wt3jiPIbY=", "dev": true }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, "ensure-posix-path": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz", @@ -1929,7 +1962,7 @@ "globals": "9.18.0", "ignore": "3.3.5", "imurmurhash": "0.1.4", - "inquirer": "3.3.0", + "inquirer": "3.0.6", "is-resolvable": "1.0.0", "js-yaml": "3.10.0", "json-stable-stringify": "1.0.1", @@ -1997,6 +2030,23 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -2006,27 +2056,15 @@ } }, "eslint-plugin-compat": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-1.0.4.tgz", - "integrity": "sha512-16yjDdjrivRQT7/Kov+3O6DMvfg8WYC1JKPAsvf/UNtdLBeMXVYATohAM4nOak1ynGP69mKUlOjw7nroUqY9Sg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-2.0.1.tgz", + "integrity": "sha512-6LtsFQsrFyPGLBVJMnQEmUEY1Sc0Trpz56i/y3qTCA5JKc1KePKS5q5Xcc8LoGgPyeDw3IfnyYqS4Q7vR1Ffeg==", "dev": true, "requires": { "babel-runtime": "6.26.0", - "browserslist": "2.1.4", - "caniuse-db": "1.0.30000671", + "browserslist": "2.5.1", + "caniuse-db": "1.0.30000745", "requireindex": "1.1.0" - }, - "dependencies": { - "browserslist": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.1.4.tgz", - "integrity": "sha1-zFJq9KExK30uBWU+VtDIq3DA4FM=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000743", - "electron-to-chromium": "1.3.24" - } - } } }, "eslint-scope": { @@ -2385,9 +2423,9 @@ "dev": true }, "follow-redirects": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.2.4.tgz", - "integrity": "sha512-Suw6KewLV2hReSyEOeql+UUkBVyiBm3ok1VPrVFRZnQInWpdoZbbiG5i8aJVSjTr0yQ4Ava0Sh6/joCg1Brdqw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.2.5.tgz", + "integrity": "sha512-lMhwQTryFbG+wYsAIEKC1Kf5IGDlVNnONRogIBllh7LLoV7pNIxW0z9fhjRar9NBql+hd2Y49KboVVNxf6GEfg==", "dev": true, "requires": { "debug": "2.6.9" @@ -2536,15 +2574,6 @@ "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } } } }, @@ -2762,12 +2791,21 @@ "dev": true }, "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.0.0.tgz", + "integrity": "sha512-6SWfFRd8r8VTKTpJCR7h/T6IbCaK+jM/n2gB1+pV3IrKcrLO1WTb8ZWdaRy1T/nwOz80cp4gAJf8sujpZxfA1w==", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "0.1.1", + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "har-schema": { @@ -2889,7 +2927,7 @@ "integrity": "sha1-PfpDD+dG63vGfCbmlz3EpwyhfLM=", "dev": true, "requires": { - "bluebird": "3.5.0", + "bluebird": "3.5.1", "chalk": "1.1.3", "cjson": "0.5.0", "glob": "7.1.2", @@ -2919,15 +2957,6 @@ "supports-color": "2.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -3035,13 +3064,13 @@ "dev": true }, "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", + "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.1.0", + "ansi-escapes": "1.4.0", + "chalk": "1.1.3", "cli-cursor": "2.1.0", "cli-width": "2.2.0", "external-editor": "2.0.5", @@ -3049,11 +3078,37 @@ "lodash": "4.17.4", "mute-stream": "0.0.7", "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", + "rx": "4.1.0", "string-width": "2.1.1", - "strip-ansi": "4.0.0", + "strip-ansi": "3.0.1", "through": "2.3.8" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, "interpret": { @@ -3559,9 +3614,9 @@ } }, "known-css-properties": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz", - "integrity": "sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.4.1.tgz", + "integrity": "sha512-n+ThoCKhyMFKkMfksdLMP5ndp+VzwDRzQdH6JlmZ2GTpUenYB2EeEKjOue2SErAAG/MmBSUISpwvawDhydWQdQ==", "dev": true }, "latest-version": { @@ -3823,15 +3878,6 @@ "supports-color": "2.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -4150,6 +4196,16 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node-fetch": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", + "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, "node-gyp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", @@ -4240,15 +4296,6 @@ "which": "1.3.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -4470,6 +4517,80 @@ "mimic-fn": "1.1.0" } }, + "opencollective": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz", + "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=", + "dev": true, + "requires": { + "babel-polyfill": "6.23.0", + "chalk": "1.1.3", + "inquirer": "3.0.6", + "minimist": "1.2.0", + "node-fetch": "1.6.3", + "opn": "4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "babel-polyfill": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", + "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "regenerator-runtime": "0.10.5" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -4492,7 +4613,7 @@ "requires": { "chalk": "1.1.3", "cli-cursor": "2.1.0", - "cli-spinners": "1.0.1", + "cli-spinners": "1.1.0", "log-symbols": "1.0.2" }, "dependencies": { @@ -4515,15 +4636,6 @@ "supports-color": "2.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -4959,13 +5071,13 @@ "dev": true }, "postcss": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", - "integrity": "sha512-K6SLofXEK43FBSyZ6/ExQV7ji24OEw4tEY6x1CAf7+tcoMWJoO24Rf3rVFVpk+5IQL1e1Cy3sTKfg7hXuLzafg==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.13.tgz", + "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==", "dev": true, "requires": { "chalk": "2.1.0", - "source-map": "0.5.7", + "source-map": "0.6.1", "supports-color": "4.4.0" } }, @@ -4977,12 +5089,12 @@ "requires": { "chalk": "2.1.0", "chokidar": "1.7.0", - "dependency-graph": "0.5.0", + "dependency-graph": "0.5.1", "fs-extra": "4.0.2", "get-stdin": "5.0.1", "globby": "6.1.0", "ora": "1.3.0", - "postcss": "6.0.12", + "postcss": "6.0.13", "postcss-load-config": "1.2.0", "postcss-reporter": "5.0.0", "pretty-hrtime": "1.0.3", @@ -5090,7 +5202,7 @@ "integrity": "sha512-zl0EEqq8Urh37Ppdv9zzhpZpLHrgkxmt6e3O4ftRa7/b8Uq2LV+/KBVM8/KuzmHNu+mthhOArg1lxbfqQ3NUdg==", "dev": true, "requires": { - "postcss": "5.2.17" + "postcss": "5.2.18" }, "dependencies": { "ansi-styles": { @@ -5127,9 +5239,9 @@ "dev": true }, "postcss": { - "version": "5.2.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", - "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { "chalk": "1.1.3", @@ -5138,14 +5250,11 @@ "supports-color": "3.2.3" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "supports-color": { "version": "3.2.3", @@ -5205,7 +5314,7 @@ "chalk": "2.1.0", "lodash": "4.17.4", "log-symbols": "2.1.0", - "postcss": "6.0.12" + "postcss": "6.0.13" }, "dependencies": { "log-symbols": { @@ -5225,13 +5334,22 @@ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", "dev": true }, + "postcss-safe-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz", + "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=", + "dev": true, + "requires": { + "postcss": "6.0.13" + } + }, "postcss-scss": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.2.tgz", "integrity": "sha1-/0XPM1S4ee6JpOtoaA9GrJuxT5Q=", "dev": true, "requires": { - "postcss": "6.0.12" + "postcss": "6.0.13" } }, "postcss-selector-parser": { @@ -5252,7 +5370,7 @@ "dev": true, "requires": { "lodash": "4.17.4", - "postcss": "6.0.12" + "postcss": "6.0.13" } }, "postcss-value-parser": { @@ -5858,21 +5976,12 @@ "is-promise": "2.1.0" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", "dev": true }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -5975,15 +6084,6 @@ "strip-ansi": "3.0.1" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", @@ -6055,15 +6155,6 @@ "supports-color": "2.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -6208,9 +6299,9 @@ } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { @@ -6220,6 +6311,14 @@ "dev": true, "requires": { "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "spdx-correct": { @@ -6315,6 +6414,23 @@ "requires": { "is-fullwidth-code-point": "2.0.0", "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "string.prototype.padend": { @@ -6335,20 +6451,12 @@ "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -6385,15 +6493,15 @@ "dev": true }, "stylelint": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-8.1.1.tgz", - "integrity": "sha512-RtjUtqG2h3dP4CuMU1M++GRJGvKXWozmv5yhLoOLy7NWP2jJZOwLZSVwtcjXQsBJBfGuC33mooBOwNaCIhi2tQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-8.2.0.tgz", + "integrity": "sha512-57JWIz/1Uh9ehZMZyAqlFC0EDfQrMXCH8yqt8ZuJQQvV3LBKgAM/JYd+CWi1hC4eJtRODSPbIIBYKdGjkPZdMg==", "dev": true, "requires": { - "autoprefixer": "7.1.4", + "autoprefixer": "7.1.5", "balanced-match": "1.0.0", "chalk": "2.1.0", - "cosmiconfig": "2.2.2", + "cosmiconfig": "3.1.0", "debug": "3.1.0", "execall": "1.0.0", "file-entry-cache": "2.0.0", @@ -6403,7 +6511,7 @@ "html-tags": "2.0.0", "ignore": "3.3.5", "imurmurhash": "0.1.4", - "known-css-properties": "0.3.0", + "known-css-properties": "0.4.1", "lodash": "4.17.4", "log-symbols": "2.1.0", "mathml-tag-names": "2.0.1", @@ -6411,15 +6519,16 @@ "micromatch": "2.3.11", "normalize-selector": "0.2.0", "pify": "3.0.0", - "postcss": "6.0.12", + "postcss": "6.0.13", "postcss-less": "1.1.1", "postcss-media-query-parser": "0.2.3", "postcss-reporter": "5.0.0", "postcss-resolve-nested-selector": "0.1.1", + "postcss-safe-parser": "3.0.1", "postcss-scss": "1.0.2", "postcss-selector-parser": "2.2.3", "postcss-value-parser": "3.3.0", - "resolve-from": "3.0.0", + "resolve-from": "4.0.0", "specificity": "0.3.2", "string-width": "2.1.1", "style-search": "0.1.0", @@ -6428,6 +6537,18 @@ "table": "4.0.2" }, "dependencies": { + "cosmiconfig": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", + "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "parse-json": "3.0.0", + "require-from-string": "2.0.1" + } + }, "get-stdin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", @@ -6464,16 +6585,31 @@ "chalk": "2.1.0" } }, + "parse-json": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", + "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "require-from-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", + "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=", + "dev": true + }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } @@ -6509,7 +6645,7 @@ "dev": true, "requires": { "lodash": "4.17.4", - "postcss": "6.0.12", + "postcss": "6.0.13", "postcss-sorting": "3.0.2" } }, @@ -6532,7 +6668,7 @@ "integrity": "sha1-ZeUbOVhDL7cNVFGmi7M+MtDPHvc=", "dev": true, "requires": { - "postcss": "6.0.12" + "postcss": "6.0.13" } }, "supports-color": { @@ -6709,6 +6845,14 @@ "requires": { "commander": "2.11.0", "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "unc-path-regex": { @@ -6813,15 +6957,6 @@ "supports-color": "2.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -6872,6 +7007,12 @@ "extsprintf": "1.3.0" } }, + "vnu-jar": { + "version": "17.11.1", + "resolved": "https://registry.npmjs.org/vnu-jar/-/vnu-jar-17.11.1.tgz", + "integrity": "sha512-GtlIJyyBQzVw4WCn5ZIsv/lRBqr02vHzr2RofljEURqsKy/CwUmVRjEJJL/d4nou5+B3rpaf3D1scAdQGOX1tA==", + "dev": true + }, "walk-sync": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.1.tgz", @@ -6925,15 +7066,6 @@ "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } } } }, @@ -6965,15 +7097,6 @@ "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } } } }, @@ -6984,9 +7107,9 @@ "dev": true }, "workbox-build": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.0.3.tgz", - "integrity": "sha512-Tqwqaq/JAKV2Lj37Eg/AdZq7r7UYrFQ1gTyPx0PBJ2dhQU1Sz/MSa6MUsbY0wVNqyXYqbkaizg2PVmbljLpvdQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.1.0.tgz", + "integrity": "sha512-Jdhfnsw5N7vnomC1sDkgZx/COYF5/1qW07nBt3qvFfe8OUSNE5323JpErMZif7HSoEUMvn/Fau9WEbKMu80u6Q==", "dev": true, "requires": { "chalk": "1.1.3", @@ -6994,7 +7117,7 @@ "glob": "7.1.2", "lodash.template": "4.4.0", "mkdirp": "0.5.1", - "workbox-sw": "2.0.3" + "workbox-sw": "2.1.0" }, "dependencies": { "ansi-styles": { @@ -7036,15 +7159,6 @@ "graceful-fs": "4.1.11" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -7054,9 +7168,9 @@ } }, "workbox-sw": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-2.0.3.tgz", - "integrity": "sha512-oVVkci0qYtYnV7kiUcLOWnzCNXXrVpUhCFajqg/cv+T8IWO2onV75qktpjXK+2wvaCVWYStinZ/D8AFSZHTnmQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-2.1.0.tgz", + "integrity": "sha512-+pQmxqjJsNzEOJFMW64rlTakxmgtlWH1PFMY8PP32TsBDHMEqk1vSHeizaiI0FCUq6nvXlqBr9CNrokYl26d4w==", "dev": true }, "wrap-ansi": { @@ -7088,15 +7202,6 @@ "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } } } }, @@ -7249,15 +7354,6 @@ "strip-ansi": "3.0.1" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", diff --git a/package.json b/package.json index 0b4958ff58ca..ba56a1d42309 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,9 @@ "css-compile": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap.scss dist/css/bootstrap.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-grid.scss dist/css/bootstrap-grid.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-reboot.scss dist/css/bootstrap-reboot.css", "css-compile-docs": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 assets/scss/docs.scss assets/css/docs.min.css", "css-lint": "stylelint --config build/.stylelintrc --syntax scss \"scss/**/*.scss\"", - "css-lint-docs": "stylelint --config build/.stylelintrc --syntax scss \"assets/scss/*.scss\"", + "css-lint-docs": "stylelint --config build/.stylelintrc --syntax scss \"assets/scss/*.scss\" && stylelint --config docs/4.0/examples/.stylelintrc \"docs/**/*.css\"", "css-prefix": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\"", - "css-prefix-docs": "postcss --config build/postcss.config.js --no-map --replace assets/css/docs.min.css", + "css-prefix-docs": "postcss --config build/postcss.config.js --replace \"assets/css/docs.min.css\" \"docs/**/*.css\"", "css-minify": "cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css", "css-minify-docs": "cleancss --level 1 --source-map --source-map-inline-sources --output assets/css/docs.min.css assets/css/docs.min.css", "js": "npm-run-all js-lint* js-compile* js-minify*", @@ -49,7 +49,7 @@ "docs-compile": "bundle exec jekyll build", "postdocs-compile": "npm run docs-workbox-precache", "docs-github": "shx echo \"github: true\" > twbsconfig.yml && npm run docs-compile -- --config _config.yml,twbsconfig.yml && shx rm ./twbsconfig.yml", - "docs-lint": "htmllint --rc build/.htmllintrc \"_gh_pages/**/*.html\" \"js/tests/**/*.html\"", + "docs-lint": "htmllint --rc build/.htmllintrc \"_gh_pages/**/*.html\" \"js/tests/**/*.html\" && node build/htmllint.js", "docs-serve": "bundle exec jekyll serve", "docs-upload-preview": "build/upload-preview.sh", "docs-workbox-precache": "node build/workbox.js", @@ -67,7 +67,7 @@ "main": "dist/js/bootstrap", "repository": { "type": "git", - "url": "https://github.com/twbs/bootstrap.git" + "url": "git+https://github.com/twbs/bootstrap.git" }, "bugs": { "url": "https://github.com/twbs/bootstrap/issues" @@ -85,11 +85,11 @@ "babel-plugin-external-helpers": "^7.0.0-beta.0", "babel-plugin-transform-es2015-modules-strip": "^0.1.1", "babel-preset-env": "^2.0.0-beta.0", - "bundlesize": "^0.14.4", + "bundlesize": "^0.15.2", "clean-css-cli": "^4.1.6", "cross-env": "^5.0.5", "eslint": "^4.2.0", - "eslint-plugin-compat": "^1.0.4", + "eslint-plugin-compat": "^2.0.1", "htmllint-cli": "^0.0.6", "jsunitsaucelabs": "^1.2.0", "node-sass": "^4.5.3", @@ -111,6 +111,7 @@ "stylelint-order": "^0.7.0", "stylelint-scss": "^2.1.0", "uglify-js": "^3.0.24", + "vnu-jar": "^17.11.1", "workbox-build": "^2.0.1" }, "engines": { diff --git a/scss/_buttons.scss b/scss/_buttons.scss index d69c15998328..72fc5f34062a 100644 --- a/scss/_buttons.scss +++ b/scss/_buttons.scss @@ -32,8 +32,8 @@ @include box-shadow(none); } - &:active, - &.active { + &:not([disabled]):not(.disabled):active, + &:not([disabled]):not(.disabled).active { background-image: none; @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow); } diff --git a/scss/_card.scss b/scss/_card.scss index 295d6afcf9df..a739f193558a 100644 --- a/scss/_card.scss +++ b/scss/_card.scss @@ -17,6 +17,18 @@ margin-right: 0; margin-left: 0; } + + > .list-group:first-child { + .list-group-item:first-child { + @include border-top-radius($card-border-radius); + } + } + + > .list-group:last-child { + .list-group-item:last-child { + @include border-bottom-radius($card-border-radius); + } + } } .card-body { @@ -49,21 +61,6 @@ } } -.card { - > .list-group:first-child { - .list-group-item:first-child { - @include border-top-radius($card-border-radius); - } - } - - > .list-group:last-child { - .list-group-item:last-child { - @include border-bottom-radius($card-border-radius); - } - } -} - - // // Optional textual caps // @@ -156,6 +153,7 @@ .card { display: flex; + // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored flex: 1 0 0%; flex-direction: column; margin-right: $card-deck-margin; @@ -182,6 +180,7 @@ flex-flow: row wrap; .card { + // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored flex: 1 0 0%; margin-bottom: 0; @@ -214,6 +213,17 @@ } } + &:only-child { + @include border-radius($card-border-radius); + + .card-img-top { + @include border-top-radius($card-border-radius); + } + .card-img-bottom { + @include border-bottom-radius($card-border-radius); + } + } + &:not(:first-child):not(:last-child):not(:only-child) { border-radius: 0; @@ -222,10 +232,6 @@ border-radius: 0; } } - - &:only-child { - @include border-radius($card-border-radius); - } } } } diff --git a/scss/_dropdown.scss b/scss/_dropdown.scss index 32657167f54d..1782d5b9f17a 100644 --- a/scss/_dropdown.scss +++ b/scss/_dropdown.scss @@ -9,19 +9,6 @@ @include caret; } -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// Just add .dropup after the standard .dropdown class and you're set. -.dropup { - .dropdown-menu { - margin-top: 0; - margin-bottom: $dropdown-spacer; - } - - .dropdown-toggle { - @include caret(up); - } -} - // The dropdown menu .dropdown-menu { position: absolute; @@ -44,6 +31,19 @@ @include box-shadow($dropdown-box-shadow); } +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// Just add .dropup after the standard .dropdown class and you're set. +.dropup { + .dropdown-menu { + margin-top: 0; + margin-bottom: $dropdown-spacer; + } + + .dropdown-toggle { + @include caret(up); + } +} + // Dividers (basically an `
`) within the dropdown .dropdown-divider { @include nav-divider($dropdown-divider-bg); diff --git a/scss/_reboot.scss b/scss/_reboot.scss index 7dfc8d317fbf..3055cc33d941 100644 --- a/scss/_reboot.scss +++ b/scss/_reboot.scss @@ -1,4 +1,4 @@ -// stylelint-disable +// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix // Reboot // @@ -35,13 +35,17 @@ html { // IE10+ doesn't honor `` in some cases. @at-root { - @-ms-viewport { width: device-width; } + @-ms-viewport { + width: device-width; + } } +// stylelint-disable selector-list-comma-newline-after // Shim for "new" HTML5 structural elements to display correctly (IE10, older browsers) article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } +// stylelint-enable selector-list-comma-newline-after // Body // @@ -91,10 +95,12 @@ hr { // // By default, `

`-`

` all receive top and bottom margins. We nuke the top // margin for easier control within type scales as it avoids margin collapsing. +// stylelint-disable selector-list-comma-newline-after h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: $headings-margin-bottom; } +// stylelint-enable selector-list-comma-newline-after // Reset margins on paragraphs // @@ -157,10 +163,12 @@ dfn { font-style: italic; // Add the correct font style in Android 4.3- } +// stylelint-disable font-weight-notation b, strong { font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari } +// stylelint-enable font-weight-notation small { font-size: 80%; // Add the correct font size in all browsers @@ -224,6 +232,7 @@ a:not([href]):not([tabindex]) { // Code // +// stylelint-disable font-family-no-duplicate-names pre, code, kbd, @@ -231,6 +240,7 @@ samp { font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers. font-size: 1em; // Correct the odd `em` font sizing in all browsers. } +// stylelint-enable font-family-no-duplicate-names pre { // Remove browser default top margin @@ -283,7 +293,7 @@ a, area, button, [role="button"], -input:not([type=range]), +input:not([type="range"]), label, select, summary, diff --git a/scss/_root.scss b/scss/_root.scss index 78ac03915db8..ad550df3b49b 100644 --- a/scss/_root.scss +++ b/scss/_root.scss @@ -1,16 +1,19 @@ :root { + // Custom variable values only support SassScript inside `#{}`. @each $color, $value in $colors { - --#{$color}: $value; + --#{$color}: #{$value}; } @each $color, $value in $theme-colors { - --#{$color}: $value; + --#{$color}: #{$value}; } @each $bp, $value in $grid-breakpoints { - --breakpoint-#{$bp}: $value; + --breakpoint-#{$bp}: #{$value}; } - --font-family-sans-serif: $font-family-sans-serif; - --font-family-monospace: $font-family-monospace; + // Use `inspect` for lists so that quoted items keep the quotes. + // See https://github.com/sass/sass/issues/2383#issuecomment-336349172 + --font-family-sans-serif: #{inspect($font-family-sans-serif)}; + --font-family-monospace: #{inspect($font-family-monospace)}; } diff --git a/scss/_tables.scss b/scss/_tables.scss index 32384391e11c..6bd0b91a43cd 100644 --- a/scss/_tables.scss +++ b/scss/_tables.scss @@ -103,6 +103,7 @@ // // Same table markup, but inverted color scheme: dark background and light text. +// stylelint-disable-next-line no-duplicate-selectors .table { .thead-dark { th { diff --git a/scss/_tooltip.scss b/scss/_tooltip.scss index fe97fbbbd0d7..7b5db1cf2a5f 100644 --- a/scss/_tooltip.scss +++ b/scss/_tooltip.scss @@ -21,6 +21,12 @@ height: $tooltip-arrow-height; } + .arrow::before { + position: absolute; + border-color: transparent; + border-style: solid; + } + &.bs-tooltip-top { padding: $tooltip-arrow-width 0; .arrow { @@ -88,12 +94,6 @@ @extend .bs-tooltip-left; } } - - .arrow::before { - position: absolute; - border-color: transparent; - border-style: solid; - } } // Wrapper for the tooltip content diff --git a/scss/_variables.scss b/scss/_variables.scss index 4e987373cdde..1808e4bd94d1 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -9,7 +9,7 @@ // // stylelint-disable -$white: #fff !default; +$white: #fff !default; $gray-100: #f8f9fa !default; $gray-200: #e9ecef !default; $gray-300: #dee2e6 !default; @@ -19,7 +19,7 @@ $gray-600: #868e96 !default; $gray-700: #495057 !default; $gray-800: #343a40 !default; $gray-900: #212529 !default; -$black: #000 !default; +$black: #000 !default; $grays: () !default; $grays: map-merge(( @@ -47,36 +47,36 @@ $cyan: #17a2b8 !default; $colors: () !default; $colors: map-merge(( - "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 + "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 ), $colors); $theme-colors: () !default; $theme-colors: map-merge(( - "primary": $blue, - "secondary": $gray-600, - "success": $green, - "info": $cyan, - "warning": $yellow, - "danger": $red, - "light": $gray-100, - "dark": $gray-800 + "primary": $blue, + "secondary": $gray-600, + "success": $green, + "info": $cyan, + "warning": $yellow, + "danger": $red, + "light": $gray-100, + "dark": $gray-800 ), $theme-colors); // stylelint-enable // Set a specific jump point for requesting color jumps -$theme-color-interval: 8% !default; +$theme-color-interval: 8% !default; // Options @@ -121,23 +121,23 @@ $sizes: ( // // Settings for the `` element. -$body-bg: $white !default; -$body-color: $gray-900 !default; +$body-bg: $white !default; +$body-color: $gray-900 !default; // Links // // Style anchor elements. -$link-color: theme-color("primary") !default; -$link-decoration: none !default; -$link-hover-color: darken($link-color, 15%) !default; -$link-hover-decoration: underline !default; +$link-color: theme-color("primary") !default; +$link-decoration: none !default; +$link-hover-color: darken($link-color, 15%) !default; +$link-hover-decoration: underline !default; // Paragraphs // // Style p element. -$paragraph-margin-bottom: 1rem !default; +$paragraph-margin-bottom: 1rem !default; // Grid breakpoints @@ -152,6 +152,7 @@ $grid-breakpoints: ( lg: 992px, xl: 1200px ) !default; + @include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); @include _assert-starts-at-zero($grid-breakpoints); @@ -166,6 +167,7 @@ $container-max-widths: ( lg: 960px, xl: 1140px ) !default; + @include _assert-ascending($container-max-widths, "$container-max-widths"); @@ -173,31 +175,31 @@ $container-max-widths: ( // // Set the number of columns and specify the width of the gutters. -$grid-columns: 12 !default; -$grid-gutter-width: 30px !default; +$grid-columns: 12 !default; +$grid-gutter-width: 30px !default; // Components // // Define common padding and border radius sizes and more. -$line-height-lg: 1.5 !default; -$line-height-sm: 1.5 !default; +$line-height-lg: 1.5 !default; +$line-height-sm: 1.5 !default; -$border-width: 1px !default; -$border-color: $gray-200 !default; +$border-width: 1px !default; +$border-color: $gray-200 !default; -$border-radius: .25rem !default; -$border-radius-lg: .3rem !default; -$border-radius-sm: .2rem !default; +$border-radius: .25rem !default; +$border-radius-lg: .3rem !default; +$border-radius-sm: .2rem !default; -$component-active-color: $white !default; -$component-active-bg: theme-color("primary") !default; +$component-active-color: $white !default; +$component-active-bg: theme-color("primary") !default; -$caret-width: .3em !default; +$caret-width: .3em !default; -$transition-base: all .2s ease-in-out !default; -$transition-fade: opacity .15s linear !default; -$transition-collapse: height .35s ease !default; +$transition-base: all .2s ease-in-out !default; +$transition-fade: opacity .15s linear !default; +$transition-collapse: height .35s ease !default; // Fonts @@ -205,67 +207,67 @@ $transition-collapse: height .35s ease !default; // Font, line-height, and color for body text, headings, and more. // stylelint-disable value-keyword-case -$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; -$font-family-monospace: "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; -$font-family-base: $font-family-sans-serif !default; +$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; +$font-family-monospace: "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; +$font-family-base: $font-family-sans-serif !default; // stylelint-enable value-keyword-case -$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` -$font-size-lg: 1.25rem !default; -$font-size-sm: .875rem !default; +$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` +$font-size-lg: 1.25rem !default; +$font-size-sm: .875rem !default; -$font-weight-light: 300 !default; -$font-weight-normal: normal !default; -$font-weight-bold: bold !default; +$font-weight-light: 300 !default; +$font-weight-normal: 400 !default; +$font-weight-bold: 700 !default; -$font-weight-base: $font-weight-normal !default; -$line-height-base: 1.5 !default; +$font-weight-base: $font-weight-normal !default; +$line-height-base: 1.5 !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; +$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; -$headings-font-weight: 500 !default; -$headings-line-height: 1.1 !default; -$headings-color: inherit !default; +$headings-margin-bottom: ($spacer / 2) !default; +$headings-font-family: inherit !default; +$headings-font-weight: 500 !default; +$headings-line-height: 1.1 !default; +$headings-color: inherit !default; -$display1-size: 6rem !default; -$display2-size: 5.5rem !default; -$display3-size: 4.5rem !default; -$display4-size: 3.5rem !default; +$display1-size: 6rem !default; +$display2-size: 5.5rem !default; +$display3-size: 4.5rem !default; +$display4-size: 3.5rem !default; -$display1-weight: 300 !default; -$display2-weight: 300 !default; -$display3-weight: 300 !default; -$display4-weight: 300 !default; -$display-line-height: $headings-line-height !default; +$display1-weight: 300 !default; +$display2-weight: 300 !default; +$display3-weight: 300 !default; +$display4-weight: 300 !default; +$display-line-height: $headings-line-height !default; -$lead-font-size: 1.25rem !default; -$lead-font-weight: 300 !default; +$lead-font-size: 1.25rem !default; +$lead-font-weight: 300 !default; -$small-font-size: 80% !default; +$small-font-size: 80% !default; -$text-muted: $gray-600 !default; +$text-muted: $gray-600 !default; -$blockquote-small-color: $gray-600 !default; -$blockquote-font-size: ($font-size-base * 1.25) !default; +$blockquote-small-color: $gray-600 !default; +$blockquote-font-size: ($font-size-base * 1.25) !default; -$hr-border-color: rgba($black,.1) !default; -$hr-border-width: $border-width !default; +$hr-border-color: rgba($black,.1) !default; +$hr-border-width: $border-width !default; -$mark-padding: .2em !default; +$mark-padding: .2em !default; -$dt-font-weight: $font-weight-bold !default; +$dt-font-weight: $font-weight-bold !default; -$kbd-box-shadow: inset 0 -.1rem 0 rgba($black,.25) !default; -$nested-kbd-font-weight: $font-weight-bold !default; +$kbd-box-shadow: inset 0 -.1rem 0 rgba($black,.25) !default; +$nested-kbd-font-weight: $font-weight-bold !default; -$list-inline-padding: 5px !default; +$list-inline-padding: 5px !default; $mark-bg: #fcf8e3 !default; @@ -274,179 +276,179 @@ $mark-bg: #fcf8e3 !default; // // Customizes the `.table` component with basic values, each used across all table variations. -$table-cell-padding: .75rem !default; -$table-cell-padding-sm: .3rem !default; +$table-cell-padding: .75rem !default; +$table-cell-padding-sm: .3rem !default; -$table-bg: transparent !default; -$table-accent-bg: rgba($black,.05) !default; -$table-hover-bg: rgba($black,.075) !default; -$table-active-bg: $table-hover-bg !default; +$table-bg: transparent !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-200 !default; +$table-border-width: $border-width !default; +$table-border-color: $gray-200 !default; -$table-head-bg: $gray-200 !default; -$table-head-color: $gray-700 !default; +$table-head-bg: $gray-200 !default; +$table-head-color: $gray-700 !default; -$table-dark-bg: $gray-900 !default; -$table-dark-accent-bg: rgba($white, .05) !default; -$table-dark-hover-bg: rgba($white, .075) !default; -$table-dark-border-color: lighten($gray-900, 7.5%) !default; -$table-dark-color: $body-bg !default; +$table-dark-bg: $gray-900 !default; +$table-dark-accent-bg: rgba($white, .05) !default; +$table-dark-hover-bg: rgba($white, .075) !default; +$table-dark-border-color: lighten($gray-900, 7.5%) !default; +$table-dark-color: $body-bg !default; // Buttons // // For each of Bootstrap's buttons, define text, background and border color. -$input-btn-padding-y: .375rem !default; -$input-btn-padding-x: .75rem !default; -$input-btn-line-height: $line-height-base !default; +$input-btn-padding-y: .375rem !default; +$input-btn-padding-x: .75rem !default; +$input-btn-line-height: $line-height-base !default; -$input-btn-padding-y-sm: .25rem !default; -$input-btn-padding-x-sm: .5rem !default; -$input-btn-line-height-sm: $line-height-sm !default; +$input-btn-padding-y-sm: .25rem !default; +$input-btn-padding-x-sm: .5rem !default; +$input-btn-line-height-sm: $line-height-sm !default; -$input-btn-padding-y-lg: .5rem !default; -$input-btn-padding-x-lg: 1rem !default; -$input-btn-line-height-lg: $line-height-lg !default; +$input-btn-padding-y-lg: .5rem !default; +$input-btn-padding-x-lg: 1rem !default; +$input-btn-line-height-lg: $line-height-lg !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 3px rgba(theme-color("primary"), .25) !default; -$btn-active-box-shadow: inset 0 3px 5px rgba($black,.125) !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 3px rgba(theme-color("primary"), .25) !default; +$btn-active-box-shadow: inset 0 3px 5px rgba($black,.125) !default; -$btn-link-disabled-color: $gray-600 !default; +$btn-link-disabled-color: $gray-600 !default; -$btn-block-spacing-y: .5rem !default; +$btn-block-spacing-y: .5rem !default; // Allows for customizing button radius independently from global border radius -$btn-border-radius: $border-radius !default; -$btn-border-radius-lg: $border-radius-lg !default; -$btn-border-radius-sm: $border-radius-sm !default; +$btn-border-radius: $border-radius !default; +$btn-border-radius-lg: $border-radius-lg !default; +$btn-border-radius-sm: $border-radius-sm !default; -$btn-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; +$btn-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; // Forms -$input-bg: $white !default; -$input-disabled-bg: $gray-200 !default; +$input-bg: $white !default; +$input-disabled-bg: $gray-200 !default; -$input-color: $gray-700 !default; -$input-border-color: $gray-400 !default; -$input-btn-border-width: $border-width !default; // For form controls and buttons -$input-box-shadow: inset 0 1px 1px rgba($black,.075) !default; +$input-color: $gray-700 !default; +$input-border-color: $gray-400 !default; +$input-btn-border-width: $border-width !default; // For form controls and buttons +$input-box-shadow: inset 0 1px 1px rgba($black,.075) !default; -$input-border-radius: $border-radius !default; -$input-border-radius-lg: $border-radius-lg !default; -$input-border-radius-sm: $border-radius-sm !default; +$input-border-radius: $border-radius !default; +$input-border-radius-lg: $border-radius-lg !default; +$input-border-radius-sm: $border-radius-sm !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-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-placeholder-color: $gray-600 !default; -$input-height-border: $input-btn-border-width * 2 !default; +$input-height-border: $input-btn-border-width * 2 !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-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-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-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-lg * $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-height-inner-lg: ($font-size-lg * $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; +$input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s !default; -$form-text-margin-top: .25rem !default; +$form-text-margin-top: .25rem !default; -$form-check-margin-bottom: .5rem !default; -$form-check-input-gutter: 1.25rem !default; -$form-check-input-margin-y: .25rem !default; -$form-check-input-margin-x: .25rem !default; +$form-check-margin-bottom: .5rem !default; +$form-check-input-gutter: 1.25rem !default; +$form-check-input-margin-y: .25rem !default; +$form-check-input-margin-x: .25rem !default; -$form-check-inline-margin-x: .75rem !default; +$form-check-inline-margin-x: .75rem !default; -$form-group-margin-bottom: 1rem !default; +$form-group-margin-bottom: 1rem !default; -$input-group-addon-color: $input-color !default; -$input-group-addon-bg: $gray-200 !default; -$input-group-addon-border-color: $input-border-color !default; +$input-group-addon-color: $input-color !default; +$input-group-addon-bg: $gray-200 !default; +$input-group-addon-border-color: $input-border-color !default; -$custom-control-gutter: 1.5rem !default; -$custom-control-spacer-y: .25rem !default; -$custom-control-spacer-x: 1rem !default; +$custom-control-gutter: 1.5rem !default; +$custom-control-spacer-y: .25rem !default; +$custom-control-spacer-x: 1rem !default; -$custom-control-indicator-size: 1rem !default; -$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-indicator-size: 1rem !default; +$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-indicator-disabled-bg: $gray-200 !default; -$custom-control-description-disabled-color: $gray-600 !default; +$custom-control-indicator-disabled-bg: $gray-200 !default; +$custom-control-description-disabled-color: $gray-600 !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-indicator-checked-color: $white !default; +$custom-control-indicator-checked-bg: theme-color("primary") !default; +$custom-control-indicator-checked-box-shadow: none !default; -$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, 0 0 0 3px theme-color("primary") !default; +$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, 0 0 0 3px theme-color("primary") !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-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-indicator-border-radius: $border-radius !default; -$custom-checkbox-indicator-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-indicator-border-radius: $border-radius !default; +$custom-checkbox-indicator-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-indicator-indeterminate-bg: theme-color("primary") !default; +$custom-checkbox-indicator-indeterminate-bg: theme-color("primary") !default; $custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default; -$custom-checkbox-indicator-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-indicator-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-indicator-indeterminate-box-shadow: none !default; -$custom-radio-indicator-border-radius: 50% !default; -$custom-radio-indicator-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-radio-indicator-border-radius: 50% !default; +$custom-radio-indicator-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-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-600 !default; -$custom-select-bg: $white !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; -$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(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-font-size-sm: 75% !default; -$custom-select-height-sm: $input-height-sm !default; - -$custom-file-height: $input-height !default; -$custom-file-width: 14rem !default; -$custom-file-focus-box-shadow: 0 0 0 .075rem $white, 0 0 0 .2rem theme-color("primary") !default; - -$custom-file-padding-y: $input-btn-padding-y !default; -$custom-file-padding-x: $input-btn-padding-x !default; -$custom-file-line-height: $input-btn-line-height !default; -$custom-file-color: $input-color !default; -$custom-file-bg: $input-bg !default; -$custom-file-border-width: $input-btn-border-width !default; -$custom-file-border-color: $input-border-color !default; -$custom-file-border-radius: $input-border-radius !default; -$custom-file-box-shadow: $input-box-shadow !default; -$custom-file-button-color: $custom-file-color !default; -$custom-file-button-bg: $input-group-addon-bg !default; +$custom-select-bg: $white !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; +$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(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-font-size-sm: 75% !default; +$custom-select-height-sm: $input-height-sm !default; + +$custom-file-height: $input-height !default; +$custom-file-width: 14rem !default; +$custom-file-focus-box-shadow: 0 0 0 .075rem $white, 0 0 0 .2rem theme-color("primary") !default; + +$custom-file-padding-y: $input-btn-padding-y !default; +$custom-file-padding-x: $input-btn-padding-x !default; +$custom-file-line-height: $input-btn-line-height !default; +$custom-file-color: $input-color !default; +$custom-file-bg: $input-bg !default; +$custom-file-border-width: $input-btn-border-width !default; +$custom-file-border-color: $input-border-color !default; +$custom-file-border-radius: $input-border-radius !default; +$custom-file-box-shadow: $input-box-shadow !default; +$custom-file-button-color: $custom-file-color !default; +$custom-file-button-bg: $input-group-addon-bg !default; $custom-file-text: ( placeholder: ( en: "Choose file..." @@ -458,36 +460,36 @@ $custom-file-text: ( // Form validation -$form-feedback-valid-color: theme-color("success") !default; -$form-feedback-invalid-color: theme-color("danger") !default; +$form-feedback-valid-color: theme-color("success") !default; +$form-feedback-invalid-color: theme-color("danger") !default; // Dropdowns // // Dropdown menu container and contents. -$dropdown-min-width: 10rem !default; -$dropdown-padding-y: .5rem !default; -$dropdown-spacer: .125rem !default; -$dropdown-bg: $white !default; -$dropdown-border-color: rgba($black,.15) !default; -$dropdown-border-width: $border-width !default; -$dropdown-divider-bg: $gray-200 !default; -$dropdown-box-shadow: 0 .5rem 1rem rgba($black,.175) !default; +$dropdown-min-width: 10rem !default; +$dropdown-padding-y: .5rem !default; +$dropdown-spacer: .125rem !default; +$dropdown-bg: $white !default; +$dropdown-border-color: rgba($black,.15) !default; +$dropdown-border-width: $border-width !default; +$dropdown-divider-bg: $gray-200 !default; +$dropdown-box-shadow: 0 .5rem 1rem rgba($black,.175) !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-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-active-color: $component-active-color !default; +$dropdown-link-active-bg: $component-active-bg !default; -$dropdown-link-disabled-color: $gray-600 !default; +$dropdown-link-disabled-color: $gray-600 !default; -$dropdown-item-padding-y: .25rem !default; -$dropdown-item-padding-x: 1.5rem !default; +$dropdown-item-padding-y: .25rem !default; +$dropdown-item-padding-x: 1.5rem !default; -$dropdown-header-color: $gray-600 !default; +$dropdown-header-color: $gray-600 !default; // Z-index master list @@ -495,31 +497,31 @@ $dropdown-header-color: $gray-600 !default; // Warning: Avoid customizing these values. They're used for a bird's eye view // of components dependent on the z-axis and are designed to all work together. -$zindex-dropdown: 1000 !default; -$zindex-sticky: 1020 !default; -$zindex-fixed: 1030 !default; -$zindex-modal-backdrop: 1040 !default; -$zindex-modal: 1050 !default; -$zindex-popover: 1060 !default; -$zindex-tooltip: 1070 !default; +$zindex-dropdown: 1000 !default; +$zindex-sticky: 1020 !default; +$zindex-fixed: 1030 !default; +$zindex-modal-backdrop: 1040 !default; +$zindex-modal: 1050 !default; +$zindex-popover: 1060 !default; +$zindex-tooltip: 1070 !default; // Navs -$nav-link-padding-y: .5rem !default; -$nav-link-padding-x: 1rem !default; -$nav-link-disabled-color: $gray-600 !default; +$nav-link-padding-y: .5rem !default; +$nav-link-padding-x: 1rem !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-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-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-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-link-active-color: $component-active-color !default; -$nav-pills-link-active-bg: $component-active-bg !default; +$nav-pills-border-radius: $border-radius !default; +$nav-pills-link-active-color: $component-active-color !default; +$nav-pills-link-active-bg: $component-active-bg !default; // Navbar @@ -532,286 +534,286 @@ $nav-link-height: $navbar-brand-font-size * $line-height-base $navbar-brand-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default; $navbar-brand-padding-y: ($navbar-brand-height - $nav-link-height) / 2 !default; -$navbar-toggler-padding-y: .25rem !default; -$navbar-toggler-padding-x: .75rem !default; -$navbar-toggler-font-size: $font-size-lg !default; -$navbar-toggler-border-radius: $btn-border-radius !default; +$navbar-toggler-padding-y: .25rem !default; +$navbar-toggler-padding-x: .75rem !default; +$navbar-toggler-font-size: $font-size-lg !default; +$navbar-toggler-border-radius: $btn-border-radius !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-active-color: $white !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-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; $navbar-light-active-color: rgba($black,.9) !default; $navbar-light-disabled-color: rgba($black,.3) !default; -$navbar-light-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-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default; +$navbar-light-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-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default; $navbar-light-toggler-border-color: rgba($black,.1) !default; // Pagination -$pagination-padding-y: .5rem !default; -$pagination-padding-x: .75rem !default; -$pagination-padding-y-sm: .25rem !default; -$pagination-padding-x-sm: .5rem !default; -$pagination-padding-y-lg: .75rem !default; -$pagination-padding-x-lg: 1.5rem !default; -$pagination-line-height: 1.25 !default; +$pagination-padding-y: .5rem !default; +$pagination-padding-x: .75rem !default; +$pagination-padding-y-sm: .25rem !default; +$pagination-padding-x-sm: .5rem !default; +$pagination-padding-y-lg: .75rem !default; +$pagination-padding-x-lg: 1.5rem !default; +$pagination-line-height: 1.25 !default; -$pagination-color: $link-color !default; -$pagination-bg: $white !default; -$pagination-border-width: $border-width !default; -$pagination-border-color: #ddd !default; +$pagination-color: $link-color !default; +$pagination-bg: $white !default; +$pagination-border-width: $border-width !default; +$pagination-border-color: #ddd !default; -$pagination-hover-color: $link-hover-color !default; -$pagination-hover-bg: $gray-200 !default; -$pagination-hover-border-color: #ddd !default; +$pagination-hover-color: $link-hover-color !default; +$pagination-hover-bg: $gray-200 !default; +$pagination-hover-border-color: #ddd !default; -$pagination-active-color: $white !default; -$pagination-active-bg: theme-color("primary") !default; -$pagination-active-border-color: theme-color("primary") !default; +$pagination-active-color: $white !default; +$pagination-active-bg: theme-color("primary") !default; +$pagination-active-border-color: theme-color("primary") !default; -$pagination-disabled-color: $gray-600 !default; -$pagination-disabled-bg: $white !default; -$pagination-disabled-border-color: #ddd !default; +$pagination-disabled-color: $gray-600 !default; +$pagination-disabled-bg: $white !default; +$pagination-disabled-border-color: #ddd !default; // Jumbotron -$jumbotron-padding: 2rem !default; -$jumbotron-bg: $gray-200 !default; +$jumbotron-padding: 2rem !default; +$jumbotron-bg: $gray-200 !default; // Cards -$card-spacer-y: .75rem !default; -$card-spacer-x: 1.25rem !default; -$card-border-width: $border-width !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: rgba($black, .03) !default; -$card-bg: $white !default; +$card-spacer-y: .75rem !default; +$card-spacer-x: 1.25rem !default; +$card-border-width: $border-width !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: rgba($black, .03) !default; +$card-bg: $white !default; -$card-img-overlay-padding: 1.25rem !default; +$card-img-overlay-padding: 1.25rem !default; -$card-group-margin: ($grid-gutter-width / 2) !default; -$card-deck-margin: $card-group-margin !default; +$card-group-margin: ($grid-gutter-width / 2) !default; +$card-deck-margin: $card-group-margin !default; -$card-columns-count: 3 !default; -$card-columns-gap: 1.25rem !default; -$card-columns-margin: $card-spacer-y !default; +$card-columns-count: 3 !default; +$card-columns-gap: 1.25rem !default; +$card-columns-margin: $card-spacer-y !default; // Tooltips -$tooltip-max-width: 200px !default; -$tooltip-color: $white !default; -$tooltip-bg: $black !default; -$tooltip-opacity: .9 !default; -$tooltip-padding-y: 3px !default; -$tooltip-padding-x: 8px !default; -$tooltip-margin: 0 !default; +$tooltip-max-width: 200px !default; +$tooltip-color: $white !default; +$tooltip-bg: $black !default; +$tooltip-opacity: .9 !default; +$tooltip-padding-y: 3px !default; +$tooltip-padding-x: 8px !default; +$tooltip-margin: 0 !default; -$tooltip-arrow-width: 5px !default; -$tooltip-arrow-height: 5px !default; -$tooltip-arrow-color: $tooltip-bg !default; +$tooltip-arrow-width: 5px !default; +$tooltip-arrow-height: 5px !default; +$tooltip-arrow-color: $tooltip-bg !default; // Popovers -$popover-inner-padding: 1px !default; -$popover-bg: $white !default; -$popover-max-width: 276px !default; -$popover-border-width: $border-width !default; -$popover-border-color: rgba($black,.2) !default; -$popover-box-shadow: 0 5px 10px rgba($black,.2) !default; +$popover-inner-padding: 1px !default; +$popover-bg: $white !default; +$popover-max-width: 276px !default; +$popover-border-width: $border-width !default; +$popover-border-color: rgba($black,.2) !default; +$popover-box-shadow: 0 5px 10px rgba($black,.2) !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-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-body-color: $body-color !default; -$popover-body-padding-y: 9px !default; -$popover-body-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; -$popover-arrow-color: $popover-bg !default; +$popover-arrow-width: 10px !default; +$popover-arrow-height: 5px !default; +$popover-arrow-color: $popover-bg !default; -$popover-arrow-outer-width: ($popover-arrow-width + 1px) !default; -$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default; +$popover-arrow-outer-width: ($popover-arrow-width + 1px) !default; +$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default; // Badges -$badge-font-size: 75% !default; -$badge-font-weight: $font-weight-bold !default; -$badge-padding-y: .25em !default; -$badge-padding-x: .4em !default; -$badge-border-radius: $border-radius !default; +$badge-font-size: 75% !default; +$badge-font-weight: $font-weight-bold !default; +$badge-padding-y: .25em !default; +$badge-padding-x: .4em !default; +$badge-border-radius: $border-radius !default; -$badge-pill-padding-x: .6em !default; +$badge-pill-padding-x: .6em !default; // Use a higher than normal value to ensure completely rounded edges when // customizing padding or font-size on labels. -$badge-pill-border-radius: 10rem !default; +$badge-pill-border-radius: 10rem !default; // Modals // Padding applied to the modal body -$modal-inner-padding: 15px !default; +$modal-inner-padding: 15px !default; -$modal-dialog-margin: 10px !default; -$modal-dialog-margin-y-sm-up: 30px !default; +$modal-dialog-margin: 10px !default; +$modal-dialog-margin-y-sm-up: 30px !default; -$modal-title-line-height: $line-height-base !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-box-shadow-xs: 0 3px 9px rgba($black,.5) !default; -$modal-content-box-shadow-sm-up: 0 5px 15px rgba($black,.5) !default; +$modal-content-bg: $white !default; +$modal-content-border-color: rgba($black,.2) !default; +$modal-content-border-width: $border-width !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-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; -$modal-header-padding: 15px !default; +$modal-backdrop-bg: $black !default; +$modal-backdrop-opacity: .5 !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; +$modal-header-padding: 15px !default; -$modal-lg: 800px !default; -$modal-md: 500px !default; -$modal-sm: 300px !default; +$modal-lg: 800px !default; +$modal-md: 500px !default; +$modal-sm: 300px !default; -$modal-transition: transform .3s ease-out !default; +$modal-transition: transform .3s ease-out !default; // Alerts // // Define alert colors, border radius, and padding. -$alert-padding-y: .75rem !default; -$alert-padding-x: 1.25rem !default; -$alert-margin-bottom: 1rem !default; -$alert-border-radius: $border-radius !default; -$alert-link-font-weight: $font-weight-bold !default; -$alert-border-width: $border-width !default; +$alert-padding-y: .75rem !default; +$alert-padding-x: 1.25rem !default; +$alert-margin-bottom: 1rem !default; +$alert-border-radius: $border-radius !default; +$alert-link-font-weight: $font-weight-bold !default; +$alert-border-width: $border-width !default; // Progress bars -$progress-height: 1rem !default; -$progress-font-size: .75rem !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: theme-color("primary") !default; -$progress-bar-animation-timing: 1s linear infinite !default; -$progress-bar-transition: width .6s ease !default; +$progress-height: 1rem !default; +$progress-font-size: .75rem !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: theme-color("primary") !default; +$progress-bar-animation-timing: 1s linear infinite !default; +$progress-bar-transition: width .6s ease !default; // List group -$list-group-bg: $white !default; -$list-group-border-color: rgba($black,.125) !default; -$list-group-border-width: $border-width !default; -$list-group-border-radius: $border-radius !default; +$list-group-bg: $white !default; +$list-group-border-color: rgba($black,.125) !default; +$list-group-border-width: $border-width !default; +$list-group-border-radius: $border-radius !default; -$list-group-item-padding-y: .75rem !default; -$list-group-item-padding-x: 1.25rem !default; +$list-group-item-padding-y: .75rem !default; +$list-group-item-padding-x: 1.25rem !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-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-600 !default; -$list-group-disabled-bg: $list-group-bg !default; +$list-group-disabled-color: $gray-600 !default; +$list-group-disabled-bg: $list-group-bg !default; -$list-group-action-color: $gray-700 !default; -$list-group-action-hover-color: $list-group-action-color !default; +$list-group-action-color: $gray-700 !default; +$list-group-action-hover-color: $list-group-action-color !default; -$list-group-action-active-color: $body-color !default; -$list-group-action-active-bg: $gray-200 !default; +$list-group-action-active-color: $body-color !default; +$list-group-action-active-bg: $gray-200 !default; // Image thumbnails -$thumbnail-padding: .25rem !default; -$thumbnail-bg: $body-bg !default; -$thumbnail-border-width: $border-width !default; -$thumbnail-border-color: #ddd !default; -$thumbnail-border-radius: $border-radius !default; -$thumbnail-box-shadow: 0 1px 2px rgba($black,.075) !default; -$thumbnail-transition: all .2s ease-in-out !default; +$thumbnail-padding: .25rem !default; +$thumbnail-bg: $body-bg !default; +$thumbnail-border-width: $border-width !default; +$thumbnail-border-color: #ddd !default; +$thumbnail-border-radius: $border-radius !default; +$thumbnail-box-shadow: 0 1px 2px rgba($black,.075) !default; +$thumbnail-transition: all .2s ease-in-out !default; // Figures -$figure-caption-font-size: 90% !default; -$figure-caption-color: $gray-600 !default; +$figure-caption-font-size: 90% !default; +$figure-caption-color: $gray-600 !default; // Breadcrumbs -$breadcrumb-padding-y: .75rem !default; -$breadcrumb-padding-x: 1rem !default; -$breadcrumb-item-padding: .5rem !default; +$breadcrumb-padding-y: .75rem !default; +$breadcrumb-padding-x: 1rem !default; +$breadcrumb-item-padding: .5rem !default; -$breadcrumb-margin-bottom: 1rem !default; +$breadcrumb-margin-bottom: 1rem !default; -$breadcrumb-bg: $gray-200 !default; -$breadcrumb-divider-color: $gray-600 !default; -$breadcrumb-active-color: $gray-600 !default; -$breadcrumb-divider: "/" !default; +$breadcrumb-bg: $gray-200 !default; +$breadcrumb-divider-color: $gray-600 !default; +$breadcrumb-active-color: $gray-600 !default; +$breadcrumb-divider: "/" !default; // Carousel -$carousel-control-color: $white !default; -$carousel-control-width: 15% !default; -$carousel-control-opacity: .5 !default; +$carousel-control-color: $white !default; +$carousel-control-width: 15% !default; +$carousel-control-opacity: .5 !default; -$carousel-indicator-width: 30px !default; -$carousel-indicator-height: 3px !default; -$carousel-indicator-spacer: 3px !default; -$carousel-indicator-active-bg: $white !default; +$carousel-indicator-width: 30px !default; +$carousel-indicator-height: 3px !default; +$carousel-indicator-spacer: 3px !default; +$carousel-indicator-active-bg: $white !default; -$carousel-caption-width: 70% !default; -$carousel-caption-color: $white !default; +$carousel-caption-width: 70% !default; +$carousel-caption-color: $white !default; -$carousel-control-icon-width: 20px !default; +$carousel-control-icon-width: 20px !default; -$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default; -$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default; +$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default; +$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default; -$carousel-transition: transform .6s ease !default; +$carousel-transition: transform .6s ease !default; // Close -$close-font-size: $font-size-base * 1.5 !default; -$close-font-weight: $font-weight-bold !default; -$close-color: $black !default; -$close-text-shadow: 0 1px 0 $white !default; +$close-font-size: $font-size-base * 1.5 !default; +$close-font-weight: $font-weight-bold !default; +$close-color: $black !default; +$close-text-shadow: 0 1px 0 $white !default; // Code -$code-font-size: 90% !default; -$code-padding-y: .2rem !default; -$code-padding-x: .4rem !default; -$code-color: #bd4147 !default; -$code-bg: $gray-100 !default; +$code-font-size: 90% !default; +$code-padding-y: .2rem !default; +$code-padding-x: .4rem !default; +$code-color: #bd4147 !default; +$code-bg: $gray-100 !default; -$kbd-color: $white !default; -$kbd-bg: $gray-900 !default; +$kbd-color: $white !default; +$kbd-bg: $gray-900 !default; -$pre-color: $gray-900 !default; -$pre-scrollable-max-height: 340px !default; +$pre-color: $gray-900 !default; +$pre-scrollable-max-height: 340px !default; diff --git a/scss/mixins/_buttons.scss b/scss/mixins/_buttons.scss index ef623ccd55e1..50cd4fcbcd37 100644 --- a/scss/mixins/_buttons.scss +++ b/scss/mixins/_buttons.scss @@ -32,8 +32,8 @@ border-color: $border; } - &:active, - &.active, + &:not([disabled]):not(.disabled):active, + &:not([disabled]):not(.disabled).active, .show > &.dropdown-toggle { background-color: $active-background; background-image: none; // Remove the gradient for the pressed/active state @@ -65,8 +65,8 @@ background-color: transparent; } - &:active, - &.active, + &:not([disabled]):not(.disabled):active, + &:not([disabled]):not(.disabled).active, .show > &.dropdown-toggle { color: $color-hover; background-color: $color; diff --git a/scss/mixins/_grid.scss b/scss/mixins/_grid.scss index b5612e922e95..b75ebcbca0ce 100644 --- a/scss/mixins/_grid.scss +++ b/scss/mixins/_grid.scss @@ -47,5 +47,6 @@ } @mixin make-col-offset($size, $columns: $grid-columns) { - margin-left: percentage($size / $columns); + $num: $size / $columns; + margin-left: if($num == 0, 0, percentage($num)); }