From 8537ceb7ce7347001649863ba3331d108588144f Mon Sep 17 00:00:00 2001 From: Sebastian De Deyne Date: Tue, 7 Nov 2017 23:55:32 +0100 Subject: [PATCH 01/45] Add sticky utility --- __tests__/fixtures/tailwind-output.css | 20 ++++++++++++++++++++ docs/source/docs/positioning.blade.md | 5 +++++ src/generators/position.js | 1 + 3 files changed, 26 insertions(+) diff --git a/__tests__/fixtures/tailwind-output.css b/__tests__/fixtures/tailwind-output.css index 012fa8425ea5..35c0969cb9a0 100644 --- a/__tests__/fixtures/tailwind-output.css +++ b/__tests__/fixtures/tailwind-output.css @@ -2192,6 +2192,10 @@ button, position: relative; } +.sticky { + position: sticky; +} + .pin-t { top: 0; } @@ -5152,6 +5156,10 @@ button, position: relative; } + .sm\:sticky { + position: sticky; + } + .sm\:pin-t { top: 0; } @@ -8113,6 +8121,10 @@ button, position: relative; } + .md\:sticky { + position: sticky; + } + .md\:pin-t { top: 0; } @@ -11074,6 +11086,10 @@ button, position: relative; } + .lg\:sticky { + position: sticky; + } + .lg\:pin-t { top: 0; } @@ -14035,6 +14051,10 @@ button, position: relative; } + .xl\:sticky { + position: sticky; + } + .xl\:pin-t { top: 0; } diff --git a/docs/source/docs/positioning.blade.md b/docs/source/docs/positioning.blade.md index cc0d2cf9af1f..061923a0075e 100644 --- a/docs/source/docs/positioning.blade.md +++ b/docs/source/docs/positioning.blade.md @@ -46,6 +46,11 @@ title: "Positioning" position: relative; Position an element according to the normal flow of the document. + + .sticky + position: sticky; + Position an element relative to the browser window when it's about to leave the viewport. + .pin-t top: 0; diff --git a/src/generators/position.js b/src/generators/position.js index 2bc9bf186b38..e051184242d2 100644 --- a/src/generators/position.js +++ b/src/generators/position.js @@ -6,6 +6,7 @@ export default function() { fixed: { position: 'fixed' }, absolute: { position: 'absolute' }, relative: { position: 'relative' }, + sticky: { position: 'sticky' }, 'pin-t': { top: 0 }, 'pin-r': { right: 0 }, 'pin-b': { bottom: 0 }, From 6837c8f46de86ce6bcf400c146c67f116d81cda3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20K=C3=BCndig?= Date: Sun, 24 Dec 2017 13:47:13 +0100 Subject: [PATCH 02/45] Added .cursor-wait --- __tests__/fixtures/tailwind-output.css | 20 ++++++++++++++++++++ src/generators/cursor.js | 1 + 2 files changed, 21 insertions(+) diff --git a/__tests__/fixtures/tailwind-output.css b/__tests__/fixtures/tailwind-output.css index cf9ecd3812ef..dd2d385b2e2e 100644 --- a/__tests__/fixtures/tailwind-output.css +++ b/__tests__/fixtures/tailwind-output.css @@ -2183,6 +2183,10 @@ button, cursor: not-allowed; } +.cursor-wait { + cursor: wait; +} + .block { display: block; } @@ -6066,6 +6070,10 @@ button, cursor: not-allowed; } + .sm\:cursor-wait { + cursor: wait; + } + .sm\:block { display: block; } @@ -9942,6 +9950,10 @@ button, cursor: not-allowed; } + .md\:cursor-wait { + cursor: wait; + } + .md\:block { display: block; } @@ -13818,6 +13830,10 @@ button, cursor: not-allowed; } + .lg\:cursor-wait { + cursor: wait; + } + .lg\:block { display: block; } @@ -17694,6 +17710,10 @@ button, cursor: not-allowed; } + .xl\:cursor-wait { + cursor: wait; + } + .xl\:block { display: block; } diff --git a/src/generators/cursor.js b/src/generators/cursor.js index cd0e8f3856e1..2409e9ea8b29 100644 --- a/src/generators/cursor.js +++ b/src/generators/cursor.js @@ -6,5 +6,6 @@ export default function() { 'cursor-default': { cursor: 'default' }, 'cursor-pointer': { cursor: 'pointer' }, 'cursor-not-allowed': { cursor: 'not-allowed' }, + 'cursor-wait': { cursor: 'wait' }, }) } From db11e99a2a13f4f6ffe790d388a8b20eaf127d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20K=C3=BCndig?= Date: Sun, 24 Dec 2017 13:49:36 +0100 Subject: [PATCH 03/45] Documented .cursor-wait --- docs/source/docs/cursor.blade.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/docs/cursor.blade.md b/docs/source/docs/cursor.blade.md index 44c0b9a58413..df29e73ab0d9 100644 --- a/docs/source/docs/cursor.blade.md +++ b/docs/source/docs/cursor.blade.md @@ -28,6 +28,11 @@ features: 'cursor: not-allowed;', "Set the mouse cursor to indicate that the action will not be executed.", ], + [ + '.cursor-wait', + 'cursor: wait;', + "Set the mouse cursor to indicate that an action is being executed.", + ], ] ]) From 5acfa18d92ebdc46b3a378aed4dc4baa0463d730 Mon Sep 17 00:00:00 2001 From: Nestor Vera Date: Mon, 22 Jan 2018 20:39:34 +0100 Subject: [PATCH 04/45] Add bg-auto to the backgroundSize generator --- src/generators/backgroundSize.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/generators/backgroundSize.js b/src/generators/backgroundSize.js index 5e22666e7081..998c6b12ebe7 100644 --- a/src/generators/backgroundSize.js +++ b/src/generators/backgroundSize.js @@ -2,6 +2,9 @@ import defineClasses from '../util/defineClasses' export default function() { return defineClasses({ + 'bg-auto': { + 'background-size': 'auto', + }, 'bg-cover': { 'background-size': 'cover', }, From 4519c1f8245281ac196de5620f1a2ff6dbc3d17d Mon Sep 17 00:00:00 2001 From: Nestor Vera Date: Mon, 22 Jan 2018 20:39:44 +0100 Subject: [PATCH 05/45] Add bg-auto to the backgroundSize docs --- docs/source/docs/background-size.blade.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/docs/background-size.blade.md b/docs/source/docs/background-size.blade.md index 3f81cf40ad72..500141873f5a 100644 --- a/docs/source/docs/background-size.blade.md +++ b/docs/source/docs/background-size.blade.md @@ -13,6 +13,11 @@ features: @include('_partials.class-table', [ 'rows' => [ + [ + '.bg-auto', + 'background-size: auto;', + "Don't scale the image and show at its real size.", + ], [ '.bg-cover', 'background-size: cover;', From 8f660288596d46204e788cf3650a8bb42262f64d Mon Sep 17 00:00:00 2001 From: Nestor Vera Date: Mon, 22 Jan 2018 20:53:05 +0100 Subject: [PATCH 06/45] Update tests for bg-auto --- __tests__/fixtures/tailwind-output.css | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/__tests__/fixtures/tailwind-output.css b/__tests__/fixtures/tailwind-output.css index 23f3cde5225d..0d3dac35d641 100644 --- a/__tests__/fixtures/tailwind-output.css +++ b/__tests__/fixtures/tailwind-output.css @@ -1265,6 +1265,10 @@ button, background-repeat: repeat-y; } +.bg-auto { + background-size: auto; +} + .bg-cover { background-size: cover; } @@ -5148,6 +5152,10 @@ button, background-repeat: repeat-y; } + .sm\:bg-auto { + background-size: auto; + } + .sm\:bg-cover { background-size: cover; } @@ -9024,6 +9032,10 @@ button, background-repeat: repeat-y; } + .md\:bg-auto { + background-size: auto; + } + .md\:bg-cover { background-size: cover; } @@ -12900,6 +12912,10 @@ button, background-repeat: repeat-y; } + .lg\:bg-auto { + background-size: auto; + } + .lg\:bg-cover { background-size: cover; } @@ -16776,6 +16792,10 @@ button, background-repeat: repeat-y; } + .xl\:bg-auto { + background-size: auto; + } + .xl\:bg-cover { background-size: cover; } From 829576693af255f01a1255e1773de4ff043a5957 Mon Sep 17 00:00:00 2001 From: Nestor Vera Date: Mon, 22 Jan 2018 21:17:30 +0100 Subject: [PATCH 07/45] Allow users to set their own backgroundSize --- defaultConfig.stub.js | 22 ++++++++++++++++++++++ src/generators/backgroundSize.js | 19 +++++++------------ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/defaultConfig.stub.js b/defaultConfig.stub.js index d2e5ab7f8277..532375bb6dc5 100644 --- a/defaultConfig.stub.js +++ b/defaultConfig.stub.js @@ -360,6 +360,28 @@ module.exports = { backgroundColors: colors, + /* + |----------------------------------------------------------------------------- + | Background sizes https://tailwindcss.com/docs/background-color + |----------------------------------------------------------------------------- + | + | Here is where you define your background sizes. These can take one or two + | values depending on your needs. The first value will set the image's width + | while the second will set its height. Using just one will be the same as + | setting the image's height to auto. For multiple backgrounds, use comma + | separated values to define the size of each one of them. + | + | Class name: .bg-{size} + | + */ + + backgroundSize: { + 'auto': 'auto', + 'cover': 'cover', + 'contain': 'contain', + }, + + /* |----------------------------------------------------------------------------- | Border widths https://tailwindcss.com/docs/border-width diff --git a/src/generators/backgroundSize.js b/src/generators/backgroundSize.js index 998c6b12ebe7..44f379d9c0e4 100644 --- a/src/generators/backgroundSize.js +++ b/src/generators/backgroundSize.js @@ -1,15 +1,10 @@ -import defineClasses from '../util/defineClasses' +import _ from 'lodash' +import defineClass from '../util/defineClass' -export default function() { - return defineClasses({ - 'bg-auto': { - 'background-size': 'auto', - }, - 'bg-cover': { - 'background-size': 'cover', - }, - 'bg-contain': { - 'background-size': 'contain', - }, +export default function({ backgroundSizes }) { + return _.map(backgroundSizes, (size, className) => { + return defineClass(`bg-${className}`, { + 'background-size': size, + }) }) } From 3f9fc5a989cfb406c9a53a2c6df8ecb97d062131 Mon Sep 17 00:00:00 2001 From: Nestor Vera Date: Mon, 22 Jan 2018 21:19:09 +0100 Subject: [PATCH 08/45] Rename backgroundSize to backgroundSizes --- defaultConfig.stub.js | 4 ++-- docs/source/docs/background-size.blade.md | 2 +- src/generators/{backgroundSize.js => backgroundSizes.js} | 0 src/utilityModules.js | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/generators/{backgroundSize.js => backgroundSizes.js} (100%) diff --git a/defaultConfig.stub.js b/defaultConfig.stub.js index 532375bb6dc5..416a952962c0 100644 --- a/defaultConfig.stub.js +++ b/defaultConfig.stub.js @@ -375,7 +375,7 @@ module.exports = { | */ - backgroundSize: { + backgroundSizes: { 'auto': 'auto', 'cover': 'cover', 'contain': 'contain', @@ -838,7 +838,7 @@ module.exports = { backgroundColors: ['responsive', 'hover'], backgroundPosition: ['responsive'], backgroundRepeat: ['responsive'], - backgroundSize: ['responsive'], + backgroundSizes: ['responsive'], borderColors: ['responsive', 'hover'], borderRadius: ['responsive'], borderStyle: ['responsive'], diff --git a/docs/source/docs/background-size.blade.md b/docs/source/docs/background-size.blade.md index 500141873f5a..51a6a6e5fcc2 100644 --- a/docs/source/docs/background-size.blade.md +++ b/docs/source/docs/background-size.blade.md @@ -36,7 +36,7 @@ features: @include('_partials.variants-and-disabling', [ 'utility' => [ 'name' => 'background size', - 'property' => 'backgroundSize', + 'property' => 'backgroundSizes', ], 'variants' => [ 'responsive', diff --git a/src/generators/backgroundSize.js b/src/generators/backgroundSizes.js similarity index 100% rename from src/generators/backgroundSize.js rename to src/generators/backgroundSizes.js diff --git a/src/utilityModules.js b/src/utilityModules.js index d22b9a6c4705..a90d87ef642b 100644 --- a/src/utilityModules.js +++ b/src/utilityModules.js @@ -4,7 +4,7 @@ import backgroundAttachment from './generators/backgroundAttachment' import backgroundColors from './generators/backgroundColors' import backgroundPosition from './generators/backgroundPosition' import backgroundRepeat from './generators/backgroundRepeat' -import backgroundSize from './generators/backgroundSize' +import backgroundSizes from './generators/backgroundSizes' import borderColors from './generators/borderColors' import borderRadius from './generators/borderRadius' import borderStyle from './generators/borderStyle' @@ -51,7 +51,7 @@ export default [ { name: 'backgroundColors', generator: backgroundColors }, { name: 'backgroundPosition', generator: backgroundPosition }, { name: 'backgroundRepeat', generator: backgroundRepeat }, - { name: 'backgroundSize', generator: backgroundSize }, + { name: 'backgroundSizes', generator: backgroundSizes }, { name: 'borderColors', generator: borderColors }, { name: 'borderRadius', generator: borderRadius }, { name: 'borderStyle', generator: borderStyle }, From 36ab6eafdf593678b16b0bea7fbbf7715e40650e Mon Sep 17 00:00:00 2001 From: Ryan Scherler Date: Tue, 6 Feb 2018 15:19:05 -0800 Subject: [PATCH 09/45] Add `move` --- src/generators/cursor.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/generators/cursor.js b/src/generators/cursor.js index cd0e8f3856e1..8e826102e053 100644 --- a/src/generators/cursor.js +++ b/src/generators/cursor.js @@ -5,6 +5,7 @@ export default function() { 'cursor-auto': { cursor: 'auto' }, 'cursor-default': { cursor: 'default' }, 'cursor-pointer': { cursor: 'pointer' }, + 'cursor-move': { cursor: 'move' }, 'cursor-not-allowed': { cursor: 'not-allowed' }, }) } From b8ca236400d5ebbcb6bf664fe6012ca2b3c51562 Mon Sep 17 00:00:00 2001 From: fedeTibaldo Date: Fri, 9 Feb 2018 16:51:58 +0100 Subject: [PATCH 10/45] Add support for active state variant --- defaultConfig.stub.js | 3 ++- src/lib/substituteVariantsAtRules.js | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/defaultConfig.stub.js b/defaultConfig.stub.js index d2e5ab7f8277..c95709754d44 100644 --- a/defaultConfig.stub.js +++ b/defaultConfig.stub.js @@ -804,7 +804,8 @@ module.exports = { | Here is where you control which modules are generated and what variants are | generated for each of those modules. | - | Currently supported variants: 'responsive', 'hover', 'focus', 'group-hover' + | Currently supported variants: 'responsive', 'hover', 'active', focus', + | 'group-hover' | | To disable a module completely, use `false` instead of an array. | diff --git a/src/lib/substituteVariantsAtRules.js b/src/lib/substituteVariantsAtRules.js index 652c133fb902..79fc634cc02e 100644 --- a/src/lib/substituteVariantsAtRules.js +++ b/src/lib/substituteVariantsAtRules.js @@ -12,6 +12,15 @@ const variantGenerators = { container.before(cloned.nodes) }, + active: (container, config) => { + const cloned = container.clone() + + cloned.walkRules(rule => { + rule.selector = `${buildClassVariant(rule.selector, 'active', config.options.separator)}:active` + }) + + container.before(cloned.nodes) + }, focus: (container, config) => { const cloned = container.clone() @@ -48,7 +57,7 @@ export default function(config) { atRule.before(atRule.clone().nodes) - _.forEach(['focus', 'hover', 'group-hover'], variant => { + _.forEach(['hover', 'active', 'focus', 'group-hover'], variant => { if (variants.includes(variant)) { variantGenerators[variant](atRule, unwrappedConfig) } From e112b98d4e3c0f3c91f2fcbca8ad42d3bf1ac877 Mon Sep 17 00:00:00 2001 From: fedeTibaldo Date: Fri, 9 Feb 2018 18:58:37 +0100 Subject: [PATCH 11/45] Update docs with active state variant --- docs/source/_assets/less/main.less | 12 +++++++ .../source/_partials/feature-badges.blade.php | 16 +++++++++ .../variants-and-disabling.blade.php | 5 +-- .../docs/background-attachment.blade.md | 1 + docs/source/docs/background-color.blade.md | 1 + docs/source/docs/background-position.blade.md | 1 + docs/source/docs/background-repeat.blade.md | 1 + docs/source/docs/background-size.blade.md | 1 + docs/source/docs/border-color.blade.md | 1 + docs/source/docs/border-radius.blade.md | 1 + docs/source/docs/border-style.blade.md | 1 + docs/source/docs/border-width.blade.md | 1 + docs/source/docs/configuration.blade.md | 1 + docs/source/docs/cursor.blade.md | 1 + docs/source/docs/display.blade.md | 1 + .../docs/flexbox-align-content.blade.md | 1 + docs/source/docs/flexbox-align-items.blade.md | 1 + docs/source/docs/flexbox-align-self.blade.md | 1 + docs/source/docs/flexbox-direction.blade.md | 1 + docs/source/docs/flexbox-display.blade.md | 1 + .../docs/flexbox-flex-grow-shrink.blade.md | 1 + .../docs/flexbox-justify-content.blade.md | 1 + docs/source/docs/flexbox-wrapping.blade.md | 1 + docs/source/docs/floats.blade.md | 1 + docs/source/docs/font-weight.blade.md | 1 + docs/source/docs/fonts.blade.md | 1 + docs/source/docs/forms.blade.md | 1 + docs/source/docs/height.blade.md | 1 + docs/source/docs/letter-spacing.blade.md | 1 + docs/source/docs/line-height.blade.md | 1 + docs/source/docs/lists.blade.md | 1 + docs/source/docs/max-height.blade.md | 1 + docs/source/docs/max-width.blade.md | 1 + docs/source/docs/min-height.blade.md | 1 + docs/source/docs/min-width.blade.md | 1 + docs/source/docs/opacity.blade.md | 1 + docs/source/docs/overflow.blade.md | 1 + docs/source/docs/pointer-events.blade.md | 1 + docs/source/docs/positioning.blade.md | 1 + docs/source/docs/resize.blade.md | 1 + docs/source/docs/shadows.blade.md | 1 + docs/source/docs/spacing.blade.md | 1 + docs/source/docs/state-variants.blade.md | 33 +++++++++++++++++-- docs/source/docs/text-alignment.blade.md | 1 + docs/source/docs/text-color.blade.md | 1 + docs/source/docs/text-sizing.blade.md | 1 + docs/source/docs/text-style.blade.md | 1 + docs/source/docs/user-select.blade.md | 1 + docs/source/docs/vertical-alignment.blade.md | 1 + docs/source/docs/visibility.blade.md | 1 + .../docs/whitespace-and-wrapping.blade.md | 1 + docs/source/docs/width.blade.md | 1 + docs/source/docs/z-index.blade.md | 1 + 53 files changed, 111 insertions(+), 4 deletions(-) diff --git a/docs/source/_assets/less/main.less b/docs/source/_assets/less/main.less index 8de9f296bdc1..63b46dad4dd6 100644 --- a/docs/source/_assets/less/main.less +++ b/docs/source/_assets/less/main.less @@ -24,6 +24,18 @@ ul { @tailwind utilities; +.active\:bg-blue:active { + @apply .bg-blue; +} + +.active\:text-white:active { + @apply .text-white; +} + +.active\:border-transparent:active { + @apply .border-transparent; +} + .focus\:bg-grey-dark:focus { @apply .bg-grey-dark; } diff --git a/docs/source/_partials/feature-badges.blade.php b/docs/source/_partials/feature-badges.blade.php index 3e16ab376a4d..77e7b9bcdf22 100644 --- a/docs/source/_partials/feature-badges.blade.php +++ b/docs/source/_partials/feature-badges.blade.php @@ -48,6 +48,22 @@ @endif + @if ($active) + + + + + Active + + @else + + + + + Active + + @endif + @if ($focus) diff --git a/docs/source/_partials/variants-and-disabling.blade.php b/docs/source/_partials/variants-and-disabling.blade.php index daaa785b08de..1ca6ff3e5ab6 100644 --- a/docs/source/_partials/variants-and-disabling.blade.php +++ b/docs/source/_partials/variants-and-disabling.blade.php @@ -9,6 +9,7 @@ $extraVariants = collect([ 'responsive', 'hover', + 'active', 'focus', 'group-hover', ])->diff($variants) @@ -16,7 +17,7 @@ ->implode(' and '); @endphp -

Responsive, Hover, and Focus Variants

+

Responsive, Hover, Active and Focus Variants

By default, {{ $whichVariants }} variants are generated for {{ $utility['name'] }} utilities.

@@ -27,7 +28,7 @@ @component('_partials.customized-config', ['key' => 'modules']) // ... - {{ $utility['property'] }}: [{{$currentVariants}}], -+ {{ $utility['property'] }}: ['responsive', 'hover', 'focus'], ++ {{ $utility['property'] }}: ['responsive', 'hover', 'active', 'focus'], @endcomponent @isset($extraMessage) diff --git a/docs/source/docs/background-attachment.blade.md b/docs/source/docs/background-attachment.blade.md index 60708655f437..192ce64a6456 100644 --- a/docs/source/docs/background-attachment.blade.md +++ b/docs/source/docs/background-attachment.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/background-color.blade.md b/docs/source/docs/background-color.blade.md index 2ea73bdceef7..5a302d889024 100644 --- a/docs/source/docs/background-color.blade.md +++ b/docs/source/docs/background-color.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: true + active: false focus: false --- diff --git a/docs/source/docs/background-position.blade.md b/docs/source/docs/background-position.blade.md index 5b171bc6d91e..6fa7c5e586ae 100644 --- a/docs/source/docs/background-position.blade.md +++ b/docs/source/docs/background-position.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/background-repeat.blade.md b/docs/source/docs/background-repeat.blade.md index ac7994e2a8ad..a7a7bc05530c 100644 --- a/docs/source/docs/background-repeat.blade.md +++ b/docs/source/docs/background-repeat.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/background-size.blade.md b/docs/source/docs/background-size.blade.md index 3f81cf40ad72..a6402fc09a67 100644 --- a/docs/source/docs/background-size.blade.md +++ b/docs/source/docs/background-size.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/border-color.blade.md b/docs/source/docs/border-color.blade.md index 8bc4f16e1f88..c239cc2ef968 100644 --- a/docs/source/docs/border-color.blade.md +++ b/docs/source/docs/border-color.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: true + active: false focus: false --- diff --git a/docs/source/docs/border-radius.blade.md b/docs/source/docs/border-radius.blade.md index 4cd4fc28e4fb..4420809a9ed8 100644 --- a/docs/source/docs/border-radius.blade.md +++ b/docs/source/docs/border-radius.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/border-style.blade.md b/docs/source/docs/border-style.blade.md index a37b2c5ef610..edabf0de60d6 100644 --- a/docs/source/docs/border-style.blade.md +++ b/docs/source/docs/border-style.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/border-width.blade.md b/docs/source/docs/border-width.blade.md index d80d257fc076..898820d34fde 100644 --- a/docs/source/docs/border-width.blade.md +++ b/docs/source/docs/border-width.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/configuration.blade.md b/docs/source/docs/configuration.blade.md index 9e92a8522e79..4f24db3d87f8 100644 --- a/docs/source/docs/configuration.blade.md +++ b/docs/source/docs/configuration.blade.md @@ -162,6 +162,7 @@ The available state variants are: - `responsive`, for generating breakpoint-specific versions of those utilities - `hover`, for generating versions of those utilities that only take effect on hover +- `active`, for generating versions of those utilities that only take effect on active - `focus`, for generating versions of those utilities that only take effect on focus - `group-hover`, for generating versions of those utilities that only take effect when a marked parent element is hovered diff --git a/docs/source/docs/cursor.blade.md b/docs/source/docs/cursor.blade.md index 44c0b9a58413..07338f296acf 100644 --- a/docs/source/docs/cursor.blade.md +++ b/docs/source/docs/cursor.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/display.blade.md b/docs/source/docs/display.blade.md index 9364e93581f6..5b2d6cd156ca 100644 --- a/docs/source/docs/display.blade.md +++ b/docs/source/docs/display.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-align-content.blade.md b/docs/source/docs/flexbox-align-content.blade.md index 911c9a3429c0..875b94161334 100644 --- a/docs/source/docs/flexbox-align-content.blade.md +++ b/docs/source/docs/flexbox-align-content.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-align-items.blade.md b/docs/source/docs/flexbox-align-items.blade.md index bbe7c10983cc..c638d8216cc9 100644 --- a/docs/source/docs/flexbox-align-items.blade.md +++ b/docs/source/docs/flexbox-align-items.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-align-self.blade.md b/docs/source/docs/flexbox-align-self.blade.md index 6d62577a60cd..817c76e12841 100644 --- a/docs/source/docs/flexbox-align-self.blade.md +++ b/docs/source/docs/flexbox-align-self.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-direction.blade.md b/docs/source/docs/flexbox-direction.blade.md index 0388046e1f52..51d0996229f2 100644 --- a/docs/source/docs/flexbox-direction.blade.md +++ b/docs/source/docs/flexbox-direction.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-display.blade.md b/docs/source/docs/flexbox-display.blade.md index 7d008ffc374d..5f917975c3bb 100644 --- a/docs/source/docs/flexbox-display.blade.md +++ b/docs/source/docs/flexbox-display.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-flex-grow-shrink.blade.md b/docs/source/docs/flexbox-flex-grow-shrink.blade.md index 3b1118c8437e..4724ad6aeab2 100644 --- a/docs/source/docs/flexbox-flex-grow-shrink.blade.md +++ b/docs/source/docs/flexbox-flex-grow-shrink.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-justify-content.blade.md b/docs/source/docs/flexbox-justify-content.blade.md index c8c5cec15e5b..db6c59f1f15e 100644 --- a/docs/source/docs/flexbox-justify-content.blade.md +++ b/docs/source/docs/flexbox-justify-content.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/flexbox-wrapping.blade.md b/docs/source/docs/flexbox-wrapping.blade.md index 596e66b7a1f3..5526d730aaad 100644 --- a/docs/source/docs/flexbox-wrapping.blade.md +++ b/docs/source/docs/flexbox-wrapping.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/floats.blade.md b/docs/source/docs/floats.blade.md index 6ca9a94bb5d7..faa545bce652 100644 --- a/docs/source/docs/floats.blade.md +++ b/docs/source/docs/floats.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/font-weight.blade.md b/docs/source/docs/font-weight.blade.md index ed821deba91c..7264e74286e7 100644 --- a/docs/source/docs/font-weight.blade.md +++ b/docs/source/docs/font-weight.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: true + active: false focus: false --- diff --git a/docs/source/docs/fonts.blade.md b/docs/source/docs/fonts.blade.md index 5964aa51a690..c2c0c613615d 100644 --- a/docs/source/docs/fonts.blade.md +++ b/docs/source/docs/fonts.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/forms.blade.md b/docs/source/docs/forms.blade.md index 3aa0b4d1595c..4bd6a051de46 100644 --- a/docs/source/docs/forms.blade.md +++ b/docs/source/docs/forms.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/height.blade.md b/docs/source/docs/height.blade.md index 87534acfb250..1bb6060f81cd 100644 --- a/docs/source/docs/height.blade.md +++ b/docs/source/docs/height.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/letter-spacing.blade.md b/docs/source/docs/letter-spacing.blade.md index 218b6a0970ad..2efb3064a272 100644 --- a/docs/source/docs/letter-spacing.blade.md +++ b/docs/source/docs/letter-spacing.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/line-height.blade.md b/docs/source/docs/line-height.blade.md index fd2fc8d37309..369900db215a 100644 --- a/docs/source/docs/line-height.blade.md +++ b/docs/source/docs/line-height.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/lists.blade.md b/docs/source/docs/lists.blade.md index a79b17e91c02..b04da70311f9 100644 --- a/docs/source/docs/lists.blade.md +++ b/docs/source/docs/lists.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/max-height.blade.md b/docs/source/docs/max-height.blade.md index 6d1325dd2f2d..1819b7123af5 100644 --- a/docs/source/docs/max-height.blade.md +++ b/docs/source/docs/max-height.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/max-width.blade.md b/docs/source/docs/max-width.blade.md index dc1903486e5a..bca2f8c58f78 100644 --- a/docs/source/docs/max-width.blade.md +++ b/docs/source/docs/max-width.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/min-height.blade.md b/docs/source/docs/min-height.blade.md index 6cfbbc4cf2fd..54cbb182cdaa 100644 --- a/docs/source/docs/min-height.blade.md +++ b/docs/source/docs/min-height.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/min-width.blade.md b/docs/source/docs/min-width.blade.md index 3eb1562e74d1..5ef2f7592ed0 100644 --- a/docs/source/docs/min-width.blade.md +++ b/docs/source/docs/min-width.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/opacity.blade.md b/docs/source/docs/opacity.blade.md index fdfe1a94b29a..00ec0a6e0110 100644 --- a/docs/source/docs/opacity.blade.md +++ b/docs/source/docs/opacity.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/overflow.blade.md b/docs/source/docs/overflow.blade.md index 7487e721c731..32e7faf64244 100644 --- a/docs/source/docs/overflow.blade.md +++ b/docs/source/docs/overflow.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/pointer-events.blade.md b/docs/source/docs/pointer-events.blade.md index a8ae844ff377..fdc2e51b87ad 100644 --- a/docs/source/docs/pointer-events.blade.md +++ b/docs/source/docs/pointer-events.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/positioning.blade.md b/docs/source/docs/positioning.blade.md index b18a3fac7559..484825cf334d 100644 --- a/docs/source/docs/positioning.blade.md +++ b/docs/source/docs/positioning.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/resize.blade.md b/docs/source/docs/resize.blade.md index a4c1f89aeddd..581dfc7c505c 100644 --- a/docs/source/docs/resize.blade.md +++ b/docs/source/docs/resize.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/shadows.blade.md b/docs/source/docs/shadows.blade.md index 5dc2a2ad4da7..cee2e3ecd4a1 100644 --- a/docs/source/docs/shadows.blade.md +++ b/docs/source/docs/shadows.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/spacing.blade.md b/docs/source/docs/spacing.blade.md index ebc99e9bcb82..3aac00a2622a 100644 --- a/docs/source/docs/spacing.blade.md +++ b/docs/source/docs/spacing.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/state-variants.blade.md b/docs/source/docs/state-variants.blade.md index 582b354fe256..ee568d81c9f1 100644 --- a/docs/source/docs/state-variants.blade.md +++ b/docs/source/docs/state-variants.blade.md @@ -1,10 +1,10 @@ --- extends: _layouts.documentation title: "State Variants" -description: "Using utilities to style elements on hover, focus, and more." +description: "Using utilities to style elements on hover, active, focus, and more." --- -Similar to our [responsive prefixes](/docs/responsive-design), Tailwind makes it easy to style elements on hover, focus, and more using *state* prefixes. +Similar to our [responsive prefixes](/docs/responsive-design), Tailwind makes it easy to style elements on hover, active, focus, and more using *state* prefixes. ## Hover @@ -35,6 +35,35 @@ Add the `hover:` prefix to only apply a utility on hover. +## Active + +Add the `active:` prefix to only apply a utility on active. + +@component('_partials.code-sample', ['lang' => 'html', 'class' => 'text-center']) + + + +@slot('code') + +@endslot +@endcomponent + +
+
+
+ +
+
+

By default, active variants are not generated for any utilities.

+

You can customize this in the modules section of your configuration file.

+
+
+
+ ## Focus diff --git a/docs/source/docs/text-alignment.blade.md b/docs/source/docs/text-alignment.blade.md index afd8ec3e14ce..932a3b63438b 100644 --- a/docs/source/docs/text-alignment.blade.md +++ b/docs/source/docs/text-alignment.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/text-color.blade.md b/docs/source/docs/text-color.blade.md index 0de8f055ad87..58d71f1ae5b1 100644 --- a/docs/source/docs/text-color.blade.md +++ b/docs/source/docs/text-color.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: true + active: false focus: false --- diff --git a/docs/source/docs/text-sizing.blade.md b/docs/source/docs/text-sizing.blade.md index 2ecc40e1f713..ee752b6e00fe 100644 --- a/docs/source/docs/text-sizing.blade.md +++ b/docs/source/docs/text-sizing.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/text-style.blade.md b/docs/source/docs/text-style.blade.md index 48ee7d50336a..1655874d26cd 100644 --- a/docs/source/docs/text-style.blade.md +++ b/docs/source/docs/text-style.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: true + active: false focus: false --- diff --git a/docs/source/docs/user-select.blade.md b/docs/source/docs/user-select.blade.md index ef76d83b9173..cb242c89c7c3 100644 --- a/docs/source/docs/user-select.blade.md +++ b/docs/source/docs/user-select.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/vertical-alignment.blade.md b/docs/source/docs/vertical-alignment.blade.md index be85ec7c79fe..70b16c6f225b 100644 --- a/docs/source/docs/vertical-alignment.blade.md +++ b/docs/source/docs/vertical-alignment.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/visibility.blade.md b/docs/source/docs/visibility.blade.md index 940bbc54b726..310a3fa6bc0a 100644 --- a/docs/source/docs/visibility.blade.md +++ b/docs/source/docs/visibility.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: false hover: false + active: false focus: false --- diff --git a/docs/source/docs/whitespace-and-wrapping.blade.md b/docs/source/docs/whitespace-and-wrapping.blade.md index 409d23ed0f30..3a9831e36ed5 100644 --- a/docs/source/docs/whitespace-and-wrapping.blade.md +++ b/docs/source/docs/whitespace-and-wrapping.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/width.blade.md b/docs/source/docs/width.blade.md index d5f690976a09..52791c9dbc9d 100644 --- a/docs/source/docs/width.blade.md +++ b/docs/source/docs/width.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- diff --git a/docs/source/docs/z-index.blade.md b/docs/source/docs/z-index.blade.md index 3e4a7bee7b8b..facb4845ca2b 100644 --- a/docs/source/docs/z-index.blade.md +++ b/docs/source/docs/z-index.blade.md @@ -6,6 +6,7 @@ features: responsive: true customizable: true hover: false + active: false focus: false --- From 1f57fbfbaf1074b1adb453475d91509dee4e82d7 Mon Sep 17 00:00:00 2001 From: fedeTibaldo Date: Fri, 9 Feb 2018 20:20:24 +0100 Subject: [PATCH 12/45] Add tests for active state variant --- __tests__/variantsAtRule.test.js | 35 +++++++++++++++++++++++----- src/lib/substituteVariantsAtRules.js | 6 ++++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/__tests__/variantsAtRule.test.js b/__tests__/variantsAtRule.test.js index 2a30529a64ed..b4d1d9d09ba8 100644 --- a/__tests__/variantsAtRule.test.js +++ b/__tests__/variantsAtRule.test.js @@ -27,6 +27,27 @@ test('it can generate hover variants', () => { }) }) +test('it can generate active variants', () => { + const input = ` + @variants active { + .banana { color: yellow; } + .chocolate { color: brown; } + } + ` + + const output = ` + .banana { color: yellow; } + .chocolate { color: brown; } + .active\\:banana:active { color: yellow; } + .active\\:chocolate:active { color: brown; } + ` + + return run(input).then(result => { + expect(result.css).toMatchCss(output) + expect(result.warnings().length).toBe(0) + }) +}) + test('it can generate focus variants', () => { const input = ` @variants focus { @@ -69,9 +90,9 @@ test('it can generate group-hover variants', () => { }) }) -test('it can generate hover and focus variants', () => { +test('it can generate hover, active and focus variants', () => { const input = ` - @variants hover, focus { + @variants hover, active, focus { .banana { color: yellow; } .chocolate { color: brown; } } @@ -80,10 +101,12 @@ test('it can generate hover and focus variants', () => { const output = ` .banana { color: yellow; } .chocolate { color: brown; } - .focus\\:banana:focus { color: yellow; } - .focus\\:chocolate:focus { color: brown; } .hover\\:banana:hover { color: yellow; } .hover\\:chocolate:hover { color: brown; } + .active\\:banana:active { color: yellow; } + .active\\:chocolate:active { color: brown; } + .focus\\:banana:focus { color: yellow; } + .focus\\:chocolate:focus { color: brown; } ` return run(input).then(result => { @@ -104,10 +127,10 @@ test('it wraps the output in a responsive at-rule if responsive is included as a @responsive { .banana { color: yellow; } .chocolate { color: brown; } - .focus\\:banana:focus { color: yellow; } - .focus\\:chocolate:focus { color: brown; } .hover\\:banana:hover { color: yellow; } .hover\\:chocolate:hover { color: brown; } + .focus\\:banana:focus { color: yellow; } + .focus\\:chocolate:focus { color: brown; } } ` diff --git a/src/lib/substituteVariantsAtRules.js b/src/lib/substituteVariantsAtRules.js index 79fc634cc02e..9df30520bc16 100644 --- a/src/lib/substituteVariantsAtRules.js +++ b/src/lib/substituteVariantsAtRules.js @@ -16,7 +16,11 @@ const variantGenerators = { const cloned = container.clone() cloned.walkRules(rule => { - rule.selector = `${buildClassVariant(rule.selector, 'active', config.options.separator)}:active` + rule.selector = `${buildClassVariant( + rule.selector, + 'active', + config.options.separator + )}:active` }) container.before(cloned.nodes) From 2e4e4a79e229866586de033276161a121887ab99 Mon Sep 17 00:00:00 2001 From: fedeTibaldo Date: Fri, 9 Feb 2018 20:57:34 +0100 Subject: [PATCH 13/45] Revert output order from hover-active-focus to focus-active-hover --- __tests__/variantsAtRule.test.js | 12 ++++++------ src/lib/substituteVariantsAtRules.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/__tests__/variantsAtRule.test.js b/__tests__/variantsAtRule.test.js index b4d1d9d09ba8..58bbaaf0294f 100644 --- a/__tests__/variantsAtRule.test.js +++ b/__tests__/variantsAtRule.test.js @@ -101,12 +101,12 @@ test('it can generate hover, active and focus variants', () => { const output = ` .banana { color: yellow; } .chocolate { color: brown; } - .hover\\:banana:hover { color: yellow; } - .hover\\:chocolate:hover { color: brown; } - .active\\:banana:active { color: yellow; } - .active\\:chocolate:active { color: brown; } .focus\\:banana:focus { color: yellow; } .focus\\:chocolate:focus { color: brown; } + .active\\:banana:active { color: yellow; } + .active\\:chocolate:active { color: brown; } + .hover\\:banana:hover { color: yellow; } + .hover\\:chocolate:hover { color: brown; } ` return run(input).then(result => { @@ -127,10 +127,10 @@ test('it wraps the output in a responsive at-rule if responsive is included as a @responsive { .banana { color: yellow; } .chocolate { color: brown; } - .hover\\:banana:hover { color: yellow; } - .hover\\:chocolate:hover { color: brown; } .focus\\:banana:focus { color: yellow; } .focus\\:chocolate:focus { color: brown; } + .hover\\:banana:hover { color: yellow; } + .hover\\:chocolate:hover { color: brown; } } ` diff --git a/src/lib/substituteVariantsAtRules.js b/src/lib/substituteVariantsAtRules.js index 9df30520bc16..1487471f1acf 100644 --- a/src/lib/substituteVariantsAtRules.js +++ b/src/lib/substituteVariantsAtRules.js @@ -61,7 +61,7 @@ export default function(config) { atRule.before(atRule.clone().nodes) - _.forEach(['hover', 'active', 'focus', 'group-hover'], variant => { + _.forEach(['focus', 'active', 'hover', 'group-hover'], variant => { if (variants.includes(variant)) { variantGenerators[variant](atRule, unwrappedConfig) } From eec03465f4a94438c669ff8d132c9840649f3162 Mon Sep 17 00:00:00 2001 From: fedeTibaldo Date: Fri, 16 Feb 2018 15:08:38 +0100 Subject: [PATCH 14/45] Avoid long lists of features in the documentation --- docs/source/_partials/variants-and-disabling.blade.php | 4 ++-- docs/source/docs/state-variants.blade.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/_partials/variants-and-disabling.blade.php b/docs/source/_partials/variants-and-disabling.blade.php index 1ca6ff3e5ab6..a324c6c5f1f7 100644 --- a/docs/source/_partials/variants-and-disabling.blade.php +++ b/docs/source/_partials/variants-and-disabling.blade.php @@ -9,8 +9,8 @@ $extraVariants = collect([ 'responsive', 'hover', - 'active', 'focus', + 'active', 'group-hover', ])->diff($variants) ->take(3 - count($variants)) @@ -28,7 +28,7 @@ @component('_partials.customized-config', ['key' => 'modules']) // ... - {{ $utility['property'] }}: [{{$currentVariants}}], -+ {{ $utility['property'] }}: ['responsive', 'hover', 'active', 'focus'], ++ {{ $utility['property'] }}: ['responsive', 'hover', 'focus'], @endcomponent @isset($extraMessage) diff --git a/docs/source/docs/state-variants.blade.md b/docs/source/docs/state-variants.blade.md index ee568d81c9f1..73ad910055be 100644 --- a/docs/source/docs/state-variants.blade.md +++ b/docs/source/docs/state-variants.blade.md @@ -1,10 +1,10 @@ --- extends: _layouts.documentation title: "State Variants" -description: "Using utilities to style elements on hover, active, focus, and more." +description: "Using utilities to style elements on hover, focus, and more." --- -Similar to our [responsive prefixes](/docs/responsive-design), Tailwind makes it easy to style elements on hover, active, focus, and more using *state* prefixes. +Similar to our [responsive prefixes](/docs/responsive-design), Tailwind makes it easy to style elements on hover, focus, and more using *state* prefixes. ## Hover From 62cf25f718b7ef8bdec543a0b4e71c59df944c30 Mon Sep 17 00:00:00 2001 From: fedeTibaldo Date: Fri, 16 Feb 2018 18:09:20 +0100 Subject: [PATCH 15/45] Change priority order to (from the highest): focus-active-hover --- __tests__/variantsAtRule.test.js | 12 ++++++------ src/lib/substituteVariantsAtRules.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/__tests__/variantsAtRule.test.js b/__tests__/variantsAtRule.test.js index 58bbaaf0294f..b4d1d9d09ba8 100644 --- a/__tests__/variantsAtRule.test.js +++ b/__tests__/variantsAtRule.test.js @@ -101,12 +101,12 @@ test('it can generate hover, active and focus variants', () => { const output = ` .banana { color: yellow; } .chocolate { color: brown; } - .focus\\:banana:focus { color: yellow; } - .focus\\:chocolate:focus { color: brown; } - .active\\:banana:active { color: yellow; } - .active\\:chocolate:active { color: brown; } .hover\\:banana:hover { color: yellow; } .hover\\:chocolate:hover { color: brown; } + .active\\:banana:active { color: yellow; } + .active\\:chocolate:active { color: brown; } + .focus\\:banana:focus { color: yellow; } + .focus\\:chocolate:focus { color: brown; } ` return run(input).then(result => { @@ -127,10 +127,10 @@ test('it wraps the output in a responsive at-rule if responsive is included as a @responsive { .banana { color: yellow; } .chocolate { color: brown; } - .focus\\:banana:focus { color: yellow; } - .focus\\:chocolate:focus { color: brown; } .hover\\:banana:hover { color: yellow; } .hover\\:chocolate:hover { color: brown; } + .focus\\:banana:focus { color: yellow; } + .focus\\:chocolate:focus { color: brown; } } ` diff --git a/src/lib/substituteVariantsAtRules.js b/src/lib/substituteVariantsAtRules.js index 1487471f1acf..9df30520bc16 100644 --- a/src/lib/substituteVariantsAtRules.js +++ b/src/lib/substituteVariantsAtRules.js @@ -61,7 +61,7 @@ export default function(config) { atRule.before(atRule.clone().nodes) - _.forEach(['focus', 'active', 'hover', 'group-hover'], variant => { + _.forEach(['hover', 'active', 'focus', 'group-hover'], variant => { if (variants.includes(variant)) { variantGenerators[variant](atRule, unwrappedConfig) } From b7cb21360d9b4d788916cd3a4c2257a129386c0b Mon Sep 17 00:00:00 2001 From: fedeTibaldo Date: Mon, 19 Feb 2018 17:23:22 +0100 Subject: [PATCH 16/45] Update priority order to (from the highest): active-hover-focus --- __tests__/variantsAtRule.test.js | 8 ++++---- src/lib/substituteVariantsAtRules.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/__tests__/variantsAtRule.test.js b/__tests__/variantsAtRule.test.js index b4d1d9d09ba8..79c0d9442de7 100644 --- a/__tests__/variantsAtRule.test.js +++ b/__tests__/variantsAtRule.test.js @@ -101,12 +101,12 @@ test('it can generate hover, active and focus variants', () => { const output = ` .banana { color: yellow; } .chocolate { color: brown; } + .focus\\:banana:focus { color: yellow; } + .focus\\:chocolate:focus { color: brown; } .hover\\:banana:hover { color: yellow; } .hover\\:chocolate:hover { color: brown; } .active\\:banana:active { color: yellow; } .active\\:chocolate:active { color: brown; } - .focus\\:banana:focus { color: yellow; } - .focus\\:chocolate:focus { color: brown; } ` return run(input).then(result => { @@ -127,10 +127,10 @@ test('it wraps the output in a responsive at-rule if responsive is included as a @responsive { .banana { color: yellow; } .chocolate { color: brown; } - .hover\\:banana:hover { color: yellow; } - .hover\\:chocolate:hover { color: brown; } .focus\\:banana:focus { color: yellow; } .focus\\:chocolate:focus { color: brown; } + .hover\\:banana:hover { color: yellow; } + .hover\\:chocolate:hover { color: brown; } } ` diff --git a/src/lib/substituteVariantsAtRules.js b/src/lib/substituteVariantsAtRules.js index 9df30520bc16..ac4074973cae 100644 --- a/src/lib/substituteVariantsAtRules.js +++ b/src/lib/substituteVariantsAtRules.js @@ -61,7 +61,7 @@ export default function(config) { atRule.before(atRule.clone().nodes) - _.forEach(['hover', 'active', 'focus', 'group-hover'], variant => { + _.forEach(['focus', 'hover', 'active', 'group-hover'], variant => { if (variants.includes(variant)) { variantGenerators[variant](atRule, unwrappedConfig) } From 64507483517aa5a420428670eb79cc64b82d2851 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 5 Mar 2018 16:32:22 -0500 Subject: [PATCH 17/45] WIP --- __tests__/parseObjectStyles.test.js | 136 ++++++++++++++++++++++++++++ package.json | 1 + src/util/parseObjectStyles.js | 69 ++++++++++++++ yarn.lock | 4 + 4 files changed, 210 insertions(+) create mode 100644 __tests__/parseObjectStyles.test.js create mode 100644 src/util/parseObjectStyles.js diff --git a/__tests__/parseObjectStyles.test.js b/__tests__/parseObjectStyles.test.js new file mode 100644 index 000000000000..5555d9dfc4b1 --- /dev/null +++ b/__tests__/parseObjectStyles.test.js @@ -0,0 +1,136 @@ +import _ from 'lodash' +import parseObjectStyles from '../src/util/parseObjectStyles' +import cxs from 'cxs' +import postcss from 'postcss' + +function css(nodes) { + return postcss.root({ nodes }).toString() +} + +test('it parses simple single class definitions', () => { + const result = parseObjectStyles({ + '.foobar': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + }, + }) + + expect(result).toMatchCss(` + .foobar { + background-color: red; + color: white; + padding: 1rem + } + `) +}) + +test('it parses multiple class definitions', () => { + const result = parseObjectStyles({ + '.foo': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + }, + '.bar': { + width: '200px', + height: '100px', + }, + }) + + expect(result).toMatchCss(` + .foo { + background-color: red; + color: white; + padding: 1rem + } + .bar { + width: 200px; + height: 100px + } + `) +}) + +test('it parses nested pseudo-selectors', () => { + const result = parseObjectStyles({ + '.foo': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + ':hover': { + backgroundColor: 'orange', + }, + ':focus': { + backgroundColor: 'blue', + }, + }, + }) + + expect(result).toMatchCss(` + .foo { + background-color: red; + color: white; + padding: 1rem + } + .foo:hover { + background-color: orange + } + .foo:focus { + background-color: blue + } + `) +}) + +test('it parses nested media queries', () => { + const result = parseObjectStyles({ + '.foo': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + '@media (min-width: 200px)': { + backgroundColor: 'orange', + }, + }, + }) + + expect(result).toMatchCss(` + .foo { + background-color: red; + color: white; + padding: 1rem + } + @media (min-width: 200px) { + .foo { + background-color: orange + } + } + `) +}) + +// test('it parses pseudo-selectors in nested media queries', () => { +// const result = parseObjectStyles({ +// '.foo': { +// backgroundColor: 'red', +// color: 'white', +// padding: '1rem', +// ':hover': { +// '@media (min-width: 200px)': { +// backgroundColor: 'orange', +// } +// }, +// }, +// }) + +// expect(result).toMatchCss(` +// .foo { +// background-color: red; +// color: white; +// padding: 1rem +// } +// @media (min-width: 200px) { +// .foo:hover { +// background-color: orange +// } +// } +// `) +// }) diff --git a/package.json b/package.json index 843bdd669a10..61826c9782c6 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ }, "dependencies": { "commander": "^2.11.0", + "cxs": "^6.2.0", "fs-extra": "^4.0.2", "lodash": "^4.17.4", "nodemon": "^1.11.0", diff --git a/src/util/parseObjectStyles.js b/src/util/parseObjectStyles.js new file mode 100644 index 000000000000..9fd9a3755f2f --- /dev/null +++ b/src/util/parseObjectStyles.js @@ -0,0 +1,69 @@ +import _ from 'lodash' +import postcss from 'postcss' + +const hyph = s => s.replace(/[A-Z]|^ms/g, '-$&').toLowerCase() +const mx = (rule, media) => media ? `${media}{${rule}}` : rule +const noAnd = s => s.replace(/&/g, '') +const createDeclaration = (key, value) => hyph(key) + ':' + value +const createRule = ({ + className, + child, + media, + declarations +}) => mx(`${className + child}{${declarations.join(';')}}`, media) + +const parseRules = (obj, child = '', media) => { + const rules = [] + const declarations = [] + + for (let key in obj) { + const value = obj[key] + + if (value === null) continue + + if (typeof value === 'object') { + const _media = /^@/.test(key) ? key : null + const _child = _media ? child : child + noAnd(key) + parseRules(value, _child, _media) + .forEach(r => rules.push(r)) + continue + } + + const dec = createDeclaration(key, value) + declarations.push(dec) + } + + rules.unshift({ + media, + child, + declarations + }) + + return rules +} + +const parse = (selector, obj) => { + const rules = parseRules(obj) + + console.log(rules) + + return rules.map(rule => { + const className = selector + const ruleset = createRule(Object.assign(rule, { className })) + return ruleset + }) +} + +function parseObjectStyles(styles) { + if (!Array.isArray(styles)) { + return parseObjectStyles([styles]) + } + + return _.flatMap(styles, (style) => { + return _.flatMap(style, (declarations, selector) => { + return parse(selector, declarations) + }) + }).join('') +} + +export default parseObjectStyles diff --git a/yarn.lock b/yarn.lock index b617e106e67d..6a1228a7369c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1212,6 +1212,10 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": dependencies: cssom "0.3.x" +cxs@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/cxs/-/cxs-6.2.0.tgz#f11ca3bdaef154b93bdadca5df70f2cb3e37ca24" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" From bc05473b37a3b9b986f429432b1415caaceab524 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 14:07:27 -0500 Subject: [PATCH 18/45] Add dependencies, fix warnings --- __tests__/applyAtRule.test.js | 2 +- __tests__/configFunction.test.js | 2 +- __tests__/customConfig.test.js | 11 +- __tests__/sanity.test.js | 15 +- __tests__/variantsAtRule.test.js | 2 +- package.json | 6 +- src/cli.js | 2 +- yarn.lock | 1702 +++++++++++++++++++----------- 8 files changed, 1134 insertions(+), 608 deletions(-) diff --git a/__tests__/applyAtRule.test.js b/__tests__/applyAtRule.test.js index f07e90ff3bc0..44673d3d8ce9 100644 --- a/__tests__/applyAtRule.test.js +++ b/__tests__/applyAtRule.test.js @@ -2,7 +2,7 @@ import postcss from 'postcss' import plugin from '../src/lib/substituteClassApplyAtRules' function run(input, opts = () => {}) { - return postcss([plugin(opts)]).process(input) + return postcss([plugin(opts)]).process(input, { from: undefined }) } test("it copies a class's declarations into itself", () => { diff --git a/__tests__/configFunction.test.js b/__tests__/configFunction.test.js index 32d2a5a3d906..0b58e53e079d 100644 --- a/__tests__/configFunction.test.js +++ b/__tests__/configFunction.test.js @@ -2,7 +2,7 @@ import postcss from 'postcss' import plugin from '../src/lib/evaluateTailwindFunctions' function run(input, opts = {}) { - return postcss([plugin(() => opts)]).process(input) + return postcss([plugin(() => opts)]).process(input, { from: undefined }) } test('it looks up values in the config using dot notation', () => { diff --git a/__tests__/customConfig.test.js b/__tests__/customConfig.test.js index 384b1d709e9c..24399bb43e97 100644 --- a/__tests__/customConfig.test.js +++ b/__tests__/customConfig.test.js @@ -6,12 +6,13 @@ test('it uses the values from the custom config file', () => { return postcss([tailwind(path.resolve(`${__dirname}/fixtures/customConfig.js`))]) .process( ` - @responsive { - .foo { - color: blue; + @responsive { + .foo { + color: blue; + } } - } - ` + `, + { from: undefined } ) .then(result => { const expected = ` diff --git a/__tests__/sanity.test.js b/__tests__/sanity.test.js index eb87aecd6b42..f145154960be 100644 --- a/__tests__/sanity.test.js +++ b/__tests__/sanity.test.js @@ -7,10 +7,11 @@ import tailwind from '../src/index' * Tests */ it('generates the right CSS', () => { - const input = fs.readFileSync(path.resolve(`${__dirname}/fixtures/tailwind-input.css`), 'utf8') + const inputPath = path.resolve(`${__dirname}/fixtures/tailwind-input.css`) + const input = fs.readFileSync(inputPath, 'utf8') return postcss([tailwind()]) - .process(input) + .process(input, { from: inputPath }) .then(result => { const expected = fs.readFileSync( path.resolve(`${__dirname}/fixtures/tailwind-output.css`), @@ -23,20 +24,20 @@ it('generates the right CSS', () => { it('does not add any CSS if no Tailwind features are used', () => { return postcss([tailwind()]) - .process('.foo { color: blue; }') + .process('.foo { color: blue; }', { from: undefined }) .then(result => { expect(result.css).toMatchCss('.foo { color: blue; }') }) }) it('generates the right CSS with implicit screen utilities', () => { - const input = fs.readFileSync( - path.resolve(`${__dirname}/fixtures/tailwind-input-with-explicit-screen-utilities.css`), - 'utf8' + const inputPath = path.resolve( + `${__dirname}/fixtures/tailwind-input-with-explicit-screen-utilities.css` ) + const input = fs.readFileSync(inputPath, 'utf8') return postcss([tailwind()]) - .process(input) + .process(input, { from: inputPath }) .then(result => { const expected = fs.readFileSync( path.resolve(`${__dirname}/fixtures/tailwind-output-with-explicit-screen-utilities.css`), diff --git a/__tests__/variantsAtRule.test.js b/__tests__/variantsAtRule.test.js index 2a30529a64ed..abb0973c6caa 100644 --- a/__tests__/variantsAtRule.test.js +++ b/__tests__/variantsAtRule.test.js @@ -3,7 +3,7 @@ import plugin from '../src/lib/substituteVariantsAtRules' import config from '../defaultConfig.stub.js' function run(input, opts = () => config) { - return postcss([plugin(opts)]).process(input) + return postcss([plugin(opts)]).process(input, { from: undefined }) } test('it can generate hover variants', () => { diff --git a/package.json b/package.json index 61826c9782c6..0952cccd5661 100644 --- a/package.json +++ b/package.json @@ -38,19 +38,19 @@ "eslint-config-prettier": "^2.7.0", "eslint-plugin-prettier": "^2.3.1", "jest": "^20.0.4", - "mousetrap": "^1.6.1", "prettier": "^1.7.4", "rimraf": "^2.6.1" }, "dependencies": { "commander": "^2.11.0", - "cxs": "^6.2.0", "fs-extra": "^4.0.2", "lodash": "^4.17.4", "nodemon": "^1.11.0", "perfectionist": "^2.4.0", "postcss": "^6.0.9", - "postcss-functions": "^3.0.0" + "postcss-functions": "^3.0.0", + "postcss-js": "^1.0.1", + "postcss-nested": "^3.0.0" }, "browserslist": [ "> 1%" diff --git a/src/cli.js b/src/cli.js index dc0813e23819..7ed4724778df 100755 --- a/src/cli.js +++ b/src/cli.js @@ -25,7 +25,7 @@ function buildTailwind(inputFile, config, write) { const input = fs.readFileSync(inputFile, 'utf8') return postcss([tailwind(config)]) - .process(input) + .process(input, { from: inputFile }) .then(result => { write(result.css) console.log('Finished building Tailwind!') diff --git a/yarn.lock b/yarn.lock index 6a1228a7369c..c043f9b1f2ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,12 +3,12 @@ abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" abbrev@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" acorn-globals@^3.1.0: version "3.1.0" @@ -30,24 +30,24 @@ acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" +acorn@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.1.tgz#84e05a9ea0acbe131227da50301e62464dc9c1d8" -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" -ajv@^4.7.0, ajv@^4.9.1: +ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -92,9 +92,9 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.0.0, ansi-styles@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +ansi-styles@^3.0.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" @@ -105,6 +105,13 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -112,8 +119,8 @@ append-transform@^0.4.0: default-require-extensions "^1.0.0" aproba@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" are-we-there-yet@~1.1.2: version "1.1.4" @@ -123,8 +130,8 @@ are-we-there-yet@~1.1.2: readable-stream "^2.0.6" argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: sprintf-js "~1.0.2" @@ -134,10 +141,18 @@ arr-diff@^2.0.0: dependencies: arr-flatten "^1.0.1" -arr-flatten@^1.0.1: +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -156,6 +171,10 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -172,6 +191,10 @@ assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -181,8 +204,8 @@ async@^1.4.0: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" @@ -190,22 +213,30 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + autoprefixer@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7" + version "7.2.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" dependencies: - browserslist "^2.5.1" - caniuse-lite "^1.0.30000748" + browserslist "^2.11.3" + caniuse-lite "^1.0.30000805" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.13" + postcss "^6.0.17" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" @@ -263,8 +294,8 @@ babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.7.2: source-map "^0.5.6" babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -272,7 +303,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.17.4" - source-map "^0.5.6" + source-map "^0.5.7" trim-right "^1.0.1" babel-helper-bindify-decorators@^6.24.1: @@ -422,11 +453,11 @@ babel-plugin-check-es2015-constants@^6.22.0: babel-runtime "^6.22.0" babel-plugin-istanbul@^4.0.0: - version "4.1.4" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: find-up "^2.1.0" - istanbul-lib-instrument "^1.7.2" + istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" babel-plugin-jest-hoist@^20.0.3: @@ -748,8 +779,8 @@ babel-polyfill@^6.26.0: regenerator-runtime "^0.10.5" babel-preset-env@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.0.tgz#2de1c782a780a0a5d605d199c957596da43c44e4" + version "1.6.1" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -884,6 +915,18 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -891,8 +934,8 @@ bcrypt-pbkdf@^1.0.0: tweetnacl "^0.14.3" binary-extensions@^1.0.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" block-stream@*: version "0.0.9" @@ -906,9 +949,21 @@ boom@2.x.x: dependencies: hoek "2.x.x" -boxen@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.1.tgz#0f11e7fe344edb9397977fc13ede7f64d956481d" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -916,11 +971,11 @@ boxen@^1.0.0: cli-boxes "^1.0.0" string-width "^2.0.0" term-size "^1.2.0" - widest-line "^1.0.0" + widest-line "^2.0.0" brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -933,25 +988,35 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +braces@^2.3.0, braces@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + kind-of "^6.0.2" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" dependencies: resolve "1.1.7" -browserslist@^2.1.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" - dependencies: - caniuse-lite "^1.0.30000718" - electron-to-chromium "^1.3.18" - -browserslist@^2.5.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.7.0.tgz#dc375dc70048fec3d989042a35022342902eff00" +browserslist@^2.1.2, browserslist@^2.11.3: + version "2.11.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" dependencies: - caniuse-lite "^1.0.30000757" - electron-to-chromium "^1.3.27" + caniuse-lite "^1.0.30000792" + electron-to-chromium "^1.3.30" bser@1.0.2: version "1.0.2" @@ -969,6 +1034,20 @@ builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -983,6 +1062,10 @@ callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" +camelcase-css@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-1.0.1.tgz#157c4238265f5cf94a1dffde86446552cbf3f705" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -995,13 +1078,9 @@ camelcase@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -caniuse-lite@^1.0.30000718: - version "1.0.30000726" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000726.tgz#966a753fa107a09d4131cf8b3d616723a06ccf7e" - -caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000757: - version "1.0.30000758" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000758.tgz#e261140076651049cf6891ed4bc649b5c8c26c69" +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: + version "1.0.30000813" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz#7b25e27fdfb8d133f3c932b01f77452140fcc6c9" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1018,7 +1097,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1028,23 +1107,19 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: - ansi-styles "^3.1.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + supports-color "^5.3.0" -chalk@^2.0.1, chalk@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -chokidar@^1.6.1, chokidar@^1.7.0: +chokidar@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -1059,17 +1134,44 @@ chokidar@^1.6.1, chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" +chokidar@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.0" + optionalDependencies: + fsevents "^1.0.0" + ci-info@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.1.tgz#47b44df118c48d2597b56d342e7e25791060171a" + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + clean-css@^4.1.9: - version "4.1.9" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" dependencies: source-map "0.5.x" @@ -1111,9 +1213,16 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: color-name "^1.1.1" @@ -1121,27 +1230,31 @@ color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" commander@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" comment-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/comment-regex/-/comment-regex-1.0.0.tgz#7dd70268c83648a9c4cc19bf472d52e64f63918d" +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" concat-stream@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + version "1.6.1" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" dependencies: inherits "^2.0.3" readable-stream "^2.2.2" @@ -1163,16 +1276,20 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" convert-source-map@^1.4.0, convert-source-map@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" core-js@^2.4.0, core-js@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1198,6 +1315,12 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -1212,23 +1335,19 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": dependencies: cssom "0.3.x" -cxs@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/cxs/-/cxs-6.2.0.tgz#f11ca3bdaef154b93bdadca5df70f2cb3e37ca24" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" -debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@^3.0.1: +debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -1238,9 +1357,9 @@ decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" deep-extend@~0.4.0: version "0.4.2" @@ -1256,14 +1375,26 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + is-descriptor "^1.0.2" + isobject "^3.0.1" -defined@^1.0.0, defined@~1.0.0: +defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -1293,18 +1424,21 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + diff@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: esutils "^2.0.2" - isarray "^1.0.0" -dot-prop@^4.1.0: +dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: @@ -1324,19 +1458,15 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -electron-to-chromium@^1.3.18: - version "1.3.21" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2" +electron-to-chromium@^1.3.30: + version "1.3.36" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.36.tgz#0eabf71a9ebea9013fb1cc35a390e068624f27e8" -electron-to-chromium@^1.3.27: - version "1.3.27" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" - -errno@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" +errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" dependencies: - prr "~0.0.0" + prr "~1.0.1" error-ex@^1.2.0: version "1.3.1" @@ -1344,56 +1474,34 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es6-promise@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@^1.6.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.5.6" + source-map "~0.6.1" eslint-config-postcss@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/eslint-config-postcss/-/eslint-config-postcss-2.0.2.tgz#cae1c6093ced7850894a5b85fbe1d1e232b72afb" eslint-config-prettier@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.7.0.tgz#7bbfef66ad783277836f4ea556e68b9bcc9da4d0" + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" dependencies: get-stdin "^5.0.1" eslint-plugin-prettier@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.3.1.tgz#e7a746c67e716f335274b88295a9ead9f544e44d" + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" dependencies: fast-diff "^1.1.1" jest-docblock "^21.0.0" @@ -1405,32 +1513,36 @@ eslint-scope@^3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + eslint@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" + version "4.18.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45" dependencies: - ajv "^5.2.0" + ajv "^5.3.0" babel-code-frame "^6.22.0" chalk "^2.1.0" concat-stream "^1.6.0" cross-spawn "^5.1.0" - debug "^3.0.1" - doctrine "^2.0.0" + debug "^3.1.0" + doctrine "^2.1.0" eslint-scope "^3.7.1" - espree "^3.5.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.2" esquery "^1.0.0" - estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^9.17.0" + globals "^11.0.1" ignore "^3.3.3" imurmurhash "^0.1.4" inquirer "^3.0.6" is-resolvable "^1.0.0" js-yaml "^3.9.1" - json-stable-stringify "^1.0.1" + json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" minimatch "^3.0.2" @@ -1444,14 +1556,14 @@ eslint@^4.10.0: semver "^5.3.0" strip-ansi "^4.0.0" strip-json-comments "~2.0.1" - table "^4.0.1" + table "4.0.2" text-table "~0.2.0" -espree@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" +espree@^3.5.2: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" dependencies: - acorn "^5.1.1" + acorn "^5.5.0" acorn-jsx "^3.0.0" esprima@^3.1.3: @@ -1469,11 +1581,10 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" dependencies: estraverse "^4.1.0" - object-assign "^4.0.1" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" @@ -1519,22 +1630,47 @@ expand-brackets@^0.1.4: dependencies: is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" dependencies: fill-range "^2.1.0" -extend@~3.0.0: +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" external-editor@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" dependencies: + chardet "^0.4.0" iconv-lite "^0.4.17" - jschardet "^1.4.2" tmp "^0.0.33" extglob@^0.3.1: @@ -1543,13 +1679,30 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extsprintf@1.3.0, extsprintf@^1.2.0: +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" fast-diff@^1.1.1: version "1.1.2" @@ -1609,6 +1762,15 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1623,21 +1785,15 @@ find-up@^2.1.0: locate-path "^2.0.0" flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" dependencies: circular-json "^0.3.1" del "^2.0.2" graceful-fs "^4.1.2" write "^0.2.1" -for-each@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" - dependencies: - is-function "~1.0.0" - -for-in@^1.0.1: +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1647,10 +1803,6 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1663,32 +1815,46 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" fs-extra@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" fs-readdir-recursive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" dependencies: nan "^2.3.0" - node-pre-gyp "^0.6.36" + node-pre-gyp "^0.6.39" fstream-ignore@^1.0.5: version "1.0.5" @@ -1707,10 +1873,6 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -1744,6 +1906,10 @@ get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1763,7 +1929,14 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -1774,7 +1947,17 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.17.0, globals@^9.18.0: +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + +globals@^11.0.1: + version "11.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" + +globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -1814,8 +1997,8 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" handlebars@^4.0.3: - version "4.0.10" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -1827,6 +2010,10 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -1834,6 +2021,13 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1844,21 +2038,42 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" -has@^1.0.1, has@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" dependencies: - function-bind "^1.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" -hawk@~3.1.3: +hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -1867,10 +2082,23 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -1883,8 +2111,8 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: whatwg-encoding "^1.0.1" @@ -1896,11 +2124,15 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" -iconv-lite@^0.4.17: +iconv-lite@0.4.19, iconv-lite@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -1920,6 +2152,10 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1931,9 +2167,9 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" inquirer@^3.0.6: version "3.3.0" @@ -1955,8 +2191,8 @@ inquirer@^3.0.6: through "^2.3.6" invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + version "2.2.3" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" dependencies: loose-envify "^1.0.0" @@ -1964,6 +2200,18 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -1975,8 +2223,8 @@ is-binary-path@^1.0.0: binary-extensions "^1.0.0" is-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-builtin-module@^1.0.0: version "1.0.0" @@ -1984,19 +2232,39 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - is-ci@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" is-dotfile@^1.0.0: version "1.0.3" @@ -2008,14 +2276,24 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -2032,16 +2310,31 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" -is-function@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -2058,10 +2351,20 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -2073,11 +2376,17 @@ is-path-in-cwd@^1.0.0: is-path-inside "^1.0.0" is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" dependencies: path-is-inside "^1.0.1" +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -2094,17 +2403,9 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" is-retry-allowed@^1.0.0: version "1.1.0" @@ -2114,10 +2415,6 @@ is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -2126,7 +2423,11 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2140,70 +2441,74 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.1: - version "1.1.14" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.14.tgz#25bc5701f7c680c0ffff913de46e3619a3a6e680" + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.2.tgz#e17cd519dd5ec4141197f246fdf380b75487f3b1" dependencies: async "^2.1.4" fileset "^2.0.2" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-hook "^1.0.7" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-report "^1.1.1" - istanbul-lib-source-maps "^1.2.1" - istanbul-reports "^1.1.2" + istanbul-lib-coverage "^1.1.2" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.2" + istanbul-lib-report "^1.1.3" + istanbul-lib-source-maps "^1.2.3" + istanbul-reports "^1.1.4" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14" -istanbul-lib-hook@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2, istanbul-lib-instrument@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz#66f6c9421cc9ec4704f76f2db084ba9078a2b532" +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.18.0" - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.1.2" semver "^5.3.0" -istanbul-lib-report@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" +istanbul-lib-report@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz#2df12188c0fa77990c0d2176d2d0ba3394188259" dependencies: - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.1.2" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" dependencies: - debug "^2.6.3" - istanbul-lib-coverage "^1.1.1" + debug "^3.1.0" + istanbul-lib-coverage "^1.1.2" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.2.tgz#0fb2e3f6aa9922bd3ce45d05d8ab4d5e8e07bd4f" +istanbul-reports@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.4.tgz#5ccba5e22b7b5a5d91d5e0a830f89be334bf97bd" dependencies: handlebars "^4.0.3" @@ -2423,23 +2728,16 @@ jest@^20.0.4: jest-cli "^20.0.4" js-base64@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" + version "2.4.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.7.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" +js-yaml@^3.7.0, js-yaml@^3.9.1: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -2448,10 +2746,6 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jschardet@^1.4.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.6.0.tgz#c7d1a71edcff2839db2f9ec30fc5d5ebd3c1a678" - jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -2492,6 +2786,10 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -2525,7 +2823,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -kind-of@^3.0.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: @@ -2537,6 +2835,14 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" @@ -2547,6 +2853,12 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" +lazy-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + dependencies: + set-getter "^0.1.0" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -2581,75 +2893,9 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._createassigner@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" - dependencies: - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.restparam "^3.0.0" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash.assign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" - dependencies: - lodash._baseassign "^3.0.0" - lodash._createassigner "^3.0.0" - lodash.keys "^3.0.0" - -lodash.defaults@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" - dependencies: - lodash.assign "^3.0.0" - lodash.restparam "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" longest@^1.0.1: version "1.0.1" @@ -2673,10 +2919,10 @@ lru-cache@^4.0.1: yallist "^2.1.2" make-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + version "1.2.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" dependencies: - pify "^2.3.0" + pify "^3.0.0" makeerror@1.0.x: version "1.0.11" @@ -2684,10 +2930,20 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -2710,19 +2966,37 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" +micromatch@^3.1.4: + version "3.1.9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" @@ -2734,7 +3008,7 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0: +minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -2742,16 +3016,19 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + "mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -mousetrap@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.1.tgz#2a085f5c751294c75e7e81f6ec2545b29cbf42d9" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2761,8 +3038,25 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" nan@^2.3.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" + version "2.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" + +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-odd "^2.0.0" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" natural-compare@^1.4.0: version "1.4.0" @@ -2773,43 +3067,44 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" node-notifier@^5.0.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" dependencies: growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" -node-pre-gyp@^0.6.36: - version "0.6.37" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz#3c872b236b2e266e4140578fe1ee88f693323a05" +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" mkdirp "^0.5.1" nopt "^4.0.1" npmlog "^4.0.2" rc "^1.1.7" - request "^2.81.0" + request "2.81.0" rimraf "^2.6.1" semver "^5.3.0" - tape "^4.6.3" tar "^2.2.1" tar-pack "^3.4.0" nodemon@^1.11.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.12.0.tgz#e538548a777340a19f855c4f087b7e528aa3feda" + version "1.17.1" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.17.1.tgz#cdb4bc53d7a86d6162143a1a44d7adf927d8652f" dependencies: - chokidar "^1.7.0" - debug "^2.6.8" - es6-promise "^3.3.1" + chokidar "^2.0.2" + debug "^3.1.0" ignore-by-default "^1.0.1" - lodash.defaults "^3.1.2" minimatch "^3.0.4" - ps-tree "^1.1.0" + pstree.remy "^1.1.0" + semver "^5.5.0" + supports-color "^5.2.0" touch "^3.1.0" - undefsafe "0.0.3" - update-notifier "^2.2.0" + undefsafe "^2.0.2" + update-notifier "^2.3.0" nopt@^4.0.1: version "4.0.1" @@ -2833,7 +3128,7 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1: +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -2867,10 +3162,10 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" "nwmatcher@>= 1.3.9 < 2.0.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" -oauth-sign@~0.8.1: +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -2878,13 +3173,19 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-inspect@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" object.omit@^2.0.0: version "2.0.1" @@ -2893,6 +3194,12 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2938,8 +3245,8 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -2957,8 +3264,10 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" p-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + dependencies: + p-try "^1.0.0" p-locate@^2.0.0: version "2.0.0" @@ -2967,8 +3276,12 @@ p-locate@^2.0.0: p-limit "^1.1.0" p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" package-json@^4.0.0: version "4.0.1" @@ -2998,6 +3311,14 @@ parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -3057,10 +3378,18 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -3075,6 +3404,10 @@ pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + postcss-functions@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" @@ -3084,40 +3417,54 @@ postcss-functions@^3.0.0: postcss "^6.0.9" postcss-value-parser "^3.3.0" +postcss-js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-1.0.1.tgz#ffaf29226e399ea74b5dce02cab1729d7addbc7b" + dependencies: + camelcase-css "^1.0.1" + postcss "^6.0.11" + +postcss-nested@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-3.0.0.tgz#cde40bd07a078565f3df72e2dc2665871c724852" + dependencies: + postcss "^6.0.14" + postcss-selector-parser "^3.1.1" + postcss-scss@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.3.1.tgz#65c610d8e2a7ee0e62b1835b71b8870734816e4b" dependencies: postcss "^5.2.4" +postcss-selector-parser@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" postcss@^5.0.8, postcss@^5.2.4: - version "5.2.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.13: - version "6.0.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" +postcss@^6.0.11, postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.9: + version "6.0.19" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" dependencies: - chalk "^2.3.0" + chalk "^2.3.1" source-map "^0.6.1" - supports-color "^4.4.0" - -postcss@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.11.tgz#f48db210b1d37a7f7ab6499b7a54982997ab6f72" - dependencies: - chalk "^2.1.0" - source-map "^0.5.7" - supports-color "^4.4.0" + supports-color "^5.2.0" prelude-ls@~1.1.2: version "1.1.2" @@ -3132,8 +3479,8 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" prettier@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.7.4.tgz#5e8624ae9363c80f95ec644584ecdf55d74f93fa" + version "1.11.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75" pretty-format@^20.0.3: version "20.0.3" @@ -3143,20 +3490,20 @@ pretty-format@^20.0.3: ansi-styles "^3.0.0" private@^0.1.6, private@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" ps-tree@^1.1.0: version "1.1.0" @@ -3168,6 +3515,12 @@ pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +pstree.remy@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.0.tgz#f2af27265bd3e5b32bbfcc10e80bac55ba78688b" + dependencies: + ps-tree "^1.1.0" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -3176,6 +3529,10 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -3184,8 +3541,8 @@ randomatic@^1.1.3: kind-of "^4.0.0" rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + version "1.2.5" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -3214,13 +3571,13 @@ read-pkg@^1.0.0: path-type "^1.0.0" readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" + process-nextick-args "~2.0.0" safe-buffer "~5.1.1" string_decoder "~1.0.3" util-deprecate "~1.0.1" @@ -3235,16 +3592,16 @@ readdirp@^2.0.0: set-immediate-shim "^1.0.1" regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-runtime@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" regenerator-transform@^0.10.0: version "0.10.1" @@ -3260,6 +3617,13 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -3269,8 +3633,8 @@ regexpu-core@^2.0.0: regjsparser "^0.1.4" registry-auth-token@^3.0.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" + version "3.3.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" dependencies: rc "^1.1.6" safe-buffer "^5.0.1" @@ -3299,7 +3663,7 @@ repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^1.5.2: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -3309,7 +3673,7 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.79.0, request@^2.81.0: +request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -3336,6 +3700,33 @@ request@^2.79.0, request@^2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" +request@^2.79.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3355,13 +3746,17 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.3.2, resolve@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" +resolve@^1.3.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" @@ -3372,11 +3767,9 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - dependencies: - through "~2.3.4" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" right-align@^0.1.1: version "0.1.3" @@ -3385,8 +3778,8 @@ right-align@^0.1.1: align-text "^0.1.1" rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" @@ -3406,10 +3799,16 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" -safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + sane@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" @@ -3432,18 +3831,42 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" +set-getter@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" + dependencies: + to-object-path "^0.3.0" + set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -3454,7 +3877,7 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shellwords@^0.1.0: +shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -3466,9 +3889,38 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^2.0.0" sntp@1.x.x: version "1.0.9" @@ -3476,13 +3928,33 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +source-map-resolve@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + dependencies: + atob "^2.0.0" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@^0.4.15: - version "0.4.17" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.17.tgz#6f2150553e6375375d0ccb3180502b78c18ba430" + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -3492,23 +3964,37 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.6.1: +source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" split@0.3: version "0.3.3" @@ -3534,6 +4020,13 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -3554,7 +4047,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -3565,21 +4058,13 @@ string.prototype.repeat@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" -string.prototype.trim@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - function-bind "^1.0.2" - string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -3623,48 +4108,30 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.0.0, supports-color@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" +supports-color@^5.2.0, supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" dependencies: - has-flag "^2.0.0" + has-flag "^3.0.0" symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -table@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" - -tape@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e" - dependencies: - deep-equal "~1.0.1" - defined "~1.0.0" - for-each "~0.3.2" - function-bind "~1.1.0" - glob "~7.1.2" - has "~1.0.1" - inherits "~2.0.3" - minimist "~1.2.0" - object-inspect "~1.3.0" - resolve "~1.4.0" - resumer "~0.0.0" - string.prototype.trim "~1.1.2" - through "~2.3.8" + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" dependencies: debug "^2.2.0" fstream "^1.0.10" @@ -3690,8 +4157,8 @@ term-size@^1.2.0: execa "^0.7.0" test-exclude@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + version "4.2.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.0.tgz#07e3613609a362c74516a717515e13322ab45b3c" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -3707,7 +4174,7 @@ throat@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" -through@2, through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.4, through@~2.3.8: +through@2, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -3729,15 +4196,37 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + touch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" dependencies: nopt "~1.0.10" -tough-cookie@^2.3.2, tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" @@ -3749,10 +4238,6 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -3790,9 +4275,24 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" -undefsafe@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" +undefsafe@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" + dependencies: + debug "^2.2.0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" unique-string@^1.0.0: version "1.0.0" @@ -3804,29 +4304,53 @@ universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" -update-notifier@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" +upath@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" + +update-notifier@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" dependencies: - boxen "^1.0.0" - chalk "^1.0.0" + boxen "^1.2.1" + chalk "^2.0.1" configstore "^3.0.0" import-lazy "^2.1.0" + is-installed-globally "^0.1.0" is-npm "^1.0.0" latest-version "^3.0.0" semver-diff "^2.0.0" xdg-basedir "^3.0.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" dependencies: prepend-http "^1.0.1" +use@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" + dependencies: + define-property "^0.2.5" + isobject "^3.0.0" + lazy-cache "^2.0.2" + user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" @@ -3835,9 +4359,9 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -uuid@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" +uuid@^3.0.0, uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" v8flags@^2.1.1: version "2.1.1" @@ -3846,11 +4370,11 @@ v8flags@^2.1.1: user-home "^1.1.1" validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" vendors@^1.0.0: version "1.0.1" @@ -3883,10 +4407,10 @@ webidl-conversions@^4.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" dependencies: - iconv-lite "0.4.13" + iconv-lite "0.4.19" whatwg-url@^4.3.0: version "4.8.0" @@ -3899,7 +4423,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@^1.2.12, which@^1.2.9: +which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -3911,11 +4435,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2" -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" +widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" dependencies: - string-width "^1.0.1" + string-width "^2.1.1" window-size@0.1.0: version "0.1.0" @@ -3934,11 +4458,11 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" worker-farm@^1.3.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.0.tgz#adfdf0cd40581465ed0a1f648f9735722afd5c8d" + version "1.5.4" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.4.tgz#4debbe46b40edefcc717ebde74a90b1ae1e909a1" dependencies: - errno "^0.1.4" - xtend "^4.0.1" + errno "~0.1.7" + xtend "~4.0.1" wrap-ansi@^2.0.0: version "2.1.0" @@ -3977,7 +4501,7 @@ xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" -xtend@^4.0.1: +xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" From 10be05a16715e88e42fdb03b34e744bd05ed5702 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 14:08:30 -0500 Subject: [PATCH 19/45] Get object style parsing working without the insanity --- __tests__/parseObjectStyles.test.js | 216 +++++++++++++++++++++++----- src/util/parseObjectStyles.js | 68 +-------- 2 files changed, 185 insertions(+), 99 deletions(-) diff --git a/__tests__/parseObjectStyles.test.js b/__tests__/parseObjectStyles.test.js index 5555d9dfc4b1..39e88bfc6f7b 100644 --- a/__tests__/parseObjectStyles.test.js +++ b/__tests__/parseObjectStyles.test.js @@ -1,6 +1,4 @@ -import _ from 'lodash' import parseObjectStyles from '../src/util/parseObjectStyles' -import cxs from 'cxs' import postcss from 'postcss' function css(nodes) { @@ -16,7 +14,7 @@ test('it parses simple single class definitions', () => { }, }) - expect(result).toMatchCss(` + expect(css(result)).toMatchCss(` .foobar { background-color: red; color: white; @@ -38,7 +36,7 @@ test('it parses multiple class definitions', () => { }, }) - expect(result).toMatchCss(` + expect(css(result)).toMatchCss(` .foo { background-color: red; color: white; @@ -66,17 +64,35 @@ test('it parses nested pseudo-selectors', () => { }, }) - expect(result).toMatchCss(` + expect(css(result)).toMatchCss(` .foo { background-color: red; color: white; - padding: 1rem + padding: 1rem; } .foo:hover { - background-color: orange + background-color: orange; } .foo:focus { - background-color: blue + background-color: blue; + } + `) +}) + +test('it parses top-level media queries', () => { + const result = parseObjectStyles({ + '@media (min-width: 200px)': { + '.foo': { + backgroundColor: 'orange', + }, + }, + }) + + expect(css(result)).toMatchCss(` + @media (min-width: 200px) { + .foo { + background-color: orange + } } `) }) @@ -93,44 +109,168 @@ test('it parses nested media queries', () => { }, }) - expect(result).toMatchCss(` + expect(css(result)).toMatchCss(` .foo { background-color: red; color: white; - padding: 1rem + padding: 1rem; } @media (min-width: 200px) { .foo { - background-color: orange + background-color: orange; + } + } + `) +}) + +test('it parses pseudo-selectors in nested media queries', () => { + const result = parseObjectStyles({ + '.foo': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + ':hover': { + '@media (min-width: 200px)': { + backgroundColor: 'orange', + }, + }, + }, + }) + + expect(css(result)).toMatchCss(` + .foo { + background-color: red; + color: white; + padding: 1rem; + } + @media (min-width: 200px) { + .foo:hover { + background-color: orange; + } + } + `) +}) + +test('it parses descendant selectors', () => { + const result = parseObjectStyles({ + '.foo': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + '.bar': { + backgroundColor: 'orange', + }, + }, + }) + + expect(css(result)).toMatchCss(` + .foo { + background-color: red; + color: white; + padding: 1rem; + } + .foo .bar { + background-color: orange; + } + `) +}) + +test('it parses nested multi-class selectors', () => { + const result = parseObjectStyles({ + '.foo': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + '&.bar': { + backgroundColor: 'orange', + }, + }, + }) + + expect(css(result)).toMatchCss(` + .foo { + background-color: red; + color: white; + padding: 1rem; + } + .foo.bar { + background-color: orange; + } + `) +}) + +test('it parses nested multi-class selectors in media queries', () => { + const result = parseObjectStyles({ + '.foo': { + backgroundColor: 'red', + color: 'white', + padding: '1rem', + '@media (min-width: 200px)': { + '&.bar': { + backgroundColor: 'orange', + }, + }, + }, + }) + + expect(css(result)).toMatchCss(` + .foo { + background-color: red; + color: white; + padding: 1rem; + } + @media (min-width: 200px) { + .foo.bar { + background-color: orange; } } `) }) -// test('it parses pseudo-selectors in nested media queries', () => { -// const result = parseObjectStyles({ -// '.foo': { -// backgroundColor: 'red', -// color: 'white', -// padding: '1rem', -// ':hover': { -// '@media (min-width: 200px)': { -// backgroundColor: 'orange', -// } -// }, -// }, -// }) - -// expect(result).toMatchCss(` -// .foo { -// background-color: red; -// color: white; -// padding: 1rem -// } -// @media (min-width: 200px) { -// .foo:hover { -// background-color: orange -// } -// } -// `) -// }) +test('it strips empty selectors when nesting', () => { + const result = parseObjectStyles({ + '.foo': { + '.bar': { + backgroundColor: 'orange', + }, + }, + }) + + expect(css(result)).toMatchCss(` + .foo .bar { + background-color: orange + } + `) +}) + +test('it can parse an array of styles', () => { + const result = parseObjectStyles([ + { + '.foo': { + backgroundColor: 'orange', + }, + }, + { + '.bar': { + backgroundColor: 'red', + }, + }, + { + '.foo': { + backgroundColor: 'blue', + }, + }, + ]) + + expect(css(result)).toMatchCss(` + .foo { + background-color: orange + } + .bar { + background-color: red + } + .foo { + background-color: blue + } + `) +}) diff --git a/src/util/parseObjectStyles.js b/src/util/parseObjectStyles.js index 9fd9a3755f2f..8ecff5cb00f1 100644 --- a/src/util/parseObjectStyles.js +++ b/src/util/parseObjectStyles.js @@ -1,69 +1,15 @@ import _ from 'lodash' import postcss from 'postcss' +import postcssNested from 'postcss-nested' +import postcssJs from 'postcss-js' -const hyph = s => s.replace(/[A-Z]|^ms/g, '-$&').toLowerCase() -const mx = (rule, media) => media ? `${media}{${rule}}` : rule -const noAnd = s => s.replace(/&/g, '') -const createDeclaration = (key, value) => hyph(key) + ':' + value -const createRule = ({ - className, - child, - media, - declarations -}) => mx(`${className + child}{${declarations.join(';')}}`, media) - -const parseRules = (obj, child = '', media) => { - const rules = [] - const declarations = [] - - for (let key in obj) { - const value = obj[key] - - if (value === null) continue - - if (typeof value === 'object') { - const _media = /^@/.test(key) ? key : null - const _child = _media ? child : child + noAnd(key) - parseRules(value, _child, _media) - .forEach(r => rules.push(r)) - continue - } - - const dec = createDeclaration(key, value) - declarations.push(dec) - } - - rules.unshift({ - media, - child, - declarations - }) - - return rules -} - -const parse = (selector, obj) => { - const rules = parseRules(obj) - - console.log(rules) - - return rules.map(rule => { - const className = selector - const ruleset = createRule(Object.assign(rule, { className })) - return ruleset - }) -} - -function parseObjectStyles(styles) { +export default function parseObjectStyles(styles) { if (!Array.isArray(styles)) { return parseObjectStyles([styles]) } - return _.flatMap(styles, (style) => { - return _.flatMap(style, (declarations, selector) => { - return parse(selector, declarations) - }) - }).join('') + return _.flatMap( + styles, + style => postcss([postcssNested]).process(style, { parser: postcssJs }).root.nodes + ) } - -export default parseObjectStyles From d1423bab63d7bb310a93709d9c6ac58d7c5b9ec9 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 14:08:47 -0500 Subject: [PATCH 20/45] Drop shitty `rule`/`atRule` syntax for pure object syntax --- __tests__/processPlugins.test.js | 608 ++++++++++++++++++++++--------- src/util/processPlugins.js | 48 ++- 2 files changed, 465 insertions(+), 191 deletions(-) diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index e053350ec0f4..2c37c99bf098 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -6,20 +6,158 @@ function css(nodes) { return postcss.root({ nodes }).toString() } -test('plugins can create utilities', () => { - const [components, utilities] = processPlugins({ +function processPluginsWithValidConfig(config) { + return processPlugins(_.defaultsDeep(config, { + options: { + prefix: '', + important: false, + separator: ':' + } + })) +} + +test('plugins can create utilities with object syntax', () => { + const [components, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, addUtilities }) { - addUtilities([ - rule('.object-fill', { + function({ addUtilities }) { + addUtilities({ + '.object-fill': { 'object-fit': 'fill', - }), - rule('.object-contain', { + }, + '.object-contain': { 'object-fit': 'contain', - }), - rule('.object-cover', { + }, + '.object-cover': { 'object-fit': 'cover', - }), + }, + }) + }, + ], + }) + + expect(components.length).toBe(0) + expect(css(utilities)).toMatchCss(` + @variants { + .object-fill { + object-fit: fill + } + .object-contain { + object-fit: contain + } + .object-cover { + object-fit: cover + } + } + `) +}) + +test('plugins can create utilities with arrays of objects', () => { + const [components, utilities] = processPluginsWithValidConfig({ + plugins: [ + function({ addUtilities }) { + addUtilities([ + { + '.object-fill': { + 'object-fit': 'fill', + }, + }, + { + '.object-contain': { + 'object-fit': 'contain', + }, + }, + { + '.object-cover': { + 'object-fit': 'cover', + }, + }, + ]) + }, + ], + }) + + expect(components.length).toBe(0) + expect(css(utilities)).toMatchCss(` + @variants { + .object-fill { + object-fit: fill + } + .object-contain { + object-fit: contain + } + .object-cover { + object-fit: cover + } + } + `) +}) + +test('plugins can create utilities with raw PostCSS nodes', () => { + const [components, utilities] = processPluginsWithValidConfig({ + plugins: [ + function({ addUtilities }) { + addUtilities([ + postcss.rule({ selector: '.object-fill' }).append([ + postcss.decl({ + prop: 'object-fit', + value: 'fill', + }), + ]), + postcss.rule({ selector: '.object-contain' }).append([ + postcss.decl({ + prop: 'object-fit', + value: 'contain', + }), + ]), + postcss.rule({ selector: '.object-cover' }).append([ + postcss.decl({ + prop: 'object-fit', + value: 'cover', + }), + ]), + ]) + }, + ], + }) + + expect(components.length).toBe(0) + expect(css(utilities)).toMatchCss(` + @variants { + .object-fill { + object-fit: fill + } + .object-contain { + object-fit: contain + } + .object-cover { + object-fit: cover + } + } + `) +}) + +test('plugins can create utilities with mixed object styles and PostCSS nodes', () => { + const [components, utilities] = processPluginsWithValidConfig({ + plugins: [ + function({ addUtilities }) { + addUtilities([ + { + '.object-fill': { + objectFit: 'fill' + } + }, + postcss.rule({ selector: '.object-contain' }).append([ + postcss.decl({ + prop: 'object-fit', + value: 'contain', + }), + ]), + postcss.rule({ selector: '.object-cover' }).append([ + postcss.decl({ + prop: 'object-fit', + value: 'cover', + }), + ]), ]) }, ], @@ -42,21 +180,21 @@ test('plugins can create utilities', () => { }) test('plugins can create utilities with variants', () => { - const [components, utilities] = processPlugins({ + const [components, utilities] = processPluginsWithValidConfig({ plugins: [ function({ rule, addUtilities }) { addUtilities( - [ - rule('.object-fill', { + { + '.object-fill': { 'object-fit': 'fill', - }), - rule('.object-contain', { + }, + '.object-contain': { 'object-fit': 'contain', - }), - rule('.object-cover', { + }, + '.object-cover': { 'object-fit': 'cover', - }), - ], + }, + }, ['responsive', 'hover', 'group-hover', 'focus'] ) }, @@ -79,21 +217,21 @@ test('plugins can create utilities with variants', () => { `) }) -test('plugins can create components', () => { - const [components, utilities] = processPlugins({ +test('plugins can create components with object syntax', () => { + const [components, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, addComponents }) { - addComponents([ - rule('.btn-blue', { - 'background-color': 'blue', + function({ addComponents }) { + addComponents({ + '.btn-blue': { + backgroundColor: 'blue', color: 'white', padding: '.5rem 1rem', - 'border-radius': '.25rem', - }), - rule('.btn-blue:hover', { - 'background-color': 'darkblue', - }), - ]) + borderRadius: '.25rem', + }, + '.btn-blue:hover': { + backgroundColor: 'darkblue', + }, + }) }, ], }) @@ -112,34 +250,116 @@ test('plugins can create components', () => { `) }) -test('plugins can create components with media queries', () => { - const [components, utilities] = processPlugins({ +test('plugins can create components with raw PostCSS nodes', () => { + const [components, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, atRule, addComponents }) { + function({ addComponents }) { addComponents([ - rule('.container', { - width: '100%', - }), - atRule('@media (min-width: 100px)', [ - rule('.container', { - 'max-width': '100px', + postcss.rule({ selector: '.btn-blue' }).append([ + postcss.decl({ + prop: 'background-color', + value: 'blue', + }), + postcss.decl({ + prop: 'color', + value: 'white', + }), + postcss.decl({ + prop: 'padding', + value: '.5rem 1rem', + }), + postcss.decl({ + prop: 'border-radius', + value: '.25rem', }), ]), - atRule('@media (min-width: 200px)', [ - rule('.container', { - 'max-width': '200px', + postcss.rule({ selector: '.btn-blue:hover' }).append([ + postcss.decl({ + prop: 'background-color', + value: 'darkblue', }), ]), - atRule('@media (min-width: 300px)', [ - rule('.container', { - 'max-width': '300px', + ]) + }, + ], + }) +}) + +test('plugins can create components with mixed object styles and raw PostCSS nodes', () => { + const [components, utilities] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents }) { + addComponents([ + postcss.rule({ selector: '.btn-blue' }).append([ + postcss.decl({ + prop: 'background-color', + value: 'blue', + }), + postcss.decl({ + prop: 'color', + value: 'white', + }), + postcss.decl({ + prop: 'padding', + value: '.5rem 1rem', + }), + postcss.decl({ + prop: 'border-radius', + value: '.25rem', }), ]), + { + '.btn-blue:hover': { + backgroundColor: 'darkblue' + } + }, ]) }, ], }) + expect(utilities.length).toBe(0) + expect(css(components)).toMatchCss(` + .btn-blue { + background-color: blue; + color: white; + padding: .5rem 1rem; + border-radius: .25rem + } + .btn-blue:hover { + background-color: darkblue + } + `) +}) + +test('plugins can create components with media queries with object syntax', () => { + const [components, utilities] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents }) { + addComponents({ + '.container': { + width: '100%', + }, + '@media (min-width: 100px)': { + '.container': { + maxWidth: '100px', + }, + }, + '@media (min-width: 200px)': { + '.container': { + maxWidth: '200px', + }, + }, + '@media (min-width: 300px)': { + '.container': { + maxWidth: '300px', + }, + }, + }) + }, + ], + }) + expect(utilities.length).toBe(0) expect(css(components)).toMatchCss(` .container { @@ -166,20 +386,17 @@ test('plugins can create components with media queries', () => { test('plugins can create rules with escaped selectors', () => { const config = { plugins: [ - function({ e, rule, addUtilities }) { - addUtilities( - [ - rule(`.${e('top-1/4')}`, { - top: '25%', - }), - ], - [] - ) + function({ e, addUtilities }) { + addUtilities({ + [`.${e('top-1/4')}`]: { + top: '25%', + }, + }) }, ], } - const [components, utilities] = processPlugins(config) + const [components, utilities] = processPluginsWithValidConfig(config) expect(components.length).toBe(0) expect(css(utilities)).toMatchCss(` @@ -192,7 +409,7 @@ test('plugins can create rules with escaped selectors', () => { }) test('plugins can access the current config', () => { - const [components, utilities] = processPlugins({ + const [components, utilities] = processPluginsWithValidConfig({ screens: { sm: '576px', md: '768px', @@ -200,20 +417,25 @@ test('plugins can access the current config', () => { xl: '1200px', }, plugins: [ - function({ rule, atRule, addComponents, config }) { + function({ addComponents, config }) { const containerClasses = [ - rule('.container', { - width: '100%', - }), + { + '.container': { + width: '100%', + } + }, ] _.forEach(config('screens'), breakpoint => { - const mediaQuery = atRule(`@media (min-width: ${breakpoint})`, [ - rule('.container', { 'max-width': breakpoint }), - ]) - containerClasses.push(mediaQuery) + containerClasses.push({ + [`@media (min-width: ${breakpoint})`]: { + '.container': { maxWidth: breakpoint }, + } + }) }) + // console.log(containerClasses) + addComponents(containerClasses) }, ], @@ -248,7 +470,7 @@ test('plugins can access the current config', () => { }) test('plugins can provide fallbacks to keys missing from the config', () => { - const [components, utilities] = processPlugins({ + const [components, utilities] = processPluginsWithValidConfig({ borderRadius: { '1': '1px', '2': '2px', @@ -256,12 +478,12 @@ test('plugins can provide fallbacks to keys missing from the config', () => { '8': '8px', }, plugins: [ - function({ rule, addComponents, config }) { - addComponents([ - rule('.btn', { - 'border-radius': config('borderRadius.default', '.25rem'), - }), - ]) + function({ addComponents, config }) { + addComponents({ + '.btn': { + borderRadius: config('borderRadius.default', '.25rem'), + }, + }) }, ], }) @@ -274,56 +496,15 @@ test('plugins can provide fallbacks to keys missing from the config', () => { `) }) -test("the '@' sign is optional in at-rules", () => { - const [components, utilities] = processPlugins({ - plugins: [ - function({ rule, atRule, addComponents }) { - addComponents([ - rule('.card', { - padding: '.5rem', - }), - atRule('media (min-width: 500px)', [ - rule('.card', { - padding: '1rem', - }), - ]), - atRule('@media (min-width: 800px)', [ - rule('.card', { - padding: '1.5rem', - }), - ]), - ]) - }, - ], - }) - - expect(utilities.length).toBe(0) - expect(css(components)).toMatchCss(` - .card { - padding: .5rem - } - @media (min-width: 500px) { - .card { - padding: 1rem - } - } - @media (min-width: 800px) { - .card { - padding: 1.5rem - } - } - `) -}) - test('variants are optional when adding utilities', () => { - const [, utilities] = processPlugins({ + const [, utilities] = processPluginsWithValidConfig({ plugins: [ function({ rule, addUtilities }) { - addUtilities([ - rule('.border-collapse', { + addUtilities({ + '.border-collapse': { 'border-collapse': 'collapse', - }), - ]) + }, + }) }, ], }) @@ -338,34 +519,34 @@ test('variants are optional when adding utilities', () => { }) test('plugins can add multiple sets of utilities and components', () => { - const [components, utilities] = processPlugins({ + const [components, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, addUtilities, addComponents }) { - addComponents([ - rule('.card', { + function({ addUtilities, addComponents }) { + addComponents({ + '.card': { padding: '1rem', - 'border-radius': '.25rem', - }), - ]) + borderRadius: '.25rem', + }, + }) - addUtilities([ - rule('.skew-12deg', { + addUtilities({ + '.skew-12deg': { transform: 'skewY(-12deg)', - }), - ]) + }, + }) - addComponents([ - rule('.btn', { + addComponents({ + '.btn': { padding: '1rem .5rem', display: 'inline-block', - }), - ]) + }, + }) - addUtilities([ - rule('.border-collapse', { - 'border-collapse': 'collapse', - }), - ]) + addUtilities({ + '.border-collapse': { + borderCollapse: 'collapse', + }, + }) }, ], }) @@ -394,40 +575,112 @@ test('plugins can add multiple sets of utilities and components', () => { `) }) -test("plugins can apply the user's chosen prefix", () => { - const [, utilities] = processPlugins({ +test('plugins respect prefix and important options by default when adding utilities', () => { + const [, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, addUtilities, prefix }) { - addUtilities([ - rule(prefix('.skew-12deg'), { - transform: 'skewY(-12deg)', - }), - ]) + function({ utility, addUtilities }) { + addUtilities({ + '.rotate-90': { + transform: 'rotate(90deg)', + }, + }) }, ], options: { prefix: 'tw-', + important: true, }, }) expect(css(utilities)).toMatchCss(` @variants { - .tw-skew-12deg { - transform: skewY(-12deg) + .tw-rotate-90 { + transform: rotate(90deg) !important } } `) }) -test('utilities are escaped and automatically respect prefix and important options when created via `utility`', () => { - const [, utilities] = processPlugins({ +test("component declarations are not affected by the 'prefix' option", () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents }) { + addComponents({ + '.btn-blue': { + backgroundColor: 'blue', + }, + }) + }, + ], + options: { + prefix: 'tw-', + }, + }) + + expect(css(components)).toMatchCss(` + .btn-blue { + background-color: blue + } + `) +}) + +test("component declarations are not affected by the 'important' option", () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents }) { + addComponents({ + '.btn-blue': { + backgroundColor: 'blue', + }, + }) + }, + ], + options: { + important: true, + }, + }) + + expect(css(components)).toMatchCss(` + .btn-blue { + background-color: blue + } + `) +}) + +test("plugins can apply the user's chosen prefix to components manually", () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents, prefix }) { + addComponents({ + [prefix('.btn-blue')]: { + backgroundColor: 'blue', + }, + }) + }, + ], + options: { + prefix: 'tw-', + }, + }) + + expect(css(components)).toMatchCss(` + .tw-btn-blue { + background-color: blue + } + `) +}) + +test('prefix can optionally be ignored for utilities', () => { + const [, utilities] = processPluginsWithValidConfig({ plugins: [ function({ utility, addUtilities }) { - addUtilities([ - utility('.rotate-1/4', { + addUtilities({ + '.rotate-90': { transform: 'rotate(90deg)', - }), - ]) + }, + }, { + respectPrefix: false + }) }, ], options: { @@ -438,22 +691,24 @@ test('utilities are escaped and automatically respect prefix and important optio expect(css(utilities)).toMatchCss(` @variants { - .tw-rotate-1\\/4 { + .rotate-90 { transform: rotate(90deg) !important } } `) }) -test("leading '.' is optional when creating utilities via `utility`", () => { - const [, utilities] = processPlugins({ +test('important can optionally be ignored for utilities', () => { + const [, utilities] = processPluginsWithValidConfig({ plugins: [ function({ utility, addUtilities }) { - addUtilities([ - utility('rotate-1/4', { + addUtilities({ + '.rotate-90': { transform: 'rotate(90deg)', - }), - ]) + }, + }, { + respectImportant: false + }) }, ], options: { @@ -464,33 +719,38 @@ test("leading '.' is optional when creating utilities via `utility`", () => { expect(css(utilities)).toMatchCss(` @variants { - .tw-rotate-1\\/4 { - transform: rotate(90deg) !important + .tw-rotate-90 { + transform: rotate(90deg) } } `) }) -test('plugins can choose to make declarations !important', () => { - const [, utilities] = processPlugins({ +test('variants can still be specified when ignoring prefix and important options', () => { + const [, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, addUtilities, config }) { - addUtilities([ - rule('.skew-12deg', { - transform: `skewY(-12deg)${config('options.important') ? ' !important' : ''}`, - }), - ]) + function({ utility, addUtilities }) { + addUtilities({ + '.rotate-90': { + transform: 'rotate(90deg)', + }, + }, { + variants: ['responsive', 'hover', 'focus'], + respectImportant: false, + respectPrefix: false, + }) }, ], options: { + prefix: 'tw-', important: true, }, }) expect(css(utilities)).toMatchCss(` - @variants { - .skew-12deg { - transform: skewY(-12deg) !important + @variants responsive, hover, focus{ + .rotate-90 { + transform: rotate(90deg) } } `) diff --git a/src/util/processPlugins.js b/src/util/processPlugins.js index b1143a7725bf..4db43b90dc5c 100644 --- a/src/util/processPlugins.js +++ b/src/util/processPlugins.js @@ -1,6 +1,8 @@ import _ from 'lodash' import postcss from 'postcss' +import Node from 'postcss/lib/node' import escapeClassName from '../util/escapeClassName' +import parseObjectStyles from '../util/parseObjectStyles' import prefixSelector from '../util/prefixSelector' import wrapWithVariants from '../util/wrapWithVariants' @@ -32,15 +34,12 @@ function defineUtility(selector, properties, options) { return rule } -function defineAtRule(atRule, rules) { - const [name, ...params] = atRule.split(' ') +function parseStyles(styles) { + if (!Array.isArray(styles)) { + return parseStyles([styles]) + } - return postcss - .atRule({ - name: name.startsWith('@') ? name.slice(1) : name, - params: params.join(' '), - }) - .append(rules) + return _.flatMap(styles, (style) => style instanceof Node ? style : parseObjectStyles(style)) } export default function(config) { @@ -50,19 +49,34 @@ export default function(config) { config.plugins.forEach(plugin => { plugin({ config: (path, defaultValue) => _.get(config, path, defaultValue), - rule: defineRule, - utility: (selector, properties) => defineUtility(selector, properties, config.options), - atRule: defineAtRule, e: escapeClassName, - addUtilities: (utilities, variants = []) => { - pluginUtilities.push(wrapWithVariants(utilities, variants)) - }, - addComponents: components => { - pluginComponents.push(...components) - }, prefix: selector => { return prefixSelector(config.options.prefix, selector) }, + addUtilities: (utilities, options) => { + const defaultOptions = { variants: [], respectPrefix: true, respectImportant: true } + + options = Array.isArray(options) + ? Object.assign({}, defaultOptions, { variants: options }) + : _.defaults(options, defaultOptions) + + const styles = postcss.root({ nodes: parseStyles(utilities) }) + + styles.walkRules(rule => { + if (options.respectPrefix) { + rule.selector = prefixSelector(config.options.prefix, rule.selector) + } + + if (options.respectImportant && _.get(config, 'options.important')) { + rule.walkDecls(decl => decl.important = true) + } + }) + + pluginUtilities.push(wrapWithVariants(styles.nodes, options.variants)) + }, + addComponents: components => { + pluginComponents.push(...parseStyles(components)) + }, }) }) From c3f021a0c9976ce070c5a8c3ab1e71f825496de1 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 15:00:39 -0500 Subject: [PATCH 21/45] Prefix all classes in a selector, don't assume single class --- __tests__/prefixTree.test.js | 15 +++++++++++++++ __tests__/processPlugins.test.js | 23 +++++++++++++++++++++++ package.json | 3 ++- src/util/prefixSelector.js | 8 +++++++- 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/__tests__/prefixTree.test.js b/__tests__/prefixTree.test.js index cd3029fb4378..29f0191227d3 100644 --- a/__tests__/prefixTree.test.js +++ b/__tests__/prefixTree.test.js @@ -29,6 +29,7 @@ test('it handles a function as the prefix', () => { ` const prefixFunc = selector => { + return selector === '.foo' ? 'tw-' : '' if (selector === '.foo') { return 'tw-' } @@ -40,3 +41,17 @@ test('it handles a function as the prefix', () => { expect(result.css).toEqual(expected) expect(result.warnings().length).toBe(0) }) + +test('it prefixes all classes in a selector', () => { + const input = postcss.parse(` + .btn-blue .w-1\\/4 > h1.text-xl + a .bar { color: red; } + `) + + const expected = ` + .tw-btn-blue .tw-w-1\\/4 > h1.tw-text-xl + a .tw-bar { color: red; } + ` + + const result = prefixTree(input, 'tw-').toResult() + expect(result.css).toEqual(expected) + expect(result.warnings().length).toBe(0) +}) diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index 2c37c99bf098..1f15725047aa 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -755,3 +755,26 @@ test('variants can still be specified when ignoring prefix and important options } `) }) + +test('prefix will prefix all classes in a selector', () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents, prefix }) { + addComponents({ + [prefix('.btn-blue .w-1\\/4 > h1.text-xl + a .bar')]: { + backgroundColor: 'blue', + }, + }) + }, + ], + options: { + prefix: 'tw-', + }, + }) + + expect(css(components)).toMatchCss(` + .tw-btn-blue .tw-w-1\\/4 > h1.tw-text-xl + a .tw-bar { + background-color: blue + } + `) +}) diff --git a/package.json b/package.json index 0952cccd5661..3f904cc88dca 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,8 @@ "postcss": "^6.0.9", "postcss-functions": "^3.0.0", "postcss-js": "^1.0.1", - "postcss-nested": "^3.0.0" + "postcss-nested": "^3.0.0", + "postcss-selector-parser": "^3.1.1" }, "browserslist": [ "> 1%" diff --git a/src/util/prefixSelector.js b/src/util/prefixSelector.js index a5133abe794e..1c42816be9a5 100644 --- a/src/util/prefixSelector.js +++ b/src/util/prefixSelector.js @@ -1,5 +1,11 @@ +import parser from 'postcss-selector-parser' + export default function(prefix, selector) { const getPrefix = typeof prefix === 'function' ? prefix : () => prefix - return `.${getPrefix(selector)}${selector.slice(1)}` + return parser(selectors => { + selectors.walkClasses((classSelector) => { + classSelector.value = `${getPrefix('.' + classSelector.value)}${classSelector.value}` + }) + }).processSync(selector) } From 7d589dd542fa632c7aee53195135d4893d295440 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 15:03:09 -0500 Subject: [PATCH 22/45] Fix style + kill unused code --- __tests__/prefixTree.test.js | 5 -- __tests__/processPlugins.test.js | 102 +++++++++++++++++++------------ src/util/prefixSelector.js | 2 +- src/util/processPlugins.js | 32 +--------- 4 files changed, 66 insertions(+), 75 deletions(-) diff --git a/__tests__/prefixTree.test.js b/__tests__/prefixTree.test.js index 29f0191227d3..43110274902b 100644 --- a/__tests__/prefixTree.test.js +++ b/__tests__/prefixTree.test.js @@ -30,11 +30,6 @@ test('it handles a function as the prefix', () => { const prefixFunc = selector => { return selector === '.foo' ? 'tw-' : '' - if (selector === '.foo') { - return 'tw-' - } - - return '' } const result = prefixTree(input, prefixFunc).toResult() diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index 1f15725047aa..96a3c687e7bc 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -7,13 +7,15 @@ function css(nodes) { } function processPluginsWithValidConfig(config) { - return processPlugins(_.defaultsDeep(config, { - options: { - prefix: '', - important: false, - separator: ':' - } - })) + return processPlugins( + _.defaultsDeep(config, { + options: { + prefix: '', + important: false, + separator: ':', + }, + }) + ) } test('plugins can create utilities with object syntax', () => { @@ -143,8 +145,8 @@ test('plugins can create utilities with mixed object styles and PostCSS nodes', addUtilities([ { '.object-fill': { - objectFit: 'fill' - } + objectFit: 'fill', + }, }, postcss.rule({ selector: '.object-contain' }).append([ postcss.decl({ @@ -182,7 +184,7 @@ test('plugins can create utilities with mixed object styles and PostCSS nodes', test('plugins can create utilities with variants', () => { const [components, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, addUtilities }) { + function({ addUtilities }) { addUtilities( { '.object-fill': { @@ -283,6 +285,19 @@ test('plugins can create components with raw PostCSS nodes', () => { }, ], }) + + expect(utilities.length).toBe(0) + expect(css(components)).toMatchCss(` + .btn-blue { + background-color: blue; + color: white; + padding: .5rem 1rem; + border-radius: .25rem + } + .btn-blue:hover { + background-color: darkblue + } + `) }) test('plugins can create components with mixed object styles and raw PostCSS nodes', () => { @@ -310,8 +325,8 @@ test('plugins can create components with mixed object styles and raw PostCSS nod ]), { '.btn-blue:hover': { - backgroundColor: 'darkblue' - } + backgroundColor: 'darkblue', + }, }, ]) }, @@ -422,7 +437,7 @@ test('plugins can access the current config', () => { { '.container': { width: '100%', - } + }, }, ] @@ -430,7 +445,7 @@ test('plugins can access the current config', () => { containerClasses.push({ [`@media (min-width: ${breakpoint})`]: { '.container': { maxWidth: breakpoint }, - } + }, }) }) @@ -499,7 +514,7 @@ test('plugins can provide fallbacks to keys missing from the config', () => { test('variants are optional when adding utilities', () => { const [, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ rule, addUtilities }) { + function({ addUtilities }) { addUtilities({ '.border-collapse': { 'border-collapse': 'collapse', @@ -578,7 +593,7 @@ test('plugins can add multiple sets of utilities and components', () => { test('plugins respect prefix and important options by default when adding utilities', () => { const [, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ utility, addUtilities }) { + function({ addUtilities }) { addUtilities({ '.rotate-90': { transform: 'rotate(90deg)', @@ -673,14 +688,17 @@ test("plugins can apply the user's chosen prefix to components manually", () => test('prefix can optionally be ignored for utilities', () => { const [, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ utility, addUtilities }) { - addUtilities({ - '.rotate-90': { - transform: 'rotate(90deg)', + function({ addUtilities }) { + addUtilities( + { + '.rotate-90': { + transform: 'rotate(90deg)', + }, }, - }, { - respectPrefix: false - }) + { + respectPrefix: false, + } + ) }, ], options: { @@ -701,14 +719,17 @@ test('prefix can optionally be ignored for utilities', () => { test('important can optionally be ignored for utilities', () => { const [, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ utility, addUtilities }) { - addUtilities({ - '.rotate-90': { - transform: 'rotate(90deg)', + function({ addUtilities }) { + addUtilities( + { + '.rotate-90': { + transform: 'rotate(90deg)', + }, }, - }, { - respectImportant: false - }) + { + respectImportant: false, + } + ) }, ], options: { @@ -729,16 +750,19 @@ test('important can optionally be ignored for utilities', () => { test('variants can still be specified when ignoring prefix and important options', () => { const [, utilities] = processPluginsWithValidConfig({ plugins: [ - function({ utility, addUtilities }) { - addUtilities({ - '.rotate-90': { - transform: 'rotate(90deg)', + function({ addUtilities }) { + addUtilities( + { + '.rotate-90': { + transform: 'rotate(90deg)', + }, }, - }, { - variants: ['responsive', 'hover', 'focus'], - respectImportant: false, - respectPrefix: false, - }) + { + variants: ['responsive', 'hover', 'focus'], + respectImportant: false, + respectPrefix: false, + } + ) }, ], options: { diff --git a/src/util/prefixSelector.js b/src/util/prefixSelector.js index 1c42816be9a5..9b0015856c2e 100644 --- a/src/util/prefixSelector.js +++ b/src/util/prefixSelector.js @@ -4,7 +4,7 @@ export default function(prefix, selector) { const getPrefix = typeof prefix === 'function' ? prefix : () => prefix return parser(selectors => { - selectors.walkClasses((classSelector) => { + selectors.walkClasses(classSelector => { classSelector.value = `${getPrefix('.' + classSelector.value)}${classSelector.value}` }) }).processSync(selector) diff --git a/src/util/processPlugins.js b/src/util/processPlugins.js index 4db43b90dc5c..72bfddc3f796 100644 --- a/src/util/processPlugins.js +++ b/src/util/processPlugins.js @@ -6,40 +6,12 @@ import parseObjectStyles from '../util/parseObjectStyles' import prefixSelector from '../util/prefixSelector' import wrapWithVariants from '../util/wrapWithVariants' -function defineRule(selector, properties) { - const decls = _.map(properties, (value, property) => { - return postcss.decl({ - prop: `${property}`, - value: `${value}`, - }) - }) - - return postcss.rule({ selector }).append(decls) -} - -function defineUtility(selector, properties, options) { - if (selector.startsWith('.')) { - return defineUtility(selector.slice(1), properties, options) - } - - const rule = defineRule( - prefixSelector(options.prefix, `.${escapeClassName(selector)}`), - properties - ) - - if (options.important) { - rule.walkDecls(decl => (decl.important = true)) - } - - return rule -} - function parseStyles(styles) { if (!Array.isArray(styles)) { return parseStyles([styles]) } - return _.flatMap(styles, (style) => style instanceof Node ? style : parseObjectStyles(style)) + return _.flatMap(styles, style => (style instanceof Node ? style : parseObjectStyles(style))) } export default function(config) { @@ -68,7 +40,7 @@ export default function(config) { } if (options.respectImportant && _.get(config, 'options.important')) { - rule.walkDecls(decl => decl.important = true) + rule.walkDecls(decl => (decl.important = true)) } }) From 7a8f8d9877ca6583a5b4a3a9232e81c1c4b03ec6 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 15:55:29 -0500 Subject: [PATCH 23/45] Style fixes --- __tests__/processPlugins.test.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index 96a3c687e7bc..e39c8eeda4e1 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -666,9 +666,11 @@ test("plugins can apply the user's chosen prefix to components manually", () => const [components] = processPluginsWithValidConfig({ plugins: [ function({ addComponents, prefix }) { - addComponents({ - [prefix('.btn-blue')]: { - backgroundColor: 'blue', + addComponents( + { + [prefix('.btn-blue')]: { + backgroundColor: 'blue', + }, }, }) }, @@ -784,9 +786,11 @@ test('prefix will prefix all classes in a selector', () => { const [components] = processPluginsWithValidConfig({ plugins: [ function({ addComponents, prefix }) { - addComponents({ - [prefix('.btn-blue .w-1\\/4 > h1.text-xl + a .bar')]: { - backgroundColor: 'blue', + addComponents( + { + [prefix('.btn-blue .w-1\\/4 > h1.text-xl + a .bar')]: { + backgroundColor: 'blue', + }, }, }) }, From 8e8f47c58d988ee940b78400ba3131ff3e8615b5 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 15:56:00 -0500 Subject: [PATCH 24/45] Respect user prefix by default when creating component classes --- __tests__/processPlugins.test.js | 34 +++++++++++++++++++++++++++++--- src/util/processPlugins.js | 14 +++++++++++-- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index e39c8eeda4e1..0a22544a9e63 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -616,7 +616,7 @@ test('plugins respect prefix and important options by default when adding utilit `) }) -test("component declarations are not affected by the 'prefix' option", () => { +test("component declarations respect the 'prefix' option by default", () => { const [components] = processPluginsWithValidConfig({ plugins: [ function({ addComponents }) { @@ -632,6 +632,32 @@ test("component declarations are not affected by the 'prefix' option", () => { }, }) + expect(css(components)).toMatchCss(` + .tw-btn-blue { + background-color: blue + } + `) +}) + +test("component declarations can optionally ignore 'prefix' option", () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents }) { + addComponents( + { + '.btn-blue': { + backgroundColor: 'blue', + }, + }, + { respectPrefix: false } + ) + }, + ], + options: { + prefix: 'tw-', + }, + }) + expect(css(components)).toMatchCss(` .btn-blue { background-color: blue @@ -672,7 +698,8 @@ test("plugins can apply the user's chosen prefix to components manually", () => backgroundColor: 'blue', }, }, - }) + { respectPrefix: false } + ) }, ], options: { @@ -792,7 +819,8 @@ test('prefix will prefix all classes in a selector', () => { backgroundColor: 'blue', }, }, - }) + { respectPrefix: false } + ) }, ], options: { diff --git a/src/util/processPlugins.js b/src/util/processPlugins.js index 72bfddc3f796..0701751f0ff7 100644 --- a/src/util/processPlugins.js +++ b/src/util/processPlugins.js @@ -46,8 +46,18 @@ export default function(config) { pluginUtilities.push(wrapWithVariants(styles.nodes, options.variants)) }, - addComponents: components => { - pluginComponents.push(...parseStyles(components)) + addComponents: (components, options) => { + options = Object.assign({ respectPrefix: true }, options) + + const styles = postcss.root({ nodes: parseStyles(components) }) + + styles.walkRules(rule => { + if (options.respectPrefix) { + rule.selector = prefixSelector(config.options.prefix, rule.selector) + } + }) + + pluginComponents.push(...styles.nodes) }, }) }) From 3be6a04d54f14eae3fef693c81f1f90d0f95d108 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 6 Mar 2018 15:57:46 -0500 Subject: [PATCH 25/45] Add test to make sure we're not stupidly flattening styles too early --- __tests__/processPlugins.test.js | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index 0a22544a9e63..2ebd9419cc26 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -398,6 +398,59 @@ test('plugins can create components with media queries with object syntax', () = `) }) +test('media queries can be defined multiple times using objects-in-array syntax', () => { + const [components, utilities] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents }) { + addComponents([ + { + '.container': { + width: '100%', + }, + '@media (min-width: 100px)': { + '.container': { + maxWidth: '100px', + }, + }, + }, + { + '.btn': { + padding: '1rem .5rem', + display: 'block', + }, + '@media (min-width: 100px)': { + '.btn': { + display: 'inline-block', + }, + }, + }, + ]) + }, + ], + }) + + expect(utilities.length).toBe(0) + expect(css(components)).toMatchCss(` + .container { + width: 100% + } + @media (min-width: 100px) { + .container { + max-width: 100px + } + } + .btn { + padding: 1rem .5rem; + display: block + } + @media (min-width: 100px) { + .btn { + display: inline-block + } + } + `) +}) + test('plugins can create rules with escaped selectors', () => { const config = { plugins: [ From db8e06c2823adbf50e83613f975c1dca8de156ac Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Wed, 7 Mar 2018 08:13:02 -0500 Subject: [PATCH 26/45] Add test for nested rules --- __tests__/processPlugins.test.js | 55 ++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index 2ebd9419cc26..90e4a168ad72 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -451,6 +451,61 @@ test('media queries can be defined multiple times using objects-in-array syntax' `) }) +test('plugins can create nested rules', () => { + const [components, utilities] = processPluginsWithValidConfig({ + plugins: [ + function({ addComponents }) { + addComponents({ + '.btn-blue': { + backgroundColor: 'blue', + color: 'white', + padding: '.5rem 1rem', + borderRadius: '.25rem', + '&:hover': { + backgroundColor: 'darkblue', + }, + '@media (min-width: 500px)': { + '&:hover': { + backgroundColor: 'orange', + }, + }, + '> a': { + color: 'red', + }, + 'h1 &': { + color: 'purple', + } + }, + }) + }, + ], + }) + + expect(utilities.length).toBe(0) + expect(css(components)).toMatchCss(` + .btn-blue { + background-color: blue; + color: white; + padding: .5rem 1rem; + border-radius: .25rem; + } + .btn-blue:hover { + background-color: darkblue; + } + @media (min-width: 500px) { + .btn-blue:hover { + background-color: orange; + } + } + .btn-blue > a { + color: red; + } + h1 .btn-blue { + color: purple; + } + `) +}) + test('plugins can create rules with escaped selectors', () => { const config = { plugins: [ From dbb4802fb6bb40567dacf88ffedb06ebc6d54c2c Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Wed, 7 Mar 2018 08:30:52 -0500 Subject: [PATCH 27/45] Fix style --- __tests__/processPlugins.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/processPlugins.test.js b/__tests__/processPlugins.test.js index 90e4a168ad72..d5958c4760f1 100644 --- a/__tests__/processPlugins.test.js +++ b/__tests__/processPlugins.test.js @@ -474,7 +474,7 @@ test('plugins can create nested rules', () => { }, 'h1 &': { color: 'purple', - } + }, }, }) }, From 02bac50589b69d0159c3d71fa1e4b0b3c10cf413 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 12:12:03 -0400 Subject: [PATCH 28/45] Rename to --- __tests__/fixtures/tailwind-output.css | 20 ++++++++++---------- src/generators/textStyle.js | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/__tests__/fixtures/tailwind-output.css b/__tests__/fixtures/tailwind-output.css index 568e83a0ec08..e85cbc6b1ac8 100644 --- a/__tests__/fixtures/tailwind-output.css +++ b/__tests__/fixtures/tailwind-output.css @@ -4205,7 +4205,7 @@ button, font-style: italic; } -.roman { +.not-italic { font-style: normal; } @@ -4251,7 +4251,7 @@ button, font-style: italic; } -.hover\:roman:hover { +.hover\:not-italic:hover { font-style: normal; } @@ -8084,7 +8084,7 @@ button, font-style: italic; } - .sm\:roman { + .sm\:not-italic { font-style: normal; } @@ -8130,7 +8130,7 @@ button, font-style: italic; } - .sm\:hover\:roman:hover { + .sm\:hover\:not-italic:hover { font-style: normal; } @@ -11964,7 +11964,7 @@ button, font-style: italic; } - .md\:roman { + .md\:not-italic { font-style: normal; } @@ -12010,7 +12010,7 @@ button, font-style: italic; } - .md\:hover\:roman:hover { + .md\:hover\:not-italic:hover { font-style: normal; } @@ -15844,7 +15844,7 @@ button, font-style: italic; } - .lg\:roman { + .lg\:not-italic { font-style: normal; } @@ -15890,7 +15890,7 @@ button, font-style: italic; } - .lg\:hover\:roman:hover { + .lg\:hover\:not-italic:hover { font-style: normal; } @@ -19724,7 +19724,7 @@ button, font-style: italic; } - .xl\:roman { + .xl\:not-italic { font-style: normal; } @@ -19770,7 +19770,7 @@ button, font-style: italic; } - .xl\:hover\:roman:hover { + .xl\:hover\:not-italic:hover { font-style: normal; } diff --git a/src/generators/textStyle.js b/src/generators/textStyle.js index f411e84abe14..11895c100469 100644 --- a/src/generators/textStyle.js +++ b/src/generators/textStyle.js @@ -3,7 +3,7 @@ import defineClasses from '../util/defineClasses' export default function() { return defineClasses({ italic: { 'font-style': 'italic' }, - roman: { 'font-style': 'normal' }, + 'not-italic': { 'font-style': 'normal' }, uppercase: { 'text-transform': 'uppercase' }, lowercase: { 'text-transform': 'lowercase' }, From fa0e06c2dd5182ab27311f4526fb083afaea1682 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 12:21:51 -0400 Subject: [PATCH 29/45] Generate focus variants last and group-hover variants first --- __tests__/variantsAtRule.test.js | 14 ++++++++------ src/lib/substituteVariantsAtRules.js | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/__tests__/variantsAtRule.test.js b/__tests__/variantsAtRule.test.js index abb0973c6caa..f2d83279690e 100644 --- a/__tests__/variantsAtRule.test.js +++ b/__tests__/variantsAtRule.test.js @@ -69,9 +69,9 @@ test('it can generate group-hover variants', () => { }) }) -test('it can generate hover and focus variants', () => { +test('it can generate all variants', () => { const input = ` - @variants hover, focus { + @variants hover, focus, group-hover { .banana { color: yellow; } .chocolate { color: brown; } } @@ -80,10 +80,12 @@ test('it can generate hover and focus variants', () => { const output = ` .banana { color: yellow; } .chocolate { color: brown; } - .focus\\:banana:focus { color: yellow; } - .focus\\:chocolate:focus { color: brown; } + .group:hover .group-hover\\:banana { color: yellow; } + .group:hover .group-hover\\:chocolate { color: brown; } .hover\\:banana:hover { color: yellow; } .hover\\:chocolate:hover { color: brown; } + .focus\\:banana:focus { color: yellow; } + .focus\\:chocolate:focus { color: brown; } ` return run(input).then(result => { @@ -104,10 +106,10 @@ test('it wraps the output in a responsive at-rule if responsive is included as a @responsive { .banana { color: yellow; } .chocolate { color: brown; } - .focus\\:banana:focus { color: yellow; } - .focus\\:chocolate:focus { color: brown; } .hover\\:banana:hover { color: yellow; } .hover\\:chocolate:hover { color: brown; } + .focus\\:banana:focus { color: yellow; } + .focus\\:chocolate:focus { color: brown; } } ` diff --git a/src/lib/substituteVariantsAtRules.js b/src/lib/substituteVariantsAtRules.js index 652c133fb902..78da039ad612 100644 --- a/src/lib/substituteVariantsAtRules.js +++ b/src/lib/substituteVariantsAtRules.js @@ -48,7 +48,7 @@ export default function(config) { atRule.before(atRule.clone().nodes) - _.forEach(['focus', 'hover', 'group-hover'], variant => { + _.forEach(['group-hover', 'hover', 'focus'], variant => { if (variants.includes(variant)) { variantGenerators[variant](atRule, unwrappedConfig) } From 20461a34180338c73eace9965884d47b0ac2f83a Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 12:56:47 -0400 Subject: [PATCH 30/45] Generate container classes as components, not utilities --- __tests__/fixtures/tailwind-input.css | 2 ++ src/lib/substituteTailwindAtRules.js | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/__tests__/fixtures/tailwind-input.css b/__tests__/fixtures/tailwind-input.css index ac3999689618..53204f9fd112 100644 --- a/__tests__/fixtures/tailwind-input.css +++ b/__tests__/fixtures/tailwind-input.css @@ -1,5 +1,7 @@ @tailwind preflight; +@tailwind components; + @tailwind utilities; @responsive { diff --git a/src/lib/substituteTailwindAtRules.js b/src/lib/substituteTailwindAtRules.js index 8fba3d8dfebc..004e99960384 100644 --- a/src/lib/substituteTailwindAtRules.js +++ b/src/lib/substituteTailwindAtRules.js @@ -22,7 +22,7 @@ export default function(config) { if (atRule.params === 'components') { const pluginComponentTree = postcss.root({ - nodes: pluginComponents, + nodes: [...container(unwrappedConfig), ...pluginComponents], }) pluginComponentTree.walk(node => (node.source = atRule.source)) @@ -39,7 +39,7 @@ export default function(config) { } const tailwindUtilityTree = postcss.root({ - nodes: [...container(unwrappedConfig), ...utilities.nodes], + nodes: utilities.nodes, }) const pluginUtilityTree = postcss.root({ From 6e7ae5891092dc06bacb22022e74ca91d7a8adab Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 13:17:06 -0400 Subject: [PATCH 31/45] Move container component to a built-in plugin --- defaultConfig.stub.js | 4 ++- plugins/container.js | 1 + src/cli.js | 4 +++ src/lib/substituteTailwindAtRules.js | 3 +- src/plugins/container.js | 53 ++++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 plugins/container.js create mode 100644 src/plugins/container.js diff --git a/defaultConfig.stub.js b/defaultConfig.stub.js index a848eae6a61e..b3112cc19547 100644 --- a/defaultConfig.stub.js +++ b/defaultConfig.stub.js @@ -872,7 +872,9 @@ module.exports = { | */ - plugins: [], + plugins: [ + require('./plugins/container')(), + ], /* diff --git a/plugins/container.js b/plugins/container.js new file mode 100644 index 000000000000..32710da91fe5 --- /dev/null +++ b/plugins/container.js @@ -0,0 +1 @@ +module.exports = require('../lib/plugins/container') diff --git a/src/cli.js b/src/cli.js index 7ed4724778df..18b25584e01f 100755 --- a/src/cli.js +++ b/src/cli.js @@ -54,6 +54,10 @@ program const output = fs.readFileSync(path.resolve(__dirname, '../defaultConfig.stub.js'), 'utf8') fs.outputFileSync(destination, output.replace('// let defaultConfig', 'let defaultConfig')) + fs.outputFileSync( + destination, + output.replace("require('./plugins/container')", "require('tailwindcss/plugins/container')") + ) console.log(`Generated Tailwind config: ${destination}`) process.exit() }) diff --git a/src/lib/substituteTailwindAtRules.js b/src/lib/substituteTailwindAtRules.js index 004e99960384..70cdaa10ce79 100644 --- a/src/lib/substituteTailwindAtRules.js +++ b/src/lib/substituteTailwindAtRules.js @@ -1,6 +1,5 @@ import fs from 'fs' import postcss from 'postcss' -import container from '../generators/container' import utilityModules from '../utilityModules' import prefixTree from '../util/prefixTree' import generateModules from '../util/generateModules' @@ -22,7 +21,7 @@ export default function(config) { if (atRule.params === 'components') { const pluginComponentTree = postcss.root({ - nodes: [...container(unwrappedConfig), ...pluginComponents], + nodes: pluginComponents, }) pluginComponentTree.walk(node => (node.source = atRule.source)) diff --git a/src/plugins/container.js b/src/plugins/container.js new file mode 100644 index 000000000000..5ea7e32fcf3b --- /dev/null +++ b/src/plugins/container.js @@ -0,0 +1,53 @@ +/* eslint-disable no-shadow */ +import _ from 'lodash' +import postcss from 'postcss' +import defineClass from '../util/defineClass' + +function extractMinWidths(breakpoints) { + return _.flatMap(breakpoints, breakpoints => { + if (_.isString(breakpoints)) { + breakpoints = { min: breakpoints } + } + + if (!_.isArray(breakpoints)) { + breakpoints = [breakpoints] + } + + return _(breakpoints) + .filter(breakpoint => { + return _.has(breakpoint, 'min') || _.has(breakpoint, 'min-width') + }) + .map(breakpoint => { + return _.get(breakpoint, 'min-width', breakpoint.min) + }) + .value() + }) +} + +module.exports = function(options) { + return function({ addComponents, config }) { + const screens = _.get(options, 'screens', config('screens')) + + const minWidths = extractMinWidths(screens) + + const atRules = _.map(minWidths, minWidth => { + const atRule = postcss.atRule({ + name: 'media', + params: `(min-width: ${minWidth})`, + }) + atRule.append( + defineClass('container', { + 'max-width': minWidth, + }) + ) + return atRule + }) + + addComponents([ + defineClass('container', { + width: '100%', + }), + ...atRules, + ]) + } +} From 088cdc9a41acef4ca096e9af6af7f6b5b601f97e Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 13:20:56 -0400 Subject: [PATCH 32/45] Refactor container plugin to CSS-in-JS --- src/plugins/container.js | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/plugins/container.js b/src/plugins/container.js index 5ea7e32fcf3b..8caad7b56c95 100644 --- a/src/plugins/container.js +++ b/src/plugins/container.js @@ -1,7 +1,5 @@ /* eslint-disable no-shadow */ import _ from 'lodash' -import postcss from 'postcss' -import defineClass from '../util/defineClass' function extractMinWidths(breakpoints) { return _.flatMap(breakpoints, breakpoints => { @@ -31,22 +29,21 @@ module.exports = function(options) { const minWidths = extractMinWidths(screens) const atRules = _.map(minWidths, minWidth => { - const atRule = postcss.atRule({ - name: 'media', - params: `(min-width: ${minWidth})`, - }) - atRule.append( - defineClass('container', { - 'max-width': minWidth, - }) - ) - return atRule + return { + [`@media (min-width: ${minWidth})`]: { + '.container': { + 'max-width': minWidth, + }, + }, + } }) addComponents([ - defineClass('container', { - width: '100%', - }), + { + '.container': { + width: '100%', + }, + }, ...atRules, ]) } From e8c820d78bd01e40ffb6aeb7429d0faab437d66d Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 13:23:02 -0400 Subject: [PATCH 33/45] Remove old container generator --- src/generators/container.js | 49 ------------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 src/generators/container.js diff --git a/src/generators/container.js b/src/generators/container.js deleted file mode 100644 index 3742e2e617bc..000000000000 --- a/src/generators/container.js +++ /dev/null @@ -1,49 +0,0 @@ -/* eslint-disable no-shadow */ -import _ from 'lodash' -import postcss from 'postcss' -import defineClass from '../util/defineClass' - -function extractMinWidths(breakpoints) { - return _.flatMap(breakpoints, breakpoints => { - if (_.isString(breakpoints)) { - breakpoints = { min: breakpoints } - } - - if (!_.isArray(breakpoints)) { - breakpoints = [breakpoints] - } - - return _(breakpoints) - .filter(breakpoint => { - return _.has(breakpoint, 'min') || _.has(breakpoint, 'min-width') - }) - .map(breakpoint => { - return _.get(breakpoint, 'min-width', breakpoint.min) - }) - .value() - }) -} - -export default function({ screens }) { - const minWidths = extractMinWidths(screens) - - const atRules = _.map(minWidths, minWidth => { - const atRule = postcss.atRule({ - name: 'media', - params: `(min-width: ${minWidth})`, - }) - atRule.append( - defineClass('container', { - 'max-width': minWidth, - }) - ) - return atRule - }) - - return [ - defineClass('container', { - width: '100%', - }), - ...atRules, - ] -} From ec804ca3a781e3a100e025219de9b070613e7c9d Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 13:26:08 -0400 Subject: [PATCH 34/45] Add comment about enabling container by default --- defaultConfig.stub.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/defaultConfig.stub.js b/defaultConfig.stub.js index b3112cc19547..f63937827f26 100644 --- a/defaultConfig.stub.js +++ b/defaultConfig.stub.js @@ -864,8 +864,9 @@ module.exports = { | Plugins https://tailwindcss.com/docs/plugins |----------------------------------------------------------------------------- | - | Here is where you can register any additional plugins you'd like to use in - | your project. + | Here is where you can register any plugins you'd like to use in your + | project. Tailwind's built-in `container` plugin is enabled by default to + | give you a Bootstrap-style responsive container component out of the box. | | Be sure to view the complete plugin documentation to learn more about how | the plugin system works. From 174f3723aadc52b49d24fc0292344fc92d66f385 Mon Sep 17 00:00:00 2001 From: Laurence Ioannou Date: Thu, 25 Jan 2018 19:31:11 +0000 Subject: [PATCH 35/45] Update overflow.js --- __tests__/fixtures/tailwind-output.css | 70 ++++++++++++++++++++++---- src/generators/overflow.js | 12 ++++- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/__tests__/fixtures/tailwind-output.css b/__tests__/fixtures/tailwind-output.css index 89e29c21b221..d0a54c5469d0 100644 --- a/__tests__/fixtures/tailwind-output.css +++ b/__tests__/fixtures/tailwind-output.css @@ -3199,16 +3199,26 @@ button, overflow: scroll; } -.overflow-x-scroll { +.overflow-x-auto { overflow-x: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } -.overflow-y-scroll { +.overflow-y-auto { overflow-y: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } +.overflow-x-scroll { + overflow-x: scroll; + -ms-overflow-style: -ms-scrollbar; +} + +.overflow-y-scroll { + overflow-y: scroll; + -ms-overflow-style: -ms-scrollbar; +} + .scrolling-touch { -webkit-overflow-scrolling: touch; } @@ -7090,16 +7100,26 @@ button, overflow: scroll; } - .sm\:overflow-x-scroll { + .sm\:overflow-x-auto { overflow-x: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } - .sm\:overflow-y-scroll { + .sm\:overflow-y-auto { overflow-y: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } + .sm\:overflow-x-scroll { + overflow-x: scroll; + -ms-overflow-style: -ms-scrollbar; + } + + .sm\:overflow-y-scroll { + overflow-y: scroll; + -ms-overflow-style: -ms-scrollbar; + } + .sm\:scrolling-touch { -webkit-overflow-scrolling: touch; } @@ -10974,16 +10994,26 @@ button, overflow: scroll; } - .md\:overflow-x-scroll { + .md\:overflow-x-auto { overflow-x: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } - .md\:overflow-y-scroll { + .md\:overflow-y-auto { overflow-y: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } + .md\:overflow-x-scroll { + overflow-x: scroll; + -ms-overflow-style: -ms-scrollbar; + } + + .md\:overflow-y-scroll { + overflow-y: scroll; + -ms-overflow-style: -ms-scrollbar; + } + .md\:scrolling-touch { -webkit-overflow-scrolling: touch; } @@ -14858,16 +14888,26 @@ button, overflow: scroll; } - .lg\:overflow-x-scroll { + .lg\:overflow-x-auto { overflow-x: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } - .lg\:overflow-y-scroll { + .lg\:overflow-y-auto { overflow-y: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } + .lg\:overflow-x-scroll { + overflow-x: scroll; + -ms-overflow-style: -ms-scrollbar; + } + + .lg\:overflow-y-scroll { + overflow-y: scroll; + -ms-overflow-style: -ms-scrollbar; + } + .lg\:scrolling-touch { -webkit-overflow-scrolling: touch; } @@ -18742,16 +18782,26 @@ button, overflow: scroll; } - .xl\:overflow-x-scroll { + .xl\:overflow-x-auto { overflow-x: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } - .xl\:overflow-y-scroll { + .xl\:overflow-y-auto { overflow-y: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } + .xl\:overflow-x-scroll { + overflow-x: scroll; + -ms-overflow-style: -ms-scrollbar; + } + + .xl\:overflow-y-scroll { + overflow-y: scroll; + -ms-overflow-style: -ms-scrollbar; + } + .xl\:scrolling-touch { -webkit-overflow-scrolling: touch; } diff --git a/src/generators/overflow.js b/src/generators/overflow.js index 0346171d0054..b4529124fff3 100644 --- a/src/generators/overflow.js +++ b/src/generators/overflow.js @@ -6,14 +6,22 @@ export default function() { 'overflow-hidden': { overflow: 'hidden' }, 'overflow-visible': { overflow: 'visible' }, 'overflow-scroll': { overflow: 'scroll' }, - 'overflow-x-scroll': { + 'overflow-x-auto': { 'overflow-x': 'auto', '-ms-overflow-style': '-ms-autohiding-scrollbar', }, - 'overflow-y-scroll': { + 'overflow-y-auto': { 'overflow-y': 'auto', '-ms-overflow-style': '-ms-autohiding-scrollbar', }, + 'overflow-x-scroll': { + 'overflow-x': 'scroll' , + '-ms-overflow-style': '-ms-scrollbar', + }, + 'overflow-y-scroll': { + 'overflow-y': 'scroll' , + '-ms-overflow-style': '-ms-scrollbar', + }, 'scrolling-touch': { '-webkit-overflow-scrolling': 'touch' }, 'scrolling-auto': { '-webkit-overflow-scrolling': 'auto' }, }) From 9fcfbc67308bf728018f3a9f4a984689f6b08631 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 12 Mar 2018 16:15:09 -0400 Subject: [PATCH 36/45] Fix style --- src/generators/overflow.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/generators/overflow.js b/src/generators/overflow.js index b4529124fff3..6a2d5decaee9 100644 --- a/src/generators/overflow.js +++ b/src/generators/overflow.js @@ -15,11 +15,11 @@ export default function() { '-ms-overflow-style': '-ms-autohiding-scrollbar', }, 'overflow-x-scroll': { - 'overflow-x': 'scroll' , + 'overflow-x': 'scroll', '-ms-overflow-style': '-ms-scrollbar', }, 'overflow-y-scroll': { - 'overflow-y': 'scroll' , + 'overflow-y': 'scroll', '-ms-overflow-style': '-ms-scrollbar', }, 'scrolling-touch': { '-webkit-overflow-scrolling': 'touch' }, From 1b24db924412d8fd816db837bec1c41382babcfb Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 07:55:49 -0400 Subject: [PATCH 37/45] Sort cursor utilities --- __tests__/fixtures/tailwind-output.css | 60 +++++++++++++++++--------- src/generators/cursor.js | 2 +- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/__tests__/fixtures/tailwind-output.css b/__tests__/fixtures/tailwind-output.css index 83e19e7736bd..4ba51d966627 100644 --- a/__tests__/fixtures/tailwind-output.css +++ b/__tests__/fixtures/tailwind-output.css @@ -2219,14 +2219,18 @@ button, cursor: pointer; } -.cursor-not-allowed { - cursor: not-allowed; -} - .cursor-wait { cursor: wait; } +.cursor-move { + cursor: move; +} + +.cursor-not-allowed { + cursor: not-allowed; +} + .block { display: block; } @@ -6124,14 +6128,18 @@ button, cursor: pointer; } - .sm\:cursor-not-allowed { - cursor: not-allowed; - } - .sm\:cursor-wait { cursor: wait; } + .sm\:cursor-move { + cursor: move; + } + + .sm\:cursor-not-allowed { + cursor: not-allowed; + } + .sm\:block { display: block; } @@ -10022,14 +10030,18 @@ button, cursor: pointer; } - .md\:cursor-not-allowed { - cursor: not-allowed; - } - .md\:cursor-wait { cursor: wait; } + .md\:cursor-move { + cursor: move; + } + + .md\:cursor-not-allowed { + cursor: not-allowed; + } + .md\:block { display: block; } @@ -13920,14 +13932,18 @@ button, cursor: pointer; } - .lg\:cursor-not-allowed { - cursor: not-allowed; - } - .lg\:cursor-wait { cursor: wait; } + .lg\:cursor-move { + cursor: move; + } + + .lg\:cursor-not-allowed { + cursor: not-allowed; + } + .lg\:block { display: block; } @@ -17818,14 +17834,18 @@ button, cursor: pointer; } - .xl\:cursor-not-allowed { - cursor: not-allowed; - } - .xl\:cursor-wait { cursor: wait; } + .xl\:cursor-move { + cursor: move; + } + + .xl\:cursor-not-allowed { + cursor: not-allowed; + } + .xl\:block { display: block; } diff --git a/src/generators/cursor.js b/src/generators/cursor.js index 9ede44154828..b2eda2ab24bb 100644 --- a/src/generators/cursor.js +++ b/src/generators/cursor.js @@ -5,8 +5,8 @@ export default function() { 'cursor-auto': { cursor: 'auto' }, 'cursor-default': { cursor: 'default' }, 'cursor-pointer': { cursor: 'pointer' }, + 'cursor-wait': { cursor: 'wait' }, 'cursor-move': { cursor: 'move' }, 'cursor-not-allowed': { cursor: 'not-allowed' }, - 'cursor-wait': { cursor: 'wait' }, }) } From 7c88a6c4744f505475ee7f8d9a573b6de286cfa0 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 09:41:23 -0400 Subject: [PATCH 38/45] Build separate components dist file --- css/components.css | 1 + src/build.js | 1 + 2 files changed, 2 insertions(+) create mode 100644 css/components.css diff --git a/css/components.css b/css/components.css new file mode 100644 index 000000000000..020aabafdeaa --- /dev/null +++ b/css/components.css @@ -0,0 +1 @@ +@tailwind components; diff --git a/src/build.js b/src/build.js index 47ac46069137..3dcc85e8cb6f 100644 --- a/src/build.js +++ b/src/build.js @@ -40,6 +40,7 @@ console.info('Building Tailwind!') Promise.all([ buildDistFile('preflight'), + buildDistFile('components'), buildDistFile('utilities'), buildDistFile('tailwind'), ]).then(() => { From 055e3eea783e92be9a64165059b7d696b6334a43 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 09:49:48 -0400 Subject: [PATCH 39/45] Move CSS files to root for easier imports --- css/components.css => components.css | 0 preflight.css | 1 + src/build.js | 6 +++--- css/tailwind.css => tailwind.css | 0 css/utilities.css => utilities.css | 0 5 files changed, 4 insertions(+), 3 deletions(-) rename css/components.css => components.css (100%) create mode 100644 preflight.css rename css/tailwind.css => tailwind.css (100%) rename css/utilities.css => utilities.css (100%) diff --git a/css/components.css b/components.css similarity index 100% rename from css/components.css rename to components.css diff --git a/preflight.css b/preflight.css new file mode 100644 index 000000000000..f58c35efd778 --- /dev/null +++ b/preflight.css @@ -0,0 +1 @@ +@tailwind preflight; diff --git a/src/build.js b/src/build.js index 3dcc85e8cb6f..3785c0d9c29a 100644 --- a/src/build.js +++ b/src/build.js @@ -5,14 +5,14 @@ import CleanCSS from 'clean-css' function buildDistFile(filename) { return new Promise((resolve, reject) => { - console.log(`Processing ./css/${filename}.css...`) + console.log(`Processing ./${filename}.css...`) - fs.readFile(`./css/${filename}.css`, (err, css) => { + fs.readFile(`./${filename}.css`, (err, css) => { if (err) throw err return postcss([tailwind(), require('autoprefixer')]) .process(css, { - from: `./css/${filename}.css`, + from: `./${filename}.css`, to: `./dist/${filename}.css`, map: { inline: false }, }) diff --git a/css/tailwind.css b/tailwind.css similarity index 100% rename from css/tailwind.css rename to tailwind.css diff --git a/css/utilities.css b/utilities.css similarity index 100% rename from css/utilities.css rename to utilities.css From de24a2a45e37eba22d349aaa41d98280f26efd96 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 12:28:32 -0400 Subject: [PATCH 40/45] Remove special scrollbar styling for IE/Edge --- __tests__/fixtures/tailwind-output.css | 20 -------------------- src/generators/overflow.js | 20 ++++---------------- 2 files changed, 4 insertions(+), 36 deletions(-) diff --git a/__tests__/fixtures/tailwind-output.css b/__tests__/fixtures/tailwind-output.css index 4ba51d966627..eccc41619d74 100644 --- a/__tests__/fixtures/tailwind-output.css +++ b/__tests__/fixtures/tailwind-output.css @@ -3209,22 +3209,18 @@ button, .overflow-x-auto { overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .overflow-y-auto { overflow-y: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .overflow-x-scroll { overflow-x: scroll; - -ms-overflow-style: -ms-scrollbar; } .overflow-y-scroll { overflow-y: scroll; - -ms-overflow-style: -ms-scrollbar; } .scrolling-touch { @@ -7118,22 +7114,18 @@ button, .sm\:overflow-x-auto { overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .sm\:overflow-y-auto { overflow-y: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .sm\:overflow-x-scroll { overflow-x: scroll; - -ms-overflow-style: -ms-scrollbar; } .sm\:overflow-y-scroll { overflow-y: scroll; - -ms-overflow-style: -ms-scrollbar; } .sm\:scrolling-touch { @@ -11020,22 +11012,18 @@ button, .md\:overflow-x-auto { overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .md\:overflow-y-auto { overflow-y: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .md\:overflow-x-scroll { overflow-x: scroll; - -ms-overflow-style: -ms-scrollbar; } .md\:overflow-y-scroll { overflow-y: scroll; - -ms-overflow-style: -ms-scrollbar; } .md\:scrolling-touch { @@ -14922,22 +14910,18 @@ button, .lg\:overflow-x-auto { overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .lg\:overflow-y-auto { overflow-y: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .lg\:overflow-x-scroll { overflow-x: scroll; - -ms-overflow-style: -ms-scrollbar; } .lg\:overflow-y-scroll { overflow-y: scroll; - -ms-overflow-style: -ms-scrollbar; } .lg\:scrolling-touch { @@ -18824,22 +18808,18 @@ button, .xl\:overflow-x-auto { overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .xl\:overflow-y-auto { overflow-y: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; } .xl\:overflow-x-scroll { overflow-x: scroll; - -ms-overflow-style: -ms-scrollbar; } .xl\:overflow-y-scroll { overflow-y: scroll; - -ms-overflow-style: -ms-scrollbar; } .xl\:scrolling-touch { diff --git a/src/generators/overflow.js b/src/generators/overflow.js index 6a2d5decaee9..51047ed6f402 100644 --- a/src/generators/overflow.js +++ b/src/generators/overflow.js @@ -6,22 +6,10 @@ export default function() { 'overflow-hidden': { overflow: 'hidden' }, 'overflow-visible': { overflow: 'visible' }, 'overflow-scroll': { overflow: 'scroll' }, - 'overflow-x-auto': { - 'overflow-x': 'auto', - '-ms-overflow-style': '-ms-autohiding-scrollbar', - }, - 'overflow-y-auto': { - 'overflow-y': 'auto', - '-ms-overflow-style': '-ms-autohiding-scrollbar', - }, - 'overflow-x-scroll': { - 'overflow-x': 'scroll', - '-ms-overflow-style': '-ms-scrollbar', - }, - 'overflow-y-scroll': { - 'overflow-y': 'scroll', - '-ms-overflow-style': '-ms-scrollbar', - }, + 'overflow-x-auto': { 'overflow-x': 'auto' }, + 'overflow-y-auto': { 'overflow-y': 'auto' }, + 'overflow-x-scroll': { 'overflow-x': 'scroll' }, + 'overflow-y-scroll': { 'overflow-y': 'scroll' }, 'scrolling-touch': { '-webkit-overflow-scrolling': 'touch' }, 'scrolling-auto': { '-webkit-overflow-scrolling': 'auto' }, }) From c254d97af15a6c897e138ed208dfae1fd3018406 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 13:50:13 -0400 Subject: [PATCH 41/45] Tweak comment in config --- defaultConfig.stub.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/defaultConfig.stub.js b/defaultConfig.stub.js index 19e986e37354..d83d7e6bca54 100644 --- a/defaultConfig.stub.js +++ b/defaultConfig.stub.js @@ -824,8 +824,12 @@ module.exports = { | Here is where you control which modules are generated and what variants are | generated for each of those modules. | - | Currently supported variants: 'responsive', 'hover', 'active', focus', - | 'group-hover' + | Currently supported variants: + | - responsive + | - hover + | - focus + | - active + | - group-hover | | To disable a module completely, use `false` instead of an array. | From 9ee6a30d5f16c3fa074984d177358fd2d74c4074 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 13:50:44 -0400 Subject: [PATCH 42/45] Add center and padding options to container plugin --- __tests__/containerPlugin.test.js | 162 ++++++++++++++++++++++++++++++ defaultConfig.stub.js | 5 +- src/plugins/container.js | 10 +- 3 files changed, 173 insertions(+), 4 deletions(-) create mode 100644 __tests__/containerPlugin.test.js diff --git a/__tests__/containerPlugin.test.js b/__tests__/containerPlugin.test.js new file mode 100644 index 000000000000..ef7ac669f846 --- /dev/null +++ b/__tests__/containerPlugin.test.js @@ -0,0 +1,162 @@ +import _ from 'lodash' +import postcss from 'postcss' +import processPlugins from '../src/util/processPlugins' +import container from '../src/plugins/container' + +function css(nodes) { + return postcss.root({ nodes }).toString() +} + +function processPluginsWithValidConfig(config) { + return processPlugins( + _.defaultsDeep(config, { + screens: { + sm: '576px', + md: '768px', + lg: '992px', + xl: '1200px', + }, + options: { + prefix: '', + important: false, + separator: ':', + }, + }) + ) +} + +test('options are not required', () => { + const [components] = processPluginsWithValidConfig({ + plugins: [container()], + }) + + expect(css(components)).toMatchCss(` + .container { width: 100% } + @media (min-width: 576px) { + .container { max-width: 576px } + } + @media (min-width: 768px) { + .container { max-width: 768px } + } + @media (min-width: 992px) { + .container { max-width: 992px } + } + @media (min-width: 1200px) { + .container { max-width: 1200px } + } + `) +}) + +test('screens can be specified explicitly', () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + container({ + screens: { + sm: '400px', + lg: '500px', + }, + }), + ], + }) + + expect(css(components)).toMatchCss(` + .container { width: 100% } + @media (min-width: 400px) { + .container { max-width: 400px } + } + @media (min-width: 500px) { + .container { max-width: 500px } + } + `) +}) + +test('the container can be centered by default', () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + container({ + center: true, + }), + ], + }) + + expect(css(components)).toMatchCss(` + .container { + width: 100%; + margin-right: auto; + margin-left: auto + } + @media (min-width: 576px) { + .container { max-width: 576px } + } + @media (min-width: 768px) { + .container { max-width: 768px } + } + @media (min-width: 992px) { + .container { max-width: 992px } + } + @media (min-width: 1200px) { + .container { max-width: 1200px } + } + `) +}) + +test('horizontal padding can be included by default', () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + container({ + padding: '2rem', + }), + ], + }) + + expect(css(components)).toMatchCss(` + .container { + width: 100%; + padding-right: 2rem; + padding-left: 2rem + } + @media (min-width: 576px) { + .container { max-width: 576px } + } + @media (min-width: 768px) { + .container { max-width: 768px } + } + @media (min-width: 992px) { + .container { max-width: 992px } + } + @media (min-width: 1200px) { + .container { max-width: 1200px } + } + `) +}) + +test('setting all options at once', () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + container({ + screens: { + sm: '400px', + lg: '500px', + }, + center: true, + padding: '2rem', + }), + ], + }) + + expect(css(components)).toMatchCss(` + .container { + width: 100%; + margin-right: auto; + margin-left: auto; + padding-right: 2rem; + padding-left: 2rem + } + @media (min-width: 400px) { + .container { max-width: 400px } + } + @media (min-width: 500px) { + .container { max-width: 500px } + } + `) +}) diff --git a/defaultConfig.stub.js b/defaultConfig.stub.js index d83d7e6bca54..b2cf9fc6ebad 100644 --- a/defaultConfig.stub.js +++ b/defaultConfig.stub.js @@ -899,7 +899,10 @@ module.exports = { */ plugins: [ - require('./plugins/container')(), + require('./plugins/container')({ + // center: true, + // padding: '1rem', + }), ], diff --git a/src/plugins/container.js b/src/plugins/container.js index 8caad7b56c95..235888725efc 100644 --- a/src/plugins/container.js +++ b/src/plugins/container.js @@ -40,9 +40,13 @@ module.exports = function(options) { addComponents([ { - '.container': { - width: '100%', - }, + '.container': Object.assign( + { width: '100%' }, + _.get(options, 'center', false) ? { marginRight: 'auto', marginLeft: 'auto' } : {}, + _.has(options, 'padding') + ? { paddingRight: options.padding, paddingLeft: options.padding } + : {} + ), }, ...atRules, ]) From cfb676acd77cebdca9dbda9c00ad2472adc8bf75 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 14:07:05 -0400 Subject: [PATCH 43/45] Test that container screens can just be an array --- __tests__/containerPlugin.test.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/__tests__/containerPlugin.test.js b/__tests__/containerPlugin.test.js index ef7ac669f846..e7ebdb337a24 100644 --- a/__tests__/containerPlugin.test.js +++ b/__tests__/containerPlugin.test.js @@ -70,6 +70,29 @@ test('screens can be specified explicitly', () => { `) }) +test('screens can be an array', () => { + const [components] = processPluginsWithValidConfig({ + plugins: [ + container({ + screens: [ + '400px', + '500px', + ], + }), + ], + }) + + expect(css(components)).toMatchCss(` + .container { width: 100% } + @media (min-width: 400px) { + .container { max-width: 400px } + } + @media (min-width: 500px) { + .container { max-width: 500px } + } + `) +}) + test('the container can be centered by default', () => { const [components] = processPluginsWithValidConfig({ plugins: [ From 0f0a4f45e8e2122e99850d11ad2c576be249e366 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 14:15:05 -0400 Subject: [PATCH 44/45] Fix style --- __tests__/containerPlugin.test.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/__tests__/containerPlugin.test.js b/__tests__/containerPlugin.test.js index e7ebdb337a24..a82ccf18d94f 100644 --- a/__tests__/containerPlugin.test.js +++ b/__tests__/containerPlugin.test.js @@ -74,10 +74,7 @@ test('screens can be an array', () => { const [components] = processPluginsWithValidConfig({ plugins: [ container({ - screens: [ - '400px', - '500px', - ], + screens: ['400px', '500px'], }), ], }) From c32519d9e1038c3587c92fd950a3dbdb7552185f Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 13 Mar 2018 16:13:16 -0400 Subject: [PATCH 45/45] 0.5.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ab463f512c1..0a65075b7f60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "tailwindcss", - "version": "0.4.3", + "version": "0.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3f904cc88dca..e5fb0abc584b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tailwindcss", - "version": "0.4.3", + "version": "0.5.0", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "main": "lib/index.js",