From 33c62998951d45a325869ed18e5d97da38366597 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 29 Jun 2017 16:37:48 -0700 Subject: [PATCH 01/29] Prototyping --- src/demo-app/demo-app-module.ts | 8 +++-- src/demo-app/demo-app/demo-app.ts | 3 +- src/demo-app/demo-app/routes.ts | 2 ++ src/demo-app/stepper/stepper-demo.html | 4 +++ src/demo-app/stepper/stepper-demo.ts | 14 +++++++++ src/lib/module.ts | 4 ++- src/lib/public_api.ts | 1 + src/lib/stepper/index.ts | 21 +++++++++++++ src/lib/stepper/step.ts | 23 +++++++++++++++ src/lib/stepper/stepper.html | 14 +++++++++ src/lib/stepper/stepper.scss | 0 src/lib/stepper/stepper.ts | 41 ++++++++++++++++++++++++++ 12 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 src/demo-app/stepper/stepper-demo.html create mode 100644 src/demo-app/stepper/stepper-demo.ts create mode 100644 src/lib/stepper/index.ts create mode 100644 src/lib/stepper/step.ts create mode 100644 src/lib/stepper/stepper.html create mode 100644 src/lib/stepper/stepper.scss create mode 100644 src/lib/stepper/stepper.ts diff --git a/src/demo-app/demo-app-module.ts b/src/demo-app/demo-app-module.ts index 98b2c3dc8b1e..7ffb84985c36 100644 --- a/src/demo-app/demo-app-module.ts +++ b/src/demo-app/demo-app-module.ts @@ -76,10 +76,12 @@ import { MdToolbarModule, MdTooltipModule, OverlayContainer, - StyleModule + StyleModule, + MdStepperModule, } from '@angular/material'; import {CdkTableModule} from '@angular/cdk'; import {TableHeaderDemo} from './table/table-header-demo'; +import {StepperDemo} from './stepper/stepper-demo'; /** * NgModule that includes all Material modules that are required to serve the demo-app. @@ -118,7 +120,8 @@ import {TableHeaderDemo} from './table/table-header-demo'; MdTooltipModule, MdNativeDateModule, CdkTableModule, - StyleModule + StyleModule, + MdStepperModule, ] }) export class DemoMaterialModule {} @@ -184,6 +187,7 @@ export class DemoMaterialModule {} PlatformDemo, TypographyDemo, ExpansionDemo, + StepperDemo, ], providers: [ {provide: OverlayContainer, useClass: FullscreenOverlayContainer}, diff --git a/src/demo-app/demo-app/demo-app.ts b/src/demo-app/demo-app/demo-app.ts index 3f422c3ccd5c..41099f28f884 100644 --- a/src/demo-app/demo-app/demo-app.ts +++ b/src/demo-app/demo-app/demo-app.ts @@ -67,7 +67,8 @@ export class DemoApp { {name: 'Tooltip', route: 'tooltip'}, {name: 'Platform', route: 'platform'}, {name: 'Style', route: 'style'}, - {name: 'Typography', route: 'typography'} + {name: 'Typography', route: 'typography'}, + {name: 'Stepper', route: 'stepper'} ]; constructor(private _element: ElementRef) { diff --git a/src/demo-app/demo-app/routes.ts b/src/demo-app/demo-app/routes.ts index 875dc907e604..61a99aef41df 100644 --- a/src/demo-app/demo-app/routes.ts +++ b/src/demo-app/demo-app/routes.ts @@ -36,6 +36,7 @@ import {DatepickerDemo} from '../datepicker/datepicker-demo'; import {TableDemo} from '../table/table-demo'; import {TypographyDemo} from '../typography/typography-demo'; import {ExpansionDemo} from '../expansion/expansion-demo'; +import {StepperDemo} from '../stepper/stepper-demo'; export const DEMO_APP_ROUTES: Routes = [ {path: '', component: Home}, @@ -74,4 +75,5 @@ export const DEMO_APP_ROUTES: Routes = [ {path: 'style', component: StyleDemo}, {path: 'typography', component: TypographyDemo}, {path: 'expansion', component: ExpansionDemo}, + {path: 'stepper', component: StepperDemo}, ]; diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html new file mode 100644 index 000000000000..6ad2207c69be --- /dev/null +++ b/src/demo-app/stepper/stepper-demo.html @@ -0,0 +1,4 @@ +

Horizontal Stepper Demo

+ + + \ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts new file mode 100644 index 000000000000..c352169d1851 --- /dev/null +++ b/src/demo-app/stepper/stepper-demo.ts @@ -0,0 +1,14 @@ +import {Component} from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'stepper-demo', + templateUrl: 'stepper-demo.html', +}) +export class StepperDemo { + steps: [ + {label: 'Step 1', content: 'Content 1'}, + {label: 'Step 2', content: 'Content 2', active: true}, + {label: 'Step 3', content: 'Content 3', disabled: true} + ]; +} \ No newline at end of file diff --git a/src/lib/module.ts b/src/lib/module.ts index e5fa0671e79b..a78d65b2f9e6 100644 --- a/src/lib/module.ts +++ b/src/lib/module.ts @@ -48,6 +48,7 @@ import {MdExpansionModule} from './expansion/index'; import {MdTableModule} from './table/index'; import {MdSortModule} from './sort/index'; import {MdPaginatorModule} from './paginator/index'; +import {MdStepperModule} from './stepper/index'; const MATERIAL_MODULES = [ MdAutocompleteModule, @@ -86,7 +87,8 @@ const MATERIAL_MODULES = [ A11yModule, PlatformModule, MdCommonModule, - ObserveContentModule + ObserveContentModule, + MdStepperModule, ]; /** @deprecated */ diff --git a/src/lib/public_api.ts b/src/lib/public_api.ts index fbaf29694867..7059416aae3d 100644 --- a/src/lib/public_api.ts +++ b/src/lib/public_api.ts @@ -44,3 +44,4 @@ export * from './tabs/index'; export * from './tabs/tab-nav-bar/index'; export * from './toolbar/index'; export * from './tooltip/index'; +export * from './stepper/index'; diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts new file mode 100644 index 000000000000..7f96e6188ca7 --- /dev/null +++ b/src/lib/stepper/index.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {NgModule} from '@angular/core'; +import {MdStep} from './step'; +import {MdStepper} from './stepper'; +import {MdCommonModule} from '../core'; +import {CommonModule} from '@angular/common'; +@NgModule({ + imports: [MdCommonModule, CommonModule], + exports: [MdStep, MdStepper, MdCommonModule], + declarations: [MdStep, MdStepper] +}) +export class MdStepperModule {} + +export * from './stepper'; diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts new file mode 100644 index 000000000000..01e22418b87d --- /dev/null +++ b/src/lib/stepper/step.ts @@ -0,0 +1,23 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Component} from '@angular/core'; +import {TemplatePortal} from '../core'; +@Component({ + moduleId: module.id, + selector: 'mat-step', + templateUrl: '' +}) +export class MdStep { + active: boolean = false; + isLast: boolean = false; + + /** The portal that will be the hosted content of the step */ + private _contentPortal: TemplatePortal | null = null; + get content(): TemplatePortal | null { return this._contentPortal; }; +} \ No newline at end of file diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html new file mode 100644 index 000000000000..f20cd8949549 --- /dev/null +++ b/src/lib/stepper/stepper.html @@ -0,0 +1,14 @@ +
+
+
{{_steps.indexOf(step) + 1}}
+
+
+
{{step.label}}
+
Optional
+
+
+
+
{{step.content}}
+
+
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper.scss b/src/lib/stepper/stepper.scss new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts new file mode 100644 index 000000000000..04b1266ae7c4 --- /dev/null +++ b/src/lib/stepper/stepper.ts @@ -0,0 +1,41 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Component, ContentChildren, Input, QueryList} from '@angular/core'; +import {MdStep} from './step'; + +export class MdStepChangeEvent { + index: number; + step: MdStep; +} + +@Component({ + moduleId: module.id, + selector: 'mat-stepper', + templateUrl: 'stepper.html', + styleUrls: ['stepper.scss'], + host: { + '[attr.aria-orientation]': 'orientation' + }, +}) + +export class MdStepper { + + @ContentChildren(MdStep) _steps: QueryList; + + @Input() + get orientation() { return this._orientation; } + set orientation(value: string) { + this._orientation = value; + } + private _orientation: string = "horizontal"; + + selectStep(step: MdStep): void { + step.active = true; + } +} \ No newline at end of file From 366b4c3637a45eae4a7db496797fa7f80be7cfbc Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 29 Jun 2017 17:56:04 -0700 Subject: [PATCH 02/29] Further work --- src/demo-app/stepper/stepper-demo.html | 5 +++-- src/demo-app/stepper/stepper-demo.ts | 2 +- src/lib/stepper/step.ts | 5 +++-- src/lib/stepper/stepper.html | 5 +++-- src/lib/stepper/stepper.ts | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 6ad2207c69be..ea35bf39bfe5 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,4 +1,5 @@

Horizontal Stepper Demo

- - \ No newline at end of file + {{step.content}} + +
{{step.label}}
\ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index c352169d1851..225db70846b3 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -11,4 +11,4 @@ export class StepperDemo { {label: 'Step 2', content: 'Content 2', active: true}, {label: 'Step 3', content: 'Content 3', disabled: true} ]; -} \ No newline at end of file +} diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 01e22418b87d..010c776e6074 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -6,12 +6,13 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component} from '@angular/core'; +import {Component, Input} from '@angular/core'; import {TemplatePortal} from '../core'; + @Component({ moduleId: module.id, selector: 'mat-step', - templateUrl: '' + template: '' }) export class MdStep { active: boolean = false; diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index f20cd8949549..7a7cba0e291d 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -6,9 +6,10 @@
{{step.label}}
Optional
-
+
\\ +
{{step.content}}
-
{{step.content}}
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 04b1266ae7c4..1c6174c2802c 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -18,7 +18,7 @@ export class MdStepChangeEvent { moduleId: module.id, selector: 'mat-stepper', templateUrl: 'stepper.html', - styleUrls: ['stepper.scss'], + //styleUrls: ['stepper.scss'], host: { '[attr.aria-orientation]': 'orientation' }, From d8e3075b27c81e42f6a339126d9402f1d72aa092 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Fri, 30 Jun 2017 17:40:20 -0700 Subject: [PATCH 03/29] Further prototyping --- src/lib/stepper/step.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/lib/stepper/step.html diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html new file mode 100644 index 000000000000..e69de29bb2d1 From f94d966e41e8a827b5f9a54ed2b13ea630d31431 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Fri, 30 Jun 2017 17:40:53 -0700 Subject: [PATCH 04/29] Further prototyping --- src/demo-app/stepper/stepper-demo.html | 8 ++++---- src/demo-app/stepper/stepper-demo.ts | 2 +- src/lib/stepper/step.html | 2 ++ src/lib/stepper/step.ts | 23 ++++++++++++++++++++--- src/lib/stepper/stepper.html | 12 ++++++++---- src/lib/stepper/stepper.ts | 14 ++++++++++++-- src/lib/tabs/tab-header.html | 1 + 7 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index ea35bf39bfe5..655ba1733907 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,5 +1,5 @@

Horizontal Stepper Demo

- - {{step.content}} - -
{{step.label}}
\ No newline at end of file + + + \ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 225db70846b3..be95c240e3b5 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -6,7 +6,7 @@ import {Component} from '@angular/core'; templateUrl: 'stepper-demo.html', }) export class StepperDemo { - steps: [ + steps = [ {label: 'Step 1', content: 'Content 1'}, {label: 'Step 2', content: 'Content 2', active: true}, {label: 'Step 3', content: 'Content 3', disabled: true} diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index e69de29bb2d1..8e5ee367cc77 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 010c776e6074..d279ddd9c09c 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -15,10 +15,27 @@ import {TemplatePortal} from '../core'; template: '' }) export class MdStep { - active: boolean = false; + + @Input() + get active() { return this._active; } + set active(value: boolean) { + this._active = value; + } + private _active: boolean; + + @Input() + label: string; + + @Input() + get completed() { return this._completed; } + set completed(value: boolean) { + this._completed = value; + } + private _completed: boolean = false; + isLast: boolean = false; /** The portal that will be the hosted content of the step */ private _contentPortal: TemplatePortal | null = null; - get content(): TemplatePortal | null { return this._contentPortal; }; -} \ No newline at end of file + get content(): TemplatePortal | null { return this._contentPortal; } +} diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index 7a7cba0e291d..ee2257f61baa 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -1,15 +1,19 @@
-
{{_steps.indexOf(step) + 1}}
+
{{indexOf(step) + 1}}
{{step.label}}
Optional
-
\\ -
{{step.content}}
+
+
{{step.content}}
-
+
+ ad +
+
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 1c6174c2802c..7770da269322 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -33,9 +33,19 @@ export class MdStepper { set orientation(value: string) { this._orientation = value; } - private _orientation: string = "horizontal"; + private _orientation: string; + + horizontal: boolean = this._orientation === 'horizontal'; + + activeStep: MdStep; selectStep(step: MdStep): void { step.active = true; + this.activeStep = step; } -} \ No newline at end of file + + indexOf(step: MdStep): number { + let stepsArray = this._steps.toArray(); + return stepsArray.indexOf(step); + } +} diff --git a/src/lib/tabs/tab-header.html b/src/lib/tabs/tab-header.html index 62a15bb6bed6..ebcc30925961 100644 --- a/src/lib/tabs/tab-header.html +++ b/src/lib/tabs/tab-header.html @@ -14,6 +14,7 @@
+
Date: Wed, 5 Jul 2017 14:53:16 -0700 Subject: [PATCH 05/29] Further work --- src/demo-app/stepper/stepper-demo.html | 8 +++++++- src/lib/stepper/step.html | 3 +-- src/lib/stepper/step.ts | 19 +++++++++++++------ src/lib/stepper/stepper.html | 5 ++--- src/lib/stepper/stepper.ts | 7 ++++--- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 655ba1733907..96675d6e80ba 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,5 +1,11 @@ +

Veritcal Stepper Demo

+ + {{step.content}} + +

Horizontal Stepper Demo

- + \ No newline at end of file diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index 8e5ee367cc77..e7b6a7943273 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index d279ddd9c09c..4981ad196b5d 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -6,16 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, Input} from '@angular/core'; -import {TemplatePortal} from '../core'; +import {Component, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core'; +import {TemplatePortal, PortalHostDirective} from '../core'; @Component({ moduleId: module.id, selector: 'mat-step', - template: '' + templateUrl: '', }) export class MdStep { + // @ViewChild(TemplateRef) _content: TemplateRef; + // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; + @Input() get active() { return this._active; } set active(value: boolean) { @@ -35,7 +38,11 @@ export class MdStep { isLast: boolean = false; - /** The portal that will be the hosted content of the step */ - private _contentPortal: TemplatePortal | null = null; - get content(): TemplatePortal | null { return this._contentPortal; } + // /** The portal that will be the hosted content of the step */ + // private _contentPortal: TemplatePortal | null = null; + // get content(): TemplatePortal | null { return this._contentPortal; } + + // constructor(private _viewContainerRef: ViewContainerRef) {} + + } diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index ee2257f61baa..b14ebbbec099 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -7,11 +7,10 @@
Optional
-
{{step.content}}
+
- -
+
ad
diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 7770da269322..e2d1b41198c8 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -8,6 +8,7 @@ import {Component, ContentChildren, Input, QueryList} from '@angular/core'; import {MdStep} from './step'; +import {TemplatePortal} from '../core'; export class MdStepChangeEvent { index: number; @@ -20,7 +21,7 @@ export class MdStepChangeEvent { templateUrl: 'stepper.html', //styleUrls: ['stepper.scss'], host: { - '[attr.aria-orientation]': 'orientation' + '[attr.aria-orientation]': 'orientation', }, }) @@ -28,6 +29,8 @@ export class MdStepper { @ContentChildren(MdStep) _steps: QueryList; + // @Input('content') _content: TemplatePortal; + @Input() get orientation() { return this._orientation; } set orientation(value: string) { @@ -35,8 +38,6 @@ export class MdStepper { } private _orientation: string; - horizontal: boolean = this._orientation === 'horizontal'; - activeStep: MdStep; selectStep(step: MdStep): void { From 63d141ec46d9432ab351e738451d814f50ddc505 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Wed, 5 Jul 2017 18:24:27 -0700 Subject: [PATCH 06/29] Adding event emitters --- src/demo-app/stepper/stepper-demo.html | 4 ++- src/demo-app/stepper/stepper-demo.ts | 4 +-- src/lib/stepper/index.ts | 4 ++- src/lib/stepper/step.html | 3 ++- src/lib/stepper/step.ts | 16 ++++++++---- src/lib/stepper/stepper.html | 14 +++++----- src/lib/stepper/stepper.ts | 36 +++++++++++++++++++++----- 7 files changed, 57 insertions(+), 24 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 96675d6e80ba..8c8471cb6ccc 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,7 +1,9 @@

Veritcal Stepper Demo

{{step.content}} + [active]="step.active" [completed]="step.completed"> +
{{step.content}}
+

Horizontal Stepper Demo

diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index be95c240e3b5..0a7ced1c544b 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -8,7 +8,7 @@ import {Component} from '@angular/core'; export class StepperDemo { steps = [ {label: 'Step 1', content: 'Content 1'}, - {label: 'Step 2', content: 'Content 2', active: true}, - {label: 'Step 3', content: 'Content 3', disabled: true} + {label: 'Step 2', content: 'Content 2'}, + {label: 'Step 3', content: 'Content 3'}, ]; } diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts index 7f96e6188ca7..4559f2e298b0 100644 --- a/src/lib/stepper/index.ts +++ b/src/lib/stepper/index.ts @@ -11,8 +11,10 @@ import {MdStep} from './step'; import {MdStepper} from './stepper'; import {MdCommonModule} from '../core'; import {CommonModule} from '@angular/common'; +import {PortalModule} from "@angular/cdk"; +import {MdButtonModule} from "../button/index"; @NgModule({ - imports: [MdCommonModule, CommonModule], + imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule], exports: [MdStep, MdStepper, MdCommonModule], declarations: [MdStep, MdStepper] }) diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index e7b6a7943273..f96a283b1f1f 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1 +1,2 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 4981ad196b5d..0aec78ee0731 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -12,7 +12,7 @@ import {TemplatePortal, PortalHostDirective} from '../core'; @Component({ moduleId: module.id, selector: 'mat-step', - templateUrl: '', + templateUrl: 'step.html', }) export class MdStep { @@ -24,7 +24,7 @@ export class MdStep { set active(value: boolean) { this._active = value; } - private _active: boolean; + private _active: boolean = true; @Input() label: string; @@ -38,9 +38,15 @@ export class MdStep { isLast: boolean = false; - // /** The portal that will be the hosted content of the step */ - // private _contentPortal: TemplatePortal | null = null; - // get content(): TemplatePortal | null { return this._contentPortal; } + private _selected: boolean = false; + set selected(value: boolean) { + this._selected = value; + } + get selected(): boolean { return this._selected; } + + /** The portal that will be the hosted content of the step */ + private _contentPortal: TemplatePortal | null = null; + get content(): TemplatePortal | null { return this._contentPortal; } // constructor(private _viewContainerRef: ViewContainerRef) {} diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index b14ebbbec099..755f32de9baf 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -1,18 +1,18 @@
-
-
{{indexOf(step) + 1}}
-
-
+
+
+
{{indexOf(step) + 1}}
+
{{indexOf(step) + 1}}
{{step.label}}
-
Optional
-
+
ad
- + +
\ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index e2d1b41198c8..31bff6d7f3d5 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -6,7 +6,10 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, ContentChildren, Input, QueryList} from '@angular/core'; +import { + Component, ContentChildren, EventEmitter, Input, Output, QueryList, OnInit, + AfterViewChecked, AfterViewInit +} from '@angular/core'; import {MdStep} from './step'; import {TemplatePortal} from '../core'; @@ -25,12 +28,10 @@ export class MdStepChangeEvent { }, }) -export class MdStepper { +export class MdStepper implements AfterViewInit { @ContentChildren(MdStep) _steps: QueryList; - // @Input('content') _content: TemplatePortal; - @Input() get orientation() { return this._orientation; } set orientation(value: string) { @@ -38,15 +39,36 @@ export class MdStepper { } private _orientation: string; - activeStep: MdStep; + @Output() stepChangeEvent = new EventEmitter(); + + selectedStep: MdStep; + selectedIndex: number = 0; + + ngAfterViewInit() { + this._steps.toArray()[this.selectedIndex].selected = true; + } selectStep(step: MdStep): void { - step.active = true; - this.activeStep = step; + if (!step.active) { return; } + this.selectedIndex = this.indexOf(step); + this.stepChangeEvent.emit(this._emitStepChangeEvent()); } indexOf(step: MdStep): number { let stepsArray = this._steps.toArray(); return stepsArray.indexOf(step); } + + nextStep(): void { + this.selectedIndex++; + this.stepChangeEvent.emit(this._emitStepChangeEvent()); + } + + private _emitStepChangeEvent(): MdStepChangeEvent { + const event = new MdStepChangeEvent(); + event.index = this.selectedIndex; + event.step = this._steps.toArray()[this.selectedIndex]; + this.selectedStep = event.step; + return event; + } } From 471df0f2358b1e355b3f66c64f20924659242417 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 6 Jul 2017 09:19:19 -0700 Subject: [PATCH 07/29] Adding "selectedIndex" attribute to stepper and working on TemplateOulet. --- src/demo-app/stepper/stepper-demo.html | 4 ++-- src/lib/stepper/step.html | 2 +- src/lib/stepper/step.ts | 2 +- src/lib/stepper/stepper.html | 5 +++-- src/lib/stepper/stepper.ts | 8 ++++++++ 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 8c8471cb6ccc..5941513f1190 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,5 +1,5 @@

Veritcal Stepper Demo

- +
{{step.content}}
@@ -7,7 +7,7 @@

Veritcal Stepper Demo

Horizontal Stepper Demo

- + \ No newline at end of file diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index f96a283b1f1f..1402284098c9 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 0aec78ee0731..61e59b715b8c 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -16,7 +16,7 @@ import {TemplatePortal, PortalHostDirective} from '../core'; }) export class MdStep { - // @ViewChild(TemplateRef) _content: TemplateRef; + @ViewChild('stepContent') stepContent: TemplateRef; // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; @Input() diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index 755f32de9baf..b0f61ff470f0 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -1,3 +1,4 @@ +
@@ -6,7 +7,7 @@
{{step.label}}
-
+
@@ -15,4 +16,4 @@
-
\ No newline at end of file +
diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 31bff6d7f3d5..41ecc0361bb5 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -39,6 +39,13 @@ export class MdStepper implements AfterViewInit { } private _orientation: string; + /** The index of the active tab. */ + @Input() + set selectedIndex(value: number | null) { this._indexToSelect = value; } + get selectedIndex(): number | null { return this._selectedIndex; } + private _selectedIndex: number | null = null; + private _indexToSelect: number | null = null; + @Output() stepChangeEvent = new EventEmitter(); selectedStep: MdStep; @@ -62,6 +69,7 @@ export class MdStepper implements AfterViewInit { nextStep(): void { this.selectedIndex++; this.stepChangeEvent.emit(this._emitStepChangeEvent()); + console.log(this.selectedStep.label); } private _emitStepChangeEvent(): MdStepChangeEvent { From 1d6ebb27fd40bb88746b14f020df6642377211b6 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 29 Jun 2017 16:37:48 -0700 Subject: [PATCH 08/29] Prototyping --- src/demo-app/demo-app-module.ts | 8 +++-- src/demo-app/demo-app/demo-app.ts | 3 +- src/demo-app/demo-app/routes.ts | 2 ++ src/demo-app/stepper/stepper-demo.html | 4 +++ src/demo-app/stepper/stepper-demo.ts | 14 +++++++++ src/lib/module.ts | 4 ++- src/lib/public_api.ts | 1 + src/lib/stepper/index.ts | 21 +++++++++++++ src/lib/stepper/step.ts | 23 +++++++++++++++ src/lib/stepper/stepper.html | 14 +++++++++ src/lib/stepper/stepper.scss | 0 src/lib/stepper/stepper.ts | 41 ++++++++++++++++++++++++++ 12 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 src/demo-app/stepper/stepper-demo.html create mode 100644 src/demo-app/stepper/stepper-demo.ts create mode 100644 src/lib/stepper/index.ts create mode 100644 src/lib/stepper/step.ts create mode 100644 src/lib/stepper/stepper.html create mode 100644 src/lib/stepper/stepper.scss create mode 100644 src/lib/stepper/stepper.ts diff --git a/src/demo-app/demo-app-module.ts b/src/demo-app/demo-app-module.ts index 98b2c3dc8b1e..7ffb84985c36 100644 --- a/src/demo-app/demo-app-module.ts +++ b/src/demo-app/demo-app-module.ts @@ -76,10 +76,12 @@ import { MdToolbarModule, MdTooltipModule, OverlayContainer, - StyleModule + StyleModule, + MdStepperModule, } from '@angular/material'; import {CdkTableModule} from '@angular/cdk'; import {TableHeaderDemo} from './table/table-header-demo'; +import {StepperDemo} from './stepper/stepper-demo'; /** * NgModule that includes all Material modules that are required to serve the demo-app. @@ -118,7 +120,8 @@ import {TableHeaderDemo} from './table/table-header-demo'; MdTooltipModule, MdNativeDateModule, CdkTableModule, - StyleModule + StyleModule, + MdStepperModule, ] }) export class DemoMaterialModule {} @@ -184,6 +187,7 @@ export class DemoMaterialModule {} PlatformDemo, TypographyDemo, ExpansionDemo, + StepperDemo, ], providers: [ {provide: OverlayContainer, useClass: FullscreenOverlayContainer}, diff --git a/src/demo-app/demo-app/demo-app.ts b/src/demo-app/demo-app/demo-app.ts index 3f422c3ccd5c..41099f28f884 100644 --- a/src/demo-app/demo-app/demo-app.ts +++ b/src/demo-app/demo-app/demo-app.ts @@ -67,7 +67,8 @@ export class DemoApp { {name: 'Tooltip', route: 'tooltip'}, {name: 'Platform', route: 'platform'}, {name: 'Style', route: 'style'}, - {name: 'Typography', route: 'typography'} + {name: 'Typography', route: 'typography'}, + {name: 'Stepper', route: 'stepper'} ]; constructor(private _element: ElementRef) { diff --git a/src/demo-app/demo-app/routes.ts b/src/demo-app/demo-app/routes.ts index 875dc907e604..61a99aef41df 100644 --- a/src/demo-app/demo-app/routes.ts +++ b/src/demo-app/demo-app/routes.ts @@ -36,6 +36,7 @@ import {DatepickerDemo} from '../datepicker/datepicker-demo'; import {TableDemo} from '../table/table-demo'; import {TypographyDemo} from '../typography/typography-demo'; import {ExpansionDemo} from '../expansion/expansion-demo'; +import {StepperDemo} from '../stepper/stepper-demo'; export const DEMO_APP_ROUTES: Routes = [ {path: '', component: Home}, @@ -74,4 +75,5 @@ export const DEMO_APP_ROUTES: Routes = [ {path: 'style', component: StyleDemo}, {path: 'typography', component: TypographyDemo}, {path: 'expansion', component: ExpansionDemo}, + {path: 'stepper', component: StepperDemo}, ]; diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html new file mode 100644 index 000000000000..6ad2207c69be --- /dev/null +++ b/src/demo-app/stepper/stepper-demo.html @@ -0,0 +1,4 @@ +

Horizontal Stepper Demo

+ + + \ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts new file mode 100644 index 000000000000..c352169d1851 --- /dev/null +++ b/src/demo-app/stepper/stepper-demo.ts @@ -0,0 +1,14 @@ +import {Component} from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'stepper-demo', + templateUrl: 'stepper-demo.html', +}) +export class StepperDemo { + steps: [ + {label: 'Step 1', content: 'Content 1'}, + {label: 'Step 2', content: 'Content 2', active: true}, + {label: 'Step 3', content: 'Content 3', disabled: true} + ]; +} \ No newline at end of file diff --git a/src/lib/module.ts b/src/lib/module.ts index e5fa0671e79b..a78d65b2f9e6 100644 --- a/src/lib/module.ts +++ b/src/lib/module.ts @@ -48,6 +48,7 @@ import {MdExpansionModule} from './expansion/index'; import {MdTableModule} from './table/index'; import {MdSortModule} from './sort/index'; import {MdPaginatorModule} from './paginator/index'; +import {MdStepperModule} from './stepper/index'; const MATERIAL_MODULES = [ MdAutocompleteModule, @@ -86,7 +87,8 @@ const MATERIAL_MODULES = [ A11yModule, PlatformModule, MdCommonModule, - ObserveContentModule + ObserveContentModule, + MdStepperModule, ]; /** @deprecated */ diff --git a/src/lib/public_api.ts b/src/lib/public_api.ts index fbaf29694867..7059416aae3d 100644 --- a/src/lib/public_api.ts +++ b/src/lib/public_api.ts @@ -44,3 +44,4 @@ export * from './tabs/index'; export * from './tabs/tab-nav-bar/index'; export * from './toolbar/index'; export * from './tooltip/index'; +export * from './stepper/index'; diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts new file mode 100644 index 000000000000..7f96e6188ca7 --- /dev/null +++ b/src/lib/stepper/index.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {NgModule} from '@angular/core'; +import {MdStep} from './step'; +import {MdStepper} from './stepper'; +import {MdCommonModule} from '../core'; +import {CommonModule} from '@angular/common'; +@NgModule({ + imports: [MdCommonModule, CommonModule], + exports: [MdStep, MdStepper, MdCommonModule], + declarations: [MdStep, MdStepper] +}) +export class MdStepperModule {} + +export * from './stepper'; diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts new file mode 100644 index 000000000000..01e22418b87d --- /dev/null +++ b/src/lib/stepper/step.ts @@ -0,0 +1,23 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Component} from '@angular/core'; +import {TemplatePortal} from '../core'; +@Component({ + moduleId: module.id, + selector: 'mat-step', + templateUrl: '' +}) +export class MdStep { + active: boolean = false; + isLast: boolean = false; + + /** The portal that will be the hosted content of the step */ + private _contentPortal: TemplatePortal | null = null; + get content(): TemplatePortal | null { return this._contentPortal; }; +} \ No newline at end of file diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html new file mode 100644 index 000000000000..f20cd8949549 --- /dev/null +++ b/src/lib/stepper/stepper.html @@ -0,0 +1,14 @@ +
+
+
{{_steps.indexOf(step) + 1}}
+
+
+
{{step.label}}
+
Optional
+
+
+
+
{{step.content}}
+
+
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper.scss b/src/lib/stepper/stepper.scss new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts new file mode 100644 index 000000000000..04b1266ae7c4 --- /dev/null +++ b/src/lib/stepper/stepper.ts @@ -0,0 +1,41 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Component, ContentChildren, Input, QueryList} from '@angular/core'; +import {MdStep} from './step'; + +export class MdStepChangeEvent { + index: number; + step: MdStep; +} + +@Component({ + moduleId: module.id, + selector: 'mat-stepper', + templateUrl: 'stepper.html', + styleUrls: ['stepper.scss'], + host: { + '[attr.aria-orientation]': 'orientation' + }, +}) + +export class MdStepper { + + @ContentChildren(MdStep) _steps: QueryList; + + @Input() + get orientation() { return this._orientation; } + set orientation(value: string) { + this._orientation = value; + } + private _orientation: string = "horizontal"; + + selectStep(step: MdStep): void { + step.active = true; + } +} \ No newline at end of file From 03e58499fc1d4c162b240cb48a545ef2fdc7b72f Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 29 Jun 2017 17:56:04 -0700 Subject: [PATCH 09/29] Further work --- src/demo-app/stepper/stepper-demo.html | 5 +++-- src/demo-app/stepper/stepper-demo.ts | 2 +- src/lib/stepper/step.ts | 5 +++-- src/lib/stepper/stepper.html | 5 +++-- src/lib/stepper/stepper.ts | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 6ad2207c69be..ea35bf39bfe5 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,4 +1,5 @@

Horizontal Stepper Demo

- - \ No newline at end of file + {{step.content}} +
+
{{step.label}}
\ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index c352169d1851..225db70846b3 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -11,4 +11,4 @@ export class StepperDemo { {label: 'Step 2', content: 'Content 2', active: true}, {label: 'Step 3', content: 'Content 3', disabled: true} ]; -} \ No newline at end of file +} diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 01e22418b87d..010c776e6074 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -6,12 +6,13 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component} from '@angular/core'; +import {Component, Input} from '@angular/core'; import {TemplatePortal} from '../core'; + @Component({ moduleId: module.id, selector: 'mat-step', - templateUrl: '' + template: '' }) export class MdStep { active: boolean = false; diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index f20cd8949549..7a7cba0e291d 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -6,9 +6,10 @@
{{step.label}}
Optional
-
+
\\ +
{{step.content}}
-
{{step.content}}
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 04b1266ae7c4..1c6174c2802c 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -18,7 +18,7 @@ export class MdStepChangeEvent { moduleId: module.id, selector: 'mat-stepper', templateUrl: 'stepper.html', - styleUrls: ['stepper.scss'], + //styleUrls: ['stepper.scss'], host: { '[attr.aria-orientation]': 'orientation' }, From c1cb73f7a7c71a50fc8ff35709c7404b10768076 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Fri, 30 Jun 2017 17:40:20 -0700 Subject: [PATCH 10/29] Further prototyping --- src/lib/stepper/step.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/lib/stepper/step.html diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html new file mode 100644 index 000000000000..e69de29bb2d1 From e90c83903828082630532532c58b8d3753f1cc24 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Fri, 30 Jun 2017 17:40:53 -0700 Subject: [PATCH 11/29] Further prototyping --- src/demo-app/stepper/stepper-demo.html | 8 ++++---- src/demo-app/stepper/stepper-demo.ts | 2 +- src/lib/stepper/step.html | 2 ++ src/lib/stepper/step.ts | 23 ++++++++++++++++++++--- src/lib/stepper/stepper.html | 12 ++++++++---- src/lib/stepper/stepper.ts | 14 ++++++++++++-- src/lib/tabs/tab-header.html | 1 + 7 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index ea35bf39bfe5..655ba1733907 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,5 +1,5 @@

Horizontal Stepper Demo

- - {{step.content}} - -
{{step.label}}
\ No newline at end of file + + + \ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 225db70846b3..be95c240e3b5 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -6,7 +6,7 @@ import {Component} from '@angular/core'; templateUrl: 'stepper-demo.html', }) export class StepperDemo { - steps: [ + steps = [ {label: 'Step 1', content: 'Content 1'}, {label: 'Step 2', content: 'Content 2', active: true}, {label: 'Step 3', content: 'Content 3', disabled: true} diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index e69de29bb2d1..8e5ee367cc77 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 010c776e6074..d279ddd9c09c 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -15,10 +15,27 @@ import {TemplatePortal} from '../core'; template: '' }) export class MdStep { - active: boolean = false; + + @Input() + get active() { return this._active; } + set active(value: boolean) { + this._active = value; + } + private _active: boolean; + + @Input() + label: string; + + @Input() + get completed() { return this._completed; } + set completed(value: boolean) { + this._completed = value; + } + private _completed: boolean = false; + isLast: boolean = false; /** The portal that will be the hosted content of the step */ private _contentPortal: TemplatePortal | null = null; - get content(): TemplatePortal | null { return this._contentPortal; }; -} \ No newline at end of file + get content(): TemplatePortal | null { return this._contentPortal; } +} diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index 7a7cba0e291d..ee2257f61baa 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -1,15 +1,19 @@
-
{{_steps.indexOf(step) + 1}}
+
{{indexOf(step) + 1}}
{{step.label}}
Optional
-
\\ -
{{step.content}}
+
+
{{step.content}}
-
+
+ ad +
+
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 1c6174c2802c..7770da269322 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -33,9 +33,19 @@ export class MdStepper { set orientation(value: string) { this._orientation = value; } - private _orientation: string = "horizontal"; + private _orientation: string; + + horizontal: boolean = this._orientation === 'horizontal'; + + activeStep: MdStep; selectStep(step: MdStep): void { step.active = true; + this.activeStep = step; } -} \ No newline at end of file + + indexOf(step: MdStep): number { + let stepsArray = this._steps.toArray(); + return stepsArray.indexOf(step); + } +} diff --git a/src/lib/tabs/tab-header.html b/src/lib/tabs/tab-header.html index 62a15bb6bed6..ebcc30925961 100644 --- a/src/lib/tabs/tab-header.html +++ b/src/lib/tabs/tab-header.html @@ -14,6 +14,7 @@
+
Date: Wed, 5 Jul 2017 14:53:16 -0700 Subject: [PATCH 12/29] Further work --- src/demo-app/stepper/stepper-demo.html | 8 +++++++- src/lib/stepper/step.html | 3 +-- src/lib/stepper/step.ts | 19 +++++++++++++------ src/lib/stepper/stepper.html | 5 ++--- src/lib/stepper/stepper.ts | 7 ++++--- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 655ba1733907..96675d6e80ba 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,5 +1,11 @@ +

Veritcal Stepper Demo

+ + {{step.content}} + +

Horizontal Stepper Demo

- + \ No newline at end of file diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index 8e5ee367cc77..e7b6a7943273 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index d279ddd9c09c..4981ad196b5d 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -6,16 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, Input} from '@angular/core'; -import {TemplatePortal} from '../core'; +import {Component, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core'; +import {TemplatePortal, PortalHostDirective} from '../core'; @Component({ moduleId: module.id, selector: 'mat-step', - template: '' + templateUrl: '', }) export class MdStep { + // @ViewChild(TemplateRef) _content: TemplateRef; + // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; + @Input() get active() { return this._active; } set active(value: boolean) { @@ -35,7 +38,11 @@ export class MdStep { isLast: boolean = false; - /** The portal that will be the hosted content of the step */ - private _contentPortal: TemplatePortal | null = null; - get content(): TemplatePortal | null { return this._contentPortal; } + // /** The portal that will be the hosted content of the step */ + // private _contentPortal: TemplatePortal | null = null; + // get content(): TemplatePortal | null { return this._contentPortal; } + + // constructor(private _viewContainerRef: ViewContainerRef) {} + + } diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index ee2257f61baa..b14ebbbec099 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -7,11 +7,10 @@
Optional
-
{{step.content}}
+
- -
+
ad
diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 7770da269322..e2d1b41198c8 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -8,6 +8,7 @@ import {Component, ContentChildren, Input, QueryList} from '@angular/core'; import {MdStep} from './step'; +import {TemplatePortal} from '../core'; export class MdStepChangeEvent { index: number; @@ -20,7 +21,7 @@ export class MdStepChangeEvent { templateUrl: 'stepper.html', //styleUrls: ['stepper.scss'], host: { - '[attr.aria-orientation]': 'orientation' + '[attr.aria-orientation]': 'orientation', }, }) @@ -28,6 +29,8 @@ export class MdStepper { @ContentChildren(MdStep) _steps: QueryList; + // @Input('content') _content: TemplatePortal; + @Input() get orientation() { return this._orientation; } set orientation(value: string) { @@ -35,8 +38,6 @@ export class MdStepper { } private _orientation: string; - horizontal: boolean = this._orientation === 'horizontal'; - activeStep: MdStep; selectStep(step: MdStep): void { From 9e5720a6da10d0425e0eab22ddb8cb838e1edcc1 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Wed, 5 Jul 2017 18:24:27 -0700 Subject: [PATCH 13/29] Adding event emitters --- src/demo-app/stepper/stepper-demo.html | 4 ++- src/demo-app/stepper/stepper-demo.ts | 4 +-- src/lib/stepper/index.ts | 4 ++- src/lib/stepper/step.html | 3 ++- src/lib/stepper/step.ts | 16 ++++++++---- src/lib/stepper/stepper.html | 14 +++++----- src/lib/stepper/stepper.ts | 36 +++++++++++++++++++++----- 7 files changed, 57 insertions(+), 24 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 96675d6e80ba..8c8471cb6ccc 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,7 +1,9 @@

Veritcal Stepper Demo

{{step.content}} + [active]="step.active" [completed]="step.completed"> +
{{step.content}}
+

Horizontal Stepper Demo

diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index be95c240e3b5..0a7ced1c544b 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -8,7 +8,7 @@ import {Component} from '@angular/core'; export class StepperDemo { steps = [ {label: 'Step 1', content: 'Content 1'}, - {label: 'Step 2', content: 'Content 2', active: true}, - {label: 'Step 3', content: 'Content 3', disabled: true} + {label: 'Step 2', content: 'Content 2'}, + {label: 'Step 3', content: 'Content 3'}, ]; } diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts index 7f96e6188ca7..4559f2e298b0 100644 --- a/src/lib/stepper/index.ts +++ b/src/lib/stepper/index.ts @@ -11,8 +11,10 @@ import {MdStep} from './step'; import {MdStepper} from './stepper'; import {MdCommonModule} from '../core'; import {CommonModule} from '@angular/common'; +import {PortalModule} from "@angular/cdk"; +import {MdButtonModule} from "../button/index"; @NgModule({ - imports: [MdCommonModule, CommonModule], + imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule], exports: [MdStep, MdStepper, MdCommonModule], declarations: [MdStep, MdStepper] }) diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index e7b6a7943273..f96a283b1f1f 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1 +1,2 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 4981ad196b5d..0aec78ee0731 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -12,7 +12,7 @@ import {TemplatePortal, PortalHostDirective} from '../core'; @Component({ moduleId: module.id, selector: 'mat-step', - templateUrl: '', + templateUrl: 'step.html', }) export class MdStep { @@ -24,7 +24,7 @@ export class MdStep { set active(value: boolean) { this._active = value; } - private _active: boolean; + private _active: boolean = true; @Input() label: string; @@ -38,9 +38,15 @@ export class MdStep { isLast: boolean = false; - // /** The portal that will be the hosted content of the step */ - // private _contentPortal: TemplatePortal | null = null; - // get content(): TemplatePortal | null { return this._contentPortal; } + private _selected: boolean = false; + set selected(value: boolean) { + this._selected = value; + } + get selected(): boolean { return this._selected; } + + /** The portal that will be the hosted content of the step */ + private _contentPortal: TemplatePortal | null = null; + get content(): TemplatePortal | null { return this._contentPortal; } // constructor(private _viewContainerRef: ViewContainerRef) {} diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index b14ebbbec099..755f32de9baf 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -1,18 +1,18 @@
-
-
{{indexOf(step) + 1}}
-
-
+
+
+
{{indexOf(step) + 1}}
+
{{indexOf(step) + 1}}
{{step.label}}
-
Optional
-
+
ad
- + +
\ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index e2d1b41198c8..31bff6d7f3d5 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -6,7 +6,10 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, ContentChildren, Input, QueryList} from '@angular/core'; +import { + Component, ContentChildren, EventEmitter, Input, Output, QueryList, OnInit, + AfterViewChecked, AfterViewInit +} from '@angular/core'; import {MdStep} from './step'; import {TemplatePortal} from '../core'; @@ -25,12 +28,10 @@ export class MdStepChangeEvent { }, }) -export class MdStepper { +export class MdStepper implements AfterViewInit { @ContentChildren(MdStep) _steps: QueryList; - // @Input('content') _content: TemplatePortal; - @Input() get orientation() { return this._orientation; } set orientation(value: string) { @@ -38,15 +39,36 @@ export class MdStepper { } private _orientation: string; - activeStep: MdStep; + @Output() stepChangeEvent = new EventEmitter(); + + selectedStep: MdStep; + selectedIndex: number = 0; + + ngAfterViewInit() { + this._steps.toArray()[this.selectedIndex].selected = true; + } selectStep(step: MdStep): void { - step.active = true; - this.activeStep = step; + if (!step.active) { return; } + this.selectedIndex = this.indexOf(step); + this.stepChangeEvent.emit(this._emitStepChangeEvent()); } indexOf(step: MdStep): number { let stepsArray = this._steps.toArray(); return stepsArray.indexOf(step); } + + nextStep(): void { + this.selectedIndex++; + this.stepChangeEvent.emit(this._emitStepChangeEvent()); + } + + private _emitStepChangeEvent(): MdStepChangeEvent { + const event = new MdStepChangeEvent(); + event.index = this.selectedIndex; + event.step = this._steps.toArray()[this.selectedIndex]; + this.selectedStep = event.step; + return event; + } } From 617c270ae554ef8849b21a9ffed1502da4a18bb2 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 6 Jul 2017 13:56:17 -0700 Subject: [PATCH 14/29] Template rendering and selectIndex control done. --- src/demo-app/stepper/stepper-demo.html | 10 +++--- src/demo-app/stepper/stepper-demo.ts | 2 ++ src/lib/stepper/step.html | 2 +- src/lib/stepper/step.ts | 16 ++++++---- src/lib/stepper/stepper.html | 6 ++-- src/lib/stepper/stepper.ts | 44 ++++++++++++++++---------- 6 files changed, 50 insertions(+), 30 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 5941513f1190..3bda42043550 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,13 +1,15 @@

Veritcal Stepper Demo

- + -
{{step.content}}
+
{{step.content}}

Horizontal Stepper Demo

- + + [active]="step.active" [completed]="step.completed"> +
{{step.content}}
+
\ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 0a7ced1c544b..4ce9676db28f 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -6,6 +6,8 @@ import {Component} from '@angular/core'; templateUrl: 'stepper-demo.html', }) export class StepperDemo { + verticalActiveIndex = 0; + horizontalActiveIndex = 0; steps = [ {label: 'Step 1', content: 'Content 1'}, {label: 'Step 2', content: 'Content 2'}, diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index 1402284098c9..fd539cd40b99 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 61e59b715b8c..826dbbc1e7be 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core'; -import {TemplatePortal, PortalHostDirective} from '../core'; +import {Component, ContentChild, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core'; +import {TemplatePortal} from '../core/portal/portal'; @Component({ moduleId: module.id, @@ -16,7 +16,7 @@ import {TemplatePortal, PortalHostDirective} from '../core'; }) export class MdStep { - @ViewChild('stepContent') stepContent: TemplateRef; + @ViewChild(TemplateRef) stepContent: TemplateRef; // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; @Input() @@ -44,11 +44,15 @@ export class MdStep { } get selected(): boolean { return this._selected; } - /** The portal that will be the hosted content of the step */ - private _contentPortal: TemplatePortal | null = null; - get content(): TemplatePortal | null { return this._contentPortal; } + // /** The portal that will be the hosted content of the step */ + // private _contentPortal: TemplatePortal | null = null; + // get content(): TemplatePortal | null { return this._contentPortal; } // constructor(private _viewContainerRef: ViewContainerRef) {} + // + // ngOnInit() { + // this._contentPortal = new TemplatePortal(this.stepContent, this._viewContainerRef); + // } } diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index 810ff02cb2a3..0701133fb153 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -1,4 +1,3 @@ -
@@ -7,11 +6,12 @@
{{step.label}}
-
+
+
- ad +
diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 41ecc0361bb5..494ccaebfb37 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -12,6 +12,8 @@ import { } from '@angular/core'; import {MdStep} from './step'; import {TemplatePortal} from '../core'; +import {Observable} from 'rxjs/Observable'; +import {map} from '../core/rxjs/index'; export class MdStepChangeEvent { index: number; @@ -28,7 +30,7 @@ export class MdStepChangeEvent { }, }) -export class MdStepper implements AfterViewInit { +export class MdStepper { @ContentChildren(MdStep) _steps: QueryList; @@ -41,23 +43,34 @@ export class MdStepper implements AfterViewInit { /** The index of the active tab. */ @Input() - set selectedIndex(value: number | null) { this._indexToSelect = value; } - get selectedIndex(): number | null { return this._selectedIndex; } - private _selectedIndex: number | null = null; - private _indexToSelect: number | null = null; + set selectedIndex(value: number) { + this._selectedIndex = value; + //this.selectedStep = this._steps.toArray()[this._selectedIndex]; + //this.stepChangeEvent.emit(this._emitStepChangeEvent()); + } + get selectedIndex(): number { return this._selectedIndex; } + private _selectedIndex: number; - @Output() stepChangeEvent = new EventEmitter(); + @Output() get selectedIndexChange(): Observable { + return map.call(this.stepChangeEvent, event => event.index); + } - selectedStep: MdStep; - selectedIndex: number = 0; + @Output() stepChangeEvent = new EventEmitter(); - ngAfterViewInit() { - this._steps.toArray()[this.selectedIndex].selected = true; + get selectedStep(): MdStep { + return this._steps.toArray()[this._selectedIndex]; } + private _selectedStep: MdStep; + + //selectedIndex: number = 0; + + // ngAfterContentChecked() { + // this._steps.toArray()[this._selectedIndex].selected = true; + // } selectStep(step: MdStep): void { if (!step.active) { return; } - this.selectedIndex = this.indexOf(step); + this._selectedIndex = this.indexOf(step); this.stepChangeEvent.emit(this._emitStepChangeEvent()); } @@ -67,16 +80,15 @@ export class MdStepper implements AfterViewInit { } nextStep(): void { - this.selectedIndex++; + this._selectedIndex++; this.stepChangeEvent.emit(this._emitStepChangeEvent()); - console.log(this.selectedStep.label); } private _emitStepChangeEvent(): MdStepChangeEvent { const event = new MdStepChangeEvent(); - event.index = this.selectedIndex; - event.step = this._steps.toArray()[this.selectedIndex]; - this.selectedStep = event.step; + event.index = this._selectedIndex; + event.step = this._steps.toArray()[this._selectedIndex]; + this._selectedStep = event.step; return event; } } From 42c1f14421ed0be52c7eca55568c759ac5a02e47 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 6 Jul 2017 18:20:56 -0700 Subject: [PATCH 15/29] Work in progress for accessibility --- package-lock.json | 149 +++++++++---------------- src/demo-app/stepper/stepper-demo.scss | 0 src/demo-app/stepper/stepper-demo.ts | 1 + src/lib/stepper/stepper.html | 25 +++-- src/lib/stepper/stepper.scss | 3 + src/lib/stepper/stepper.ts | 2 +- 6 files changed, 74 insertions(+), 106 deletions(-) create mode 100644 src/demo-app/stepper/stepper-demo.scss diff --git a/package-lock.json b/package-lock.json index 8e320be01cf2..2e08ae51e70d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2193,9 +2193,9 @@ "dev": true }, "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz", + "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==", "dev": true }, "doiuse": { @@ -2948,128 +2948,107 @@ "dev": true, "dependencies": { "base64url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "version": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", "dev": true }, "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "version": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, "dom-storage": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.0.2.tgz", + "version": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.0.2.tgz", "integrity": "sha1-7RfL9oq9EOCu+BgnE+KXxeS1ALA=", "dev": true }, "ecdsa-sig-formatter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", + "version": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", "dev": true }, "faye-websocket": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", "dev": true }, "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "version": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=", "dev": true }, "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "version": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", "dev": true }, "jsonwebtoken": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", + "version": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", "dev": true }, "jwa": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", + "version": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", "dev": true }, "jws": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", + "version": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", "dev": true }, "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "version": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "version": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", "dev": true }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "promise-polyfill": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.0.2.tgz", + "version": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.0.2.tgz", "integrity": "sha1-2chtPcTcLfkBboiUbe/Wm0m0EWI=", "dev": true }, "safe-buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", - "integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==", + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", + "integrity": "sha1-/kyEYDl/nqqqWOc75GJzQIpF4iM=", "dev": true }, "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "version": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", "dev": true }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true }, "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", "dev": true }, "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "version": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } @@ -3082,128 +3061,107 @@ "dev": true, "dependencies": { "@types/jsonwebtoken": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.0.tgz", + "version": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.0.tgz", "integrity": "sha1-D+0yyFAdqArJg50tQDplyD13b/0=", "dev": true }, "@types/node": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.18.tgz", + "version": "https://registry.npmjs.org/@types/node/-/node-7.0.18.tgz", "integrity": "sha1-zWfyfT3Az7dG8L3V4IbExdVb4XM=", "dev": true }, "base64url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "version": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", "dev": true }, "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "version": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, "ecdsa-sig-formatter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", + "version": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", "dev": true }, "faye-websocket": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", "dev": true }, "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "version": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=", "dev": true }, "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "version": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", "dev": true }, "jsonwebtoken": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz", + "version": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz", "integrity": "sha1-hHgE5SWL7FqUmajcSl56O64I1Yo=", "dev": true }, "jwa": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", + "version": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", "dev": true }, "jws": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", + "version": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", "dev": true }, "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "version": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "version": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", "dev": true }, "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "version": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", "dev": true }, "node-forge": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", + "version": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", "dev": true }, "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", "dev": true }, "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "version": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", "dev": true }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true }, "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } @@ -3242,20 +3200,17 @@ "dev": true, "dependencies": { "faye-websocket": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", "dev": true, "dependencies": { "websocket-driver": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.5.2.tgz", + "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.5.2.tgz", "integrity": "sha1-jHyF2gcTtAYFVrTXHAF3XuEmnrk=", "dev": true, "dependencies": { "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", "dev": true } @@ -11183,9 +11138,9 @@ "dev": true }, "wd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/wd/-/wd-1.2.0.tgz", - "integrity": "sha1-QRLEZX7KWvWT68Bg1UuAyu6gSAc=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/wd/-/wd-1.3.0.tgz", + "integrity": "sha512-nhuK5+IeAt0vpqtDHWM9jpFpQiAabZdQRNeSSHhwgUhHENptGFGLVhf7CWbl9iyMSgsqcOJWTuJtpq5por4U6A==", "dev": true, "dependencies": { "archiver": { diff --git a/src/demo-app/stepper/stepper-demo.scss b/src/demo-app/stepper/stepper-demo.scss new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 4ce9676db28f..6ca43ff584e6 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -4,6 +4,7 @@ import {Component} from '@angular/core'; moduleId: module.id, selector: 'stepper-demo', templateUrl: 'stepper-demo.html', + //styleUrls: ['stepper-demo.scss'], }) export class StepperDemo { verticalActiveIndex = 0; diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index 0701133fb153..60ef145b9ada 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -1,19 +1,28 @@
-
-
+
+
{{indexOf(step) + 1}}
{{indexOf(step) + 1}}
{{step.label}}
-
+ +
+ + +
+
- -
-
- - + +
+ + +
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper.scss b/src/lib/stepper/stepper.scss index e69de29bb2d1..9b459237b579 100644 --- a/src/lib/stepper/stepper.scss +++ b/src/lib/stepper/stepper.scss @@ -0,0 +1,3 @@ +.mat-step-header:focus { + background: yellow; +} \ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 494ccaebfb37..f9af4e02ebca 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -24,7 +24,7 @@ export class MdStepChangeEvent { moduleId: module.id, selector: 'mat-stepper', templateUrl: 'stepper.html', - //styleUrls: ['stepper.scss'], + styleUrls: ['stepper.scss'], host: { '[attr.aria-orientation]': 'orientation', }, From b8797326cff4341fd9857bc3b0817df1e47fb4a3 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Fri, 7 Jul 2017 16:35:28 -0700 Subject: [PATCH 16/29] Added functionalities based on the tentative API doc. --- src/demo-app/stepper/stepper-demo.html | 8 +++---- src/demo-app/stepper/stepper-demo.ts | 4 ++-- src/lib/stepper/step.ts | 32 ++++++++++++++++---------- src/lib/stepper/stepper.html | 6 +++-- src/lib/stepper/stepper.ts | 15 +++++++++++- 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 3bda42043550..b94c4066a26a 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,15 +1,15 @@

Veritcal Stepper Demo

- +
{{step.content}}
+
optional {{step.optional}}
+
editable {{step.editable}}

Horizontal Stepper Demo

- +
{{step.content}}
\ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 6ca43ff584e6..28e8971aca27 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -11,7 +11,7 @@ export class StepperDemo { horizontalActiveIndex = 0; steps = [ {label: 'Step 1', content: 'Content 1'}, - {label: 'Step 2', content: 'Content 2'}, - {label: 'Step 3', content: 'Content 3'}, + {label: 'Step 2', content: 'Content 2', optional: true}, + {label: 'Step 3', content: 'Content 3', editable: false}, ]; } diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 826dbbc1e7be..609be6b55c00 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -8,6 +8,7 @@ import {Component, ContentChild, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core'; import {TemplatePortal} from '../core/portal/portal'; +import {coerceBooleanProperty} from "@angular/cdk"; @Component({ moduleId: module.id, @@ -20,30 +21,37 @@ export class MdStep { // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; @Input() + label: string; + + /** Whether the step is optional or not. */ + @Input() optional: boolean = false; + + /** Whether the step is editable or not. */ + @Input() editable: boolean = true; + + isLast: boolean = false; + + /** Whether the step is active. */ get active() { return this._active; } set active(value: boolean) { this._active = value; } - private _active: boolean = true; + private _active: boolean = false; - @Input() - label: string; + /** Whether the step has been selected. */ + get selected(): boolean { return this._selected; } + set selected(value: boolean) { + this._selected = value; + } + private _selected: boolean = false; - @Input() + /** Whether the step has been completed. */ get completed() { return this._completed; } set completed(value: boolean) { this._completed = value; } private _completed: boolean = false; - isLast: boolean = false; - - private _selected: boolean = false; - set selected(value: boolean) { - this._selected = value; - } - get selected(): boolean { return this._selected; } - // /** The portal that will be the hosted content of the step */ // private _contentPortal: TemplatePortal | null = null; // get content(): TemplatePortal | null { return this._contentPortal; } diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper.html index 60ef145b9ada..f4ec317acadd 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper.html @@ -12,7 +12,8 @@
- + +
@@ -21,7 +22,8 @@
- + +
diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index f9af4e02ebca..9cd01e639ff4 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -34,6 +34,7 @@ export class MdStepper { @ContentChildren(MdStep) _steps: QueryList; + /** Orientation of the stepper component. */ @Input() get orientation() { return this._orientation; } set orientation(value: string) { @@ -41,7 +42,7 @@ export class MdStepper { } private _orientation: string; - /** The index of the active tab. */ + /** The index of the currently selected step. */ @Input() set selectedIndex(value: number) { this._selectedIndex = value; @@ -51,10 +52,15 @@ export class MdStepper { get selectedIndex(): number { return this._selectedIndex; } private _selectedIndex: number; + /** Optional input to support both linear and non-linear stepper component. */ + @Input() linear: boolean = true; + + /** Output to enable support for two-way binding on `[(selectedIndex)]` */ @Output() get selectedIndexChange(): Observable { return map.call(this.stepChangeEvent, event => event.index); } + /** Event emitted when the selected step has changed. */ @Output() stepChangeEvent = new EventEmitter(); get selectedStep(): MdStep { @@ -80,10 +86,17 @@ export class MdStepper { } nextStep(): void { + if (this._selectedIndex == this._steps.length - 1) { return; } this._selectedIndex++; this.stepChangeEvent.emit(this._emitStepChangeEvent()); } + previousStep(): void { + if (this._selectedIndex == 0) { return; } + this._selectedIndex--; + this.stepChangeEvent.emit(this._emitStepChangeEvent()); + } + private _emitStepChangeEvent(): MdStepChangeEvent { const event = new MdStepChangeEvent(); event.index = this._selectedIndex; From f89b8bcda588d02a1ec48f3ff5dff69046a309c7 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Mon, 10 Jul 2017 17:16:22 -0700 Subject: [PATCH 17/29] Refactor code for cdk-stepper and cdk-step --- src/demo-app/demo-app-module.ts | 4 +- src/demo-app/stepper/stepper-demo.html | 8 +- src/lib/module.ts | 4 +- src/lib/stepper/index.ts | 12 +-- src/lib/stepper/step.ts | 24 ++++-- src/lib/stepper/stepper-horizontal.html | 22 +++++ src/lib/stepper/stepper-horizontal.ts | 21 +++++ .../{stepper.html => stepper-vertical.html} | 13 +-- src/lib/stepper/stepper-vertical.ts | 21 +++++ src/lib/stepper/stepper.ts | 82 +++++++++++-------- 10 files changed, 146 insertions(+), 65 deletions(-) create mode 100644 src/lib/stepper/stepper-horizontal.html create mode 100644 src/lib/stepper/stepper-horizontal.ts rename src/lib/stepper/{stepper.html => stepper-vertical.html} (61%) create mode 100644 src/lib/stepper/stepper-vertical.ts diff --git a/src/demo-app/demo-app-module.ts b/src/demo-app/demo-app-module.ts index 7ffb84985c36..79c2385a90e1 100644 --- a/src/demo-app/demo-app-module.ts +++ b/src/demo-app/demo-app-module.ts @@ -77,7 +77,7 @@ import { MdTooltipModule, OverlayContainer, StyleModule, - MdStepperModule, + CdkStepperModule, } from '@angular/material'; import {CdkTableModule} from '@angular/cdk'; import {TableHeaderDemo} from './table/table-header-demo'; @@ -121,7 +121,7 @@ import {StepperDemo} from './stepper/stepper-demo'; MdNativeDateModule, CdkTableModule, StyleModule, - MdStepperModule, + CdkStepperModule, ] }) export class DemoMaterialModule {} diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index b94c4066a26a..1fcdc451216b 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,15 +1,15 @@

Veritcal Stepper Demo

- +
{{step.content}}
optional {{step.optional}}
editable {{step.editable}}
-
+

Horizontal Stepper Demo

- +
{{step.content}}
-
\ No newline at end of file + \ No newline at end of file diff --git a/src/lib/module.ts b/src/lib/module.ts index a78d65b2f9e6..225bfc003f43 100644 --- a/src/lib/module.ts +++ b/src/lib/module.ts @@ -48,7 +48,7 @@ import {MdExpansionModule} from './expansion/index'; import {MdTableModule} from './table/index'; import {MdSortModule} from './sort/index'; import {MdPaginatorModule} from './paginator/index'; -import {MdStepperModule} from './stepper/index'; +import {CdkStepperModule} from './stepper/index'; const MATERIAL_MODULES = [ MdAutocompleteModule, @@ -88,7 +88,7 @@ const MATERIAL_MODULES = [ PlatformModule, MdCommonModule, ObserveContentModule, - MdStepperModule, + CdkStepperModule, ]; /** @deprecated */ diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts index 4559f2e298b0..3f0bb1ce969f 100644 --- a/src/lib/stepper/index.ts +++ b/src/lib/stepper/index.ts @@ -7,17 +7,19 @@ */ import {NgModule} from '@angular/core'; -import {MdStep} from './step'; -import {MdStepper} from './stepper'; +import {CdkStep, MdStep} from './step'; +import {CdkStepper} from './stepper'; import {MdCommonModule} from '../core'; import {CommonModule} from '@angular/common'; import {PortalModule} from "@angular/cdk"; import {MdButtonModule} from "../button/index"; +import {MdHorizontalStepper} from "./stepper-horizontal"; +import {MdVerticalStepper} from "./stepper-vertical"; @NgModule({ imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule], - exports: [MdStep, MdStepper, MdCommonModule], - declarations: [MdStep, MdStepper] + exports: [CdkStep, MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep], + declarations: [CdkStep, CdkStepper, MdHorizontalStepper, MdVerticalStepper, MdStep] }) -export class MdStepperModule {} +export class CdkStepperModule {} export * from './stepper'; diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 609be6b55c00..d3c443ef6d36 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -6,18 +6,21 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, ContentChild, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core'; +import { + Component, ContentChild, Directive, Input, OnInit, TemplateRef, ViewChild, + ViewContainerRef +} from '@angular/core'; import {TemplatePortal} from '../core/portal/portal'; -import {coerceBooleanProperty} from "@angular/cdk"; +import {coerceBooleanProperty} from '@angular/cdk'; @Component({ moduleId: module.id, - selector: 'mat-step', + selector: '[cdk-step]', templateUrl: 'step.html', }) -export class MdStep { +export class CdkStep { - @ViewChild(TemplateRef) stepContent: TemplateRef; + @ViewChild(TemplateRef) content: TemplateRef; // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; @Input() @@ -61,6 +64,15 @@ export class MdStep { // ngOnInit() { // this._contentPortal = new TemplatePortal(this.stepContent, this._viewContainerRef); // } +} - +@Component({ + moduleId: module.id, + selector: 'mat-step', + templateUrl: 'step.html', + //viewProviders: [CdkStep], + inputs: ['label'], +}) +export class MdStep extends CdkStep{ + @ViewChild(TemplateRef) content: TemplateRef; } diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html new file mode 100644 index 000000000000..348d2754c026 --- /dev/null +++ b/src/lib/stepper/stepper-horizontal.html @@ -0,0 +1,22 @@ +
+
+
+
{{indexOf(step) + 1}}
+
{{indexOf(step) + 1}}
+
{{step.label}}
+
+
+
+
+
+ +
+ + + +
+
+
\ No newline at end of file diff --git a/src/lib/stepper/stepper-horizontal.ts b/src/lib/stepper/stepper-horizontal.ts new file mode 100644 index 000000000000..858d41d497fd --- /dev/null +++ b/src/lib/stepper/stepper-horizontal.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {CdkStepper} from './stepper'; +import {Component, ContentChildren, QueryList} from '@angular/core'; +import {MdStep} from "./step"; +@Component({ + moduleId: module.id, + selector: 'mat-horizontal-stepper', + templateUrl: 'stepper-horizontal.html', + styleUrls: ['stepper.scss'], + inputs: ['selectedIndex'], +}) +export class MdHorizontalStepper extends CdkStepper { + @ContentChildren(MdStep) _steps: QueryList; +} diff --git a/src/lib/stepper/stepper.html b/src/lib/stepper/stepper-vertical.html similarity index 61% rename from src/lib/stepper/stepper.html rename to src/lib/stepper/stepper-vertical.html index f4ec317acadd..d5ccf3402dfb 100644 --- a/src/lib/stepper/stepper.html +++ b/src/lib/stepper/stepper-vertical.html @@ -9,8 +9,8 @@
{{step.label}}
-
- +
+
@@ -18,13 +18,4 @@
-
-
- -
- - - -
-
\ No newline at end of file diff --git a/src/lib/stepper/stepper-vertical.ts b/src/lib/stepper/stepper-vertical.ts new file mode 100644 index 000000000000..4a7ae58fddb2 --- /dev/null +++ b/src/lib/stepper/stepper-vertical.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {CdkStepper} from './stepper'; +import {Component, ContentChildren, QueryList} from '@angular/core'; +import {MdStep} from "./step"; +@Component({ + moduleId: module.id, + selector: 'mat-vertical-stepper', + templateUrl: 'stepper-vertical.html', + styleUrls: ['stepper.scss'], + inputs: ['selectedIndex'], +}) +export class MdVerticalStepper extends CdkStepper { + @ContentChildren(MdStep) _steps: QueryList; +} \ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts index 9cd01e639ff4..6452890b7d58 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/lib/stepper/stepper.ts @@ -8,46 +8,37 @@ import { Component, ContentChildren, EventEmitter, Input, Output, QueryList, OnInit, - AfterViewChecked, AfterViewInit + AfterViewChecked, AfterViewInit, Directive, ElementRef } from '@angular/core'; -import {MdStep} from './step'; +import {CdkStep} from './step'; import {TemplatePortal} from '../core'; import {Observable} from 'rxjs/Observable'; import {map} from '../core/rxjs/index'; +import {LEFT_ARROW, RIGHT_ARROW} from '@angular/cdk'; +import {FocusKeyManager} from '../core/a11y/focus-key-manager'; -export class MdStepChangeEvent { +export class CdkStepEvent { index: number; - step: MdStep; + step: CdkStep; } -@Component({ - moduleId: module.id, - selector: 'mat-stepper', - templateUrl: 'stepper.html', - styleUrls: ['stepper.scss'], - host: { - '[attr.aria-orientation]': 'orientation', - }, +@Directive({ + selector: '[cdkStepper]', + // host: { + // '(focus)': '_onFocus()', + // '(keydown)': '_onKeydown($event)' + // }, }) +export class CdkStepper { -export class MdStepper { - - @ContentChildren(MdStep) _steps: QueryList; - - /** Orientation of the stepper component. */ - @Input() - get orientation() { return this._orientation; } - set orientation(value: string) { - this._orientation = value; - } - private _orientation: string; + @ContentChildren(CdkStep) _steps: QueryList; /** The index of the currently selected step. */ @Input() set selectedIndex(value: number) { this._selectedIndex = value; //this.selectedStep = this._steps.toArray()[this._selectedIndex]; - //this.stepChangeEvent.emit(this._emitStepChangeEvent()); + //this.stepEvent.emit(this._emitstepEvent()); } get selectedIndex(): number { return this._selectedIndex; } private _selectedIndex: number; @@ -57,16 +48,17 @@ export class MdStepper { /** Output to enable support for two-way binding on `[(selectedIndex)]` */ @Output() get selectedIndexChange(): Observable { - return map.call(this.stepChangeEvent, event => event.index); + return map.call(this.stepEvent, event => event.index); } /** Event emitted when the selected step has changed. */ - @Output() stepChangeEvent = new EventEmitter(); + @Output() stepEvent = new EventEmitter(); - get selectedStep(): MdStep { + get selectedStep(): CdkStep { return this._steps.toArray()[this._selectedIndex]; } - private _selectedStep: MdStep; + private _selectedStep: CdkStep; + // _keyManager: FocusKeyManager; //selectedIndex: number = 0; @@ -74,13 +66,19 @@ export class MdStepper { // this._steps.toArray()[this._selectedIndex].selected = true; // } - selectStep(step: MdStep): void { + // constructor(private _element: ElementRef) { } + // + // ngAfterContentInit(): void { + // this._keyManager = new FocusKeyManager(this._steps).withWrap(); + // } + + selectStep(step: CdkStep): void { if (!step.active) { return; } this._selectedIndex = this.indexOf(step); - this.stepChangeEvent.emit(this._emitStepChangeEvent()); + this.stepEvent.emit(this._emitStepEvent()); } - indexOf(step: MdStep): number { + indexOf(step: CdkStep): number { let stepsArray = this._steps.toArray(); return stepsArray.indexOf(step); } @@ -88,20 +86,34 @@ export class MdStepper { nextStep(): void { if (this._selectedIndex == this._steps.length - 1) { return; } this._selectedIndex++; - this.stepChangeEvent.emit(this._emitStepChangeEvent()); + this.stepEvent.emit(this._emitStepEvent()); } previousStep(): void { if (this._selectedIndex == 0) { return; } this._selectedIndex--; - this.stepChangeEvent.emit(this._emitStepChangeEvent()); + this.stepEvent.emit(this._emitStepEvent()); } - private _emitStepChangeEvent(): MdStepChangeEvent { - const event = new MdStepChangeEvent(); + private _emitStepEvent(): CdkStepEvent { + const event = new CdkStepEvent(); event.index = this._selectedIndex; event.step = this._steps.toArray()[this._selectedIndex]; this._selectedStep = event.step; return event; } + + // _onKeyDown(event: KeyboardEvent) { + // switch (event.keyCode) { + // case RIGHT_ARROW: + // ; + // case LEFT_ARROW: + // ; + // } + // event.preventDefault(); + // } + // _onFocus() { + // //this._keyManager.setFirstItemActive(); + // this._element.nativeElement.focus(); + // } } From a529bf3fde9145f8611141512be0ec79d440b762 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Tue, 11 Jul 2017 16:29:49 -0700 Subject: [PATCH 18/29] Add support for templated label --- src/cdk/public_api.ts | 1 + src/cdk/stepper/index.ts | 24 ++++++++ src/cdk/stepper/step-label.ts | 18 ++++++ src/cdk/stepper/step.html | 1 + src/cdk/stepper/step.ts | 66 +++++++++++++++++++++ src/cdk/stepper/stepper.scss | 3 + src/{lib => cdk}/stepper/stepper.ts | 5 +- src/demo-app/demo-app-module.ts | 4 +- src/demo-app/stepper/stepper-demo.html | 8 +++ src/demo-app/stepper/stepper-demo.ts | 1 + src/lib/module.ts | 4 +- src/lib/stepper/index.ts | 28 +++++---- src/lib/stepper/step-label.ts | 18 ++++++ src/lib/stepper/step.ts | 77 +++---------------------- src/lib/stepper/stepper-horizontal.html | 8 ++- src/lib/stepper/stepper-horizontal.ts | 2 +- src/lib/stepper/stepper-vertical.ts | 6 +- src/lib/tabs/tab-header.html | 1 - 18 files changed, 180 insertions(+), 95 deletions(-) create mode 100644 src/cdk/stepper/index.ts create mode 100644 src/cdk/stepper/step-label.ts create mode 100644 src/cdk/stepper/step.html create mode 100644 src/cdk/stepper/step.ts create mode 100644 src/cdk/stepper/stepper.scss rename src/{lib => cdk}/stepper/stepper.ts (94%) create mode 100644 src/lib/stepper/step-label.ts diff --git a/src/cdk/public_api.ts b/src/cdk/public_api.ts index 91fb8910ff6b..d56b36393941 100644 --- a/src/cdk/public_api.ts +++ b/src/cdk/public_api.ts @@ -15,3 +15,4 @@ export * from './portal/index'; export * from './rxjs/index'; export * from './observe-content/index'; export * from './keyboard/keycodes'; +export * from './stepper/index'; diff --git a/src/cdk/stepper/index.ts b/src/cdk/stepper/index.ts new file mode 100644 index 000000000000..072f2e0762b4 --- /dev/null +++ b/src/cdk/stepper/index.ts @@ -0,0 +1,24 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {NgModule} from '@angular/core'; +import {CdkStepper} from './stepper'; +import {CommonModule} from '@angular/common'; +import {CdkStep} from './step'; +import {CdkStepLabel} from './step-label'; +import {PortalModule} from '../portal'; +@NgModule({ + imports: [CommonModule, PortalModule], + exports: [CdkStep, CdkStepper, CdkStepLabel], + declarations: [CdkStep, CdkStepper, CdkStepLabel] +}) +export class CdkStepperModule {} + +export * from './stepper'; +export * from './step'; +export * from './step-label'; diff --git a/src/cdk/stepper/step-label.ts b/src/cdk/stepper/step-label.ts new file mode 100644 index 000000000000..ac43f930ab89 --- /dev/null +++ b/src/cdk/stepper/step-label.ts @@ -0,0 +1,18 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; +import {TemplatePortalDirective} from '../portal'; +@Directive({ + selector: '[cdk-step-label]', +}) +export class CdkStepLabel extends TemplatePortalDirective { + constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { + super(templateRef, viewContainerRef); + } +} diff --git a/src/cdk/stepper/step.html b/src/cdk/stepper/step.html new file mode 100644 index 000000000000..fa114df35d01 --- /dev/null +++ b/src/cdk/stepper/step.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/cdk/stepper/step.ts b/src/cdk/stepper/step.ts new file mode 100644 index 000000000000..685b075ead46 --- /dev/null +++ b/src/cdk/stepper/step.ts @@ -0,0 +1,66 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import { + Component, ContentChild, Directive, Input, OnInit, TemplateRef, ViewChild, + ViewContainerRef +} from '@angular/core'; +import {CdkStepLabel} from "./step-label"; + +@Component({ + selector: '[cdk-step]', + templateUrl: 'step.html', +}) +export class CdkStep { + + @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel; + @ViewChild(TemplateRef) content: TemplateRef; + // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; + + @Input() + label: string; + + /** Whether the step is optional or not. */ + @Input() optional: boolean = false; + + /** Whether the step is editable or not. */ + @Input() editable: boolean = true; + + isLast: boolean = false; + + /** Whether the step is active. */ + get active() { return this._active; } + set active(value: boolean) { + this._active = value; + } + private _active: boolean = false; + + /** Whether the step has been selected. */ + get selected(): boolean { return this._selected; } + set selected(value: boolean) { + this._selected = value; + } + private _selected: boolean = false; + + /** Whether the step has been completed. */ + get completed() { return this._completed; } + set completed(value: boolean) { + this._completed = value; + } + private _completed: boolean = false; + + // /** The portal that will be the hosted content of the step */ + // private _contentPortal: TemplatePortal | null = null; + // get content(): TemplatePortal | null { return this._contentPortal; } + + // constructor(private _viewContainerRef: ViewContainerRef) {} + // + // ngOnInit() { + // this._contentPortal = new TemplatePortal(this.stepContent, this._viewContainerRef); + // } +} diff --git a/src/cdk/stepper/stepper.scss b/src/cdk/stepper/stepper.scss new file mode 100644 index 000000000000..9b459237b579 --- /dev/null +++ b/src/cdk/stepper/stepper.scss @@ -0,0 +1,3 @@ +.mat-step-header:focus { + background: yellow; +} \ No newline at end of file diff --git a/src/lib/stepper/stepper.ts b/src/cdk/stepper/stepper.ts similarity index 94% rename from src/lib/stepper/stepper.ts rename to src/cdk/stepper/stepper.ts index 6452890b7d58..7b576baaa3d6 100644 --- a/src/lib/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -11,11 +11,8 @@ import { AfterViewChecked, AfterViewInit, Directive, ElementRef } from '@angular/core'; import {CdkStep} from './step'; -import {TemplatePortal} from '../core'; import {Observable} from 'rxjs/Observable'; -import {map} from '../core/rxjs/index'; -import {LEFT_ARROW, RIGHT_ARROW} from '@angular/cdk'; -import {FocusKeyManager} from '../core/a11y/focus-key-manager'; +import {map} from "rxjs/operator/map"; export class CdkStepEvent { index: number; diff --git a/src/demo-app/demo-app-module.ts b/src/demo-app/demo-app-module.ts index 79c2385a90e1..7ffb84985c36 100644 --- a/src/demo-app/demo-app-module.ts +++ b/src/demo-app/demo-app-module.ts @@ -77,7 +77,7 @@ import { MdTooltipModule, OverlayContainer, StyleModule, - CdkStepperModule, + MdStepperModule, } from '@angular/material'; import {CdkTableModule} from '@angular/cdk'; import {TableHeaderDemo} from './table/table-header-demo'; @@ -121,7 +121,7 @@ import {StepperDemo} from './stepper/stepper-demo'; MdNativeDateModule, CdkTableModule, StyleModule, - CdkStepperModule, + MdStepperModule, ] }) export class DemoMaterialModule {} diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 1fcdc451216b..dccf6be7a131 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -12,4 +12,12 @@

Horizontal Stepper Demo

{{step.content}}
+ + +

Horizontal Stepper with label template

+ + + {{step.label}} +
{{step.content}}
+
\ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 28e8971aca27..de8332564db1 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -9,6 +9,7 @@ import {Component} from '@angular/core'; export class StepperDemo { verticalActiveIndex = 0; horizontalActiveIndex = 0; + labelTemplateIndex = 0; steps = [ {label: 'Step 1', content: 'Content 1'}, {label: 'Step 2', content: 'Content 2', optional: true}, diff --git a/src/lib/module.ts b/src/lib/module.ts index 225bfc003f43..a78d65b2f9e6 100644 --- a/src/lib/module.ts +++ b/src/lib/module.ts @@ -48,7 +48,7 @@ import {MdExpansionModule} from './expansion/index'; import {MdTableModule} from './table/index'; import {MdSortModule} from './sort/index'; import {MdPaginatorModule} from './paginator/index'; -import {CdkStepperModule} from './stepper/index'; +import {MdStepperModule} from './stepper/index'; const MATERIAL_MODULES = [ MdAutocompleteModule, @@ -88,7 +88,7 @@ const MATERIAL_MODULES = [ PlatformModule, MdCommonModule, ObserveContentModule, - CdkStepperModule, + MdStepperModule, ]; /** @deprecated */ diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts index 3f0bb1ce969f..9fbc3eca844c 100644 --- a/src/lib/stepper/index.ts +++ b/src/lib/stepper/index.ts @@ -7,19 +7,23 @@ */ import {NgModule} from '@angular/core'; -import {CdkStep, MdStep} from './step'; -import {CdkStepper} from './stepper'; -import {MdCommonModule} from '../core'; import {CommonModule} from '@angular/common'; -import {PortalModule} from "@angular/cdk"; -import {MdButtonModule} from "../button/index"; -import {MdHorizontalStepper} from "./stepper-horizontal"; -import {MdVerticalStepper} from "./stepper-vertical"; +import {PortalModule} from '@angular/cdk'; +import {MdButtonModule} from '../button/index'; +import {MdHorizontalStepper} from './stepper-horizontal'; +import {MdVerticalStepper} from './stepper-vertical'; +import {MdStep} from './step'; +import {CdkStepperModule} from '@angular/cdk'; +import {MdCommonModule} from '../core'; +import {MdStepLabel} from './step-label'; @NgModule({ - imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule], - exports: [CdkStep, MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep], - declarations: [CdkStep, CdkStepper, MdHorizontalStepper, MdVerticalStepper, MdStep] + imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule, CdkStepperModule], + exports: [MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel], + declarations: [MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel] }) -export class CdkStepperModule {} +export class MdStepperModule {} -export * from './stepper'; +export * from './stepper-horizontal'; +export * from './stepper-vertical'; +export * from './step'; +export * from './step-label'; diff --git a/src/lib/stepper/step-label.ts b/src/lib/stepper/step-label.ts new file mode 100644 index 000000000000..6e26a6319ffe --- /dev/null +++ b/src/lib/stepper/step-label.ts @@ -0,0 +1,18 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; +import {CdkStepLabel} from '@angular/cdk'; +@Directive({ + selector: '[md-step-label], [mat-step-label]', +}) +export class MdStepLabel extends CdkStepLabel { + constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { + super(templateRef, viewContainerRef); + } +} diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index d3c443ef6d36..5e6a26fba771 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -1,71 +1,6 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import { - Component, ContentChild, Directive, Input, OnInit, TemplateRef, ViewChild, - ViewContainerRef -} from '@angular/core'; -import {TemplatePortal} from '../core/portal/portal'; -import {coerceBooleanProperty} from '@angular/cdk'; - -@Component({ - moduleId: module.id, - selector: '[cdk-step]', - templateUrl: 'step.html', -}) -export class CdkStep { - - @ViewChild(TemplateRef) content: TemplateRef; - // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; - - @Input() - label: string; - - /** Whether the step is optional or not. */ - @Input() optional: boolean = false; - - /** Whether the step is editable or not. */ - @Input() editable: boolean = true; - - isLast: boolean = false; - - /** Whether the step is active. */ - get active() { return this._active; } - set active(value: boolean) { - this._active = value; - } - private _active: boolean = false; - - /** Whether the step has been selected. */ - get selected(): boolean { return this._selected; } - set selected(value: boolean) { - this._selected = value; - } - private _selected: boolean = false; - - /** Whether the step has been completed. */ - get completed() { return this._completed; } - set completed(value: boolean) { - this._completed = value; - } - private _completed: boolean = false; - - // /** The portal that will be the hosted content of the step */ - // private _contentPortal: TemplatePortal | null = null; - // get content(): TemplatePortal | null { return this._contentPortal; } - - // constructor(private _viewContainerRef: ViewContainerRef) {} - // - // ngOnInit() { - // this._contentPortal = new TemplatePortal(this.stepContent, this._viewContainerRef); - // } -} - +import {Component, ContentChild, TemplateRef, ViewChild} from "@angular/core"; +import {CdkStep} from "@angular/cdk"; +import {MdStepLabel} from "./step-label"; @Component({ moduleId: module.id, selector: 'mat-step', @@ -74,5 +9,9 @@ export class CdkStep { inputs: ['label'], }) export class MdStep extends CdkStep{ + /** Content for the step label given by . */ + @ContentChild(MdStepLabel) stepLabel: MdStepLabel; + + /** Template inside the MdStep view that contains an . */ @ViewChild(TemplateRef) content: TemplateRef; -} +} \ No newline at end of file diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index 348d2754c026..b41812c27592 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -6,7 +6,13 @@ (click)="selectStep(step)">
{{indexOf(step) + 1}}
{{indexOf(step) + 1}}
-
{{step.label}}
+ + + + + +
{{step.label}}
+
diff --git a/src/lib/stepper/stepper-horizontal.ts b/src/lib/stepper/stepper-horizontal.ts index 858d41d497fd..c6ed13fe611d 100644 --- a/src/lib/stepper/stepper-horizontal.ts +++ b/src/lib/stepper/stepper-horizontal.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ -import {CdkStepper} from './stepper'; import {Component, ContentChildren, QueryList} from '@angular/core'; import {MdStep} from "./step"; +import {CdkStepper} from "@angular/cdk"; @Component({ moduleId: module.id, selector: 'mat-horizontal-stepper', diff --git a/src/lib/stepper/stepper-vertical.ts b/src/lib/stepper/stepper-vertical.ts index 4a7ae58fddb2..f3377e79a40e 100644 --- a/src/lib/stepper/stepper-vertical.ts +++ b/src/lib/stepper/stepper-vertical.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ -import {CdkStepper} from './stepper'; import {Component, ContentChildren, QueryList} from '@angular/core'; -import {MdStep} from "./step"; +import {MdStep} from './step'; +import {CdkStepper} from "@angular/cdk"; @Component({ moduleId: module.id, selector: 'mat-vertical-stepper', @@ -18,4 +18,4 @@ import {MdStep} from "./step"; }) export class MdVerticalStepper extends CdkStepper { @ContentChildren(MdStep) _steps: QueryList; -} \ No newline at end of file +} diff --git a/src/lib/tabs/tab-header.html b/src/lib/tabs/tab-header.html index ebcc30925961..62a15bb6bed6 100644 --- a/src/lib/tabs/tab-header.html +++ b/src/lib/tabs/tab-header.html @@ -14,7 +14,6 @@
-
Date: Wed, 12 Jul 2017 18:17:19 -0700 Subject: [PATCH 19/29] Added support for keyboard events and focus changes for accessibility. --- src/cdk/stepper/step.ts | 16 ++-- src/cdk/stepper/stepper.scss | 4 + src/cdk/stepper/stepper.ts | 99 +++++++++++++++++++------ src/demo-app/stepper/stepper-demo.html | 17 ----- src/demo-app/stepper/stepper-demo.ts | 7 +- src/lib/stepper/step.ts | 2 +- src/lib/stepper/stepper-horizontal.html | 46 +++++++----- src/lib/stepper/stepper-vertical.html | 17 +++-- src/lib/stepper/stepper.scss | 19 ++++- 9 files changed, 155 insertions(+), 72 deletions(-) diff --git a/src/cdk/stepper/step.ts b/src/cdk/stepper/step.ts index 685b075ead46..48a443cd42a3 100644 --- a/src/cdk/stepper/step.ts +++ b/src/cdk/stepper/step.ts @@ -15,6 +15,9 @@ import {CdkStepLabel} from "./step-label"; @Component({ selector: '[cdk-step]', templateUrl: 'step.html', + host: { + '(keydown)': '_onKeydown($event)' + }, }) export class CdkStep { @@ -33,12 +36,12 @@ export class CdkStep { isLast: boolean = false; - /** Whether the step is active. */ - get active() { return this._active; } - set active(value: boolean) { - this._active = value; - } - private _active: boolean = false; + // /** Whether the step is active. */ + // get active() { return this._active; } + // set active(value: boolean) { + // this._active = value; + // } + // private _active: boolean = false; /** Whether the step has been selected. */ get selected(): boolean { return this._selected; } @@ -54,6 +57,7 @@ export class CdkStep { } private _completed: boolean = false; + // /** The portal that will be the hosted content of the step */ // private _contentPortal: TemplatePortal | null = null; // get content(): TemplatePortal | null { return this._contentPortal; } diff --git a/src/cdk/stepper/stepper.scss b/src/cdk/stepper/stepper.scss index 9b459237b579..682d4e797487 100644 --- a/src/cdk/stepper/stepper.scss +++ b/src/cdk/stepper/stepper.scss @@ -1,3 +1,7 @@ .mat-step-header:focus { background: yellow; +} + +.mat-stepper-horizontal[aria-selected='false'] { + display:none; } \ No newline at end of file diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index 7b576baaa3d6..893400718814 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -8,11 +8,14 @@ import { Component, ContentChildren, EventEmitter, Input, Output, QueryList, OnInit, - AfterViewChecked, AfterViewInit, Directive, ElementRef + AfterViewChecked, AfterViewInit, Directive, ElementRef, ViewChild, ViewChildren } from '@angular/core'; import {CdkStep} from './step'; import {Observable} from 'rxjs/Observable'; -import {map} from "rxjs/operator/map"; +import {map} from 'rxjs/operator/map'; +import {LEFT_ARROW, RIGHT_ARROW, ENTER, TAB} from '../keyboard/keycodes'; + +let nextId = 0; export class CdkStepEvent { index: number; @@ -21,15 +24,22 @@ export class CdkStepEvent { @Directive({ selector: '[cdkStepper]', - // host: { - // '(focus)': '_onFocus()', - // '(keydown)': '_onKeydown($event)' - // }, + host: { + //'(focus)': '_onFocus()', + '(keydown)': '_onKeydown($event)' + }, }) export class CdkStepper { + get focusIndex(): number {return this._focusIndex; } + private _focusIndex: number = 0; + @ContentChildren(CdkStep) _steps: QueryList; + @ViewChildren('stepHeader') _stepHeader: QueryList; + + @ViewChildren('stepButton') _stepButton: QueryList; + /** The index of the currently selected step. */ @Input() set selectedIndex(value: number) { @@ -48,13 +58,25 @@ export class CdkStepper { return map.call(this.stepEvent, event => event.index); } + // @Output() get focusIndexChange(): Observable { + // return map.call(this.focusChange, event => event.index); + // } + /** Event emitted when the selected step has changed. */ @Output() stepEvent = new EventEmitter(); + @Output() focusChange = new EventEmitter(); + get selectedStep(): CdkStep { return this._steps.toArray()[this._selectedIndex]; } private _selectedStep: CdkStep; + + private _groupId: number; + + constructor() { + this._groupId = nextId++; + } // _keyManager: FocusKeyManager; //selectedIndex: number = 0; @@ -70,9 +92,11 @@ export class CdkStepper { // } selectStep(step: CdkStep): void { - if (!step.active) { return; } + //if (!step.active) { return; } this._selectedIndex = this.indexOf(step); - this.stepEvent.emit(this._emitStepEvent()); + this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this._focusIndex = this._selectedIndex; + this._setStepFocus(); } indexOf(step: CdkStep): number { @@ -83,32 +107,65 @@ export class CdkStepper { nextStep(): void { if (this._selectedIndex == this._steps.length - 1) { return; } this._selectedIndex++; - this.stepEvent.emit(this._emitStepEvent()); + this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this._focusIndex = this._selectedIndex; + this._setStepFocus(); } previousStep(): void { if (this._selectedIndex == 0) { return; } this._selectedIndex--; - this.stepEvent.emit(this._emitStepEvent()); + this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this._focusIndex = this._selectedIndex; + this._setStepFocus(); } - private _emitStepEvent(): CdkStepEvent { + _getStepLabelId(i: number): string { + return `mat-step-label-${this._groupId}-${i}`; + } + + _getStepContentId(i: number): string { + return `mat-step-content-${this._groupId}-${i}`; + } + + private _emitStepEvent(index: number): CdkStepEvent { const event = new CdkStepEvent(); - event.index = this._selectedIndex; + event.index = index; event.step = this._steps.toArray()[this._selectedIndex]; this._selectedStep = event.step; + //this._focusIndex = this._selectedIndex; + //this._setStepFocus(); return event; } - // _onKeyDown(event: KeyboardEvent) { - // switch (event.keyCode) { - // case RIGHT_ARROW: - // ; - // case LEFT_ARROW: - // ; - // } - // event.preventDefault(); - // } + + _onKeydown(event: KeyboardEvent) { + switch (event.keyCode) { + case RIGHT_ARROW: + if (this._focusIndex != this._steps.length - 1) { + this._focusIndex++; + this._setStepFocus(); + } + break; + case LEFT_ARROW: + if (this._focusIndex != 0) { + this._focusIndex--; + this._setStepFocus(); + } + break; + case ENTER: + this._selectedIndex = this._focusIndex; + this._emitStepEvent(this._selectedIndex); + break; + } + if (event.keyCode != TAB) event.preventDefault(); + } + + _setStepFocus() { + this._stepHeader.toArray()[this._focusIndex].nativeElement.focus(); + this.focusChange.emit(this._emitStepEvent(this._selectedIndex)); + } + // _onFocus() { // //this._keyManager.setFirstItemActive(); // this._element.nativeElement.focus(); diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index dccf6be7a131..c4e1c32d04bc 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,23 +1,6 @@ -

Veritcal Stepper Demo

- - -
{{step.content}}
-
optional {{step.optional}}
-
editable {{step.editable}}
-
-
-

Horizontal Stepper Demo

{{step.content}}
-
- -

Horizontal Stepper with label template

- - - {{step.label}} -
{{step.content}}
-
\ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index de8332564db1..8d40ec303606 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -11,8 +11,9 @@ export class StepperDemo { horizontalActiveIndex = 0; labelTemplateIndex = 0; steps = [ - {label: 'Step 1', content: 'Content 1'}, - {label: 'Step 2', content: 'Content 2', optional: true}, - {label: 'Step 3', content: 'Content 3', editable: false}, + {label: 'Confirm your name', content: 'Last name, First name.'}, + {label: 'Confirm your contact information', content: '123-456-7890'}, + {label: 'Confirm your address', content: '1600 Amphitheater Pkwy MTV'}, + {label: 'You are now done', content: 'Finished!'} ]; } diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 5e6a26fba771..41a4b3a807a4 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -8,7 +8,7 @@ import {MdStepLabel} from "./step-label"; //viewProviders: [CdkStep], inputs: ['label'], }) -export class MdStep extends CdkStep{ +export class MdStep extends CdkStep { /** Content for the step label given by . */ @ContentChild(MdStepLabel) stepLabel: MdStepLabel; diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index b41812c27592..b2944cd76183 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -1,28 +1,38 @@
-
-
+
-
- -
+
+ +
+
-
- -
\ No newline at end of file +
\ No newline at end of file diff --git a/src/lib/stepper/stepper-vertical.html b/src/lib/stepper/stepper-vertical.html index d5ccf3402dfb..1c88c9d394d3 100644 --- a/src/lib/stepper/stepper-vertical.html +++ b/src/lib/stepper/stepper-vertical.html @@ -1,15 +1,22 @@
-
-
+
-
+
diff --git a/src/lib/stepper/stepper.scss b/src/lib/stepper/stepper.scss index 9b459237b579..c907ebc7899d 100644 --- a/src/lib/stepper/stepper.scss +++ b/src/lib/stepper/stepper.scss @@ -1,3 +1,20 @@ .mat-step-header:focus { background: yellow; -} \ No newline at end of file +} + +.mat-stepper-horizontal[aria-selected='false'] { + display:none; +} + +.mat-stepper-horizontal[aria-selected='true'] { + background: pink; +} + +.active-step, .inactive-step { + display: inline-block; +} + +.mat-step-label { + display: inline-block; +} + From aee0abfa5f8a4ac6073f16395f1cd089449de208 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 13 Jul 2017 13:32:04 -0700 Subject: [PATCH 20/29] Updated vertical stepper + added comments --- src/cdk/stepper/step.ts | 20 ++------- src/cdk/stepper/stepper.scss | 7 ---- src/cdk/stepper/stepper.ts | 56 ++++++++----------------- src/demo-app/stepper/stepper-demo.html | 4 +- src/demo-app/stepper/stepper-demo.ts | 2 +- src/lib/stepper/step.html | 1 - src/lib/stepper/step.ts | 19 ++++++--- src/lib/stepper/stepper-horizontal.html | 14 +++---- src/lib/stepper/stepper-horizontal.ts | 6 +-- src/lib/stepper/stepper-vertical.html | 44 +++++++++++-------- src/lib/stepper/stepper-vertical.ts | 4 +- src/lib/stepper/stepper.scss | 4 +- 12 files changed, 79 insertions(+), 102 deletions(-) delete mode 100644 src/cdk/stepper/stepper.scss diff --git a/src/cdk/stepper/step.ts b/src/cdk/stepper/step.ts index 48a443cd42a3..52911eddaeea 100644 --- a/src/cdk/stepper/step.ts +++ b/src/cdk/stepper/step.ts @@ -10,21 +10,17 @@ import { Component, ContentChild, Directive, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core'; -import {CdkStepLabel} from "./step-label"; +import {CdkStepLabel} from './step-label'; @Component({ selector: '[cdk-step]', templateUrl: 'step.html', - host: { - '(keydown)': '_onKeydown($event)' - }, }) export class CdkStep { - @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel; @ViewChild(TemplateRef) content: TemplateRef; - // @ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; + /** Label of the step. */ @Input() label: string; @@ -34,6 +30,7 @@ export class CdkStep { /** Whether the step is editable or not. */ @Input() editable: boolean = true; + /** Whether the step is the last one in the list. */ isLast: boolean = false; // /** Whether the step is active. */ @@ -56,15 +53,4 @@ export class CdkStep { this._completed = value; } private _completed: boolean = false; - - - // /** The portal that will be the hosted content of the step */ - // private _contentPortal: TemplatePortal | null = null; - // get content(): TemplatePortal | null { return this._contentPortal; } - - // constructor(private _viewContainerRef: ViewContainerRef) {} - // - // ngOnInit() { - // this._contentPortal = new TemplatePortal(this.stepContent, this._viewContainerRef); - // } } diff --git a/src/cdk/stepper/stepper.scss b/src/cdk/stepper/stepper.scss deleted file mode 100644 index 682d4e797487..000000000000 --- a/src/cdk/stepper/stepper.scss +++ /dev/null @@ -1,7 +0,0 @@ -.mat-step-header:focus { - background: yellow; -} - -.mat-stepper-horizontal[aria-selected='false'] { - display:none; -} \ No newline at end of file diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index 893400718814..e46caa5788b0 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -15,8 +15,10 @@ import {Observable} from 'rxjs/Observable'; import {map} from 'rxjs/operator/map'; import {LEFT_ARROW, RIGHT_ARROW, ENTER, TAB} from '../keyboard/keycodes'; +/** Used to generate unique ID for each stepper component. */ let nextId = 0; +/** Change event emitted on focus or selection changes. */ export class CdkStepEvent { index: number; step: CdkStep; @@ -25,27 +27,18 @@ export class CdkStepEvent { @Directive({ selector: '[cdkStepper]', host: { - //'(focus)': '_onFocus()', '(keydown)': '_onKeydown($event)' }, }) export class CdkStepper { - - get focusIndex(): number {return this._focusIndex; } - private _focusIndex: number = 0; - @ContentChildren(CdkStep) _steps: QueryList; @ViewChildren('stepHeader') _stepHeader: QueryList; - @ViewChildren('stepButton') _stepButton: QueryList; - /** The index of the currently selected step. */ @Input() set selectedIndex(value: number) { this._selectedIndex = value; - //this.selectedStep = this._steps.toArray()[this._selectedIndex]; - //this.stepEvent.emit(this._emitstepEvent()); } get selectedIndex(): number { return this._selectedIndex; } private _selectedIndex: number; @@ -65,45 +58,35 @@ export class CdkStepper { /** Event emitted when the selected step has changed. */ @Output() stepEvent = new EventEmitter(); + /** Event emitted when the focused step has changed. */ @Output() focusChange = new EventEmitter(); + /** The step that is currently selected. */ get selectedStep(): CdkStep { return this._steps.toArray()[this._selectedIndex]; } private _selectedStep: CdkStep; + /** The index of the step that the focus is currently on. */ + get focusIndex(): number {return this._focusIndex; } + private _focusIndex: number = 0; + private _groupId: number; constructor() { this._groupId = nextId++; } - // _keyManager: FocusKeyManager; - - //selectedIndex: number = 0; - - // ngAfterContentChecked() { - // this._steps.toArray()[this._selectedIndex].selected = true; - // } - - // constructor(private _element: ElementRef) { } - // - // ngAfterContentInit(): void { - // this._keyManager = new FocusKeyManager(this._steps).withWrap(); - // } + /** Selects and focuses the provided step. */ selectStep(step: CdkStep): void { - //if (!step.active) { return; } - this._selectedIndex = this.indexOf(step); + let stepsArray = this._steps.toArray(); + this._selectedIndex = stepsArray.indexOf(step); this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); this._focusIndex = this._selectedIndex; this._setStepFocus(); } - indexOf(step: CdkStep): number { - let stepsArray = this._steps.toArray(); - return stepsArray.indexOf(step); - } - + /** Selects and focuses the next step in list. */ nextStep(): void { if (this._selectedIndex == this._steps.length - 1) { return; } this._selectedIndex++; @@ -112,6 +95,7 @@ export class CdkStepper { this._setStepFocus(); } + /** Selects and focuses the previous step in list. */ previousStep(): void { if (this._selectedIndex == 0) { return; } this._selectedIndex--; @@ -120,10 +104,12 @@ export class CdkStepper { this._setStepFocus(); } + /** Returns a unique id for each step label element. */ _getStepLabelId(i: number): string { return `mat-step-label-${this._groupId}-${i}`; } + /** Returns a unique id for each step content element. */ _getStepContentId(i: number): string { return `mat-step-content-${this._groupId}-${i}`; } @@ -133,12 +119,9 @@ export class CdkStepper { event.index = index; event.step = this._steps.toArray()[this._selectedIndex]; this._selectedStep = event.step; - //this._focusIndex = this._selectedIndex; - //this._setStepFocus(); return event; } - _onKeydown(event: KeyboardEvent) { switch (event.keyCode) { case RIGHT_ARROW: @@ -158,16 +141,13 @@ export class CdkStepper { this._emitStepEvent(this._selectedIndex); break; } - if (event.keyCode != TAB) event.preventDefault(); + if (event.keyCode != TAB) { + event.preventDefault(); + } } _setStepFocus() { this._stepHeader.toArray()[this._focusIndex].nativeElement.focus(); this.focusChange.emit(this._emitStepEvent(this._selectedIndex)); } - - // _onFocus() { - // //this._keyManager.setFirstItemActive(); - // this._element.nativeElement.focus(); - // } } diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index c4e1c32d04bc..c0b76251ba4a 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,6 +1,8 @@

Horizontal Stepper Demo

-
{{step.content}}
+ + +
\ No newline at end of file diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 8d40ec303606..64ccdf5674c8 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -4,7 +4,7 @@ import {Component} from '@angular/core'; moduleId: module.id, selector: 'stepper-demo', templateUrl: 'stepper-demo.html', - //styleUrls: ['stepper-demo.scss'], + styleUrls: ['stepper-demo.scss'], }) export class StepperDemo { verticalActiveIndex = 0; diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index fd539cd40b99..fa114df35d01 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1,2 +1 @@ - \ No newline at end of file diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 41a4b3a807a4..1d35d4dc176c 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -1,11 +1,18 @@ -import {Component, ContentChild, TemplateRef, ViewChild} from "@angular/core"; -import {CdkStep} from "@angular/cdk"; -import {MdStepLabel} from "./step-label"; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Component, ContentChild, TemplateRef, ViewChild} from '@angular/core'; +import {CdkStep} from '@angular/cdk'; +import {MdStepLabel} from './step-label'; @Component({ moduleId: module.id, - selector: 'mat-step', + selector: 'md-step, mat-step', templateUrl: 'step.html', - //viewProviders: [CdkStep], inputs: ['label'], }) export class MdStep extends CdkStep { @@ -14,4 +21,4 @@ export class MdStep extends CdkStep { /** Template inside the MdStep view that contains an . */ @ViewChild(TemplateRef) content: TemplateRef; -} \ No newline at end of file +} diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index b2944cd76183..2b7737d0b59d 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -11,9 +11,11 @@
{{i + 1}}
+ +
{{step.label}}
@@ -27,12 +29,10 @@ class="mat-stepper-horizontal" role="tabpanel" [id]="_getStepContentId(i)" [attr.aria-labelledby]="_getStepLabelId(i)" - [attr.aria-selected]="selectedIndex == i" - [tabIndex]="0"> + [attr.aria-expanded]="selectedIndex == i">
-
- - - -
\ No newline at end of file +
+ + +
\ No newline at end of file diff --git a/src/lib/stepper/stepper-horizontal.ts b/src/lib/stepper/stepper-horizontal.ts index c6ed13fe611d..1645d64ed758 100644 --- a/src/lib/stepper/stepper-horizontal.ts +++ b/src/lib/stepper/stepper-horizontal.ts @@ -7,11 +7,11 @@ */ import {Component, ContentChildren, QueryList} from '@angular/core'; -import {MdStep} from "./step"; -import {CdkStepper} from "@angular/cdk"; +import {MdStep} from './step'; +import {CdkStepper} from '@angular/cdk'; @Component({ moduleId: module.id, - selector: 'mat-horizontal-stepper', + selector: 'md-horizontal-stepper, mat-horizontal-stepper', templateUrl: 'stepper-horizontal.html', styleUrls: ['stepper.scss'], inputs: ['selectedIndex'], diff --git a/src/lib/stepper/stepper-vertical.html b/src/lib/stepper/stepper-vertical.html index 1c88c9d394d3..a40aaaf87535 100644 --- a/src/lib/stepper/stepper-vertical.html +++ b/src/lib/stepper/stepper-vertical.html @@ -1,28 +1,38 @@
-
-
+
-
- - - -
+
+
+ + +
\ No newline at end of file diff --git a/src/lib/stepper/stepper-vertical.ts b/src/lib/stepper/stepper-vertical.ts index f3377e79a40e..c91061957cfb 100644 --- a/src/lib/stepper/stepper-vertical.ts +++ b/src/lib/stepper/stepper-vertical.ts @@ -8,10 +8,10 @@ import {Component, ContentChildren, QueryList} from '@angular/core'; import {MdStep} from './step'; -import {CdkStepper} from "@angular/cdk"; +import {CdkStepper} from '@angular/cdk'; @Component({ moduleId: module.id, - selector: 'mat-vertical-stepper', + selector: 'md-vertical-stepper, mat-vertical-stepper', templateUrl: 'stepper-vertical.html', styleUrls: ['stepper.scss'], inputs: ['selectedIndex'], diff --git a/src/lib/stepper/stepper.scss b/src/lib/stepper/stepper.scss index c907ebc7899d..255fea2270a2 100644 --- a/src/lib/stepper/stepper.scss +++ b/src/lib/stepper/stepper.scss @@ -2,11 +2,11 @@ background: yellow; } -.mat-stepper-horizontal[aria-selected='false'] { +.mat-stepper-horizontal[aria-expanded='false'] { display:none; } -.mat-stepper-horizontal[aria-selected='true'] { +.mat-stepper-horizontal[aria-expanded='true'] { background: pink; } From 5e9085fd9ef3e1957d2338bc01a794b16bae840b Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 13 Jul 2017 14:11:50 -0700 Subject: [PATCH 21/29] Fix package-lock.json --- package-lock.json | 7008 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 5529 insertions(+), 1479 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e08ae51e70d..2d2cfcec265f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,8 @@ { "name": "material2-srcs", - "version": "2.0.0-beta.7", + "version": "2.0.0-beta.8", "lockfileVersion": 1, + "requires": true, "dependencies": { "@angular/animations": { "version": "4.1.3", @@ -22,7 +23,12 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.1.3.tgz", "integrity": "sha1-wjYv/fZXVkcUgfg5+rZ1vKwhP5Y=", - "dev": true + "dev": true, + "requires": { + "@angular/tsc-wrapped": "4.1.3", + "minimist": "1.2.0", + "reflect-metadata": "0.1.10" + } }, "@angular/core": { "version": "4.1.3", @@ -54,7 +60,11 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-4.1.3.tgz", "integrity": "sha1-u/rkKxVzA1d1HaDhRdaG+SWpRDE=", - "dev": true + "dev": true, + "requires": { + "parse5": "3.0.2", + "xhr2": "0.1.4" + } }, "@angular/router": { "version": "4.1.3", @@ -66,13 +76,50 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.1.3.tgz", "integrity": "sha1-LWNyyRh78WIerNlguUs5xPlSk80=", - "dev": true + "dev": true, + "requires": { + "tsickle": "0.21.6" + }, + "dependencies": { + "tsickle": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", + "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=", + "dev": true, + "requires": { + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map": "0.5.6", + "source-map-support": "0.4.15" + } + } + } }, "@google-cloud/common": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-0.13.4.tgz", "integrity": "sha1-dbt/YJMc/J2U2gtdQIlQ0Lvw6Xk=", - "dev": true + "dev": true, + "requires": { + "array-uniq": "1.0.3", + "arrify": "1.0.1", + "concat-stream": "1.6.0", + "create-error-class": "3.0.2", + "duplexify": "3.5.0", + "ent": "2.2.0", + "extend": "3.0.1", + "google-auto-auth": "0.7.1", + "is": "3.2.1", + "log-driver": "1.2.5", + "methmeth": "1.1.0", + "modelo": "4.2.0", + "request": "2.81.0", + "retry-request": "2.0.5", + "split-array-stream": "1.0.3", + "stream-events": "1.0.2", + "string-format-obj": "1.1.0", + "through2": "2.0.3" + } }, "@google-cloud/functions-emulator": { "version": "1.0.0-alpha.21", @@ -80,20 +127,68 @@ "integrity": "sha512-ZLCd89mo4hV4U6O1Fdcy2h9AgaY+GGAEZck3jNcFAKP70pR3+NIMPGsA5YSS4lTrS7zJBe0zaHJs1Z59S90oPA==", "dev": true, "optional": true, + "requires": { + "@google-cloud/storage": "1.1.1", + "adm-zip": "0.4.7", + "ajv": "5.1.6", + "body-parser": "1.17.2", + "cli-table2": "0.2.0", + "colors": "1.1.2", + "configstore": "3.1.0", + "express": "4.15.3", + "google-proto-files": "0.12.0", + "googleapis": "19.0.0", + "got": "7.0.0", + "grpc": "1.3.8", + "http-proxy": "1.16.2", + "lodash": "4.17.4", + "prompt": "1.0.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "serializerr": "1.0.3", + "supertest": "3.0.0", + "tmp": "0.0.31", + "uuid": "3.0.1", + "winston": "2.3.1", + "yargs": "8.0.2" + }, "dependencies": { "@google-cloud/storage": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-1.1.1.tgz", "integrity": "sha1-ZZC1zm53lVbJzHBDvWRJ1rwHgd4=", "dev": true, - "optional": true + "optional": true, + "requires": { + "@google-cloud/common": "0.13.4", + "arrify": "1.0.1", + "async": "2.5.0", + "concat-stream": "1.6.0", + "create-error-class": "3.0.2", + "duplexify": "3.5.0", + "extend": "3.0.1", + "gcs-resumable-upload": "0.7.7", + "hash-stream-validation": "0.2.1", + "is": "3.2.1", + "mime-types": "2.1.15", + "once": "1.4.0", + "pumpify": "1.3.5", + "stream-events": "1.0.2", + "string-format-obj": "1.1.0", + "through2": "2.0.3" + } }, "ajv": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.1.6.tgz", "integrity": "sha1-Sy8aGd7Ok9V6whYDfj6XkcfdFWQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "co": "4.6.0", + "json-schema-traverse": "0.3.1", + "json-stable-stringify": "1.0.1" + } }, "ansi-regex": { "version": "3.0.0", @@ -122,13 +217,23 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "optional": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, "dependencies": { "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true + "optional": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, @@ -144,56 +249,99 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, - "optional": true + "optional": true, + "requires": { + "locate-path": "2.0.0" + } }, "gcp-metadata": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.1.0.tgz", "integrity": "sha1-q+IfHqMk3Qs0o/BsqBdj+x7uN9k=", "dev": true, - "optional": true + "optional": true, + "requires": { + "extend": "3.0.1", + "retry-request": "1.3.2" + } }, "gcs-resumable-upload": { "version": "0.7.7", "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-0.7.7.tgz", "integrity": "sha1-2clyWvlwu8hsvwr+8kBtwizpGGQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "buffer-equal": "1.0.0", + "configstore": "3.1.0", + "google-auto-auth": "0.6.1", + "pumpify": "1.3.5", + "request": "2.81.0", + "stream-events": "1.0.2", + "through2": "2.0.3" + } }, "google-auto-auth": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.6.1.tgz", "integrity": "sha1-wF2CDpRUc57PKKiJLuqz0WJPLLM=", "dev": true, - "optional": true + "optional": true, + "requires": { + "async": "2.5.0", + "gcp-metadata": "0.1.0", + "google-auth-library": "0.10.0", + "object-assign": "3.0.0", + "request": "2.81.0" + } }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, - "optional": true + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.16.0", + "pinkie-promise": "2.0.1" + } }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, - "optional": true + "optional": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } }, "os-locale": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.0.0.tgz", "integrity": "sha1-FZGN7VEFIrge565aMJ1U9jn8OaQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "execa": "0.5.1", + "lcid": "1.0.0", + "mem": "1.1.0" + } }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, - "optional": true + "optional": true, + "requires": { + "pify": "2.3.0" + } }, "qs": { "version": "6.3.2", @@ -207,14 +355,23 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, - "optional": true + "optional": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } }, "read-pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, - "optional": true + "optional": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } }, "retry-request": { "version": "1.3.2", @@ -222,6 +379,10 @@ "integrity": "sha1-Wa0k5x+K4/MS1fe0vPRnpeWle9Y=", "dev": true, "optional": true, + "requires": { + "request": "2.76.0", + "through2": "2.0.3" + }, "dependencies": { "node-uuid": { "version": "1.4.8", @@ -235,7 +396,29 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.76.0.tgz", "integrity": "sha1-vkRQWv73A2CgQ2lVEGvjlF2VVg4=", "dev": true, - "optional": true + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3" + } } } }, @@ -245,6 +428,10 @@ "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", "dev": true, "optional": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, "dependencies": { "is-fullwidth-code-point": { "version": "2.0.0", @@ -258,7 +445,10 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, - "optional": true + "optional": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, @@ -274,7 +464,10 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "dev": true, - "optional": true + "optional": true, + "requires": { + "os-tmpdir": "1.0.2" + } }, "tunnel-agent": { "version": "0.4.3", @@ -295,7 +488,22 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, - "optional": true + "optional": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.0.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.0", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } } } }, @@ -303,7 +511,25 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-1.2.0.tgz", "integrity": "sha1-dO6TaJbaXkU8NBzygEQ0LBqazrc=", - "dev": true + "dev": true, + "requires": { + "@google-cloud/common": "0.13.4", + "arrify": "1.0.1", + "async": "2.5.0", + "concat-stream": "1.6.0", + "create-error-class": "3.0.2", + "duplexify": "3.5.0", + "extend": "3.0.1", + "gcs-resumable-upload": "0.8.0", + "hash-stream-validation": "0.2.1", + "is": "3.2.1", + "mime-types": "2.1.15", + "once": "1.4.0", + "pumpify": "1.3.5", + "stream-events": "1.0.2", + "string-format-obj": "1.1.0", + "through2": "2.0.3" + } }, "@types/chalk": { "version": "0.4.31", @@ -315,19 +541,31 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.3.tgz", "integrity": "sha512-o2qkg/J2LWK+sr007+KFBBOrxzxpr9kiP0gMFC75gQJXhUn/E3pQA0kSVdxrQ3lf+rOwsRnuH0wnR5MNTotEKg==", - "dev": true + "dev": true, + "requires": { + "@types/node": "7.0.34" + } }, "@types/glob": { "version": "5.0.30", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.30.tgz", "integrity": "sha1-ECZAnFYlqGiQdGAoCNCCsoZ7ilE=", - "dev": true + "dev": true, + "requires": { + "@types/minimatch": "2.0.29", + "@types/node": "7.0.34" + } }, "@types/gulp": { "version": "3.8.32", "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-3.8.32.tgz", "integrity": "sha1-g8WcaBzCM9Hsf4LSaVVVZvoTMVY=", - "dev": true + "dev": true, + "requires": { + "@types/node": "7.0.34", + "@types/orchestrator": "0.3.0", + "@types/vinyl": "2.0.0" + } }, "@types/hammerjs": { "version": "2.0.34", @@ -345,7 +583,10 @@ "version": "0.3.30", "resolved": "https://registry.npmjs.org/@types/merge2/-/merge2-0.3.30.tgz", "integrity": "sha1-njnQT2/k82+nR3VmytH6+AsqZx8=", - "dev": true + "dev": true, + "requires": { + "@types/node": "7.0.34" + } }, "@types/minimatch": { "version": "2.0.29", @@ -360,16 +601,20 @@ "dev": true }, "@types/node": { - "version": "7.0.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.33.tgz", - "integrity": "sha512-8fVvl6Yyk3jZvSYxRMS9/AmZJ5RXCOP9N4xSlykyBViVESu751pxHYTN14Embn1Fem78YwEHdC7p7KGQQpwunw==", + "version": "7.0.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.34.tgz", + "integrity": "sha512-99ujivDq9tqw3b88xrWqUcHfY3XT+moVhAlMqlN+OdavTxfCRW2X1bRBFcloILRJiIoir+gG3I65jzrpNgF/3g==", "dev": true }, "@types/orchestrator": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@types/orchestrator/-/orchestrator-0.3.0.tgz", "integrity": "sha1-v4ShaZyTMNT+ic2BJj6PwJ+zKXg=", - "dev": true + "dev": true, + "requires": { + "@types/node": "7.0.34", + "@types/q": "0.0.35" + } }, "@types/q": { "version": "0.0.35", @@ -381,7 +626,11 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/run-sequence/-/run-sequence-0.0.29.tgz", "integrity": "sha1-atD3ODE24TklMi5p/EHbd7MLIHU=", - "dev": true + "dev": true, + "requires": { + "@types/gulp": "3.8.32", + "@types/node": "7.0.34" + } }, "@types/selenium-webdriver": { "version": "2.53.42", @@ -393,7 +642,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.0.tgz", "integrity": "sha1-/SE79/QTbd4h/hiVUAsSwYb4wmg=", - "dev": true + "dev": true, + "requires": { + "@types/node": "7.0.34" + } }, "abab": { "version": "1.0.3", @@ -411,7 +663,11 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true + "dev": true, + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.6.1" + } }, "acorn": { "version": "2.7.0", @@ -423,7 +679,10 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", - "dev": true + "dev": true, + "requires": { + "acorn": "2.7.0" + } }, "adm-zip": { "version": "0.4.7", @@ -442,6 +701,10 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", "dev": true, + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + }, "dependencies": { "semver": { "version": "5.0.3", @@ -455,19 +718,22 @@ "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "amdefine": { "version": "1.0.1", @@ -479,7 +745,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "ansi-escapes": { "version": "1.4.0", @@ -509,7 +778,11 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", - "dev": true + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } }, "app-module-path": { "version": "1.1.0", @@ -528,6 +801,16 @@ "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.16.0.tgz", "integrity": "sha1-u1cDRomdCGXrd+1mcnqzxjT8GlA=", "dev": true, + "requires": { + "async": "1.4.2", + "buffer-crc32": "0.2.13", + "glob": "5.0.15", + "lazystream": "0.1.0", + "lodash": "3.10.1", + "readable-stream": "1.0.34", + "tar-stream": "1.2.2", + "zip-stream": "0.6.0" + }, "dependencies": { "async": { "version": "1.4.2", @@ -539,7 +822,14 @@ "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "isarray": { "version": "0.0.1", @@ -557,7 +847,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -572,12 +868,23 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", "dev": true, + "requires": { + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lazystream": "1.0.0", + "lodash": "4.17.4", + "normalize-path": "2.1.1", + "readable-stream": "2.3.3" + }, "dependencies": { "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } } } }, @@ -591,13 +898,20 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } }, "arguejs": { "version": "0.2.3", @@ -610,7 +924,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } }, "arr-flatten": { "version": "1.1.0", @@ -676,7 +993,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } }, "array-uniq": { "version": "1.0.3", @@ -709,9 +1029,9 @@ "dev": true }, "asap": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", - "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, "ascli": { @@ -719,7 +1039,11 @@ "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", "dev": true, - "optional": true + "optional": true, + "requires": { + "colour": "0.7.1", + "optjs": "3.2.2" + } }, "asn1": { "version": "0.2.3", @@ -743,7 +1067,10 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "async-each": { "version": "1.0.1", @@ -767,7 +1094,15 @@ "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000699", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "aws-sign2": { "version": "0.6.0", @@ -791,13 +1126,21 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/axe-webdriverjs/-/axe-webdriverjs-1.1.3.tgz", "integrity": "sha1-lIqXLk0OJSa0HGCptEBkkyu24G8=", - "dev": true + "dev": true, + "requires": { + "axe-core": "2.3.1" + } }, "babel-code-frame": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } }, "babylon": { "version": "6.17.4", @@ -864,7 +1207,10 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "beeper": { "version": "1.1.1", @@ -876,13 +1222,20 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true + "dev": true, + "requires": { + "callsite": "1.0.0" + } }, "binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true + "dev": true, + "requires": { + "buffers": "0.1.1", + "chainsaw": "0.1.0" + } }, "binary-extensions": { "version": "1.8.0", @@ -894,7 +1247,10 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "blob": { "version": "0.0.4", @@ -906,13 +1262,19 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "blocking-proxy": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz", "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=", - "dev": true + "dev": true, + "requires": { + "minimist": "1.2.0" + } }, "bluebird": { "version": "3.5.0", @@ -924,19 +1286,45 @@ "version": "1.17.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "dev": true + "dev": true, + "requires": { + "bytes": "2.4.0", + "content-type": "1.0.2", + "debug": "2.6.7", + "depd": "1.1.0", + "http-errors": "1.6.1", + "iconv-lite": "0.4.15", + "on-finished": "2.3.0", + "qs": "6.4.0", + "raw-body": "2.2.0", + "type-is": "1.6.15" + } }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "boxen": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", "dev": true, + "requires": { + "ansi-align": "1.1.0", + "camelcase": "2.1.1", + "chalk": "1.1.3", + "cli-boxes": "1.0.0", + "filled-array": "1.1.0", + "object-assign": "4.1.1", + "repeating": "2.0.1", + "string-width": "1.0.2", + "widest-line": "1.0.0" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -950,19 +1338,31 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "browser-resolve": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", "dev": true, + "requires": { + "resolve": "1.1.7" + }, "dependencies": { "resolve": { "version": "1.1.7", @@ -976,19 +1376,30 @@ "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "1.0.30000699", + "electron-to-chromium": "1.3.15" + } }, "browserstack": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.0.tgz", "integrity": "sha1-tWVCWtYu1ywQgqHrl51TE8fUdU8=", - "dev": true + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0" + } }, "browserstacktunnel-wrapper": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/browserstacktunnel-wrapper/-/browserstacktunnel-wrapper-2.0.1.tgz", "integrity": "sha1-/+GRDW45/oZhgYPoJmkAQa9T7a4=", - "dev": true + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0", + "unzip": "0.1.11" + } }, "buffer-crc32": { "version": "0.2.13", @@ -1012,7 +1423,12 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffered-spawn/-/buffered-spawn-1.1.2.tgz", "integrity": "sha1-Ia2XNd+/ZXZ0W+DXSiPvJXvzxY0=", - "dev": true + "dev": true, + "requires": { + "cross-spawn-async": "1.0.1", + "err-code": "0.1.2", + "q": "1.5.0" + } }, "buffers": { "version": "0.1.1", @@ -1024,7 +1440,10 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.1.tgz", "integrity": "sha1-AWE3MGCsWYjv+ZBYcxEU9uGV1R4=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "builtin-modules": { "version": "1.1.1", @@ -1037,7 +1456,10 @@ "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", "dev": true, - "optional": true + "optional": true, + "requires": { + "long": "3.2.0" + } }, "bytes": { "version": "2.4.0", @@ -1055,7 +1477,11 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1", + "upper-case": "1.1.3" + } }, "camelcase": { "version": "2.1.1", @@ -1067,12 +1493,16 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } }, "caniuse-db": { - "version": "1.0.30000697", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000697.tgz", - "integrity": "sha1-IM5qnO7vTvShXcjoDy6PuQSejXc=", + "version": "1.0.30000699", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000699.tgz", + "integrity": "sha1-WvSRqxx3dWGjK0P+JT1qcHHM+Xk=", "dev": true }, "canonical-path": { @@ -1097,31 +1527,68 @@ "version": "0.8.8", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.8.tgz", "integrity": "sha1-aTR59DqsVJ2Aa9c+kkzQ2USVGgY=", - "dev": true + "dev": true, + "requires": { + "underscore-contrib": "0.3.0" + } }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true + "dev": true, + "requires": { + "traverse": "0.3.9" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } }, "change-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.0.tgz", "integrity": "sha1-bJyONfh5CHCoK2sHRb6MPL75sIE=", - "dev": true + "dev": true, + "requires": { + "camel-case": "3.0.0", + "constant-case": "2.0.0", + "dot-case": "2.1.1", + "header-case": "1.0.1", + "is-lower-case": "1.1.3", + "is-upper-case": "1.1.2", + "lower-case": "1.1.4", + "lower-case-first": "1.0.2", + "no-case": "2.3.1", + "param-case": "2.1.1", + "pascal-case": "2.0.1", + "path-case": "2.1.1", + "sentence-case": "2.1.1", + "snake-case": "2.1.0", + "swap-case": "1.1.2", + "title-case": "2.1.1", + "upper-case": "1.1.3", + "upper-case-first": "1.1.2" + } }, "char-spinner": { "version": "1.0.1", @@ -1133,7 +1600,17 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true + "dev": true, + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } }, "circular-json": { "version": "0.3.1", @@ -1145,13 +1622,19 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=", - "dev": true + "dev": true, + "requires": { + "json-parse-helpfulerror": "1.0.3" + } }, "clean-css": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.5.tgz", - "integrity": "sha1-0JqHoCpTdRF1iXlq52oGPKzbVBo=", - "dev": true + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.6.tgz", + "integrity": "sha1-Wke+tSaZTLT3vzYYilXtO0VSjws=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "cli-boxes": { "version": "1.0.0", @@ -1163,7 +1646,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } }, "cli-spinners": { "version": "0.1.2", @@ -1175,7 +1661,10 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true + "dev": true, + "requires": { + "colors": "1.0.3" + } }, "cli-table2": { "version": "0.2.0", @@ -1183,6 +1672,11 @@ "integrity": "sha1-LR738hig54biFFQFYtS9F3/jLZc=", "dev": true, "optional": true, + "requires": { + "colors": "1.1.2", + "lodash": "3.10.1", + "string-width": "1.0.2" + }, "dependencies": { "colors": { "version": "1.1.2", @@ -1211,6 +1705,11 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -1230,7 +1729,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.0.tgz", "integrity": "sha1-6uCiQT9VwJQvgYwin+/OhF1/Oxw=", - "dev": true + "dev": true, + "requires": { + "is-regexp": "1.0.0", + "is-supported-regexp-flag": "1.0.0" + } }, "clone-stats": { "version": "0.0.1", @@ -1254,7 +1757,10 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.2" + } }, "color-diff": { "version": "0.1.7", @@ -1273,6 +1779,18 @@ "resolved": "https://registry.npmjs.org/colorguard/-/colorguard-1.2.0.tgz", "integrity": "sha1-8/rK9cquuk71RlPZ+yW7cxd8DYQ=", "dev": true, + "requires": { + "chalk": "1.1.3", + "color-diff": "0.1.7", + "log-symbols": "1.0.2", + "object-assign": "4.1.1", + "pipetteur": "2.0.3", + "plur": "2.1.2", + "postcss": "5.2.17", + "postcss-reporter": "1.4.1", + "text-table": "0.2.0", + "yargs": "1.3.3" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -1284,13 +1802,22 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true + "dev": true, + "requires": { + "irregular-plurals": "1.3.0" + } }, "postcss-reporter": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-1.4.1.tgz", "integrity": "sha1-wTbwpbFhkV83ndN2XGEHX357mvI=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "lodash": "4.17.4", + "log-symbols": "1.0.2", + "postcss": "5.2.17" + } }, "yargs": { "version": "1.3.3", @@ -1317,13 +1844,19 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.11.0", @@ -1342,12 +1875,19 @@ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", "dev": true, + "requires": { + "array-ify": "1.0.0", + "dot-prop": "3.0.0" + }, "dependencies": { "dot-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true + "dev": true, + "requires": { + "is-obj": "1.0.1" + } } } }, @@ -1355,8 +1895,11 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/compare-semver/-/compare-semver-1.1.0.tgz", "integrity": "sha1-fAp5onu4C2xplERfgpWCWdPQIVM=", - "dev": true - }, + "dev": true, + "requires": { + "semver": "5.3.0" + } + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -1380,6 +1923,12 @@ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-0.3.0.tgz", "integrity": "sha1-lwk+Lhk/dWf6EyA9S43vzVlxpRk=", "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "crc32-stream": "0.3.4", + "node-int64": "0.4.0", + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -1391,7 +1940,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -1405,31 +1960,40 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "compression": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz", - "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=", - "dev": true, + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", + "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "bytes": "2.5.0", + "compressible": "2.0.10", + "debug": "2.6.8", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.1" + }, "dependencies": { "bytes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", - "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", + "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=", "dev": true }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -1443,19 +2007,38 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } }, "configstore": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", - "dev": true + "dev": true, + "requires": { + "dot-prop": "4.1.1", + "graceful-fs": "4.1.11", + "make-dir": "1.0.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.1.0", + "xdg-basedir": "3.0.0" + } }, "connect": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz", "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.7", + "finalhandler": "1.0.3", + "parseurl": "1.3.1", + "utils-merge": "1.0.0" + } }, "connect-livereload": { "version": "0.5.4", @@ -1468,6 +2051,9 @@ "resolved": "https://registry.npmjs.org/connect-query/-/connect-query-0.2.0.tgz", "integrity": "sha1-Iw3knmlQmjFzi/96WzP4eF7O+jo=", "dev": true, + "requires": { + "qs": "1.1.0" + }, "dependencies": { "qs": { "version": "1.1.0", @@ -1482,18 +2068,31 @@ "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz", "integrity": "sha1-3ppexh4zoStu2qt7XwYumMWZuI4=", "dev": true, + "requires": { + "debug": "2.2.0", + "http-errors": "1.3.1", + "ms": "0.7.1", + "on-headers": "1.0.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "http-errors": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } }, "ms": { "version": "0.7.1", @@ -1513,7 +2112,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", - "dev": true + "dev": true, + "requires": { + "snake-case": "2.1.0", + "upper-case": "1.1.3" + } }, "content-disposition": { "version": "0.5.2", @@ -1538,85 +2141,167 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.3.tgz", "integrity": "sha1-JigweKw4wJTfKvFgSwpGu8AWXE0=", - "dev": true + "dev": true, + "requires": { + "conventional-changelog-angular": "1.3.3", + "conventional-changelog-atom": "0.1.0", + "conventional-changelog-codemirror": "0.1.0", + "conventional-changelog-core": "1.8.0", + "conventional-changelog-ember": "0.2.5", + "conventional-changelog-eslint": "0.1.0", + "conventional-changelog-express": "0.1.0", + "conventional-changelog-jquery": "0.1.0", + "conventional-changelog-jscs": "0.1.0", + "conventional-changelog-jshint": "0.1.0" + } }, "conventional-changelog-angular": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.3.3.tgz", "integrity": "sha1-586AeoXdR1DhtBf3ZgRUl1EeByY=", - "dev": true + "dev": true, + "requires": { + "compare-func": "1.3.2", + "github-url-from-git": "1.5.0", + "q": "1.5.0" + } }, "conventional-changelog-atom": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.1.0.tgz", "integrity": "sha1-Z6R8ZqQrL4kJ7xWHyZia4d5zC5I=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "conventional-changelog-codemirror": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.1.0.tgz", "integrity": "sha1-dXelkdv5tTjnoVCn7mL2WihyszQ=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "conventional-changelog-core": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.8.0.tgz", "integrity": "sha1-l3hItBbK8V+wnyCxKmLUDvFFuVc=", - "dev": true + "dev": true, + "requires": { + "conventional-changelog-writer": "1.4.1", + "conventional-commits-parser": "1.3.0", + "dateformat": "1.0.12", + "get-pkg-repo": "1.4.0", + "git-raw-commits": "1.2.0", + "git-remote-origin-url": "2.0.0", + "git-semver-tags": "1.2.0", + "lodash": "4.17.4", + "normalize-package-data": "2.4.0", + "q": "1.5.0", + "read-pkg": "1.1.0", + "read-pkg-up": "1.0.1", + "through2": "2.0.3" + } }, "conventional-changelog-ember": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.5.tgz", "integrity": "sha1-ziHVz4PNXr4F0j/fIy2IRPS1ak8=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "conventional-changelog-eslint": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-0.1.0.tgz", "integrity": "sha1-pSQR6ZngUBzlALhWsKZD0DMJB+I=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "conventional-changelog-express": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.1.0.tgz", "integrity": "sha1-VcbIQcgRliA2wDe9vZZKVK4xD84=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "conventional-changelog-jquery": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "conventional-changelog-jscs": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "conventional-changelog-jshint": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.1.0.tgz", "integrity": "sha1-AMq46aMxdIer2UxNhGcTQpGNKgc=", - "dev": true + "dev": true, + "requires": { + "compare-func": "1.3.2", + "q": "1.5.0" + } }, "conventional-changelog-writer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-1.4.1.tgz", "integrity": "sha1-P0y00APrtWmJ0w00WJO1KkNjnI4=", - "dev": true + "dev": true, + "requires": { + "compare-func": "1.3.2", + "conventional-commits-filter": "1.0.0", + "dateformat": "1.0.12", + "handlebars": "4.0.10", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.4", + "meow": "3.7.0", + "semver": "5.3.0", + "split": "1.0.0", + "through2": "2.0.3" + } }, "conventional-commits-filter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.0.0.tgz", "integrity": "sha1-b8KmWTcrw/IznPn//34bA0S5MDk=", - "dev": true + "dev": true, + "requires": { + "is-subset": "0.1.1", + "modify-values": "1.0.0" + } }, "conventional-commits-parser": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-1.3.0.tgz", "integrity": "sha1-4ye1MZThp61dxjR57pCZpSsCSGU=", - "dev": true + "dev": true, + "requires": { + "is-text-path": "1.0.1", + "JSONStream": "1.3.1", + "lodash": "4.17.4", + "meow": "3.7.0", + "split2": "2.1.1", + "through2": "2.0.3", + "trim-off-newlines": "1.0.1" + } }, "cookie": { "version": "0.3.1", @@ -1629,6 +2314,10 @@ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz", "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=", "dev": true, + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6" + }, "dependencies": { "cookie": { "version": "0.1.3", @@ -1655,7 +2344,11 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-1.6.0.tgz", "integrity": "sha1-8DJLvumXcRAeezraES8xPDk9uO0=", - "dev": true + "dev": true, + "requires": { + "each-props": "1.3.0", + "is-plain-object": "2.0.3" + } }, "core-js": { "version": "2.4.1", @@ -1673,6 +2366,15 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.1.3.tgz", "integrity": "sha1-lSdx6w3dwcs/ovb75RpSLpOz7go=", "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.9.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -1693,6 +2395,10 @@ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-0.3.4.tgz", "integrity": "sha1-c7wltF+sHbZjIjGnv86JJ+nwZVI=", "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -1704,7 +2410,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -1718,19 +2430,30 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } }, "cross-spawn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } }, "cross-spawn-async": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-1.0.1.tgz", "integrity": "sha1-u1JcHkINmUJVLgR5Gj6y2Yh6EF8=", "dev": true, + "requires": { + "lru-cache": "2.7.3", + "which": "1.2.14" + }, "dependencies": { "lru-cache": { "version": "2.7.3", @@ -1744,7 +2467,10 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "crypto-random-string": { "version": "1.0.0", @@ -1756,7 +2482,12 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=", - "dev": true + "dev": true, + "requires": { + "rndm": "1.2.0", + "tsscmp": "1.0.5", + "uid-safe": "2.1.4" + } }, "css-color-names": { "version": "0.0.3", @@ -1769,12 +2500,21 @@ "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", "dev": true, + "requires": { + "css-tokenize": "1.0.1", + "duplexer2": "0.0.2", + "ldjson-stream": "1.2.1", + "through2": "0.6.5" + }, "dependencies": { "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } }, "isarray": { "version": "0.0.1", @@ -1786,7 +2526,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -1799,12 +2545,22 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + }, "dependencies": { "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } } } } @@ -1815,6 +2571,10 @@ "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "1.1.14" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -1826,7 +2586,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -1846,13 +2612,22 @@ "version": "0.2.37", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true + "dev": true, + "requires": { + "cssom": "0.3.2" + } }, "csurf": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz", "integrity": "sha1-I/KhO/HY/OHQyZZYg5RELLqGpWo=", "dev": true, + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6", + "csrf": "3.0.6", + "http-errors": "1.3.1" + }, "dependencies": { "cookie": { "version": "0.1.3", @@ -1864,7 +2639,11 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } } } }, @@ -1873,12 +2652,23 @@ "resolved": "https://registry.npmjs.org/csv-streamify/-/csv-streamify-3.0.4.tgz", "integrity": "sha1-TLYUxX4/KZzKF7Y/3LStFnd39Ho=", "dev": true, + "requires": { + "through2": "2.0.1" + }, "dependencies": { "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "0.10.31", @@ -1890,7 +2680,11 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.0.6", + "xtend": "4.0.1" + } } } }, @@ -1898,7 +2692,10 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } }, "custom-event": { "version": "1.0.1", @@ -1916,19 +2713,28 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true + "dev": true, + "requires": { + "es5-ext": "0.10.24" + } }, "dargs": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1942,13 +2748,20 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } }, "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "decamelize": { "version": "1.2.0", @@ -1961,7 +2774,10 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, - "optional": true + "optional": true, + "requires": { + "mimic-response": "1.0.0" + } }, "deep-equal": { "version": "0.2.2", @@ -1986,13 +2802,25 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true + "dev": true, + "requires": { + "clone": "1.0.2" + } }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.1" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -2031,6 +2859,12 @@ "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-5.8.0.tgz", "integrity": "sha1-Cr1a7nibSb5RIaks9ml7t6EzLXA=", "dev": true, + "requires": { + "commander": "2.6.0", + "debug": "2.2.0", + "filing-cabinet": "1.8.0", + "precinct": "3.6.0" + }, "dependencies": { "commander": { "version": "2.6.0", @@ -2042,7 +2876,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -2068,37 +2905,61 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true + "dev": true, + "requires": { + "fs-exists-sync": "0.1.0" + } }, "detective-amd": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-2.4.0.tgz", "integrity": "sha1-XrDfTvXBipQDOwfa8TbbzV/HXNU=", - "dev": true + "dev": true, + "requires": { + "ast-module-types": "2.3.2", + "escodegen": "1.8.1", + "get-amd-module-type": "2.0.5", + "node-source-walk": "3.2.1" + } }, "detective-cjs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-2.0.0.tgz", "integrity": "sha1-3OTJMCzcpS5ri/04d8qT9ixczAM=", - "dev": true + "dev": true, + "requires": { + "ast-module-types": "2.3.2", + "node-source-walk": "3.2.1" + } }, "detective-es6": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-1.1.6.tgz", "integrity": "sha1-XZFAVm7v8SxU/mqzk2ZQ1DvOsKY=", - "dev": true + "dev": true, + "requires": { + "node-source-walk": "3.2.1" + } }, "detective-less": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.0.tgz", "integrity": "sha1-Qmx4yatuMnW/ZsyRq6wAU7tFLX0=", "dev": true, + "requires": { + "debug": "2.2.0", + "gonzales-pe": "3.4.7", + "node-source-walk": "3.2.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -2113,12 +2974,20 @@ "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-2.0.0.tgz", "integrity": "sha1-CvGKxjnIw26dN9sadOK/hJ8KVI4=", "dev": true, + "requires": { + "debug": "2.2.0", + "gonzales-pe": "3.4.7", + "node-source-walk": "3.2.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -2133,12 +3002,20 @@ "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-1.0.0.tgz", "integrity": "sha1-owEFIV5fy8JhMuPGuVyNgpkYWJE=", "dev": true, + "requires": { + "debug": "2.2.0", + "gonzales-pe": "3.4.7", + "node-source-walk": "3.2.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -2159,6 +3036,17 @@ "resolved": "https://registry.npmjs.org/dgeni/-/dgeni-0.4.9.tgz", "integrity": "sha1-nkJ3WxOGyl64JHU6ws0WnY9hztE=", "dev": true, + "requires": { + "canonical-path": "0.0.2", + "dependency-graph": "0.4.1", + "di": "0.0.1", + "lodash": "3.10.1", + "objectdiff": "1.1.0", + "optimist": "0.6.1", + "q": "1.4.1", + "validate.js": "0.9.0", + "winston": "2.3.1" + }, "dependencies": { "lodash": { "version": "3.10.1", @@ -2178,7 +3066,29 @@ "version": "0.19.1", "resolved": "https://registry.npmjs.org/dgeni-packages/-/dgeni-packages-0.19.1.tgz", "integrity": "sha1-e5ZUXQo1FRycKwolEz3ggQkMfKA=", - "dev": true + "dev": true, + "requires": { + "canonical-path": "0.0.2", + "catharsis": "0.8.8", + "change-case": "3.0.0", + "dgeni": "0.4.9", + "espree": "2.2.5", + "estraverse": "4.2.0", + "glob": "7.1.2", + "htmlparser2": "3.9.2", + "lodash": "4.17.4", + "marked": "0.3.6", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "mkdirp-promise": "5.0.1", + "node-html-encoder": "0.0.2", + "nunjucks": "2.5.2", + "semver": "5.3.0", + "shelljs": "0.7.8", + "spdx-license-list": "2.1.0", + "stringmap": "0.2.2", + "typescript": "2.2.2" + } }, "di": { "version": "0.0.1", @@ -2203,12 +3113,29 @@ "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-2.6.0.tgz", "integrity": "sha1-GJLRC2Gpo1at2/K2FJM+gfi7ODQ=", "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000699", + "css-rule-stream": "1.1.0", + "duplexer2": "0.0.2", + "jsonfilter": "1.1.2", + "ldjson-stream": "1.2.1", + "lodash": "4.17.4", + "multimatch": "2.1.0", + "postcss": "5.2.17", + "source-map": "0.4.4", + "through2": "0.6.5", + "yargs": "3.10.0" + }, "dependencies": { "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } }, "isarray": { "version": "0.0.1", @@ -2220,13 +3147,22 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } }, "string_decoder": { "version": "0.10.31", @@ -2239,12 +3175,22 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + }, "dependencies": { "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } } } } @@ -2254,13 +3200,23 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" + } }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, "dependencies": { "domelementtype": { "version": "1.1.3", @@ -2280,25 +3236,38 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } }, "domutils": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz", "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=", - "dev": true + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } }, "dot-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1" + } }, "dot-prop": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", - "dev": true + "dev": true, + "requires": { + "is-obj": "1.0.1" + } }, "duplexer": { "version": "0.1.1", @@ -2310,7 +3279,10 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "duplexer3": { "version": "0.1.4", @@ -2323,13 +3295,23 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", - "dev": true + "dev": true, + "requires": { + "end-of-stream": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } }, "each-props": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.0.tgz", "integrity": "sha1-ftgDHJJ2iK7bSoluuRSFtEh7kOo=", "dev": true, + "requires": { + "is-plain-object": "2.0.3", + "object-assign": "4.1.1" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -2344,13 +3326,20 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "ecdsa-sig-formatter": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "safe-buffer": "5.1.1" + } }, "ee-first": { "version": "1.1.1", @@ -2375,12 +3364,18 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", "dev": true, + "requires": { + "once": "1.3.3" + }, "dependencies": { "once": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } } } }, @@ -2389,12 +3384,23 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -2409,12 +3415,29 @@ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -2428,13 +3451,27 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } }, "enhanced-resolve": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.0.3.tgz", "integrity": "sha1-3xTAa1/F7sreEJTJxaErSz7cC2I=", "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.6" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -2466,31 +3503,50 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true + "dev": true, + "requires": { + "prr": "0.0.0" + } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "errorhandler": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz", "integrity": "sha1-t7cO2PNZ6duICS8tIMD4MUIK2D8=", - "dev": true + "dev": true, + "requires": { + "accepts": "1.3.3", + "escape-html": "1.0.3" + } }, "es5-ext": { - "version": "0.10.23", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", - "integrity": "sha1-dXi1G+l0IHpUh4IbVlOMIk5Oezg=", - "dev": true + "version": "0.10.24", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz", + "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=", + "dev": true, + "requires": { + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1" + } }, "es6-iterator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24", + "es6-symbol": "3.1.1" + } }, "es6-promise": { "version": "3.3.1", @@ -2502,13 +3558,24 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24", + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24" + } }, "escape-html": { "version": "1.0.3", @@ -2527,6 +3594,13 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, "dependencies": { "esprima": { "version": "2.7.3", @@ -2545,7 +3619,10 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, - "optional": true + "optional": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -2577,19 +3654,35 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24" + } }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + }, "dependencies": { "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true + "dev": true, + "requires": { + "through": "2.3.8" + } } } }, @@ -2605,13 +3698,26 @@ "integrity": "sha1-3j+4XLjW6RyFvLzrFkWBeFy1ezY=", "dev": true, "optional": true, + "requires": { + "cross-spawn": "4.0.2", + "get-stream": "2.3.1", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, "dependencies": { "get-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, - "optional": true + "optional": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } }, "object-assign": { "version": "4.1.1", @@ -2626,7 +3732,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", - "dev": true + "dev": true, + "requires": { + "clone-regexp": "1.0.0" + } }, "exit": { "version": "0.1.2", @@ -2651,6 +3760,11 @@ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, "dependencies": { "array-slice": { "version": "0.2.3", @@ -2662,13 +3776,20 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true + "dev": true, + "requires": { + "expand-range": "0.1.1" + } }, "expand-range": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } }, "is-number": { "version": "0.1.1", @@ -2688,32 +3809,82 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "expand-tilde": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } }, "express": { "version": "4.15.3", "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", "dev": true, - "optional": true + "optional": true, + "requires": { + "accepts": "1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.7", + "depd": "1.1.0", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "finalhandler": "1.0.3", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.4", + "qs": "6.4.0", + "range-parser": "1.2.0", + "send": "0.15.3", + "serve-static": "1.12.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.1" + } }, "express-session": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz", "integrity": "sha1-XMmPP1/4Ttg1+Ry/CqvQxxB0AK8=", "dev": true, + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6", + "crc": "3.3.0", + "debug": "2.2.0", + "depd": "1.0.1", + "on-headers": "1.0.1", + "parseurl": "1.3.1", + "uid-safe": "2.0.0", + "utils-merge": "1.0.0" + }, "dependencies": { "cookie": { "version": "0.1.3", @@ -2725,7 +3896,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "depd": { "version": "1.0.1", @@ -2743,7 +3917,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=", - "dev": true + "dev": true, + "requires": { + "base64-url": "1.2.1" + } } } }, @@ -2757,7 +3934,10 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "extsprintf": { "version": "1.0.2", @@ -2775,7 +3955,11 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } }, "fast-levenshtein": { "version": "2.0.6", @@ -2787,19 +3971,29 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -2814,6 +4008,10 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, + "requires": { + "flat-cache": "1.2.2", + "object-assign": "4.1.1" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -2846,18 +4044,38 @@ "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-1.8.0.tgz", "integrity": "sha1-fQ6MObBuFlMs7hTK3eQbH6AnYmU=", "dev": true, + "requires": { + "app-module-path": "1.1.0", + "commander": "2.8.1", + "debug": "2.2.0", + "enhanced-resolve": "3.0.3", + "is-relative-path": "1.0.1", + "module-definition": "2.2.4", + "module-lookup-amd": "4.0.4", + "object-assign": "4.0.1", + "resolve": "1.1.7", + "resolve-dependency-path": "1.0.2", + "sass-lookup": "1.0.2", + "stylus-lookup": "1.0.1" + }, "dependencies": { "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -2883,7 +4101,14 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } }, "filled-array": { "version": "1.1.0", @@ -2895,13 +4120,25 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.7", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } }, "find": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/find/-/find-0.2.6.tgz", "integrity": "sha1-DSGLXUjDQkGT9kzqWdOJ+NqnHQE=", - "dev": true + "dev": true, + "requires": { + "traverse-chain": "0.1.0" + } }, "find-index": { "version": "0.1.1", @@ -2919,25 +4156,45 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } }, "findup-sync": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true + "dev": true, + "requires": { + "detect-file": "0.1.0", + "is-glob": "2.0.1", + "micromatch": "2.3.11", + "resolve-dir": "0.1.1" + } }, "fined": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "is-plain-object": "2.0.3", + "object.defaults": "1.1.0", + "object.pick": "1.2.0", + "parse-filepath": "1.0.1" + }, "dependencies": { "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } } } }, @@ -2946,109 +4203,174 @@ "resolved": "https://registry.npmjs.org/firebase/-/firebase-4.1.3.tgz", "integrity": "sha1-5dcyc2bIVNwSRhYzuov+6i9cc1g=", "dev": true, + "requires": { + "dom-storage": "2.0.2", + "faye-websocket": "0.9.3", + "jsonwebtoken": "7.4.1", + "promise-polyfill": "6.0.2", + "xmlhttprequest": "1.8.0" + }, "dependencies": { "base64url": { - "version": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", "dev": true }, "buffer-equal-constant-time": { - "version": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, "dom-storage": { - "version": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.0.2.tgz", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.0.2.tgz", "integrity": "sha1-7RfL9oq9EOCu+BgnE+KXxeS1ALA=", "dev": true }, "ecdsa-sig-formatter": { - "version": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "safe-buffer": "5.1.0" + } }, "faye-websocket": { - "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } }, "hoek": { - "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, "isemail": { - "version": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=", "dev": true }, "joi": { - "version": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.18.1", + "topo": "1.1.0" + } }, "jsonwebtoken": { - "version": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", - "dev": true + "dev": true, + "requires": { + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "2.0.0", + "xtend": "4.0.1" + } }, "jwa": { - "version": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.9", + "safe-buffer": "5.1.0" + } }, "jws": { - "version": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "jwa": "1.1.5", + "safe-buffer": "5.1.0" + } }, "lodash.once": { - "version": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, "moment": { - "version": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", "dev": true }, "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "promise-polyfill": { - "version": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.0.2.tgz", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.0.2.tgz", "integrity": "sha1-2chtPcTcLfkBboiUbe/Wm0m0EWI=", "dev": true }, "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", - "integrity": "sha1-/kyEYDl/nqqqWOc75GJzQIpF4iM=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", + "integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==", "dev": true }, "topo": { - "version": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "websocket-driver": { - "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } }, "websocket-extensions": { - "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", "dev": true }, "xmlhttprequest": { - "version": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", "dev": true }, "xtend": { - "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } @@ -3059,109 +4381,176 @@ "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-5.0.0.tgz", "integrity": "sha1-+trlbJm+T7VseBAH1nGdFT/o/Xs=", "dev": true, + "requires": { + "@types/jsonwebtoken": "7.2.0", + "faye-websocket": "0.9.3", + "jsonwebtoken": "7.1.9", + "node-forge": "0.7.1" + }, "dependencies": { "@types/jsonwebtoken": { - "version": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.0.tgz", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.0.tgz", "integrity": "sha1-D+0yyFAdqArJg50tQDplyD13b/0=", - "dev": true + "dev": true, + "requires": { + "@types/node": "7.0.18" + } }, "@types/node": { - "version": "https://registry.npmjs.org/@types/node/-/node-7.0.18.tgz", + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.18.tgz", "integrity": "sha1-zWfyfT3Az7dG8L3V4IbExdVb4XM=", "dev": true }, "base64url": { - "version": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", "dev": true }, "buffer-equal-constant-time": { - "version": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, "ecdsa-sig-formatter": { - "version": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "safe-buffer": "5.0.1" + } }, "faye-websocket": { - "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } }, "hoek": { - "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, "isemail": { - "version": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=", "dev": true }, "joi": { - "version": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.18.1", + "topo": "1.1.0" + } }, "jsonwebtoken": { - "version": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz", + "version": "7.1.9", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz", "integrity": "sha1-hHgE5SWL7FqUmajcSl56O64I1Yo=", - "dev": true + "dev": true, + "requires": { + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "0.7.3", + "xtend": "4.0.1" + } }, "jwa": { - "version": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.9", + "safe-buffer": "5.0.1" + } }, "jws": { - "version": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "jwa": "1.1.5", + "safe-buffer": "5.0.1" + } }, "lodash.once": { - "version": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, "moment": { - "version": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", "dev": true }, "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", "dev": true }, "node-forge": { - "version": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", "dev": true }, "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", "dev": true }, "topo": { - "version": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "websocket-driver": { - "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } }, "websocket-extensions": { - "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", "dev": true }, "xtend": { - "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } @@ -3172,6 +4561,44 @@ "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-3.9.1.tgz", "integrity": "sha1-tivitFZBile/Goz4sBprj3j2wbA=", "dev": true, + "requires": { + "@google-cloud/functions-emulator": "1.0.0-alpha.21", + "archiver": "0.16.0", + "chalk": "1.1.3", + "cjson": "0.3.3", + "cli-table": "0.3.1", + "commander": "2.11.0", + "configstore": "1.4.0", + "cross-spawn": "4.0.2", + "csv-streamify": "3.0.4", + "didyoumean": "1.2.1", + "es6-set": "0.1.5", + "exit-code": "1.0.2", + "filesize": "3.5.10", + "firebase": "2.4.2", + "fs-extra": "0.23.1", + "fstream-ignore": "1.0.5", + "inquirer": "0.12.0", + "jsonschema": "1.1.1", + "JSONStream": "1.3.1", + "jsonwebtoken": "5.7.0", + "lodash": "4.17.4", + "open": "0.0.5", + "ora": "0.2.3", + "portfinder": "0.4.0", + "progress": "1.1.8", + "request": "2.81.0", + "rsvp": "3.6.1", + "semver": "5.3.0", + "superstatic": "4.1.0", + "tar": "2.2.1", + "tmp": "0.0.27", + "universal-analytics": "0.3.11", + "update-notifier": "0.5.0", + "user-home": "2.0.0", + "uuid": "3.1.0", + "winston": "1.1.2" + }, "dependencies": { "async": { "version": "1.0.0", @@ -3184,6 +4611,16 @@ "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "os-tmpdir": "1.0.2", + "osenv": "0.1.4", + "uuid": "2.0.3", + "write-file-atomic": "1.3.4", + "xdg-basedir": "2.0.0" + }, "dependencies": { "uuid": { "version": "2.0.3", @@ -3198,19 +4635,31 @@ "resolved": "https://registry.npmjs.org/firebase/-/firebase-2.4.2.tgz", "integrity": "sha1-ThEZ7AOWylYdinrL/xYw/qxsCjE=", "dev": true, + "requires": { + "faye-websocket": "0.9.3" + }, "dependencies": { "faye-websocket": { - "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", "dev": true, + "requires": { + "websocket-driver": "0.5.2" + }, "dependencies": { "websocket-driver": { - "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.5.2.tgz", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.5.2.tgz", "integrity": "sha1-jHyF2gcTtAYFVrTXHAF3XuEmnrk=", "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + }, "dependencies": { "websocket-extensions": { - "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", "dev": true } @@ -3224,13 +4673,24 @@ "version": "0.23.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz", "integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.1" + } }, "jsonwebtoken": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-5.7.0.tgz", "integrity": "sha1-HJD5qGzlt0j1+XnBK3BAK0r83bQ=", - "dev": true + "dev": true, + "requires": { + "jws": "3.1.4", + "ms": "0.7.3", + "xtend": "4.0.1" + } }, "ms": { "version": "0.7.3", @@ -3254,19 +4714,36 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/winston/-/winston-1.1.2.tgz", "integrity": "sha1-aO3Xaf951PlSjPDl2AAhqt5nSAw=", - "dev": true + "dev": true, + "requires": { + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "pkginfo": "0.3.1", + "stack-trace": "0.0.10" + } }, "write-file-atomic": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "xdg-basedir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } } } }, @@ -3287,12 +4764,23 @@ "resolved": "https://registry.npmjs.org/flat-arguments/-/flat-arguments-1.0.2.tgz", "integrity": "sha1-m6p4Ct8FAfKC1ybJxqA426ROp28=", "dev": true, + "requires": { + "array-flatten": "1.1.1", + "as-array": "1.0.0", + "lodash.isarguments": "3.1.0", + "lodash.isobject": "3.0.2" + }, "dependencies": { "as-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/as-array/-/as-array-1.0.0.tgz", "integrity": "sha1-KKbu6qVynx9OyiBH316d4avaDtE=", "dev": true, + "requires": { + "lodash.isarguments": "2.4.1", + "lodash.isobject": "2.4.1", + "lodash.values": "2.4.1" + }, "dependencies": { "lodash.isarguments": { "version": "2.4.1", @@ -3304,7 +4792,10 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "dev": true + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1" + } } } }, @@ -3320,7 +4811,13 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true + "dev": true, + "requires": { + "circular-json": "0.3.1", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } }, "flatten": { "version": "1.0.2", @@ -3338,7 +4835,10 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "forever-agent": { "version": "0.6.1", @@ -3356,7 +4856,12 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "formidable": { "version": "1.1.1", @@ -3388,7 +4893,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true + "dev": true, + "requires": { + "null-check": "1.0.0" + } }, "fs-exists-sync": { "version": "0.1.0", @@ -3401,12 +4909,20 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + }, "dependencies": { "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } } } }, @@ -3416,736 +4932,133 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, - "optional": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gather-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", + "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + }, "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "0.1.0" + } + }, + "gcp-metadata": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.2.0.tgz", + "integrity": "sha1-Ytr8pl86YxvIzi7Dt3Zh9fk4ego=", + "dev": true, + "requires": { + "extend": "3.0.1", + "retry-request": "2.0.5" + } + }, + "gcs-resumable-upload": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-0.8.0.tgz", + "integrity": "sha1-023swVIzRGCC249J4hAndE80+CQ=", + "dev": true, + "requires": { + "buffer-equal": "1.0.0", + "configstore": "3.1.0", + "google-auto-auth": "0.6.1", + "pumpify": "1.3.5", + "request": "2.81.0", + "stream-events": "1.0.2", + "through2": "2.0.3" + }, + "dependencies": { + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, + "gcp-metadata": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.1.0.tgz", + "integrity": "sha1-q+IfHqMk3Qs0o/BsqBdj+x7uN9k=", "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "optional": true - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "dev": true, - "optional": true - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "dev": true - }, - "gather-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", - "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } - } - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true - }, - "gcp-metadata": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.2.0.tgz", - "integrity": "sha1-Ytr8pl86YxvIzi7Dt3Zh9fk4ego=", - "dev": true - }, - "gcs-resumable-upload": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-0.8.0.tgz", - "integrity": "sha1-023swVIzRGCC249J4hAndE80+CQ=", - "dev": true, - "dependencies": { - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "gcp-metadata": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.1.0.tgz", - "integrity": "sha1-q+IfHqMk3Qs0o/BsqBdj+x7uN9k=", - "dev": true + "requires": { + "extend": "3.0.1", + "retry-request": "1.3.2" + } }, "google-auto-auth": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.6.1.tgz", "integrity": "sha1-wF2CDpRUc57PKKiJLuqz0WJPLLM=", - "dev": true + "dev": true, + "requires": { + "async": "2.5.0", + "gcp-metadata": "0.1.0", + "google-auth-library": "0.10.0", + "object-assign": "3.0.0", + "request": "2.81.0" + } }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.16.0", + "pinkie-promise": "2.0.1" + } }, "node-uuid": { "version": "1.4.8", @@ -4164,12 +5077,38 @@ "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-1.3.2.tgz", "integrity": "sha1-Wa0k5x+K4/MS1fe0vPRnpeWle9Y=", "dev": true, + "requires": { + "request": "2.76.0", + "through2": "2.0.3" + }, "dependencies": { "request": { "version": "2.76.0", "resolved": "https://registry.npmjs.org/request/-/request-2.76.0.tgz", "integrity": "sha1-vkRQWv73A2CgQ2lVEGvjlF2VVg4=", - "dev": true + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3" + } } } }, @@ -4191,13 +5130,20 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true + "dev": true, + "requires": { + "is-property": "1.0.2" + } }, "get-amd-module-type": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-2.0.5.tgz", "integrity": "sha1-5nHsWpatX79To6IqKJ6SOMdy3bA=", - "dev": true + "dev": true, + "requires": { + "ast-module-types": "2.3.2", + "node-source-walk": "3.2.1" + } }, "get-caller-file": { "version": "1.0.2", @@ -4209,7 +5155,14 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "meow": "3.7.0", + "normalize-package-data": "2.4.0", + "parse-github-repo-url": "1.4.0", + "through2": "2.0.3" + } }, "get-stdin": { "version": "4.0.1", @@ -4229,6 +5182,9 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -4242,25 +5198,43 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.2.0.tgz", "integrity": "sha1-DzqL/ZmuDy2LkiTViJKXXppS0Dw=", - "dev": true + "dev": true, + "requires": { + "dargs": "4.1.0", + "lodash.template": "4.4.0", + "meow": "3.7.0", + "split2": "2.1.1", + "through2": "2.0.3" + } }, "git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true + "dev": true, + "requires": { + "gitconfiglocal": "1.0.0", + "pify": "2.3.0" + } }, "git-semver-tags": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.0.tgz", "integrity": "sha1-sx/QLIq1eL1sm1ysyl4cZMEXesE=", - "dev": true + "dev": true, + "requires": { + "meow": "3.7.0", + "semver": "5.3.0" + } }, "gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true + "dev": true, + "requires": { + "ini": "1.3.4" + } }, "github-url-from-git": { "version": "1.5.0", @@ -4272,19 +5246,34 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "glob-slash": { "version": "1.0.0", @@ -4296,19 +5285,38 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz", "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=", - "dev": true + "dev": true, + "requires": { + "glob-slash": "1.0.0", + "lodash.isobject": "2.4.1", + "toxic": "1.0.0" + } }, "glob-stream": { "version": "3.1.18", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, + "requires": { + "glob": "4.5.3", + "glob2base": "0.0.12", + "minimatch": "2.0.10", + "ordered-read-streams": "0.1.0", + "through2": "0.6.5", + "unique-stream": "1.0.0" + }, "dependencies": { "glob": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0" + } }, "isarray": { "version": "0.0.1", @@ -4320,13 +5328,22 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -4338,7 +5355,11 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } } } }, @@ -4346,31 +5367,55 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true + "dev": true, + "requires": { + "gaze": "0.5.2" + } }, "glob2base": { "version": "0.0.12", "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true + "dev": true, + "requires": { + "find-index": "0.1.1" + } }, "global-modules": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true + "dev": true, + "requires": { + "global-prefix": "0.1.5", + "is-windows": "0.2.0" + } }, "global-prefix": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1", + "ini": "1.3.4", + "is-windows": "0.2.0", + "which": "1.2.14" + } }, "globby": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -4390,19 +5435,32 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.3.tgz", "integrity": "sha1-ZwA3ElKHy2VJqtlqRM+mhP18VQI=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "globule": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, + "requires": { + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" + }, "dependencies": { "glob": { "version": "3.1.21", "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } }, "graceful-fs": { "version": "1.2.3", @@ -4432,7 +5490,11 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -4440,19 +5502,30 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true + "dev": true, + "requires": { + "sparkles": "1.0.0" + } }, "gm": { "version": "1.21.1", "resolved": "https://registry.npmjs.org/gm/-/gm-1.21.1.tgz", "integrity": "sha1-ftXtBds20wwZQ/OcO8HIObjyNh0=", "dev": true, + "requires": { + "array-parallel": "0.1.3", + "array-series": "0.1.5", + "debug": "2.2.0" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -4467,6 +5540,9 @@ "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.4.7.tgz", "integrity": "sha1-F8e+Z61sr/Ynej44esc26YPSgOw=", "dev": true, + "requires": { + "minimist": "1.1.3" + }, "dependencies": { "minimist": { "version": "1.1.3", @@ -4480,25 +5556,45 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-0.10.0.tgz", "integrity": "sha1-bhW6vuhf0d0U2NEoopW2g41SE24=", - "dev": true + "dev": true, + "requires": { + "gtoken": "1.2.2", + "jws": "3.1.4", + "lodash.noop": "3.0.1", + "request": "2.81.0" + } }, "google-auto-auth": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.7.1.tgz", "integrity": "sha1-yCYERJEt2M7szYOHYdVvRik3vQI=", - "dev": true + "dev": true, + "requires": { + "async": "2.5.0", + "gcp-metadata": "0.2.0", + "google-auth-library": "0.10.0", + "request": "2.81.0" + } }, "google-closure-compiler": { "version": "20170218.0.0", "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20170218.0.0.tgz", "integrity": "sha1-BZx/kc8cssGma0yV90X179D7S6Q=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "vinyl": "1.2.0", + "vinyl-sourcemaps-apply": "0.2.1" + } }, "google-p12-pem": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-0.1.2.tgz", "integrity": "sha1-M8RqsCGqc0+gMys5YKmj/8svMXc=", - "dev": true + "dev": true, + "requires": { + "node-forge": "0.7.1" + } }, "google-proto-files": { "version": "0.12.0", @@ -4513,13 +5609,21 @@ "integrity": "sha1-hwDrFClHd+DBlhUgUf1jZwYd3oU=", "dev": true, "optional": true, + "requires": { + "async": "2.3.0", + "google-auth-library": "0.10.0", + "string-template": "1.0.0" + }, "dependencies": { "async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/async/-/async-2.3.0.tgz", "integrity": "sha1-EBPRBRBH3TIP4k5JTVxm7K9hR9k=", "dev": true, - "optional": true + "optional": true, + "requires": { + "lodash": "4.17.4" + } } } }, @@ -4528,7 +5632,22 @@ "resolved": "https://registry.npmjs.org/got/-/got-7.0.0.tgz", "integrity": "sha1-gtQ59nY82xyIIbejquJ4TIjDuNM=", "dev": true, - "optional": true + "optional": true, + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.0", + "p-cancelable": "0.2.0", + "p-timeout": "1.2.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0" + } }, "graceful-fs": { "version": "4.1.11", @@ -4546,7 +5665,10 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.8.tgz", "integrity": "sha1-5ZnkBzPvgOFlO/6JpfAx7PKqSqo=", - "dev": true + "dev": true, + "requires": { + "temp": "0.4.0" + } }, "grpc": { "version": "1.3.8", @@ -4554,17 +5676,38 @@ "integrity": "sha1-N9ETwaxAKtFO3KfTjc+QYkwueeQ=", "dev": true, "optional": true, + "requires": { + "arguejs": "0.2.3", + "lodash": "4.17.4", + "nan": "2.6.2", + "node-pre-gyp": "0.6.36", + "protobufjs": "5.0.2" + }, "dependencies": { "node-pre-gyp": { "version": "0.6.36", "bundled": true, "dev": true, "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + }, "dependencies": { "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -4578,6 +5721,10 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + }, "dependencies": { "abbrev": { "version": "1.1.0", @@ -4590,6 +5737,10 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + }, "dependencies": { "os-homedir": { "version": "1.0.2", @@ -4612,12 +5763,22 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + }, "dependencies": { "are-we-there-yet": { "version": "1.1.4", "bundled": true, "dev": true, "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.10" + }, "dependencies": { "delegates": { "version": "1.0.0", @@ -4630,6 +5791,15 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + }, "dependencies": { "core-util-is": { "version": "1.0.2", @@ -4664,7 +5834,10 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.1.0" + } }, "util-deprecate": { "version": "1.0.2", @@ -4686,6 +5859,16 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + }, "dependencies": { "aproba": { "version": "1.1.2", @@ -4715,6 +5898,11 @@ "version": "1.0.2", "bundled": true, "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, "dependencies": { "code-point-at": { "version": "1.1.0", @@ -4725,6 +5913,9 @@ "version": "1.0.0", "bundled": true, "dev": true, + "requires": { + "number-is-nan": "1.0.1" + }, "dependencies": { "number-is-nan": { "version": "1.0.1", @@ -4739,6 +5930,9 @@ "version": "3.0.1", "bundled": true, "dev": true, + "requires": { + "ansi-regex": "2.1.1" + }, "dependencies": { "ansi-regex": { "version": "2.1.1", @@ -4751,7 +5945,10 @@ "version": "1.1.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "string-width": "1.0.2" + } } } }, @@ -4768,6 +5965,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, "dependencies": { "deep-extend": { "version": "0.4.2", @@ -4800,6 +6003,30 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "aws-sign2": "0.6.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.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + }, "dependencies": { "aws-sign2": { "version": "0.6.0", @@ -4823,6 +6050,9 @@ "version": "1.0.5", "bundled": true, "dev": true, + "requires": { + "delayed-stream": "1.0.0" + }, "dependencies": { "delayed-stream": { "version": "1.0.0", @@ -4848,6 +6078,11 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + }, "dependencies": { "asynckit": { "version": "0.4.0", @@ -4862,12 +6097,20 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + }, "dependencies": { "ajv": { "version": "4.11.8", "bundled": true, "dev": true, "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + }, "dependencies": { "co": { "version": "4.6.0", @@ -4880,6 +6123,9 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "jsonify": "0.0.0" + }, "dependencies": { "jsonify": { "version": "0.0.0", @@ -4904,17 +6150,29 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + }, "dependencies": { "boom": { "version": "2.10.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "cryptiles": { "version": "2.0.5", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.10.1" + } }, "hoek": { "version": "2.16.3", @@ -4925,7 +6183,10 @@ "version": "1.0.9", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "hoek": "2.16.3" + } } } }, @@ -4934,6 +6195,11 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + }, "dependencies": { "assert-plus": { "version": "0.2.0", @@ -4946,6 +6212,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -4968,7 +6240,10 @@ "version": "1.3.6", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } } } }, @@ -4977,6 +6252,17 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "asn1": { "version": "0.2.3", @@ -4993,31 +6279,46 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "dashdash": { "version": "1.14.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "1.0.0" + } }, "ecc-jsbn": { "version": "0.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "getpass": { "version": "0.1.7", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "1.0.0" + } }, "jodid25519": { "version": "1.0.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "jsbn": { "version": "0.1.1", @@ -5057,6 +6358,9 @@ "version": "2.1.15", "bundled": true, "dev": true, + "requires": { + "mime-db": "1.27.0" + }, "dependencies": { "mime-db": { "version": "1.27.0", @@ -5099,6 +6403,9 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "punycode": "1.4.1" + }, "dependencies": { "punycode": { "version": "1.4.1", @@ -5112,7 +6419,10 @@ "version": "0.6.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.1.0" + } }, "uuid": { "version": "3.0.1", @@ -5126,11 +6436,22 @@ "version": "2.6.1", "bundled": true, "dev": true, + "requires": { + "glob": "7.1.2" + }, "dependencies": { "glob": { "version": "7.1.2", "bundled": true, "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + }, "dependencies": { "fs.realpath": { "version": "1.0.0", @@ -5141,6 +6462,10 @@ "version": "1.0.6", "bundled": true, "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + }, "dependencies": { "wrappy": { "version": "1.0.2", @@ -5158,11 +6483,18 @@ "version": "3.0.4", "bundled": true, "dev": true, + "requires": { + "brace-expansion": "1.1.7" + }, "dependencies": { "brace-expansion": { "version": "1.1.7", "bundled": true, "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -5182,6 +6514,9 @@ "version": "1.4.0", "bundled": true, "dev": true, + "requires": { + "wrappy": "1.0.2" + }, "dependencies": { "wrappy": { "version": "1.0.2", @@ -5209,16 +6544,30 @@ "version": "2.2.1", "bundled": true, "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + }, "dependencies": { "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "fstream": { "version": "1.0.11", "bundled": true, "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + }, "dependencies": { "graceful-fs": { "version": "4.1.11", @@ -5239,12 +6588,25 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.10", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, "dependencies": { "debug": { "version": "2.6.8", "bundled": true, "dev": true, "optional": true, + "requires": { + "ms": "2.0.0" + }, "dependencies": { "ms": { "version": "2.0.0", @@ -5258,6 +6620,12 @@ "version": "1.0.11", "bundled": true, "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + }, "dependencies": { "graceful-fs": { "version": "4.1.11", @@ -5276,6 +6644,11 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + }, "dependencies": { "inherits": { "version": "2.0.3", @@ -5288,12 +6661,19 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "brace-expansion": "1.1.7" + }, "dependencies": { "brace-expansion": { "version": "1.1.7", "bundled": true, "dev": true, "optional": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -5318,6 +6698,9 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "wrappy": "1.0.2" + }, "dependencies": { "wrappy": { "version": "1.0.2", @@ -5332,6 +6715,15 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + }, "dependencies": { "core-util-is": { "version": "1.0.2", @@ -5366,7 +6758,10 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.1.0" + } }, "util-deprecate": { "version": "1.0.2", @@ -5392,13 +6787,34 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-1.2.2.tgz", "integrity": "sha1-Fyd2oanZasCfwioA9b6DzubeiCA=", - "dev": true + "dev": true, + "requires": { + "google-p12-pem": "0.1.2", + "jws": "3.1.4", + "mime": "1.3.6", + "request": "2.81.0" + } }, "gulp": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, + "requires": { + "archy": "1.0.0", + "chalk": "1.1.3", + "deprecated": "0.0.1", + "gulp-util": "3.0.8", + "interpret": "1.0.3", + "liftoff": "2.3.0", + "minimist": "1.2.0", + "orchestrator": "0.3.8", + "pretty-hrtime": "1.0.3", + "semver": "4.3.6", + "tildify": "1.2.0", + "v8flags": "2.1.1", + "vinyl-fs": "0.3.14" + }, "dependencies": { "semver": { "version": "4.3.6", @@ -5413,6 +6829,11 @@ "resolved": "https://registry.npmjs.org/gulp-clean/-/gulp-clean-0.3.2.tgz", "integrity": "sha1-o0fUc6zqQBgvk1WHpFGUFnGSgQI=", "dev": true, + "requires": { + "gulp-util": "2.2.20", + "rimraf": "2.6.1", + "through2": "0.4.2" + }, "dependencies": { "ansi-regex": { "version": "0.2.1", @@ -5430,19 +6851,40 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "1.1.0", + "escape-string-regexp": "1.0.5", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" + } }, "gulp-util": { "version": "2.2.20", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", "dev": true, + "requires": { + "chalk": "0.5.1", + "dateformat": "1.0.12", + "lodash._reinterpolate": "2.4.1", + "lodash.template": "2.4.1", + "minimist": "0.2.0", + "multipipe": "0.1.2", + "through2": "0.5.1", + "vinyl": "0.2.3" + }, "dependencies": { "through2": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "3.0.0" + } } } }, @@ -5450,7 +6892,10 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } }, "isarray": { "version": "0.0.1", @@ -5468,19 +6913,37 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", - "dev": true + "dev": true, + "requires": { + "lodash._escapehtmlchar": "2.4.1", + "lodash._reunescapedhtml": "2.4.1", + "lodash.keys": "2.4.1" + } }, "lodash.template": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", - "dev": true + "dev": true, + "requires": { + "lodash._escapestringchar": "2.4.1", + "lodash._reinterpolate": "2.4.1", + "lodash.defaults": "2.4.1", + "lodash.escape": "2.4.1", + "lodash.keys": "2.4.1", + "lodash.templatesettings": "2.4.1", + "lodash.values": "2.4.1" + } }, "lodash.templatesettings": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", - "dev": true + "dev": true, + "requires": { + "lodash._reinterpolate": "2.4.1", + "lodash.escape": "2.4.1" + } }, "minimist": { "version": "0.2.0", @@ -5492,7 +6955,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -5504,7 +6973,10 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } }, "supports-color": { "version": "0.2.0", @@ -5517,12 +6989,19 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "2.1.2" + }, "dependencies": { "xtend": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true + "dev": true, + "requires": { + "object-keys": "0.4.0" + } } } }, @@ -5530,7 +7009,10 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", - "dev": true + "dev": true, + "requires": { + "clone-stats": "0.0.1" + } }, "xtend": { "version": "3.0.0", @@ -5541,22 +7023,53 @@ } }, "gulp-clean-css": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-3.5.0.tgz", - "integrity": "sha1-1D50fEGVeZXsSbuWEvhitkMp8bA=", - "dev": true + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-3.6.0.tgz", + "integrity": "sha1-Q08rgMVapFJUzaMCB+GhFm8NHlI=", + "dev": true, + "requires": { + "clean-css": "4.1.6", + "gulp-util": "3.0.8", + "through2": "2.0.3", + "vinyl-sourcemaps-apply": "0.2.1" + } }, "gulp-cli": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-1.3.0.tgz", "integrity": "sha1-pr+7i+NTQb4pCuRc0+QBBxIW7dQ=", "dev": true, + "requires": { + "archy": "1.0.0", + "chalk": "1.1.3", + "copy-props": "1.6.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "interpret": "1.0.3", + "liftoff": "2.3.0", + "lodash.isfunction": "3.0.8", + "lodash.isplainobject": "4.0.6", + "lodash.sortby": "4.7.0", + "matchdep": "1.0.1", + "mute-stdout": "1.0.0", + "pretty-hrtime": "1.0.3", + "semver-greatest-satisfied-range": "1.0.0", + "tildify": "1.2.0", + "v8flags": "2.1.1", + "wreck": "6.3.0", + "yargs": "3.32.0" + }, "dependencies": { "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "window-size": { "version": "0.1.4", @@ -5568,7 +7081,16 @@ "version": "3.32.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true + "dev": true, + "requires": { + "camelcase": "2.1.1", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "string-width": "1.0.2", + "window-size": "0.1.4", + "y18n": "3.2.1" + } } } }, @@ -5577,12 +7099,23 @@ "resolved": "https://registry.npmjs.org/gulp-connect/-/gulp-connect-5.0.0.tgz", "integrity": "sha1-8v3zBq6RFGg2jCKF8teC8T7dr04=", "dev": true, + "requires": { + "connect": "2.30.2", + "connect-livereload": "0.5.4", + "event-stream": "3.3.4", + "gulp-util": "3.0.8", + "tiny-lr": "0.2.1" + }, "dependencies": { "accepts": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", - "dev": true + "dev": true, + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.5.3" + } }, "basic-auth": { "version": "1.0.4", @@ -5594,7 +7127,19 @@ "version": "1.13.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz", "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=", - "dev": true + "dev": true, + "requires": { + "bytes": "2.1.0", + "content-type": "1.0.2", + "debug": "2.2.0", + "depd": "1.0.1", + "http-errors": "1.3.1", + "iconv-lite": "0.4.11", + "on-finished": "2.3.0", + "qs": "4.0.0", + "raw-body": "2.1.7", + "type-is": "1.6.15" + } }, "bytes": { "version": "2.1.0", @@ -5606,13 +7151,54 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz", "integrity": "sha1-sDuNhub4rSloPLqN+R3cb/x3s5U=", - "dev": true + "dev": true, + "requires": { + "accepts": "1.2.13", + "bytes": "2.1.0", + "compressible": "2.0.10", + "debug": "2.2.0", + "on-headers": "1.0.1", + "vary": "1.0.1" + } }, "connect": { "version": "2.30.2", "resolved": "https://registry.npmjs.org/connect/-/connect-2.30.2.tgz", "integrity": "sha1-jam8vooFTT0xjXTf7JA7XDmhtgk=", - "dev": true + "dev": true, + "requires": { + "basic-auth-connect": "1.0.0", + "body-parser": "1.13.3", + "bytes": "2.1.0", + "compression": "1.5.2", + "connect-timeout": "1.6.2", + "content-type": "1.0.2", + "cookie": "0.1.3", + "cookie-parser": "1.3.5", + "cookie-signature": "1.0.6", + "csurf": "1.8.3", + "debug": "2.2.0", + "depd": "1.0.1", + "errorhandler": "1.4.3", + "express-session": "1.11.3", + "finalhandler": "0.4.0", + "fresh": "0.3.0", + "http-errors": "1.3.1", + "method-override": "2.3.9", + "morgan": "1.6.1", + "multiparty": "3.3.2", + "on-headers": "1.0.1", + "parseurl": "1.3.1", + "pause": "0.1.0", + "qs": "4.0.0", + "response-time": "2.3.2", + "serve-favicon": "2.3.2", + "serve-index": "1.7.3", + "serve-static": "1.10.3", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vhost": "3.0.2" + } }, "cookie": { "version": "0.1.3", @@ -5624,7 +7210,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "depd": { "version": "1.0.1", @@ -5648,7 +7237,13 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz", "integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=", - "dev": true + "dev": true, + "requires": { + "debug": "2.2.0", + "escape-html": "1.0.2", + "on-finished": "2.3.0", + "unpipe": "1.0.0" + } }, "fresh": { "version": "0.3.0", @@ -5660,7 +7255,11 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } }, "iconv-lite": { "version": "0.4.11", @@ -5678,7 +7277,14 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz", "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=", - "dev": true + "dev": true, + "requires": { + "basic-auth": "1.0.4", + "debug": "2.2.0", + "depd": "1.0.1", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + } }, "ms": { "version": "0.7.1", @@ -5709,6 +7315,11 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, "dependencies": { "bytes": { "version": "2.4.0", @@ -5729,6 +7340,20 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=", "dev": true, + "requires": { + "debug": "2.2.0", + "depd": "1.1.0", + "destroy": "1.0.4", + "escape-html": "1.0.3", + "etag": "1.7.0", + "fresh": "0.3.0", + "http-errors": "1.3.1", + "mime": "1.3.4", + "ms": "0.7.1", + "on-finished": "2.3.0", + "range-parser": "1.0.3", + "statuses": "1.2.1" + }, "dependencies": { "depd": { "version": "1.1.0", @@ -5755,6 +7380,11 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", "dev": true, + "requires": { + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.13.2" + }, "dependencies": { "escape-html": { "version": "1.0.3", @@ -5777,36 +7407,89 @@ "resolved": "https://registry.npmjs.org/gulp-dom/-/gulp-dom-0.9.17.tgz", "integrity": "sha1-SiPGJbXaggu3PUQFRZMZyZIjg8o=", "dev": true, + "requires": { + "gulp-util": "3.0.7", + "jsdom": "9.8.3", + "through2": "2.0.1" + }, "dependencies": { "gulp-util": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", - "dev": true + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "1.0.12", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.1", + "vinyl": "0.5.3" + } }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lodash.template": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } }, "lodash.templatesettings": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "0.10.31", @@ -5818,13 +7501,22 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.0.6", + "xtend": "4.0.1" + } }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } } } }, @@ -5832,19 +7524,36 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.3.1.tgz", "integrity": "sha1-Uef+wTozxARXjRjBWJ0bW8Rf4dY=", - "dev": true + "dev": true, + "requires": { + "gulp-util": "3.0.8", + "through2": "2.0.3" + } }, "gulp-highlight-files": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/gulp-highlight-files/-/gulp-highlight-files-0.0.4.tgz", "integrity": "sha1-jP1kIJ5TysUs17j2qLXZ6nl5UXI=", - "dev": true + "dev": true, + "requires": { + "gulp-util": "3.0.8", + "highlight.js": "9.12.0", + "through2": "2.0.3" + } }, "gulp-htmlmin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-3.0.0.tgz", "integrity": "sha1-GeqAAtEjHWsfGKEtIPKmand3D7M=", "dev": true, + "requires": { + "bufferstreams": "1.1.1", + "gulp-util": "3.0.8", + "html-minifier": "3.5.2", + "object-assign": "4.1.1", + "readable-stream": "2.3.3", + "tryit": "1.0.3" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -5858,19 +7567,32 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", - "dev": true + "dev": true, + "requires": { + "gulp-match": "1.0.3", + "ternary-stream": "2.0.1", + "through2": "2.0.3" + } }, "gulp-markdown": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gulp-markdown/-/gulp-markdown-1.2.0.tgz", "integrity": "sha1-N83GE3n7A5hB+myrSYSo55Eop3I=", - "dev": true + "dev": true, + "requires": { + "gulp-util": "3.0.8", + "marked": "0.3.6", + "through2": "2.0.3" + } }, "gulp-match": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", - "dev": true + "dev": true, + "requires": { + "minimatch": "3.0.4" + } }, "gulp-rename": { "version": "1.2.2", @@ -5882,19 +7604,50 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz", "integrity": "sha1-U9xLaKH13f5EJKtMJHZVJpqLdLc=", - "dev": true + "dev": true, + "requires": { + "gulp-util": "3.0.8", + "lodash.clonedeep": "4.5.0", + "node-sass": "4.5.3", + "through2": "2.0.3", + "vinyl-sourcemaps-apply": "0.2.1" + } }, "gulp-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/gulp-transform/-/gulp-transform-2.0.0.tgz", "integrity": "sha1-esfj4+Bu1+vFKEe5tOKjaGsi5aI=", - "dev": true + "dev": true, + "requires": { + "gulp-util": "3.0.8", + "lodash": "4.17.4" + } }, "gulp-util": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.0.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + }, "dependencies": { "dateformat": { "version": "2.0.0", @@ -5906,25 +7659,50 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lodash.template": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } }, "lodash.templatesettings": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } } } }, @@ -5932,7 +7710,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true + "dev": true, + "requires": { + "glogg": "1.0.0" + } }, "hammerjs": { "version": "2.0.8", @@ -5945,6 +7726,12 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, "dependencies": { "async": { "version": "1.5.2", @@ -5956,7 +7743,10 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -5970,19 +7760,29 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-binary": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", "dev": true, + "requires": { + "isarray": "0.0.1" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -6008,21 +7808,27 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true + "dev": true, + "requires": { + "sparkles": "1.0.0" + } }, "has-symbol-support-x": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.3.0.tgz", - "integrity": "sha512-kLtS+N9qwz+Buc6TUfcW5iGb59hLLr5qfxTACi/0uGpH1u5NMNWsdU57KoYRBywvPykeRmu5qfB5x0chpDSWlg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.0.tgz", + "integrity": "sha512-F1NtLDtW9NyUrS3faUcI1yVFHCTXyzPb1jfrZBQi5NHxFPlXxZnFLFGzfA2DsdmgCxv2MZ0+bfcgC4EZTmk4SQ==", "dev": true, "optional": true }, "has-to-string-tag-x": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.3.0.tgz", - "integrity": "sha512-Fu9Nwv8/VNJMvKjkldzXHO+yeX+TCelwUQ9dGW2LrAfHfHi6zVqQt+Qjilf0qGHvpl6Fap6o8aDhWhMt5hY/1g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.0.tgz", + "integrity": "sha512-R3OdOP9j6AH5hS1yXeu9wAS+iKSZQx/CC6aMdN6WiaqPlBoA2S+47MtoMsZgKr2m0eAJ+73WWGX0RaFFE5XWKA==", "dev": true, - "optional": true + "optional": true, + "requires": { + "has-symbol-support-x": "1.4.0" + } }, "has-unicode": { "version": "2.0.1", @@ -6034,13 +7840,22 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz", "integrity": "sha1-7Mm5l7IYvluzEphii7gHhptz3NE=", - "dev": true + "dev": true, + "requires": { + "through2": "2.0.3" + } }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "he": { "version": "1.1.1", @@ -6052,7 +7867,11 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1", + "upper-case": "1.1.3" + } }, "highlight.js": { "version": "9.12.0", @@ -6076,7 +7895,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } }, "hosted-git-info": { "version": "2.5.0", @@ -6088,25 +7910,45 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", - "dev": true + "dev": true, + "requires": { + "whatwg-encoding": "1.0.1" + } }, "html-minifier": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.2.tgz", "integrity": "sha1-1zvD/0SJQkCIGM5gm/P7DqfvTrc=", "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.6", + "commander": "2.9.0", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.0.24" + }, "dependencies": { "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "uglify-js": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.23.tgz", - "integrity": "sha512-miLHbO2QcdQGxL/q1wLcUr6TGIRHhMnpKyywUbAdZRkJMqCeZCDmBsgYu1Wlj26xHBXN+sU5tHaWh38QsN208g==", - "dev": true + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.24.tgz", + "integrity": "sha512-IZ7l7MU2j7LIuz6IAFWBOk1dbuQ0QVQsKLffpNPKXuL8NYcFBBQ5QkvMAtfL1+oaBW16344DY4sA26GI9cXzlA==", + "dev": true, + "requires": { + "commander": "2.9.0", + "source-map": "0.5.6" + } } } }, @@ -6120,19 +7962,37 @@ "version": "3.9.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.6.2", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } }, "http-errors": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", - "dev": true + "dev": true, + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } }, "http-proxy": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } }, "http-rewrite-middleware": { "version": "0.1.6", @@ -6144,13 +8004,23 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } }, "https-proxy-agent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "dev": true + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.7", + "extend": "3.0.1" + } }, "i": { "version": "0.3.5", @@ -6176,6 +8046,14 @@ "resolved": "https://registry.npmjs.org/image-diff/-/image-diff-1.6.3.tgz", "integrity": "sha1-gYoOZWrolIDoAufvFNtGCCb3MPw=", "dev": true, + "requires": { + "async": "0.2.10", + "buffered-spawn": "1.1.2", + "commander": "2.9.0", + "gm": "1.21.1", + "mkdirp": "0.3.5", + "tmp": "0.0.23" + }, "dependencies": { "async": { "version": "0.2.10", @@ -6187,7 +8065,10 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "mkdirp": { "version": "0.3.5", @@ -6219,7 +8100,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "indexes-of": { "version": "1.0.1", @@ -6243,7 +8127,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -6261,7 +8149,22 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.1.0", + "figures": "1.7.0", + "lodash": "4.17.4", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } }, "interpret": { "version": "1.0.3", @@ -6298,7 +8201,11 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true + "dev": true, + "requires": { + "is-relative": "0.2.1", + "is-windows": "0.2.0" + } }, "is-arrayish": { "version": "0.2.1", @@ -6310,7 +8217,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true + "dev": true, + "requires": { + "binary-extensions": "1.8.0" + } }, "is-buffer": { "version": "1.1.5", @@ -6322,7 +8232,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-directory": { "version": "0.3.1", @@ -6340,7 +8253,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -6358,25 +8274,37 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-lower-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", - "dev": true + "dev": true, + "requires": { + "lower-case": "1.1.4" + } }, "is-module": { "version": "1.0.0", @@ -6388,7 +8316,13 @@ "version": "2.16.0", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } }, "is-npm": { "version": "1.0.0", @@ -6400,7 +8334,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-obj": { "version": "1.0.1", @@ -6425,13 +8362,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } }, "is-path-inside": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } }, "is-plain-obj": { "version": "1.1.0", @@ -6445,6 +8388,9 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", "dev": true, + "requires": { + "isobject": "3.0.1" + }, "dependencies": { "isobject": { "version": "3.0.1", @@ -6488,7 +8434,10 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true + "dev": true, + "requires": { + "is-unc-path": "0.1.2" + } }, "is-relative-path": { "version": "1.0.1", @@ -6530,7 +8479,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true + "dev": true, + "requires": { + "text-extensions": "1.5.0" + } }, "is-typedarray": { "version": "1.0.0", @@ -6542,13 +8494,19 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true + "dev": true, + "requires": { + "unc-path-regex": "0.1.2" + } }, "is-upper-case": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", - "dev": true + "dev": true, + "requires": { + "upper-case": "1.1.3" + } }, "is-url": { "version": "1.2.2", @@ -6596,7 +8554,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "isstream": { "version": "0.1.2", @@ -6609,6 +8570,22 @@ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.10", + "js-yaml": "3.9.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.2.14", + "wordwrap": "1.0.0" + }, "dependencies": { "abbrev": { "version": "1.0.9", @@ -6632,7 +8609,14 @@ "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "resolve": { "version": "1.1.7", @@ -6644,7 +8628,10 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } }, "wordwrap": { "version": "1.0.0", @@ -6659,13 +8646,22 @@ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, - "optional": true + "optional": true, + "requires": { + "has-to-string-tag-x": "1.4.0", + "is-object": "1.0.1" + } }, "jasmine": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz", "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=", - "dev": true + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.2", + "jasmine-core": "2.6.4" + } }, "jasmine-core": { "version": "2.6.4", @@ -6689,13 +8685,24 @@ "version": "6.10.1", "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.18.1", + "topo": "1.1.0" + } }, "join-path": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/join-path/-/join-path-1.1.1.tgz", "integrity": "sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU=", - "dev": true + "dev": true, + "requires": { + "as-array": "2.0.0", + "url-join": "0.0.1", + "valid-url": "1.0.9" + } }, "js-base64": { "version": "2.1.9", @@ -6710,15 +8717,19 @@ "dev": true }, "js-yaml": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", - "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", + "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + }, "dependencies": { "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true } } @@ -6735,6 +8746,28 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.8.3.tgz", "integrity": "sha1-/eKcEJwyoRMeC2xlkU5kGY+Xw3A=", "dev": true, + "requires": { + "abab": "1.0.3", + "acorn": "2.7.0", + "acorn-globals": "1.0.9", + "array-equal": "1.0.0", + "content-type-parser": "1.0.1", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "escodegen": "1.8.1", + "html-encoding-sniffer": "1.0.1", + "iconv-lite": "0.4.15", + "nwmatcher": "1.4.1", + "parse5": "1.5.1", + "request": "2.81.0", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.2", + "webidl-conversions": "3.0.1", + "whatwg-encoding": "1.0.1", + "whatwg-url": "3.1.0", + "xml-name-validator": "2.0.1" + }, "dependencies": { "parse5": { "version": "1.5.1", @@ -6748,7 +8781,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", - "dev": true + "dev": true, + "requires": { + "jju": "1.3.0" + } }, "json-schema": { "version": "0.2.3", @@ -6767,7 +8803,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true + "dev": true, + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -6785,13 +8824,22 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "jsonfilter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/jsonfilter/-/jsonfilter-1.1.2.tgz", "integrity": "sha1-Ie987cdRk4E8dZMulqmL4gW6WhE=", "dev": true, + "requires": { + "JSONStream": "0.8.4", + "minimist": "1.2.0", + "stream-combiner": "0.2.2", + "through2": "0.6.5" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -6809,19 +8857,33 @@ "version": "0.8.4", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=", - "dev": true + "dev": true, + "requires": { + "jsonparse": "0.0.5", + "through": "2.3.8" + } }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "dev": true + "dev": true, + "requires": { + "duplexer": "0.1.1", + "through": "2.3.8" + } }, "string_decoder": { "version": "0.10.31", @@ -6833,7 +8895,11 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } } } }, @@ -6865,19 +8931,36 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "dev": true + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } }, "jsonwebtoken": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", - "dev": true + "dev": true, + "requires": { + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "2.0.0", + "xtend": "4.0.1" + } }, "jsprim": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -6891,19 +8974,59 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.9", + "safe-buffer": "5.1.1" + } }, "jws": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", - "dev": true + "dev": true, + "requires": { + "base64url": "2.0.0", + "jwa": "1.1.5", + "safe-buffer": "5.1.1" + } }, "karma": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", "dev": true, + "requires": { + "bluebird": "3.5.0", + "body-parser": "1.17.2", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.2", + "core-js": "2.4.1", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.16.2", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.3.6", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.1.5", + "range-parser": "1.2.0", + "rimraf": "2.6.1", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "0.5.6", + "tmp": "0.0.31", + "useragent": "2.2.0" + }, "dependencies": { "colors": { "version": "1.1.2", @@ -6921,7 +9044,10 @@ "version": "0.0.31", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } } } }, @@ -6929,19 +9055,35 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/karma-browserstack-launcher/-/karma-browserstack-launcher-1.3.0.tgz", "integrity": "sha512-LrPf5sU/GISkEElWyoy06J8x0c8BcOjjOwf61Wqu6M0aWQu0Eoqm9yh3xON64/ByST/CEr0GsWiREQ/EIEMd4Q==", - "dev": true + "dev": true, + "requires": { + "browserstack": "1.5.0", + "browserstacktunnel-wrapper": "2.0.1", + "q": "1.5.0" + } }, "karma-chrome-launcher": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.2.14" + } }, "karma-coverage": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", "dev": true, + "requires": { + "dateformat": "1.0.12", + "istanbul": "0.4.5", + "lodash": "3.10.1", + "minimatch": "3.0.4", + "source-map": "0.5.6" + }, "dependencies": { "lodash": { "version": "3.10.1", @@ -6967,25 +9109,40 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-1.1.0.tgz", "integrity": "sha1-PQg89WWdZzarl7zuXYrNhq1SIhI=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0", + "sauce-connect-launcher": "0.17.0", + "saucelabs": "1.4.0", + "wd": "1.3.0" + } }, "karma-sourcemap-loader": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "known-css-properties": { "version": "0.2.0", @@ -6997,7 +9154,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", - "dev": true + "dev": true, + "requires": { + "package-json": "2.4.0" + } }, "lazy-cache": { "version": "1.0.4", @@ -7016,6 +9176,9 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz", "integrity": "sha1-GyXWPHcqTCDwpe0KnXf0hLbhaSA=", "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -7027,7 +9190,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -7041,13 +9210,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "ldjson-stream": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", "dev": true, + "requires": { + "split2": "0.2.1", + "through2": "0.6.5" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -7059,13 +9235,22 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "split2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", - "dev": true + "dev": true, + "requires": { + "through2": "0.6.5" + } }, "string_decoder": { "version": "0.10.31", @@ -7077,7 +9262,11 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } } } }, @@ -7085,13 +9274,28 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } }, "liftoff": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true + "dev": true, + "requires": { + "extend": "3.0.1", + "findup-sync": "0.4.3", + "fined": "1.1.0", + "flagged-respawn": "0.3.2", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", + "lodash.mapvalues": "4.6.0", + "rechoir": "0.6.2", + "resolve": "1.3.3" + } }, "livereload-js": { "version": "2.2.2", @@ -7103,7 +9307,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } }, "locate-path": { "version": "2.0.0", @@ -7111,6 +9322,10 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "optional": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, "dependencies": { "path-exists": { "version": "3.0.0", @@ -7149,7 +9364,10 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", - "dev": true + "dev": true, + "requires": { + "lodash._htmlescapes": "2.4.1" + } }, "lodash._escapestringchar": { "version": "2.4.1", @@ -7209,7 +9427,11 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", - "dev": true + "dev": true, + "requires": { + "lodash._htmlescapes": "2.4.1", + "lodash.keys": "2.4.1" + } }, "lodash._root": { "version": "3.0.1", @@ -7221,7 +9443,10 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", - "dev": true + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1" + } }, "lodash.assign": { "version": "4.2.0", @@ -7239,13 +9464,20 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", - "dev": true + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1", + "lodash.keys": "2.4.1" + } }, "lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } }, "lodash.isarguments": { "version": "3.1.0", @@ -7269,7 +9501,10 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "dev": true + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1" + } }, "lodash.isplainobject": { "version": "4.0.6", @@ -7287,7 +9522,12 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "dev": true + "dev": true, + "requires": { + "lodash._isnative": "2.4.1", + "lodash._shimkeys": "2.4.1", + "lodash.isobject": "2.4.1" + } }, "lodash.mapvalues": { "version": "4.6.0", @@ -7329,19 +9569,29 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" + } }, "lodash.templatesettings": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0" + } }, "lodash.values": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", - "dev": true + "dev": true, + "requires": { + "lodash.keys": "2.4.1" + } }, "log-driver": { "version": "1.2.5", @@ -7353,13 +9603,20 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3" + } }, "log4js": { "version": "0.6.38", "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "4.3.6" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -7371,7 +9628,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "semver": { "version": "4.3.6", @@ -7404,7 +9667,11 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } }, "lower-case": { "version": "1.1.4", @@ -7416,7 +9683,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", - "dev": true + "dev": true, + "requires": { + "lower-case": "1.1.4" + } }, "lowercase-keys": { "version": "1.0.0", @@ -7428,19 +9698,40 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "madge": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/madge/-/madge-1.6.0.tgz", "integrity": "sha1-9dCkgCe+4uuSRbk0I/l0H4iK62U=", "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "commondir": "1.0.1", + "debug": "2.6.7", + "dependency-tree": "5.8.0", + "graphviz": "0.0.8", + "mz": "2.6.0", + "ora": "1.1.0", + "pluralize": "3.1.0", + "pretty-ms": "2.1.0", + "rc": "1.2.1", + "walkdir": "0.0.11" + }, "dependencies": { "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } }, "cli-spinners": { "version": "1.0.0", @@ -7452,19 +9743,32 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "ora": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ora/-/ora-1.1.0.tgz", "integrity": "sha1-aaqkogljDkOxQsX3/0GCDah+L68=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "2.1.0", + "cli-spinners": "1.0.0", + "log-symbols": "1.0.2" + } }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } } } }, @@ -7472,13 +9776,19 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.21.3.tgz", "integrity": "sha1-h+IBAJ6/3m9G3FdXMFpwr3HjFiQ=", - "dev": true + "dev": true, + "requires": { + "vlq": "0.2.2" + } }, "make-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", - "dev": true + "dev": true, + "requires": { + "pify": "2.3.0" + } }, "make-error": { "version": "1.3.0", @@ -7515,6 +9825,10 @@ "resolved": "https://registry.npmjs.org/match-stream/-/match-stream-0.0.2.tgz", "integrity": "sha1-mesFAJOzTf+t5CG5rAtBCpz6F88=", "dev": true, + "requires": { + "buffers": "0.1.1", + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -7526,7 +9840,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -7541,18 +9861,34 @@ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-1.0.1.tgz", "integrity": "sha1-pXozgESR+64girqPaDgEN6vC3KU=", "dev": true, + "requires": { + "findup-sync": "0.3.0", + "micromatch": "2.3.11", + "resolve": "1.1.7", + "stack-trace": "0.0.9" + }, "dependencies": { "findup-sync": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true + "dev": true, + "requires": { + "glob": "5.0.15" + } }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "resolve": { "version": "1.1.7", @@ -7585,19 +9921,38 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, - "optional": true + "optional": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -7618,7 +9973,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "merge2": { "version": "1.1.0", @@ -7637,12 +9995,21 @@ "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.9.tgz", "integrity": "sha1-vRUfLONM8Bp2ykAKuVwBKxAtj3E=", "dev": true, + "requires": { + "debug": "2.6.8", + "methods": "1.1.2", + "parseurl": "1.3.1", + "vary": "1.1.1" + }, "dependencies": { "debug": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -7656,7 +10023,22 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } }, "mime": { "version": "1.3.6", @@ -7674,7 +10056,10 @@ "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "mimic-fn": { "version": "1.1.0", @@ -7693,7 +10078,10 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } }, "minimist": { "version": "1.2.0", @@ -7706,6 +10094,9 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -7719,7 +10110,10 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "dev": true + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } }, "modelo": { "version": "4.2.0", @@ -7737,19 +10131,34 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-2.2.4.tgz", "integrity": "sha1-wKN3HeWM9rzxKu0kdnBsWWrUsss=", - "dev": true + "dev": true, + "requires": { + "ast-module-types": "2.3.2", + "node-source-walk": "3.2.1" + } }, "module-lookup-amd": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-4.0.4.tgz", "integrity": "sha1-aSldvumGFjLGULY25qSQzHigp5k=", "dev": true, + "requires": { + "commander": "2.11.0", + "debug": "2.2.0", + "file-exists": "1.0.0", + "find": "0.2.6", + "requirejs": "2.2.0", + "requirejs-config-file": "2.0.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -7770,12 +10179,22 @@ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.8.2.tgz", "integrity": "sha1-eErHc05KRTqcbm6GgKkyknXItoc=", "dev": true, + "requires": { + "basic-auth": "1.1.0", + "debug": "2.6.8", + "depd": "1.1.0", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + }, "dependencies": { "debug": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -7789,13 +10208,23 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } }, "multiparty": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz", "integrity": "sha1-Nd5oBNwZZD5SSfPT473GyM4wHT8=", "dev": true, + "requires": { + "readable-stream": "1.1.14", + "stream-counter": "0.2.0" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -7807,7 +10236,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -7822,12 +10257,18 @@ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "dev": true, + "requires": { + "duplexer2": "0.0.2" + }, "dependencies": { "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } }, "isarray": { "version": "0.0.1", @@ -7839,7 +10280,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -7867,6 +10314,11 @@ "resolved": "https://registry.npmjs.org/mz/-/mz-2.6.0.tgz", "integrity": "sha1-yLhSHZWN8KTydoAl22nHGe5O8c4=", "dev": true, + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -7887,6 +10339,12 @@ "resolved": "https://registry.npmjs.org/nash/-/nash-2.0.4.tgz", "integrity": "sha1-y5ZHkc79N21Zz6zYAQknRhaqFdI=", "dev": true, + "requires": { + "async": "1.5.2", + "flat-arguments": "1.0.2", + "lodash": "3.10.1", + "minimist": "1.2.0" + }, "dependencies": { "async": { "version": "1.5.2", @@ -7912,7 +10370,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } }, "ncp": { "version": "1.0.1", @@ -7931,13 +10392,19 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "no-case": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=", - "dev": true + "dev": true, + "requires": { + "lower-case": "1.1.4" + } }, "node-forge": { "version": "0.7.1", @@ -7949,7 +10416,22 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true + "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.4", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.2.14" + } }, "node-html-encoder": { "version": "0.0.2", @@ -7968,24 +10450,56 @@ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.6.2", + "node-gyp": "3.6.2", + "npmlog": "4.1.2", + "request": "2.81.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0" + }, "dependencies": { "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } }, "gaze": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true + "dev": true, + "requires": { + "globule": "1.2.0" + } }, "globule": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + } } } }, @@ -7993,7 +10507,10 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-3.2.1.tgz", "integrity": "sha1-Ersbmj+xhz94XEp1R7YDT5U/Zp8=", - "dev": true + "dev": true, + "requires": { + "babylon": "6.17.4" + } }, "node-status-codes": { "version": "1.0.0", @@ -8005,19 +10522,31 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true + "dev": true, + "requires": { + "abbrev": "1.1.0" + } }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } }, "normalize-range": { "version": "0.1.2", @@ -8036,13 +10565,22 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, - "optional": true + "optional": true, + "requires": { + "path-key": "2.0.1" + } }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } }, "null-check": { "version": "1.0.0", @@ -8067,12 +10605,22 @@ "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-2.5.2.tgz", "integrity": "sha1-6n00bnhbikh0Zmw8yp4YxXf7oiw=", "dev": true, + "requires": { + "asap": "2.0.6", + "chokidar": "1.7.0", + "yargs": "3.32.0" + }, "dependencies": { "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "window-size": { "version": "0.1.4", @@ -8084,7 +10632,16 @@ "version": "3.32.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true + "dev": true, + "requires": { + "camelcase": "2.1.1", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "string-width": "1.0.2", + "window-size": "0.1.4", + "y18n": "3.2.1" + } } } }, @@ -8123,12 +10680,21 @@ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, + "requires": { + "array-each": "1.0.1", + "array-slice": "1.0.0", + "for-own": "1.0.0", + "isobject": "3.0.1" + }, "dependencies": { "for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "isobject": { "version": "3.0.1", @@ -8142,13 +10708,20 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "object.pick": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", - "dev": true + "dev": true, + "requires": { + "isobject": "2.1.0" + } }, "objectdiff": { "version": "1.1.0", @@ -8160,7 +10733,10 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, "on-headers": { "version": "1.0.1", @@ -8172,7 +10748,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "onecolor": { "version": "3.0.4", @@ -8197,6 +10776,10 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, "dependencies": { "minimist": { "version": "0.0.10", @@ -8211,6 +10794,14 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, "dependencies": { "wordwrap": { "version": "1.0.0", @@ -8238,6 +10829,12 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + }, "dependencies": { "object-assign": { "version": "4.1.1", @@ -8252,18 +10849,29 @@ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, + "requires": { + "end-of-stream": "0.1.5", + "sequencify": "0.0.7", + "stream-consume": "0.1.0" + }, "dependencies": { "end-of-stream": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true + "dev": true, + "requires": { + "once": "1.3.3" + } }, "once": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } } } }, @@ -8283,7 +10891,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true + "dev": true, + "requires": { + "lcid": "1.0.0" + } }, "os-tmpdir": { "version": "1.0.2", @@ -8295,7 +10906,11 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "over": { "version": "0.0.5", @@ -8328,26 +10943,55 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, - "optional": true + "optional": true, + "requires": { + "p-limit": "1.1.0" + } }, "p-timeout": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.0.tgz", "integrity": "sha1-mCD5lDTFgXhotPNICe5SkWYNW2w=", "dev": true, - "optional": true + "optional": true, + "requires": { + "p-finally": "1.0.0" + } }, "package-json": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", "dev": true, + "requires": { + "got": "5.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.3.0" + }, "dependencies": { "got": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", - "dev": true + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer2": "0.1.4", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "node-status-codes": "1.0.0", + "object-assign": "4.1.1", + "parse-json": "2.2.0", + "pinkie-promise": "2.0.1", + "read-all-stream": "3.1.0", + "readable-stream": "2.3.3", + "timed-out": "3.1.3", + "unzip-response": "1.0.2", + "url-parse-lax": "1.0.0" + } }, "object-assign": { "version": "4.1.1", @@ -8367,13 +11011,21 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1" + } }, "parse-filepath": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", - "dev": true + "dev": true, + "requires": { + "is-absolute": "0.2.6", + "map-cache": "0.2.2", + "path-root": "0.1.1" + } }, "parse-github-repo-url": { "version": "1.4.0", @@ -8385,13 +11037,22 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "parse-ms": { "version": "1.0.1", @@ -8410,11 +11071,14 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA=", "dev": true, + "requires": { + "@types/node": "6.0.80" + }, "dependencies": { "@types/node": { - "version": "6.0.79", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.79.tgz", - "integrity": "sha512-7F3/P6MkTPA0QxOstRqfcnoReCUy5V/QG92cyBoZSPnqdX44L8TtNELSVfN56gAttm3YWj9cEi8FRIPVq0WmeQ==", + "version": "6.0.80", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.80.tgz", + "integrity": "sha512-FJedmtuVj9Jb2AbI3cKYlAczj+3Lv3I8g2wjricLSRBCW0Oj7kzG4D6gUmgDc2Ptm0A1lat2AuheqK5kdYfswg==", "dev": true } } @@ -8423,19 +11087,28 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true + "dev": true, + "requires": { + "better-assert": "1.0.2" + } }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true + "dev": true, + "requires": { + "better-assert": "1.0.2" + } }, "parseuri": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true + "dev": true, + "requires": { + "better-assert": "1.0.2" + } }, "parseurl": { "version": "1.3.1", @@ -8447,19 +11120,29 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", - "dev": true + "dev": true, + "requires": { + "camel-case": "3.0.0", + "upper-case-first": "1.1.2" + } }, "path-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1" + } }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -8490,7 +11173,10 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true + "dev": true, + "requires": { + "path-root-regex": "0.1.2" + } }, "path-root-regex": { "version": "0.1.2", @@ -8508,7 +11194,12 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pause": { "version": "0.1.0", @@ -8520,7 +11211,10 @@ "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true + "dev": true, + "requires": { + "through": "2.3.8" + } }, "performance-now": { "version": "0.2.0", @@ -8544,13 +11238,20 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "pipetteur": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pipetteur/-/pipetteur-2.0.3.tgz", "integrity": "sha1-GVV2CVno0aEcsqUOyD7sRwYz5J8=", - "dev": true + "dev": true, + "requires": { + "onecolor": "3.0.4", + "synesthesia": "1.0.1" + } }, "pkginfo": { "version": "0.4.0", @@ -8576,6 +11277,10 @@ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-0.4.0.tgz", "integrity": "sha1-o/+t/6/k+5jgYBqF7aJ8J86Eyh4=", "dev": true, + "requires": { + "async": "0.9.0", + "mkdirp": "0.5.1" + }, "dependencies": { "async": { "version": "0.9.0", @@ -8590,12 +11295,21 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + }, "dependencies": { "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, @@ -8603,7 +11317,10 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-0.14.0.tgz", "integrity": "sha1-xjGwicbM5CK5oQ86lY0r7dOBkyQ=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-media-query-parser": { "version": "0.2.3", @@ -8615,7 +11332,13 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-3.0.0.tgz", "integrity": "sha1-CeoPN6RExWk4eGBuCbAY6+/3z48=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "lodash": "4.17.4", + "log-symbols": "1.0.2", + "postcss": "5.2.17" + } }, "postcss-resolve-nested-selector": { "version": "0.1.1", @@ -8627,13 +11350,21 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-0.4.1.tgz", "integrity": "sha1-rXcbgfD3L19IRdCKpg+TVXZT1Uw=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } }, "postcss-value-parser": { "version": "3.3.0", @@ -8645,7 +11376,20 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/precinct/-/precinct-3.6.0.tgz", "integrity": "sha1-fY+Ffmc3UzMy9CnndgwOKKsQY/Y=", - "dev": true + "dev": true, + "requires": { + "commander": "2.11.0", + "debug": "2.6.7", + "detective-amd": "2.4.0", + "detective-cjs": "2.0.0", + "detective-es6": "1.1.6", + "detective-less": "1.0.0", + "detective-sass": "2.0.0", + "detective-scss": "1.0.0", + "detective-stylus": "1.0.0", + "module-definition": "2.2.4", + "node-source-walk": "3.2.1" + } }, "prelude-ls": { "version": "1.1.2", @@ -8681,7 +11425,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2", + "parse-ms": "1.0.1", + "plur": "1.0.0" + } }, "process-nextick-args": { "version": "1.0.7", @@ -8699,7 +11448,10 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true + "dev": true, + "requires": { + "asap": "2.0.6" + } }, "prompt": { "version": "1.0.0", @@ -8707,6 +11459,14 @@ "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=", "dev": true, "optional": true, + "requires": { + "colors": "1.1.2", + "pkginfo": "0.4.0", + "read": "1.0.7", + "revalidator": "0.1.8", + "utile": "0.3.0", + "winston": "2.1.1" + }, "dependencies": { "async": { "version": "1.0.0", @@ -8728,6 +11488,15 @@ "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", "dev": true, "optional": true, + "requires": { + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "pkginfo": "0.3.1", + "stack-trace": "0.0.10" + }, "dependencies": { "colors": { "version": "1.0.3", @@ -8752,7 +11521,13 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.2.tgz", "integrity": "sha1-WXSNfc8D0tsiwT2p/rAk4Wq4DJE=", "dev": true, - "optional": true + "optional": true, + "requires": { + "ascli": "1.0.1", + "bytebuffer": "5.0.1", + "glob": "7.1.2", + "yargs": "3.10.0" + } }, "protochain": { "version": "1.0.5", @@ -8766,11 +11541,28 @@ "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz", "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=", "dev": true, + "requires": { + "@types/node": "6.0.80", + "@types/q": "0.0.32", + "@types/selenium-webdriver": "2.53.42", + "blocking-proxy": "0.0.5", + "chalk": "1.1.3", + "glob": "7.1.2", + "jasmine": "2.6.0", + "jasminewd2": "2.1.0", + "optimist": "0.6.1", + "q": "1.4.1", + "saucelabs": "1.3.0", + "selenium-webdriver": "3.0.1", + "source-map-support": "0.4.15", + "webdriver-js-extender": "1.0.0", + "webdriver-manager": "12.0.6" + }, "dependencies": { "@types/node": { - "version": "6.0.79", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.79.tgz", - "integrity": "sha512-7F3/P6MkTPA0QxOstRqfcnoReCUy5V/QG92cyBoZSPnqdX44L8TtNELSVfN56gAttm3YWj9cEi8FRIPVq0WmeQ==", + "version": "6.0.80", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.80.tgz", + "integrity": "sha512-FJedmtuVj9Jb2AbI3cKYlAczj+3Lv3I8g2wjricLSRBCW0Oj7kzG4D6gUmgDc2Ptm0A1lat2AuheqK5kdYfswg==", "dev": true }, "@types/q": { @@ -8789,25 +11581,50 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", - "dev": true + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0" + } }, "selenium-webdriver": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz", "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=", - "dev": true + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "rimraf": "2.6.1", + "tmp": "0.0.30", + "xml2js": "0.4.17" + } }, "tmp": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } }, "webdriver-manager": { "version": "12.0.6", "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", - "dev": true + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "chalk": "1.1.3", + "del": "2.2.2", + "glob": "7.1.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "q": "1.4.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "xml2js": "0.4.17" + } } } }, @@ -8816,7 +11633,11 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", "dev": true, - "optional": true + "optional": true, + "requires": { + "forwarded": "0.1.0", + "ipaddr.js": "1.3.0" + } }, "prr": { "version": "0.0.0", @@ -8835,6 +11656,12 @@ "resolved": "https://registry.npmjs.org/pullstream/-/pullstream-0.4.1.tgz", "integrity": "sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ=", "dev": true, + "requires": { + "over": "0.0.5", + "readable-stream": "1.0.34", + "setimmediate": "1.0.5", + "slice-stream": "1.0.0" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -8846,7 +11673,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -8861,12 +11694,19 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "once": "1.4.0" + }, "dependencies": { "end-of-stream": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0" + } } } }, @@ -8874,7 +11714,12 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", - "dev": true + "dev": true, + "requires": { + "duplexify": "3.5.0", + "inherits": "2.0.3", + "pump": "1.0.2" + } }, "punycode": { "version": "1.4.1", @@ -8911,18 +11756,28 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -8930,7 +11785,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -8944,62 +11802,112 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", - "dev": true + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.15", + "unpipe": "1.0.0" + } }, "rc": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "mute-stream": "0.0.7" + } }, "read-all-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1", + "readable-stream": "2.3.3" + } }, "read-file-stdin": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.1.tgz", "integrity": "sha1-JezP86FTtoCa+ssj7hU4fbng7mE=", - "dev": true + "dev": true, + "requires": { + "gather-stream": "1.0.0" + } }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } }, "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } }, "readline2": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + }, "dependencies": { "mute-stream": { "version": "0.0.5", @@ -9013,13 +11921,20 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true + "dev": true, + "requires": { + "resolve": "1.3.3" + } }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } }, "reflect-metadata": { "version": "0.1.10", @@ -9031,19 +11946,30 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "registry-auth-token": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true + "dev": true, + "requires": { + "rc": "1.2.1", + "safe-buffer": "5.1.1" + } }, "registry-url": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true + "dev": true, + "requires": { + "rc": "1.2.1" + } }, "relateurl": { "version": "0.2.7", @@ -9073,7 +11999,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "replace-ext": { "version": "0.0.1", @@ -9085,7 +12014,31 @@ "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true + "dev": true, + "requires": { + "aws-sign2": "0.6.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.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } }, "require-directory": { "version": "2.1.1", @@ -9116,6 +12069,11 @@ "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-2.0.1.tgz", "integrity": "sha1-HykScD48TfiYKyx73deipk/Rb7k=", "dev": true, + "requires": { + "esprima": "1.0.4", + "fs-extra": "0.6.4", + "stringify-object": "0.1.8" + }, "dependencies": { "esprima": { "version": "1.0.4", @@ -9127,7 +12085,13 @@ "version": "0.6.4", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.6.4.tgz", "integrity": "sha1-9G8MdbeEH40gCzNIzU1pHVoJnRU=", - "dev": true + "dev": true, + "requires": { + "jsonfile": "1.0.1", + "mkdirp": "0.3.5", + "ncp": "0.4.2", + "rimraf": "2.2.8" + } }, "jsonfile": { "version": "1.0.1", @@ -9165,13 +12129,19 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true + "dev": true, + "requires": { + "path-parse": "1.0.5" + } }, "resolve-bin": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.0.tgz", "integrity": "sha1-RxMiSYkRAa+xmZH+k3ywpfBy5dk=", - "dev": true + "dev": true, + "requires": { + "find-parent-dir": "0.3.0" + } }, "resolve-dependency-path": { "version": "1.0.2", @@ -9183,7 +12153,11 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true + "dev": true, + "requires": { + "expand-tilde": "1.2.2", + "global-modules": "0.2.3" + } }, "resolve-from": { "version": "3.0.0", @@ -9195,19 +12169,31 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=", - "dev": true + "dev": true, + "requires": { + "depd": "1.1.0", + "on-headers": "1.0.1" + } }, "restore-cursor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } }, "retry-request": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-2.0.5.tgz", "integrity": "sha1-0ImhShXbntYGhbhgK0D03MDT+zw=", - "dev": true + "dev": true, + "requires": { + "request": "2.81.0", + "through2": "2.0.3" + } }, "revalidator": { "version": "0.1.8", @@ -9220,13 +12206,19 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true + "dev": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "rndm": { "version": "1.2.0", @@ -9238,19 +12230,37 @@ "version": "0.41.6", "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.41.6.tgz", "integrity": "sha1-4NBUl4d6OYwQTYFtJzOnGKepTio=", - "dev": true + "dev": true, + "requires": { + "source-map-support": "0.4.15" + } }, "rollup-plugin-node-resolve": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz", "integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=", - "dev": true + "dev": true, + "requires": { + "browser-resolve": "1.11.2", + "builtin-modules": "1.1.1", + "is-module": "1.0.0", + "resolve": "1.3.3" + } }, "router": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/router/-/router-1.3.1.tgz", "integrity": "sha1-5Z72T6/CIZShlphoNNiHBY12r0c=", "dev": true, + "requires": { + "array-flatten": "2.1.1", + "debug": "2.6.8", + "methods": "1.1.2", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.0.3", + "utils-merge": "1.0.0" + }, "dependencies": { "array-flatten": { "version": "2.1.1", @@ -9262,7 +12272,10 @@ "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -9276,13 +12289,20 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0" + } }, "run-sequence": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "gulp-util": "3.0.8" + } }, "rx-lite": { "version": "3.1.2", @@ -9293,7 +12313,10 @@ "rxjs": { "version": "5.4.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.2.tgz", - "integrity": "sha1-KjI2/L8D31e64G/Wly/ZnlwI/Pc=" + "integrity": "sha1-KjI2/L8D31e64G/Wly/ZnlwI/Pc=", + "requires": { + "symbol-observable": "1.0.4" + } }, "safe-buffer": { "version": "5.1.1", @@ -9305,13 +12328,25 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=", - "dev": true + "dev": true, + "requires": { + "es6-promise": "3.3.1", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -9323,7 +12358,12 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "which-module": { "version": "1.0.0", @@ -9335,13 +12375,31 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } }, "yargs-parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0" + } } } }, @@ -9350,12 +12408,19 @@ "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-1.0.2.tgz", "integrity": "sha1-wVxPcmHcKtsRs9WRLe1rCKFLIcg=", "dev": true, + "requires": { + "commander": "2.8.1", + "is-relative-path": "1.0.1" + }, "dependencies": { "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } } } }, @@ -9364,6 +12429,13 @@ "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-0.17.0.tgz", "integrity": "sha1-kI2TEeyvF92bRkehQ1/UogcugM4=", "dev": true, + "requires": { + "adm-zip": "0.4.7", + "async": "1.4.0", + "https-proxy-agent": "1.0.0", + "lodash": "3.10.1", + "rimraf": "2.4.3" + }, "dependencies": { "async": { "version": "1.4.0", @@ -9375,7 +12447,14 @@ "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "lodash": { "version": "3.10.1", @@ -9387,7 +12466,10 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.3.tgz", "integrity": "sha1-5bUclDekxYKtuVXp8oz42UXicq8=", - "dev": true + "dev": true, + "requires": { + "glob": "5.0.15" + } } } }, @@ -9395,7 +12477,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.4.0.tgz", "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", - "dev": true + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0" + } }, "sax": { "version": "1.2.4", @@ -9408,6 +12493,16 @@ "resolved": "https://registry.npmjs.org/scss-bundle/-/scss-bundle-2.0.1-beta.7.tgz", "integrity": "sha1-PquvktNm4kUFDWLbWDkKHbwl6tQ=", "dev": true, + "requires": { + "archy": "1.0.0", + "globs": "0.1.3", + "mkdirp": "0.5.1", + "mz": "2.6.0", + "node-sass": "4.5.3", + "pretty-bytes": "4.0.2", + "promise": "7.3.1", + "yargs": "7.1.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -9419,7 +12514,12 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "which-module": { "version": "1.0.0", @@ -9431,13 +12531,31 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } }, "yargs-parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0" + } } } }, @@ -9446,12 +12564,19 @@ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, + "requires": { + "js-base64": "2.1.9", + "source-map": "0.4.4" + }, "dependencies": { "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -9460,12 +12585,21 @@ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.4.0.tgz", "integrity": "sha1-FR90RSlNpqZsScwwB0eioX5TxSo=", "dev": true, + "requires": { + "adm-zip": "0.4.7", + "rimraf": "2.6.1", + "tmp": "0.0.30", + "xml2js": "0.4.17" + }, "dependencies": { "tmp": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } } } }, @@ -9479,13 +12613,20 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true + "dev": true, + "requires": { + "semver": "5.3.0" + } }, "semver-greatest-satisfied-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.0.0.tgz", "integrity": "sha1-T7RB4qjSbEC1mDJ1VzGN4nKlWKA=", "dev": true, + "requires": { + "semver": "4.3.6", + "semver-regex": "1.0.0" + }, "dependencies": { "semver": { "version": "4.3.6", @@ -9506,6 +12647,21 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", "dev": true, + "requires": { + "debug": "2.6.7", + "depd": "1.1.0", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.1", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, "dependencies": { "mime": { "version": "1.3.4", @@ -9519,7 +12675,11 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1", + "upper-case-first": "1.1.2" + } }, "sequencify": { "version": "0.0.7", @@ -9532,13 +12692,22 @@ "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=", "dev": true, - "optional": true + "optional": true, + "requires": { + "protochain": "1.0.5" + } }, "serve-favicon": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=", "dev": true, + "requires": { + "etag": "1.7.0", + "fresh": "0.3.0", + "ms": "0.7.2", + "parseurl": "1.3.1" + }, "dependencies": { "etag": { "version": "1.7.0", @@ -9565,24 +12734,44 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz", "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=", "dev": true, + "requires": { + "accepts": "1.2.13", + "batch": "0.5.3", + "debug": "2.2.0", + "escape-html": "1.0.3", + "http-errors": "1.3.1", + "mime-types": "2.1.15", + "parseurl": "1.3.1" + }, "dependencies": { "accepts": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", - "dev": true + "dev": true, + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.5.3" + } }, "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "http-errors": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } }, "ms": { "version": "0.7.1", @@ -9603,7 +12792,13 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", "dev": true, - "optional": true + "optional": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.3" + } }, "set-blocking": { "version": "2.0.0", @@ -9633,7 +12828,12 @@ "version": "0.7.8", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.0.3", + "rechoir": "0.6.2" + } }, "sigmund": { "version": "1.0.1", @@ -9658,6 +12858,9 @@ "resolved": "https://registry.npmjs.org/slice-stream/-/slice-stream-1.0.0.tgz", "integrity": "sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA=", "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -9669,7 +12872,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -9689,25 +12898,43 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1" + } }, "sntp": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "socket.io": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -9728,12 +12955,19 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -9748,12 +12982,28 @@ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -9768,6 +13018,12 @@ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, "dependencies": { "component-emitter": { "version": "1.1.2", @@ -9779,7 +13035,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "isarray": { "version": "0.0.1", @@ -9799,7 +13058,13 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=", - "dev": true + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "minimist": "1.2.0", + "sander": "0.5.1", + "sourcemap-codec": "1.3.1" + } }, "source-map": { "version": "0.5.6", @@ -9811,13 +13076,19 @@ "version": "0.4.15", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "sourcemap-codec": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.3.1.tgz", "integrity": "sha1-mtb5vb1pGTEBbjCTnbyGhnMyMUY=", - "dev": true + "dev": true, + "requires": { + "vlq": "0.2.2" + } }, "sparkles": { "version": "1.0.0", @@ -9829,7 +13100,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -9859,19 +13133,29 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", - "dev": true + "dev": true, + "requires": { + "through": "2.3.8" + } }, "split-array-stream": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/split-array-stream/-/split-array-stream-1.0.3.tgz", "integrity": "sha1-0rdajl4Ngk1S/eyLgiWDncLjXfo=", - "dev": true + "dev": true, + "requires": { + "async": "2.5.0", + "is-stream-ended": "0.1.3" + } }, "split2": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/split2/-/split2-2.1.1.tgz", "integrity": "sha1-eh9VHhdqkOzTNF9yRqDP4XXvT9A=", - "dev": true + "dev": true, + "requires": { + "through2": "2.0.3" + } }, "sprintf-js": { "version": "1.0.3", @@ -9884,6 +13168,16 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -9909,13 +13203,19 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true + "dev": true, + "requires": { + "duplexer": "0.1.1" + } }, "stream-consume": { "version": "0.1.0", @@ -9928,6 +13228,9 @@ "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=", "dev": true, + "requires": { + "readable-stream": "1.1.14" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -9939,7 +13242,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -9953,7 +13262,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.2.tgz", "integrity": "sha1-q/OfZsCJCk63lbyNXoWbJhW1kLI=", - "dev": true + "dev": true, + "requires": { + "stubs": "3.0.0" + } }, "stream-shift": { "version": "1.0.0", @@ -9965,7 +13277,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "string-format-obj": { "version": "1.1.0", @@ -9977,7 +13292,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", - "dev": true + "dev": true, + "requires": { + "strip-ansi": "3.0.1" + } }, "string-template": { "version": "1.0.0", @@ -9990,7 +13308,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "stringify-object": { "version": "0.1.8", @@ -10014,13 +13337,19 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-eof": { "version": "1.0.0", @@ -10033,7 +13362,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } }, "strip-json-comments": { "version": "2.0.1", @@ -10058,26 +13390,89 @@ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-2.3.2.tgz", "integrity": "sha1-ZMg+BDimjJ7fRJ6MVSp9mrYAmws=", "dev": true, + "requires": { + "browserslist": "1.7.7", + "chalk": "1.1.3", + "log-symbols": "1.0.2", + "minimist": "1.2.0", + "plur": "2.1.2", + "postcss": "5.2.17", + "postcss-reporter": "1.4.1", + "postcss-selector-parser": "2.2.3", + "read-file-stdin": "0.2.1", + "text-table": "0.2.0", + "write-file-stdout": "0.0.2" + }, "dependencies": { "plur": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true + "dev": true, + "requires": { + "irregular-plurals": "1.3.0" + } }, "postcss-reporter": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-1.4.1.tgz", "integrity": "sha1-wTbwpbFhkV83ndN2XGEHX357mvI=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "lodash": "4.17.4", + "log-symbols": "1.0.2", + "postcss": "5.2.17" + } } } }, "stylelint": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-7.12.0.tgz", - "integrity": "sha512-DpEYhVZnjrNIFmX7IkigvwoR0F5NLBqHOF3+ovJeKhnv+qCEOC5CI+tZ8FOCdQGytfnIa6hUItSYbwg1Dbipfw==", - "dev": true, + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-7.13.0.tgz", + "integrity": "sha1-ER+Xttpy53XICADWu29fhpmXeF0=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "balanced-match": "0.4.2", + "chalk": "2.0.1", + "colorguard": "1.2.0", + "cosmiconfig": "2.1.3", + "debug": "2.6.7", + "doiuse": "2.6.0", + "execall": "1.0.0", + "file-entry-cache": "2.0.0", + "get-stdin": "5.0.1", + "globby": "6.1.0", + "globjoin": "0.1.4", + "html-tags": "2.0.0", + "ignore": "3.3.3", + "imurmurhash": "0.1.4", + "known-css-properties": "0.2.0", + "lodash": "4.17.4", + "log-symbols": "1.0.2", + "mathml-tag-names": "2.0.1", + "meow": "3.7.0", + "micromatch": "2.3.11", + "normalize-selector": "0.2.0", + "pify": "2.3.0", + "postcss": "5.2.17", + "postcss-less": "0.14.0", + "postcss-media-query-parser": "0.2.3", + "postcss-reporter": "3.0.0", + "postcss-resolve-nested-selector": "0.1.1", + "postcss-scss": "0.4.1", + "postcss-selector-parser": "2.2.3", + "postcss-value-parser": "3.3.0", + "resolve-from": "3.0.0", + "specificity": "0.3.1", + "string-width": "2.1.0", + "style-search": "0.1.0", + "stylehacks": "2.3.2", + "sugarss": "0.2.0", + "svg-tags": "1.0.0", + "table": "4.0.1" + }, "dependencies": { "ansi-regex": { "version": "3.0.0", @@ -10085,12 +13480,32 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.0" + } + }, "get-stdin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", @@ -10101,6 +13516,19 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, "is-fullwidth-code-point": { @@ -10119,13 +13547,29 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", - "dev": true + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", + "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -10134,18 +13578,29 @@ "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-1.0.1.tgz", "integrity": "sha1-qMvC4NLYcVdMN/Dim0axjcmfHWk=", "dev": true, + "requires": { + "commander": "2.8.1", + "debug": "2.2.0", + "is-relative-path": "1.0.1" + }, "dependencies": { "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -10159,20 +13614,67 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-0.2.0.tgz", "integrity": "sha1-rDQjdWMyfG/4l7ZHQr9q7BkK054=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "superagent": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz", "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=", "dev": true, - "optional": true + "optional": true, + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.1", + "debug": "2.6.7", + "extend": "3.0.1", + "form-data": "2.1.4", + "formidable": "1.1.1", + "methods": "1.1.2", + "mime": "1.3.6", + "qs": "6.4.0", + "readable-stream": "2.3.3" + } }, "superstatic": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-4.1.0.tgz", "integrity": "sha1-5/l3rHAZOtgOFU/RNqVLTUURCwE=", "dev": true, + "requires": { + "as-array": "2.0.0", + "async": "1.5.2", + "basic-auth-connect": "1.0.0", + "chalk": "1.1.3", + "char-spinner": "1.0.1", + "compare-semver": "1.1.0", + "compression": "1.7.0", + "connect": "3.6.2", + "connect-query": "0.2.0", + "destroy": "1.0.4", + "fast-url-parser": "1.1.3", + "fs-extra": "0.30.0", + "glob": "7.1.2", + "glob-slasher": "1.0.1", + "home-dir": "1.0.0", + "is-url": "1.2.2", + "join-path": "1.1.1", + "lodash": "4.17.4", + "mime-types": "2.1.15", + "minimatch": "3.0.4", + "morgan": "1.8.2", + "nash": "2.0.4", + "on-finished": "2.3.0", + "on-headers": "1.0.1", + "path-to-regexp": "1.7.0", + "router": "1.3.1", + "rsvp": "3.6.1", + "string-length": "1.0.1", + "try-require": "1.2.1", + "update-notifier": "1.0.3" + }, "dependencies": { "async": { "version": "1.5.2", @@ -10184,19 +13686,40 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", - "dev": true + "dev": true, + "requires": { + "dot-prop": "3.0.0", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "os-tmpdir": "1.0.2", + "osenv": "0.1.4", + "uuid": "2.0.3", + "write-file-atomic": "1.3.4", + "xdg-basedir": "2.0.0" + } }, "dot-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true + "dev": true, + "requires": { + "is-obj": "1.0.1" + } }, "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.1" + } }, "isarray": { "version": "0.0.1", @@ -10214,13 +13737,26 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true + "dev": true, + "requires": { + "isarray": "0.0.1" + } }, "update-notifier": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "dev": true + "dev": true, + "requires": { + "boxen": "0.6.0", + "chalk": "1.1.3", + "configstore": "2.1.0", + "is-npm": "1.0.0", + "latest-version": "2.0.0", + "lazy-req": "1.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "2.0.0" + } }, "uuid": { "version": "2.0.3", @@ -10232,13 +13768,21 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "xdg-basedir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } } } }, @@ -10247,7 +13791,11 @@ "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.0.0.tgz", "integrity": "sha1-jUu2j9GDDuBwM7HFpamkAhyWUpY=", "dev": true, - "optional": true + "optional": true, + "requires": { + "methods": "1.1.2", + "superagent": "3.5.2" + } }, "supports-color": { "version": "2.0.0", @@ -10265,7 +13813,11 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", - "dev": true + "dev": true, + "requires": { + "lower-case": "1.1.4", + "upper-case": "1.1.3" + } }, "symbol-observable": { "version": "1.0.4", @@ -10282,19 +13834,39 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/synesthesia/-/synesthesia-1.0.1.tgz", "integrity": "sha1-XvlepUjA1cbm+btLDQcx3/hkp3c=", - "dev": true + "dev": true, + "requires": { + "css-color-names": "0.0.3" + } }, "systemjs": { "version": "0.19.43", "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.19.43.tgz", - "integrity": "sha1-mQLOW9qroDQTV1kCxrsYutLdq44=" + "integrity": "sha1-mQLOW9qroDQTV1kCxrsYutLdq44=", + "requires": { + "when": "3.7.8" + } }, "table": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.4", + "slice-ansi": "0.0.4", + "string-width": "2.1.0" + }, "dependencies": { + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -10311,13 +13883,20 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", - "dev": true + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, @@ -10331,13 +13910,24 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } }, "tar-stream": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.2.2.tgz", "integrity": "sha1-ljLyPZj9M9QWYbvewFSJEg3sYCg=", - "dev": true + "dev": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.0.0", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } }, "temp": { "version": "0.4.0", @@ -10349,7 +13939,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.0.1.tgz", "integrity": "sha1-Bk5Im0tb9gumpre8fy9cJ07Pgmk=", - "dev": true + "dev": true, + "requires": { + "duplexify": "3.5.0", + "fork-stream": "0.0.4", + "merge-stream": "1.0.1", + "through2": "2.0.3" + } }, "text-extensions": { "version": "1.5.0", @@ -10367,13 +13963,19 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true + "dev": true, + "requires": { + "any-promise": "1.3.0" + } }, "thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true + "dev": true, + "requires": { + "thenify": "3.3.0" + } }, "through": { "version": "2.3.8", @@ -10385,13 +13987,20 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } }, "tildify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } }, "time-stamp": { "version": "1.1.0", @@ -10411,12 +14020,32 @@ "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", "dev": true, + "requires": { + "body-parser": "1.14.2", + "debug": "2.2.0", + "faye-websocket": "0.10.0", + "livereload-js": "2.2.2", + "parseurl": "1.3.1", + "qs": "5.1.0" + }, "dependencies": { "body-parser": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", "dev": true, + "requires": { + "bytes": "2.2.0", + "content-type": "1.0.2", + "debug": "2.2.0", + "depd": "1.1.0", + "http-errors": "1.3.1", + "iconv-lite": "0.4.13", + "on-finished": "2.3.0", + "qs": "5.2.0", + "raw-body": "2.1.7", + "type-is": "1.6.15" + }, "dependencies": { "qs": { "version": "5.2.0", @@ -10436,13 +14065,20 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "http-errors": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } }, "iconv-lite": { "version": "0.4.13", @@ -10467,6 +14103,11 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, "dependencies": { "bytes": { "version": "2.4.0", @@ -10482,13 +14123,20 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1", + "upper-case": "1.1.3" + } }, "tmp": { "version": "0.0.27", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.27.tgz", "integrity": "sha1-aq9CotdmQVCrUoKHBo7LwnE5oBM=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } }, "to-array": { "version": "0.1.4", @@ -10500,19 +14148,28 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "tough-cookie": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "toxic": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.0.tgz", "integrity": "sha1-8RVNi2rCGHWslDqfdAjfLf4WTqI=", "dev": true, + "requires": { + "lodash": "2.4.2" + }, "dependencies": { "lodash": { "version": "2.4.2", @@ -10569,18 +14226,38 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.2.0.tgz", "integrity": "sha1-mBTwwBQXhJAM8S/vEZetS39NI9E=", "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "2.0.1", + "diff": "3.3.0", + "make-error": "1.3.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15", + "tsconfig": "6.0.0", + "v8flags": "2.1.1", + "yn": "2.0.0" + }, "dependencies": { "ansi-styles": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", - "dev": true + "dev": true, + "requires": { + "color-convert": "1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.0" + } }, "has-flag": { "version": "2.0.0", @@ -10589,10 +14266,13 @@ "dev": true }, "supports-color": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.1.0.tgz", - "integrity": "sha1-kswUuz2tiSjKVlbDPhmhnyCvXHo=", - "dev": true + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", + "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -10601,6 +14281,10 @@ "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", "dev": true, + "requires": { + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1" + }, "dependencies": { "strip-bom": { "version": "3.0.0", @@ -10615,21 +14299,24 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-2.2.0.tgz", "integrity": "sha1-x2rOfyxFTNMcpvcsM4dtuuAgAOg=", "dev": true, + "requires": { + "tsconfig": "5.0.3" + }, "dependencies": { "tsconfig": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=", - "dev": true + "dev": true, + "requires": { + "any-promise": "1.3.0", + "parse-json": "2.2.0", + "strip-bom": "2.0.0", + "strip-json-comments": "2.0.1" + } } } }, - "tsickle": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", - "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=", - "dev": true - }, "tslib": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", @@ -10640,12 +14327,33 @@ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.4.3.tgz", "integrity": "sha1-dhyEArgONHt3M6BDkKdXslNYBGc=", "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "colors": "1.1.2", + "commander": "2.11.0", + "diff": "3.3.0", + "glob": "7.1.2", + "minimatch": "3.0.4", + "resolve": "1.3.3", + "semver": "5.3.0", + "tslib": "1.7.1", + "tsutils": "2.6.0" + }, "dependencies": { "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true + }, + "tsutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.6.0.tgz", + "integrity": "sha1-5emceaiszTl3zhjYP98dI1psLrs=", + "dev": true, + "requires": { + "tslib": "1.7.1" + } } } }, @@ -10656,16 +14364,22 @@ "dev": true }, "tsutils": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.5.1.tgz", - "integrity": "sha1-wgATkMee7Bpcz6esEtWZY5aD4M8=", - "dev": true + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.6.0.tgz", + "integrity": "sha1-5emceaiszTl3zhjYP98dI1psLrs=", + "dev": true, + "requires": { + "tslib": "1.7.1" + } }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -10678,13 +14392,20 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.15" + } }, "typedarray": { "version": "0.0.6", @@ -10702,7 +14423,12 @@ "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } }, "uglify-to-browserify": { "version": "1.0.2", @@ -10715,7 +14441,10 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz", "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=", - "dev": true + "dev": true, + "requires": { + "random-bytes": "1.0.0" + } }, "ultron": { "version": "1.0.2", @@ -10739,13 +14468,20 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", - "dev": true + "dev": true, + "requires": { + "underscore": "1.6.0" + } }, "underscore.string": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "1.0.3", + "util-deprecate": "1.0.2" + } }, "uniq": { "version": "1.0.1", @@ -10763,13 +14499,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } }, "universal-analytics": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.3.11.tgz", "integrity": "sha1-USh5GToSpm3L2RhRITibq5E81LY=", "dev": true, + "requires": { + "async": "0.2.10", + "node-uuid": "1.4.8", + "request": "2.81.0", + "underscore": "1.6.0" + }, "dependencies": { "async": { "version": "0.2.10", @@ -10802,18 +14547,35 @@ "resolved": "https://registry.npmjs.org/unzip/-/unzip-0.1.11.tgz", "integrity": "sha1-iXScY7BY19kNYZ+GuYqhU107l/A=", "dev": true, + "requires": { + "binary": "0.3.0", + "fstream": "0.1.31", + "match-stream": "0.0.2", + "pullstream": "0.4.1", + "readable-stream": "1.0.34", + "setimmediate": "1.0.5" + }, "dependencies": { "fstream": { "version": "0.1.31", "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", "integrity": "sha1-czfwWPu7vvqMn1YaKMqwhJICyYg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "3.0.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } }, "graceful-fs": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true + "dev": true, + "requires": { + "natives": "1.1.0" + } }, "isarray": { "version": "0.0.1", @@ -10825,7 +14587,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -10846,18 +14614,49 @@ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", "dev": true, + "requires": { + "chalk": "1.1.3", + "configstore": "1.4.0", + "is-npm": "1.0.0", + "latest-version": "1.0.1", + "repeating": "1.1.3", + "semver-diff": "2.1.0", + "string-length": "1.0.1" + }, "dependencies": { "configstore": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "os-tmpdir": "1.0.2", + "osenv": "0.1.4", + "uuid": "2.0.3", + "write-file-atomic": "1.3.4", + "xdg-basedir": "2.0.0" + } }, "got": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", "dev": true, + "requires": { + "duplexify": "3.5.0", + "infinity-agent": "2.0.3", + "is-redirect": "1.0.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "nested-error-stacks": "1.0.2", + "object-assign": "3.0.0", + "prepend-http": "1.0.4", + "read-all-stream": "3.1.0", + "timed-out": "2.0.0" + }, "dependencies": { "object-assign": { "version": "3.0.0", @@ -10871,7 +14670,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", - "dev": true + "dev": true, + "requires": { + "package-json": "1.2.0" + } }, "object-assign": { "version": "4.1.1", @@ -10883,13 +14685,20 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", - "dev": true + "dev": true, + "requires": { + "got": "3.3.1", + "registry-url": "3.1.0" + } }, "repeating": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "timed-out": { "version": "2.0.0", @@ -10907,13 +14716,21 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "xdg-basedir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } } } }, @@ -10927,7 +14744,10 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", - "dev": true + "dev": true, + "requires": { + "upper-case": "1.1.3" + } }, "url-join": { "version": "0.0.1", @@ -10939,19 +14759,29 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } }, "user-home": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } }, "useragent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.0.tgz", "integrity": "sha1-74X0GQPP0F4rqMEa5hJJx6a79mM=", "dev": true, + "requires": { + "lru-cache": "2.2.4", + "tmp": "0.0.27" + }, "dependencies": { "lru-cache": { "version": "2.2.4", @@ -10973,6 +14803,14 @@ "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", "dev": true, "optional": true, + "requires": { + "async": "0.9.2", + "deep-equal": "0.2.2", + "i": "0.3.5", + "mkdirp": "0.5.1", + "ncp": "1.0.1", + "rimraf": "2.6.1" + }, "dependencies": { "async": { "version": "0.9.2", @@ -11000,6 +14838,9 @@ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, + "requires": { + "user-home": "1.1.1" + }, "dependencies": { "user-home": { "version": "1.1.1", @@ -11019,7 +14860,11 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "validate.js": { "version": "0.9.0", @@ -11043,7 +14888,10 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } }, "vhost": { "version": "3.0.2", @@ -11055,13 +14903,28 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } }, "vinyl-fs": { "version": "0.3.14", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, + "requires": { + "defaults": "1.0.3", + "glob-stream": "3.1.18", + "glob-watcher": "0.0.6", + "graceful-fs": "3.0.11", + "mkdirp": "0.5.1", + "strip-bom": "1.0.0", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, "dependencies": { "clone": { "version": "0.2.0", @@ -11073,7 +14936,10 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true + "dev": true, + "requires": { + "natives": "1.1.0" + } }, "isarray": { "version": "0.0.1", @@ -11085,7 +14951,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -11097,19 +14969,31 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "is-utf8": "0.2.1" + } }, "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } }, "vinyl": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } } } }, @@ -11117,7 +15001,10 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "vlq": { "version": "0.2.2", @@ -11142,18 +15029,42 @@ "resolved": "https://registry.npmjs.org/wd/-/wd-1.3.0.tgz", "integrity": "sha512-nhuK5+IeAt0vpqtDHWM9jpFpQiAabZdQRNeSSHhwgUhHENptGFGLVhf7CWbl9iyMSgsqcOJWTuJtpq5por4U6A==", "dev": true, + "requires": { + "archiver": "1.3.0", + "async": "2.0.1", + "lodash": "4.16.2", + "mkdirp": "0.5.1", + "q": "1.4.1", + "request": "2.79.0", + "underscore.string": "3.3.4", + "vargs": "0.1.0" + }, "dependencies": { "archiver": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", - "dev": true + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "async": "2.0.1", + "buffer-crc32": "0.2.13", + "glob": "7.1.2", + "lodash": "4.16.2", + "readable-stream": "2.3.3", + "tar-stream": "1.5.4", + "walkdir": "0.0.11", + "zip-stream": "1.2.0" + } }, "async": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.16.2" + } }, "caseless": { "version": "0.11.0", @@ -11165,7 +15076,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", - "dev": true + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "crc32-stream": "2.0.0", + "normalize-path": "2.1.1", + "readable-stream": "2.3.3" + } }, "crc": { "version": "3.4.4", @@ -11177,13 +15094,23 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true + "dev": true, + "requires": { + "crc": "3.4.4", + "readable-stream": "2.3.3" + } }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.16.0", + "pinkie-promise": "2.0.1" + } }, "lodash": { "version": "4.16.2", @@ -11207,13 +15134,41 @@ "version": "2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.1.0" + } }, "tar-stream": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", - "dev": true + "dev": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.0.0", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } }, "tunnel-agent": { "version": "0.4.3", @@ -11225,7 +15180,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "compress-commons": "1.2.0", + "lodash": "4.16.2", + "readable-stream": "2.3.3" + } } } }, @@ -11240,6 +15201,10 @@ "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", "dev": true, + "requires": { + "@types/selenium-webdriver": "2.53.42", + "selenium-webdriver": "2.53.3" + }, "dependencies": { "adm-zip": { "version": "0.4.4", @@ -11257,7 +15222,14 @@ "version": "2.53.3", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", - "dev": true + "dev": true, + "requires": { + "adm-zip": "0.4.4", + "rimraf": "2.6.1", + "tmp": "0.0.24", + "ws": "1.1.2", + "xml2js": "0.4.4" + } }, "tmp": { "version": "0.0.24", @@ -11269,7 +15241,11 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "dev": true + "dev": true, + "requires": { + "sax": "0.6.1", + "xmlbuilder": "4.2.1" + } } } }, @@ -11283,7 +15259,10 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } }, "websocket-extensions": { "version": "0.1.1", @@ -11296,6 +15275,9 @@ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", "dev": true, + "requires": { + "iconv-lite": "0.4.13" + }, "dependencies": { "iconv-lite": { "version": "0.4.13", @@ -11309,7 +15291,11 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-3.1.0.tgz", "integrity": "sha1-e9yuSQ+SGu9kUftnOexrvY6Qe/Y=", - "dev": true + "dev": true, + "requires": { + "tr46": "0.0.3", + "webidl-conversions": "3.0.1" + } }, "when": { "version": "3.7.8", @@ -11320,7 +15306,10 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -11333,13 +15322,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "widest-line": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "window-size": { "version": "0.1.0", @@ -11352,6 +15347,14 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-2.3.1.tgz", "integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=", "dev": true, + "requires": { + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" + }, "dependencies": { "async": { "version": "1.0.0", @@ -11371,7 +15374,11 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } }, "wrappy": { "version": "1.0.2", @@ -11383,19 +15390,31 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/wreck/-/wreck-6.3.0.tgz", "integrity": "sha1-oTaXafB7u2LWo3gzanhx/Hc8dAs=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "hoek": "2.16.3" + } }, "write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } }, "write-file-atomic": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "write-file-stdout": { "version": "0.0.2", @@ -11407,7 +15426,11 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", - "dev": true + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } }, "wtf-8": { "version": "1.0.0", @@ -11443,13 +15466,20 @@ "version": "0.4.17", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", - "dev": true + "dev": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "4.2.1" + } }, "xmlbuilder": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "xmlhttprequest-ssl": { "version": "1.5.3", @@ -11480,6 +15510,12 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + }, "dependencies": { "camelcase": { "version": "1.2.1", @@ -11495,6 +15531,9 @@ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "optional": true, + "requires": { + "camelcase": "4.1.0" + }, "dependencies": { "camelcase": { "version": "4.1.0", @@ -11522,6 +15561,11 @@ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-0.6.0.tgz", "integrity": "sha1-7pM67ZlvsYs0SpGuO10mTOxegSs=", "dev": true, + "requires": { + "compress-commons": "0.3.0", + "lodash": "3.10.1", + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -11539,7 +15583,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", From f4174358ba112545305687d91e6afcef02078dd9 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 13 Jul 2017 14:38:01 -0700 Subject: [PATCH 22/29] Fix indention --- src/cdk/stepper/index.ts | 6 +- src/cdk/stepper/step-label.ts | 8 +- src/cdk/stepper/step.html | 2 +- src/cdk/stepper/step.ts | 80 ++++---- src/cdk/stepper/stepper.ts | 246 ++++++++++++------------ src/demo-app/stepper/stepper-demo.html | 2 +- src/demo-app/stepper/stepper-demo.ts | 26 +-- src/lib/stepper/index.ts | 6 +- src/lib/stepper/step-label.ts | 8 +- src/lib/stepper/step.html | 2 +- src/lib/stepper/step.ts | 16 +- src/lib/stepper/stepper-horizontal.html | 2 +- src/lib/stepper/stepper-horizontal.ts | 14 +- src/lib/stepper/stepper-vertical.html | 2 +- src/lib/stepper/stepper-vertical.ts | 12 +- src/lib/stepper/stepper.scss | 1 - 16 files changed, 216 insertions(+), 217 deletions(-) diff --git a/src/cdk/stepper/index.ts b/src/cdk/stepper/index.ts index 072f2e0762b4..d215f193f379 100644 --- a/src/cdk/stepper/index.ts +++ b/src/cdk/stepper/index.ts @@ -13,9 +13,9 @@ import {CdkStep} from './step'; import {CdkStepLabel} from './step-label'; import {PortalModule} from '../portal'; @NgModule({ - imports: [CommonModule, PortalModule], - exports: [CdkStep, CdkStepper, CdkStepLabel], - declarations: [CdkStep, CdkStepper, CdkStepLabel] + imports: [CommonModule, PortalModule], + exports: [CdkStep, CdkStepper, CdkStepLabel], + declarations: [CdkStep, CdkStepper, CdkStepLabel] }) export class CdkStepperModule {} diff --git a/src/cdk/stepper/step-label.ts b/src/cdk/stepper/step-label.ts index ac43f930ab89..ffb8e276a11d 100644 --- a/src/cdk/stepper/step-label.ts +++ b/src/cdk/stepper/step-label.ts @@ -9,10 +9,10 @@ import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; import {TemplatePortalDirective} from '../portal'; @Directive({ - selector: '[cdk-step-label]', + selector: '[cdk-step-label]', }) export class CdkStepLabel extends TemplatePortalDirective { - constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { - super(templateRef, viewContainerRef); - } + constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { + super(templateRef, viewContainerRef); + } } diff --git a/src/cdk/stepper/step.html b/src/cdk/stepper/step.html index fa114df35d01..cd48c06b9917 100644 --- a/src/cdk/stepper/step.html +++ b/src/cdk/stepper/step.html @@ -1 +1 @@ - \ No newline at end of file + diff --git a/src/cdk/stepper/step.ts b/src/cdk/stepper/step.ts index 52911eddaeea..7ae6cf88c68f 100644 --- a/src/cdk/stepper/step.ts +++ b/src/cdk/stepper/step.ts @@ -7,50 +7,50 @@ */ import { - Component, ContentChild, Directive, Input, OnInit, TemplateRef, ViewChild, - ViewContainerRef + Component, ContentChild, Directive, Input, OnInit, TemplateRef, ViewChild, + ViewContainerRef } from '@angular/core'; import {CdkStepLabel} from './step-label'; @Component({ - selector: '[cdk-step]', - templateUrl: 'step.html', + selector: '[cdk-step]', + templateUrl: 'step.html', }) export class CdkStep { - @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel; - @ViewChild(TemplateRef) content: TemplateRef; - - /** Label of the step. */ - @Input() - label: string; - - /** Whether the step is optional or not. */ - @Input() optional: boolean = false; - - /** Whether the step is editable or not. */ - @Input() editable: boolean = true; - - /** Whether the step is the last one in the list. */ - isLast: boolean = false; - - // /** Whether the step is active. */ - // get active() { return this._active; } - // set active(value: boolean) { - // this._active = value; - // } - // private _active: boolean = false; - - /** Whether the step has been selected. */ - get selected(): boolean { return this._selected; } - set selected(value: boolean) { - this._selected = value; - } - private _selected: boolean = false; - - /** Whether the step has been completed. */ - get completed() { return this._completed; } - set completed(value: boolean) { - this._completed = value; - } - private _completed: boolean = false; + @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel; + @ViewChild(TemplateRef) content: TemplateRef; + + /** Label of the step. */ + @Input() + label: string; + + /** Whether the step is optional or not. */ + @Input() optional: boolean = false; + + /** Whether the step is editable or not. */ + @Input() editable: boolean = true; + + /** Whether the step is the last one in the list. */ + isLast: boolean = false; + + // /** Whether the step is active. */ + // get active() { return this._active; } + // set active(value: boolean) { + // this._active = value; + // } + // private _active: boolean = false; + + /** Whether the step has been selected. */ + get selected(): boolean { return this._selected; } + set selected(value: boolean) { + this._selected = value; + } + private _selected: boolean = false; + + /** Whether the step has been completed. */ + get completed() { return this._completed; } + set completed(value: boolean) { + this._completed = value; + } + private _completed: boolean = false; } diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index e46caa5788b0..088e931e8469 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -7,8 +7,8 @@ */ import { - Component, ContentChildren, EventEmitter, Input, Output, QueryList, OnInit, - AfterViewChecked, AfterViewInit, Directive, ElementRef, ViewChild, ViewChildren + Component, ContentChildren, EventEmitter, Input, Output, QueryList, OnInit, + AfterViewChecked, AfterViewInit, Directive, ElementRef, ViewChild, ViewChildren } from '@angular/core'; import {CdkStep} from './step'; import {Observable} from 'rxjs/Observable'; @@ -20,134 +20,134 @@ let nextId = 0; /** Change event emitted on focus or selection changes. */ export class CdkStepEvent { - index: number; - step: CdkStep; + index: number; + step: CdkStep; } @Directive({ - selector: '[cdkStepper]', - host: { - '(keydown)': '_onKeydown($event)' - }, + selector: '[cdkStepper]', + host: { + '(keydown)': '_onKeydown($event)' + }, }) export class CdkStepper { - @ContentChildren(CdkStep) _steps: QueryList; - - @ViewChildren('stepHeader') _stepHeader: QueryList; - - /** The index of the currently selected step. */ - @Input() - set selectedIndex(value: number) { - this._selectedIndex = value; - } - get selectedIndex(): number { return this._selectedIndex; } - private _selectedIndex: number; - - /** Optional input to support both linear and non-linear stepper component. */ - @Input() linear: boolean = true; - - /** Output to enable support for two-way binding on `[(selectedIndex)]` */ - @Output() get selectedIndexChange(): Observable { - return map.call(this.stepEvent, event => event.index); - } - - // @Output() get focusIndexChange(): Observable { - // return map.call(this.focusChange, event => event.index); - // } - - /** Event emitted when the selected step has changed. */ - @Output() stepEvent = new EventEmitter(); - - /** Event emitted when the focused step has changed. */ - @Output() focusChange = new EventEmitter(); - - /** The step that is currently selected. */ - get selectedStep(): CdkStep { - return this._steps.toArray()[this._selectedIndex]; - } - private _selectedStep: CdkStep; - - /** The index of the step that the focus is currently on. */ - get focusIndex(): number {return this._focusIndex; } - private _focusIndex: number = 0; - - private _groupId: number; - - constructor() { - this._groupId = nextId++; - } - - /** Selects and focuses the provided step. */ - selectStep(step: CdkStep): void { - let stepsArray = this._steps.toArray(); - this._selectedIndex = stepsArray.indexOf(step); - this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); - this._focusIndex = this._selectedIndex; - this._setStepFocus(); - } - - /** Selects and focuses the next step in list. */ - nextStep(): void { - if (this._selectedIndex == this._steps.length - 1) { return; } - this._selectedIndex++; - this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); - this._focusIndex = this._selectedIndex; - this._setStepFocus(); - } - - /** Selects and focuses the previous step in list. */ - previousStep(): void { - if (this._selectedIndex == 0) { return; } - this._selectedIndex--; - this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); - this._focusIndex = this._selectedIndex; - this._setStepFocus(); - } - - /** Returns a unique id for each step label element. */ - _getStepLabelId(i: number): string { - return `mat-step-label-${this._groupId}-${i}`; - } - - /** Returns a unique id for each step content element. */ - _getStepContentId(i: number): string { - return `mat-step-content-${this._groupId}-${i}`; - } - - private _emitStepEvent(index: number): CdkStepEvent { - const event = new CdkStepEvent(); - event.index = index; - event.step = this._steps.toArray()[this._selectedIndex]; - this._selectedStep = event.step; - return event; - } - - _onKeydown(event: KeyboardEvent) { - switch (event.keyCode) { - case RIGHT_ARROW: - if (this._focusIndex != this._steps.length - 1) { - this._focusIndex++; - this._setStepFocus(); - } - break; - case LEFT_ARROW: - if (this._focusIndex != 0) { - this._focusIndex--; - this._setStepFocus(); - } - break; - case ENTER: - this._selectedIndex = this._focusIndex; - this._emitStepEvent(this._selectedIndex); - break; + @ContentChildren(CdkStep) _steps: QueryList; + + @ViewChildren('stepHeader') _stepHeader: QueryList; + + /** The index of the currently selected step. */ + @Input() + set selectedIndex(value: number) { + this._selectedIndex = value; + } + get selectedIndex(): number { return this._selectedIndex; } + private _selectedIndex: number; + + /** Optional input to support both linear and non-linear stepper component. */ + @Input() linear: boolean = true; + + /** Output to enable support for two-way binding on `[(selectedIndex)]` */ + @Output() get selectedIndexChange(): Observable { + return map.call(this.stepEvent, event => event.index); + } + + // @Output() get focusIndexChange(): Observable { + // return map.call(this.focusChange, event => event.index); + // } + + /** Event emitted when the selected step has changed. */ + @Output() stepEvent = new EventEmitter(); + + /** Event emitted when the focused step has changed. */ + @Output() focusChange = new EventEmitter(); + + /** The step that is currently selected. */ + get selectedStep(): CdkStep { + return this._steps.toArray()[this._selectedIndex]; + } + private _selectedStep: CdkStep; + + /** The index of the step that the focus is currently on. */ + get focusIndex(): number {return this._focusIndex; } + private _focusIndex: number = 0; + + private _groupId: number; + + constructor() { + this._groupId = nextId++; + } + + /** Selects and focuses the provided step. */ + selectStep(step: CdkStep): void { + let stepsArray = this._steps.toArray(); + this._selectedIndex = stepsArray.indexOf(step); + this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this._focusIndex = this._selectedIndex; + this._setStepFocus(); + } + + /** Selects and focuses the next step in list. */ + nextStep(): void { + if (this._selectedIndex == this._steps.length - 1) { return; } + this._selectedIndex++; + this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this._focusIndex = this._selectedIndex; + this._setStepFocus(); + } + + /** Selects and focuses the previous step in list. */ + previousStep(): void { + if (this._selectedIndex == 0) { return; } + this._selectedIndex--; + this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this._focusIndex = this._selectedIndex; + this._setStepFocus(); + } + + /** Returns a unique id for each step label element. */ + _getStepLabelId(i: number): string { + return `mat-step-label-${this._groupId}-${i}`; + } + + /** Returns a unique id for each step content element. */ + _getStepContentId(i: number): string { + return `mat-step-content-${this._groupId}-${i}`; + } + + private _emitStepEvent(index: number): CdkStepEvent { + const event = new CdkStepEvent(); + event.index = index; + event.step = this._steps.toArray()[this._selectedIndex]; + this._selectedStep = event.step; + return event; + } + + _onKeydown(event: KeyboardEvent) { + switch (event.keyCode) { + case RIGHT_ARROW: + if (this._focusIndex != this._steps.length - 1) { + this._focusIndex++; + this._setStepFocus(); } - if (event.keyCode != TAB) { - event.preventDefault(); + break; + case LEFT_ARROW: + if (this._focusIndex != 0) { + this._focusIndex--; + this._setStepFocus(); } + break; + case ENTER: + this._selectedIndex = this._focusIndex; + this._emitStepEvent(this._selectedIndex); + break; } - - _setStepFocus() { - this._stepHeader.toArray()[this._focusIndex].nativeElement.focus(); - this.focusChange.emit(this._emitStepEvent(this._selectedIndex)); + if (event.keyCode != TAB) { + event.preventDefault(); } + } + + _setStepFocus() { + this._stepHeader.toArray()[this._focusIndex].nativeElement.focus(); + this.focusChange.emit(this._emitStepEvent(this._selectedIndex)); + } } diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index c0b76251ba4a..49f111e28257 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -5,4 +5,4 @@

Horizontal Stepper Demo

- \ No newline at end of file + diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index 64ccdf5674c8..df1eb3b0c0bb 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -1,19 +1,19 @@ import {Component} from '@angular/core'; @Component({ - moduleId: module.id, - selector: 'stepper-demo', - templateUrl: 'stepper-demo.html', - styleUrls: ['stepper-demo.scss'], + moduleId: module.id, + selector: 'stepper-demo', + templateUrl: 'stepper-demo.html', + styleUrls: ['stepper-demo.scss'], }) export class StepperDemo { - verticalActiveIndex = 0; - horizontalActiveIndex = 0; - labelTemplateIndex = 0; - steps = [ - {label: 'Confirm your name', content: 'Last name, First name.'}, - {label: 'Confirm your contact information', content: '123-456-7890'}, - {label: 'Confirm your address', content: '1600 Amphitheater Pkwy MTV'}, - {label: 'You are now done', content: 'Finished!'} - ]; + verticalActiveIndex = 0; + horizontalActiveIndex = 0; + labelTemplateIndex = 0; + steps = [ + {label: 'Confirm your name', content: 'Last name, First name.'}, + {label: 'Confirm your contact information', content: '123-456-7890'}, + {label: 'Confirm your address', content: '1600 Amphitheater Pkwy MTV'}, + {label: 'You are now done', content: 'Finished!'} + ]; } diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts index 9fbc3eca844c..46c1be55e1da 100644 --- a/src/lib/stepper/index.ts +++ b/src/lib/stepper/index.ts @@ -17,9 +17,9 @@ import {CdkStepperModule} from '@angular/cdk'; import {MdCommonModule} from '../core'; import {MdStepLabel} from './step-label'; @NgModule({ - imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule, CdkStepperModule], - exports: [MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel], - declarations: [MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel] + imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule, CdkStepperModule], + exports: [MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel], + declarations: [MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel] }) export class MdStepperModule {} diff --git a/src/lib/stepper/step-label.ts b/src/lib/stepper/step-label.ts index 6e26a6319ffe..861e2950db97 100644 --- a/src/lib/stepper/step-label.ts +++ b/src/lib/stepper/step-label.ts @@ -9,10 +9,10 @@ import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; import {CdkStepLabel} from '@angular/cdk'; @Directive({ - selector: '[md-step-label], [mat-step-label]', + selector: '[md-step-label], [mat-step-label]', }) export class MdStepLabel extends CdkStepLabel { - constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { - super(templateRef, viewContainerRef); - } + constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { + super(templateRef, viewContainerRef); + } } diff --git a/src/lib/stepper/step.html b/src/lib/stepper/step.html index fa114df35d01..cd48c06b9917 100644 --- a/src/lib/stepper/step.html +++ b/src/lib/stepper/step.html @@ -1 +1 @@ - \ No newline at end of file + diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 1d35d4dc176c..3f3d75929703 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -10,15 +10,15 @@ import {Component, ContentChild, TemplateRef, ViewChild} from '@angular/core'; import {CdkStep} from '@angular/cdk'; import {MdStepLabel} from './step-label'; @Component({ - moduleId: module.id, - selector: 'md-step, mat-step', - templateUrl: 'step.html', - inputs: ['label'], + moduleId: module.id, + selector: 'md-step, mat-step', + templateUrl: 'step.html', + inputs: ['label'], }) export class MdStep extends CdkStep { - /** Content for the step label given by . */ - @ContentChild(MdStepLabel) stepLabel: MdStepLabel; + /** Content for the step label given by . */ + @ContentChild(MdStepLabel) stepLabel: MdStepLabel; - /** Template inside the MdStep view that contains an . */ - @ViewChild(TemplateRef) content: TemplateRef; + /** Template inside the MdStep view that contains an . */ + @ViewChild(TemplateRef) content: TemplateRef; } diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index 2b7737d0b59d..6dc049052523 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -35,4 +35,4 @@
-
\ No newline at end of file +
diff --git a/src/lib/stepper/stepper-horizontal.ts b/src/lib/stepper/stepper-horizontal.ts index 1645d64ed758..3d18a02ee983 100644 --- a/src/lib/stepper/stepper-horizontal.ts +++ b/src/lib/stepper/stepper-horizontal.ts @@ -10,12 +10,12 @@ import {Component, ContentChildren, QueryList} from '@angular/core'; import {MdStep} from './step'; import {CdkStepper} from '@angular/cdk'; @Component({ - moduleId: module.id, - selector: 'md-horizontal-stepper, mat-horizontal-stepper', - templateUrl: 'stepper-horizontal.html', - styleUrls: ['stepper.scss'], - inputs: ['selectedIndex'], + moduleId: module.id, + selector: 'md-horizontal-stepper, mat-horizontal-stepper', + templateUrl: 'stepper-horizontal.html', + styleUrls: ['stepper.scss'], + inputs: ['selectedIndex'], }) export class MdHorizontalStepper extends CdkStepper { - @ContentChildren(MdStep) _steps: QueryList; -} + @ContentChildren(MdStep) _steps: QueryList; +} \ No newline at end of file diff --git a/src/lib/stepper/stepper-vertical.html b/src/lib/stepper/stepper-vertical.html index a40aaaf87535..992d8cb77289 100644 --- a/src/lib/stepper/stepper-vertical.html +++ b/src/lib/stepper/stepper-vertical.html @@ -35,4 +35,4 @@
-
\ No newline at end of file +
diff --git a/src/lib/stepper/stepper-vertical.ts b/src/lib/stepper/stepper-vertical.ts index c91061957cfb..a5f7757c27a9 100644 --- a/src/lib/stepper/stepper-vertical.ts +++ b/src/lib/stepper/stepper-vertical.ts @@ -10,12 +10,12 @@ import {Component, ContentChildren, QueryList} from '@angular/core'; import {MdStep} from './step'; import {CdkStepper} from '@angular/cdk'; @Component({ - moduleId: module.id, - selector: 'md-vertical-stepper, mat-vertical-stepper', - templateUrl: 'stepper-vertical.html', - styleUrls: ['stepper.scss'], - inputs: ['selectedIndex'], + moduleId: module.id, + selector: 'md-vertical-stepper, mat-vertical-stepper', + templateUrl: 'stepper-vertical.html', + styleUrls: ['stepper.scss'], + inputs: ['selectedIndex'], }) export class MdVerticalStepper extends CdkStepper { - @ContentChildren(MdStep) _steps: QueryList; + @ContentChildren(MdStep) _steps: QueryList; } diff --git a/src/lib/stepper/stepper.scss b/src/lib/stepper/stepper.scss index 255fea2270a2..eaae8cca66d6 100644 --- a/src/lib/stepper/stepper.scss +++ b/src/lib/stepper/stepper.scss @@ -17,4 +17,3 @@ .mat-step-label { display: inline-block; } - From 36ad2ccd311b07816374761c3a6279623287f0ae Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Thu, 13 Jul 2017 17:28:23 -0700 Subject: [PATCH 23/29] Changes made based on the review --- src/cdk/stepper/index.ts | 1 + src/cdk/stepper/step-label.ts | 1 + src/cdk/stepper/step.ts | 44 ++++++-------- src/cdk/stepper/stepper.ts | 78 ++++++++++--------------- src/lib/stepper/index.ts | 1 + src/lib/stepper/step-label.ts | 1 + src/lib/stepper/step.ts | 1 + src/lib/stepper/stepper-horizontal.html | 10 ++-- src/lib/stepper/stepper-horizontal.ts | 3 +- src/lib/stepper/stepper-vertical.html | 13 ++--- src/lib/stepper/stepper-vertical.ts | 1 + 11 files changed, 69 insertions(+), 85 deletions(-) diff --git a/src/cdk/stepper/index.ts b/src/cdk/stepper/index.ts index d215f193f379..b2f6280f9a10 100644 --- a/src/cdk/stepper/index.ts +++ b/src/cdk/stepper/index.ts @@ -12,6 +12,7 @@ import {CommonModule} from '@angular/common'; import {CdkStep} from './step'; import {CdkStepLabel} from './step-label'; import {PortalModule} from '../portal'; + @NgModule({ imports: [CommonModule, PortalModule], exports: [CdkStep, CdkStepper, CdkStepLabel], diff --git a/src/cdk/stepper/step-label.ts b/src/cdk/stepper/step-label.ts index ffb8e276a11d..9a072319c56f 100644 --- a/src/cdk/stepper/step-label.ts +++ b/src/cdk/stepper/step-label.ts @@ -8,6 +8,7 @@ import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; import {TemplatePortalDirective} from '../portal'; + @Directive({ selector: '[cdk-step-label]', }) diff --git a/src/cdk/stepper/step.ts b/src/cdk/stepper/step.ts index 7ae6cf88c68f..590d950272ac 100644 --- a/src/cdk/stepper/step.ts +++ b/src/cdk/stepper/step.ts @@ -7,17 +7,20 @@ */ import { - Component, ContentChild, Directive, Input, OnInit, TemplateRef, ViewChild, - ViewContainerRef + Component, ContentChild, Input, TemplateRef, ViewChild } from '@angular/core'; import {CdkStepLabel} from './step-label'; +import {coerceBooleanProperty} from '../coercion/boolean-property'; @Component({ selector: '[cdk-step]', templateUrl: 'step.html', }) export class CdkStep { + /** Template for step label if it exists. */ @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel; + + /** Template for step content. */ @ViewChild(TemplateRef) content: TemplateRef; /** Label of the step. */ @@ -25,32 +28,21 @@ export class CdkStep { label: string; /** Whether the step is optional or not. */ - @Input() optional: boolean = false; + @Input() + get optional() { return this._optional; } + set optional(value: any) { + this._optional = coerceBooleanProperty(value); + } + private _optional: boolean = false; /** Whether the step is editable or not. */ - @Input() editable: boolean = true; - - /** Whether the step is the last one in the list. */ - isLast: boolean = false; - - // /** Whether the step is active. */ - // get active() { return this._active; } - // set active(value: boolean) { - // this._active = value; - // } - // private _active: boolean = false; - - /** Whether the step has been selected. */ - get selected(): boolean { return this._selected; } - set selected(value: boolean) { - this._selected = value; + @Input() + get editable() { return this._editable; } + set editable(value: any) { + this._editable = coerceBooleanProperty(value); } - private _selected: boolean = false; + private _editable: boolean = true; - /** Whether the step has been completed. */ - get completed() { return this._completed; } - set completed(value: boolean) { - this._completed = value; - } - private _completed: boolean = false; + /** Whether the step is the last one in the list. */ + _isLast: boolean = false; } diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index 088e931e8469..35fddefe4113 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -7,19 +7,26 @@ */ import { - Component, ContentChildren, EventEmitter, Input, Output, QueryList, OnInit, - AfterViewChecked, AfterViewInit, Directive, ElementRef, ViewChild, ViewChildren + ContentChildren, + EventEmitter, + Input, + Output, + QueryList, + Directive, + ViewChildren, + // tslint doesn't recognize `ElementRef` is used since it's only used as a generic. + // tslint:disable-next-line + ElementRef } from '@angular/core'; import {CdkStep} from './step'; -import {Observable} from 'rxjs/Observable'; -import {map} from 'rxjs/operator/map'; import {LEFT_ARROW, RIGHT_ARROW, ENTER, TAB} from '../keyboard/keycodes'; +import {coerceNumberProperty} from '../coercion/number-property'; /** Used to generate unique ID for each stepper component. */ let nextId = 0; -/** Change event emitted on focus or selection changes. */ -export class CdkStepEvent { +/** Change event emitted on selection changes. */ +export class CdkStepperSelectionEvent { index: number; step: CdkStep; } @@ -27,49 +34,30 @@ export class CdkStepEvent { @Directive({ selector: '[cdkStepper]', host: { - '(keydown)': '_onKeydown($event)' + '(focus)': '_setStepfocus()', + '(keydown)': '_onKeydown($event)', }, }) export class CdkStepper { + /** The list of step components that the stepper is holding. */ @ContentChildren(CdkStep) _steps: QueryList; + /** The list of step headers of the steps in the stepper. */ @ViewChildren('stepHeader') _stepHeader: QueryList; /** The index of the currently selected step. */ @Input() - set selectedIndex(value: number) { - this._selectedIndex = value; + get selectedIndex() { return this._selectedIndex; } + set selectedIndex(value: any) { + this._selectedIndex = coerceNumberProperty(value); } - get selectedIndex(): number { return this._selectedIndex; } private _selectedIndex: number; - /** Optional input to support both linear and non-linear stepper component. */ - @Input() linear: boolean = true; - - /** Output to enable support for two-way binding on `[(selectedIndex)]` */ - @Output() get selectedIndexChange(): Observable { - return map.call(this.stepEvent, event => event.index); - } - - // @Output() get focusIndexChange(): Observable { - // return map.call(this.focusChange, event => event.index); - // } - /** Event emitted when the selected step has changed. */ - @Output() stepEvent = new EventEmitter(); - - /** Event emitted when the focused step has changed. */ - @Output() focusChange = new EventEmitter(); - - /** The step that is currently selected. */ - get selectedStep(): CdkStep { - return this._steps.toArray()[this._selectedIndex]; - } - private _selectedStep: CdkStep; + @Output() selectionChange = new EventEmitter(); /** The index of the step that the focus is currently on. */ - get focusIndex(): number {return this._focusIndex; } - private _focusIndex: number = 0; + _focusIndex: number = 0; private _groupId: number; @@ -78,28 +66,28 @@ export class CdkStepper { } /** Selects and focuses the provided step. */ - selectStep(step: CdkStep): void { + select(step: CdkStep): void { let stepsArray = this._steps.toArray(); this._selectedIndex = stepsArray.indexOf(step); - this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this.selectionChange.emit(this._createStepperSelectionEvent(this._selectedIndex)); this._focusIndex = this._selectedIndex; this._setStepFocus(); } /** Selects and focuses the next step in list. */ - nextStep(): void { + next(): void { if (this._selectedIndex == this._steps.length - 1) { return; } this._selectedIndex++; - this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this.selectionChange.emit(this._createStepperSelectionEvent(this._selectedIndex)); this._focusIndex = this._selectedIndex; this._setStepFocus(); } /** Selects and focuses the previous step in list. */ - previousStep(): void { + previous(): void { if (this._selectedIndex == 0) { return; } this._selectedIndex--; - this.stepEvent.emit(this._emitStepEvent(this._selectedIndex)); + this.selectionChange.emit(this._createStepperSelectionEvent(this._selectedIndex)); this._focusIndex = this._selectedIndex; this._setStepFocus(); } @@ -114,11 +102,10 @@ export class CdkStepper { return `mat-step-content-${this._groupId}-${i}`; } - private _emitStepEvent(index: number): CdkStepEvent { - const event = new CdkStepEvent(); + private _createStepperSelectionEvent(index: number): CdkStepperSelectionEvent { + const event = new CdkStepperSelectionEvent(); event.index = index; event.step = this._steps.toArray()[this._selectedIndex]; - this._selectedStep = event.step; return event; } @@ -138,7 +125,7 @@ export class CdkStepper { break; case ENTER: this._selectedIndex = this._focusIndex; - this._emitStepEvent(this._selectedIndex); + this._createStepperSelectionEvent(this._selectedIndex); break; } if (event.keyCode != TAB) { @@ -146,8 +133,7 @@ export class CdkStepper { } } - _setStepFocus() { + private _setStepFocus() { this._stepHeader.toArray()[this._focusIndex].nativeElement.focus(); - this.focusChange.emit(this._emitStepEvent(this._selectedIndex)); } } diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts index 46c1be55e1da..23d5d3e8f192 100644 --- a/src/lib/stepper/index.ts +++ b/src/lib/stepper/index.ts @@ -16,6 +16,7 @@ import {MdStep} from './step'; import {CdkStepperModule} from '@angular/cdk'; import {MdCommonModule} from '../core'; import {MdStepLabel} from './step-label'; + @NgModule({ imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule, CdkStepperModule], exports: [MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel], diff --git a/src/lib/stepper/step-label.ts b/src/lib/stepper/step-label.ts index 861e2950db97..a8feb27f02e2 100644 --- a/src/lib/stepper/step-label.ts +++ b/src/lib/stepper/step-label.ts @@ -8,6 +8,7 @@ import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; import {CdkStepLabel} from '@angular/cdk'; + @Directive({ selector: '[md-step-label], [mat-step-label]', }) diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 3f3d75929703..37cb5ee592ed 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -9,6 +9,7 @@ import {Component, ContentChild, TemplateRef, ViewChild} from '@angular/core'; import {CdkStep} from '@angular/cdk'; import {MdStepLabel} from './step-label'; + @Component({ moduleId: module.id, selector: 'md-step, mat-step', diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index 6dc049052523..c68d097dbcd9 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -4,8 +4,8 @@ [id]="_getStepLabelId(i)" [attr.aria-controls]="_getStepContentId(i)" [attr.aria-selected]="selectedIndex == i" - [tabIndex]="focusIndex == i ? 0 : -1" - (click)="selectStep(step)" + [tabIndex]="_focusIndex == i ? 0 : -1" + (click)="select(step)" (keydown)="_onKeydown($event)">
{{i + 1}}
{{i + 1}}
@@ -22,7 +22,7 @@
-
+
- - + +
diff --git a/src/lib/stepper/stepper-horizontal.ts b/src/lib/stepper/stepper-horizontal.ts index 3d18a02ee983..bd815cd232b1 100644 --- a/src/lib/stepper/stepper-horizontal.ts +++ b/src/lib/stepper/stepper-horizontal.ts @@ -9,6 +9,7 @@ import {Component, ContentChildren, QueryList} from '@angular/core'; import {MdStep} from './step'; import {CdkStepper} from '@angular/cdk'; + @Component({ moduleId: module.id, selector: 'md-horizontal-stepper, mat-horizontal-stepper', @@ -18,4 +19,4 @@ import {CdkStepper} from '@angular/cdk'; }) export class MdHorizontalStepper extends CdkStepper { @ContentChildren(MdStep) _steps: QueryList; -} \ No newline at end of file +} diff --git a/src/lib/stepper/stepper-vertical.html b/src/lib/stepper/stepper-vertical.html index 992d8cb77289..cfacbc15da63 100644 --- a/src/lib/stepper/stepper-vertical.html +++ b/src/lib/stepper/stepper-vertical.html @@ -4,8 +4,8 @@ [id]="_getStepLabelId(i)" [attr.aria-controls]="_getStepContentId(i)" [attr.aria-selected]="selectedIndex == i" - [tabIndex]="focusIndex == i ? 0 : -1" - (click)="selectStep(step)" + [tabIndex]="_focusIndex == i ? 0 : -1" + (click)="select(step)" (keydown)="_onKeydown($event)">
{{i + 1}}
{{i + 1}}
@@ -22,17 +22,16 @@ -
+
-
- - - +
+ +
diff --git a/src/lib/stepper/stepper-vertical.ts b/src/lib/stepper/stepper-vertical.ts index a5f7757c27a9..a4b4b08b2d30 100644 --- a/src/lib/stepper/stepper-vertical.ts +++ b/src/lib/stepper/stepper-vertical.ts @@ -9,6 +9,7 @@ import {Component, ContentChildren, QueryList} from '@angular/core'; import {MdStep} from './step'; import {CdkStepper} from '@angular/cdk'; + @Component({ moduleId: module.id, selector: 'md-vertical-stepper, mat-vertical-stepper', From 836c0ac9826d53b10ed0be79ddfe80076b1b84da Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Fri, 14 Jul 2017 17:54:35 -0700 Subject: [PATCH 24/29] Changes based on review - event properties, selectors, SPACE support, etc. + demo --- src/cdk/stepper/step-label.ts | 9 ++-- src/cdk/stepper/step.ts | 19 +------ src/cdk/stepper/stepper.ts | 69 ++++++++++++++----------- src/demo-app/demo-app/demo-app.ts | 4 +- src/demo-app/stepper/stepper-demo.html | 29 +++++++++-- src/lib/stepper/step-label.ts | 6 +-- src/lib/stepper/step.ts | 1 - src/lib/stepper/stepper-horizontal.html | 4 +- src/lib/stepper/stepper-vertical.html | 4 +- src/lib/stepper/stepper.scss | 8 --- 10 files changed, 76 insertions(+), 77 deletions(-) diff --git a/src/cdk/stepper/step-label.ts b/src/cdk/stepper/step-label.ts index 9a072319c56f..7813fe0e9a43 100644 --- a/src/cdk/stepper/step-label.ts +++ b/src/cdk/stepper/step-label.ts @@ -6,14 +6,11 @@ * found in the LICENSE file at https://angular.io/license */ -import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; -import {TemplatePortalDirective} from '../portal'; +import {Directive, TemplateRef} from '@angular/core'; @Directive({ selector: '[cdk-step-label]', }) -export class CdkStepLabel extends TemplatePortalDirective { - constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { - super(templateRef, viewContainerRef); - } +export class CdkStepLabel { + constructor(public template: TemplateRef) { } } diff --git a/src/cdk/stepper/step.ts b/src/cdk/stepper/step.ts index 590d950272ac..56fa154eb4d3 100644 --- a/src/cdk/stepper/step.ts +++ b/src/cdk/stepper/step.ts @@ -10,10 +10,9 @@ import { Component, ContentChild, Input, TemplateRef, ViewChild } from '@angular/core'; import {CdkStepLabel} from './step-label'; -import {coerceBooleanProperty} from '../coercion/boolean-property'; @Component({ - selector: '[cdk-step]', + selector: 'cdk-step', templateUrl: 'step.html', }) export class CdkStep { @@ -27,22 +26,6 @@ export class CdkStep { @Input() label: string; - /** Whether the step is optional or not. */ - @Input() - get optional() { return this._optional; } - set optional(value: any) { - this._optional = coerceBooleanProperty(value); - } - private _optional: boolean = false; - - /** Whether the step is editable or not. */ - @Input() - get editable() { return this._editable; } - set editable(value: any) { - this._editable = coerceBooleanProperty(value); - } - private _editable: boolean = true; - /** Whether the step is the last one in the list. */ _isLast: boolean = false; } diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index 35fddefe4113..fb180c32dd37 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -19,7 +19,7 @@ import { ElementRef } from '@angular/core'; import {CdkStep} from './step'; -import {LEFT_ARROW, RIGHT_ARROW, ENTER, TAB} from '../keyboard/keycodes'; +import {LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE} from '../keyboard/keycodes'; import {coerceNumberProperty} from '../coercion/number-property'; /** Used to generate unique ID for each stepper component. */ @@ -27,14 +27,20 @@ let nextId = 0; /** Change event emitted on selection changes. */ export class CdkStepperSelectionEvent { - index: number; + /** The index of the step that is newly selected during this change event. */ + newIndex: number; + + /** The index of the step that was previously selected. */ + oldIndex: number; + + /** The step component that is selected ruing this change event. */ step: CdkStep; } @Directive({ - selector: '[cdkStepper]', + selector: 'cdk-stepper', host: { - '(focus)': '_setStepfocus()', + '(focus)': '_setStepfocused()', '(keydown)': '_onKeydown($event)', }, }) @@ -66,30 +72,31 @@ export class CdkStepper { } /** Selects and focuses the provided step. */ - select(step: CdkStep): void { - let stepsArray = this._steps.toArray(); - this._selectedIndex = stepsArray.indexOf(step); - this.selectionChange.emit(this._createStepperSelectionEvent(this._selectedIndex)); - this._focusIndex = this._selectedIndex; - this._setStepFocus(); + select(step: CdkStep | number): void { + if (typeof step == 'number') { + this.selectionChange.emit(this._createStepperSelectionEvent(step, this._selectedIndex)); + } else { + let stepsArray = this._steps.toArray(); + this.selectionChange.emit( + this._createStepperSelectionEvent(stepsArray.indexOf(step), this._selectedIndex)); + } + this._setStepFocused(this._selectedIndex); } /** Selects and focuses the next step in list. */ next(): void { if (this._selectedIndex == this._steps.length - 1) { return; } - this._selectedIndex++; - this.selectionChange.emit(this._createStepperSelectionEvent(this._selectedIndex)); - this._focusIndex = this._selectedIndex; - this._setStepFocus(); + this.selectionChange.emit( + this._createStepperSelectionEvent(this._selectedIndex + 1, this._selectedIndex)); + this._setStepFocused(this._selectedIndex); } /** Selects and focuses the previous step in list. */ previous(): void { if (this._selectedIndex == 0) { return; } - this._selectedIndex--; - this.selectionChange.emit(this._createStepperSelectionEvent(this._selectedIndex)); - this._focusIndex = this._selectedIndex; - this._setStepFocus(); + this.selectionChange.emit( + this._createStepperSelectionEvent(this._selectedIndex - 1, this._selectedIndex)); + this._setStepFocused(this._selectedIndex); } /** Returns a unique id for each step label element. */ @@ -102,9 +109,12 @@ export class CdkStepper { return `mat-step-content-${this._groupId}-${i}`; } - private _createStepperSelectionEvent(index: number): CdkStepperSelectionEvent { + private _createStepperSelectionEvent(newIndex: number, + oldIndex: number): CdkStepperSelectionEvent { + this._selectedIndex = newIndex; const event = new CdkStepperSelectionEvent(); - event.index = index; + event.newIndex = newIndex; + event.oldIndex = oldIndex; event.step = this._steps.toArray()[this._selectedIndex]; return event; } @@ -113,27 +123,26 @@ export class CdkStepper { switch (event.keyCode) { case RIGHT_ARROW: if (this._focusIndex != this._steps.length - 1) { - this._focusIndex++; - this._setStepFocus(); + this._setStepFocused(this._focusIndex + 1); } break; case LEFT_ARROW: if (this._focusIndex != 0) { - this._focusIndex--; - this._setStepFocus(); + this._setStepFocused(this._focusIndex - 1); } break; + case SPACE: case ENTER: - this._selectedIndex = this._focusIndex; - this._createStepperSelectionEvent(this._selectedIndex); + this._createStepperSelectionEvent(this._focusIndex, this._selectedIndex); break; + default: + return; } - if (event.keyCode != TAB) { - event.preventDefault(); - } + event.preventDefault(); } - private _setStepFocus() { + private _setStepFocused(index: number) { + this._focusIndex = index; this._stepHeader.toArray()[this._focusIndex].nativeElement.focus(); } } diff --git a/src/demo-app/demo-app/demo-app.ts b/src/demo-app/demo-app/demo-app.ts index 41099f28f884..ff0268d7a637 100644 --- a/src/demo-app/demo-app/demo-app.ts +++ b/src/demo-app/demo-app/demo-app.ts @@ -61,14 +61,14 @@ export class DemoApp { {name: 'Slider', route: 'slider'}, {name: 'Slide Toggle', route: 'slide-toggle'}, {name: 'Snack Bar', route: 'snack-bar'}, + {name: 'Stepper', route: 'stepper'}, {name: 'Table', route: 'table'}, {name: 'Tabs', route: 'tabs'}, {name: 'Toolbar', route: 'toolbar'}, {name: 'Tooltip', route: 'tooltip'}, {name: 'Platform', route: 'platform'}, {name: 'Style', route: 'style'}, - {name: 'Typography', route: 'typography'}, - {name: 'Stepper', route: 'stepper'} + {name: 'Typography', route: 'typography'} ]; constructor(private _element: ElementRef) { diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 49f111e28257..2c97ff94013a 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,8 +1,27 @@

Horizontal Stepper Demo

- - - - - + + + + + + +

Horizontal Stepper Demo with Templated Label

+ + + {{step.label}} + + + + + + +

Vertical Stepper Demo

+ + + + + + + diff --git a/src/lib/stepper/step-label.ts b/src/lib/stepper/step-label.ts index a8feb27f02e2..8aae79962738 100644 --- a/src/lib/stepper/step-label.ts +++ b/src/lib/stepper/step-label.ts @@ -6,14 +6,14 @@ * found in the LICENSE file at https://angular.io/license */ -import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; +import {Directive, TemplateRef} from '@angular/core'; import {CdkStepLabel} from '@angular/cdk'; @Directive({ selector: '[md-step-label], [mat-step-label]', }) export class MdStepLabel extends CdkStepLabel { - constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef) { - super(templateRef, viewContainerRef); + constructor(public template: TemplateRef) { + super(template); } } diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index 37cb5ee592ed..b9b6f30e3394 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -14,7 +14,6 @@ import {MdStepLabel} from './step-label'; moduleId: module.id, selector: 'md-step, mat-step', templateUrl: 'step.html', - inputs: ['label'], }) export class MdStep extends CdkStep { /** Content for the step label given by . */ diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index c68d097dbcd9..3d83f60a16bd 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -13,7 +13,7 @@
- + @@ -21,7 +21,7 @@
- +
diff --git a/src/lib/stepper/stepper-vertical.html b/src/lib/stepper/stepper-vertical.html index cfacbc15da63..9a03495cdd99 100644 --- a/src/lib/stepper/stepper-vertical.html +++ b/src/lib/stepper/stepper-vertical.html @@ -7,8 +7,8 @@ [tabIndex]="_focusIndex == i ? 0 : -1" (click)="select(step)" (keydown)="_onKeydown($event)"> -
{{i + 1}}
-
{{i + 1}}
+
{{i + 1}}
+
{{i + 1}}
diff --git a/src/lib/stepper/stepper.scss b/src/lib/stepper/stepper.scss index eaae8cca66d6..56b1fdaa8f14 100644 --- a/src/lib/stepper/stepper.scss +++ b/src/lib/stepper/stepper.scss @@ -1,15 +1,7 @@ -.mat-step-header:focus { - background: yellow; -} - .mat-stepper-horizontal[aria-expanded='false'] { display:none; } -.mat-stepper-horizontal[aria-expanded='true'] { - background: pink; -} - .active-step, .inactive-step { display: inline-block; } From 78c9eb587d2e9f449803f2b3c4be5af5028c3018 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Tue, 18 Jul 2017 14:18:28 -0700 Subject: [PATCH 25/29] Add select() for step component + refactor to avoid circular dependency + support cycling using arrow keys --- src/cdk/stepper/index.ts | 4 +- src/cdk/stepper/step-label.ts | 2 +- src/cdk/stepper/step.ts | 31 ----------- src/cdk/stepper/stepper.ts | 72 +++++++++++++++++-------- src/lib/stepper/index.ts | 6 ++- src/lib/stepper/step-label.ts | 2 +- src/lib/stepper/step.ts | 5 ++ src/lib/stepper/stepper-horizontal.html | 60 ++++++++++----------- src/lib/stepper/stepper-horizontal.ts | 8 +-- src/lib/stepper/stepper-vertical.html | 63 +++++++++++----------- src/lib/stepper/stepper-vertical.ts | 8 +-- src/lib/stepper/stepper.ts | 11 ++++ 12 files changed, 145 insertions(+), 127 deletions(-) delete mode 100644 src/cdk/stepper/step.ts create mode 100644 src/lib/stepper/stepper.ts diff --git a/src/cdk/stepper/index.ts b/src/cdk/stepper/index.ts index b2f6280f9a10..bdd9be010147 100644 --- a/src/cdk/stepper/index.ts +++ b/src/cdk/stepper/index.ts @@ -7,9 +7,8 @@ */ import {NgModule} from '@angular/core'; -import {CdkStepper} from './stepper'; +import {CdkStepper, CdkStep} from './stepper'; import {CommonModule} from '@angular/common'; -import {CdkStep} from './step'; import {CdkStepLabel} from './step-label'; import {PortalModule} from '../portal'; @@ -21,5 +20,4 @@ import {PortalModule} from '../portal'; export class CdkStepperModule {} export * from './stepper'; -export * from './step'; export * from './step-label'; diff --git a/src/cdk/stepper/step-label.ts b/src/cdk/stepper/step-label.ts index 7813fe0e9a43..fa8269881c2c 100644 --- a/src/cdk/stepper/step-label.ts +++ b/src/cdk/stepper/step-label.ts @@ -9,7 +9,7 @@ import {Directive, TemplateRef} from '@angular/core'; @Directive({ - selector: '[cdk-step-label]', + selector: 'cdkStepLabel', }) export class CdkStepLabel { constructor(public template: TemplateRef) { } diff --git a/src/cdk/stepper/step.ts b/src/cdk/stepper/step.ts deleted file mode 100644 index 56fa154eb4d3..000000000000 --- a/src/cdk/stepper/step.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import { - Component, ContentChild, Input, TemplateRef, ViewChild -} from '@angular/core'; -import {CdkStepLabel} from './step-label'; - -@Component({ - selector: 'cdk-step', - templateUrl: 'step.html', -}) -export class CdkStep { - /** Template for step label if it exists. */ - @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel; - - /** Template for step content. */ - @ViewChild(TemplateRef) content: TemplateRef; - - /** Label of the step. */ - @Input() - label: string; - - /** Whether the step is the last one in the list. */ - _isLast: boolean = false; -} diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index fb180c32dd37..ed93037f8575 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -14,13 +14,14 @@ import { QueryList, Directive, ViewChildren, - // tslint doesn't recognize `ElementRef` is used since it's only used as a generic. - // tslint:disable-next-line - ElementRef + // This import is only used to define a generic type. The current TypeScript version incorrectly + // considers such imports as unused (https://github.com/Microsoft/TypeScript/issues/14953) + // tslint:disable-next-line:no-unused-variable + ElementRef, Component, ContentChild, ViewChild, TemplateRef } from '@angular/core'; -import {CdkStep} from './step'; import {LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE} from '../keyboard/keycodes'; import {coerceNumberProperty} from '../coercion/number-property'; +import {CdkStepLabel} from './step-label'; /** Used to generate unique ID for each stepper component. */ let nextId = 0; @@ -33,12 +34,38 @@ export class CdkStepperSelectionEvent { /** The index of the step that was previously selected. */ oldIndex: number; - /** The step component that is selected ruing this change event. */ - step: CdkStep; + /** The new step component that is selected ruing this change event. */ + newStep: CdkStep; + + /** The step component that was previously selected. */ + oldStep: CdkStep; +} + +@Component({ + selector: 'cdk-step', + templateUrl: 'step.html', +}) +export class CdkStep { + /** Template for step label if it exists. */ + @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel; + + /** Template for step content. */ + @ViewChild(TemplateRef) content: TemplateRef; + + /** Label of the step. */ + @Input() + label: string; + + constructor(private _stepper: CdkStepper) { } + + /** Selects this step component. */ + select(): void { + this._stepper.select(this); + } } @Directive({ - selector: 'cdk-stepper', + selector: 'cdkStepper', host: { '(focus)': '_setStepfocused()', '(keydown)': '_onKeydown($event)', @@ -62,9 +89,10 @@ export class CdkStepper { /** Event emitted when the selected step has changed. */ @Output() selectionChange = new EventEmitter(); - /** The index of the step that the focus is currently on. */ + /** The index of the step that the focus can be set. */ _focusIndex: number = 0; + /** Used to track unique ID for each stepper component. */ private _groupId: number; constructor() { @@ -74,11 +102,10 @@ export class CdkStepper { /** Selects and focuses the provided step. */ select(step: CdkStep | number): void { if (typeof step == 'number') { - this.selectionChange.emit(this._createStepperSelectionEvent(step, this._selectedIndex)); + this._emitStepperSelectionEvent(step, this._selectedIndex); } else { let stepsArray = this._steps.toArray(); - this.selectionChange.emit( - this._createStepperSelectionEvent(stepsArray.indexOf(step), this._selectedIndex)); + this._emitStepperSelectionEvent(stepsArray.indexOf(step), this._selectedIndex); } this._setStepFocused(this._selectedIndex); } @@ -86,16 +113,14 @@ export class CdkStepper { /** Selects and focuses the next step in list. */ next(): void { if (this._selectedIndex == this._steps.length - 1) { return; } - this.selectionChange.emit( - this._createStepperSelectionEvent(this._selectedIndex + 1, this._selectedIndex)); + this._emitStepperSelectionEvent(this._selectedIndex + 1, this._selectedIndex); this._setStepFocused(this._selectedIndex); } /** Selects and focuses the previous step in list. */ previous(): void { if (this._selectedIndex == 0) { return; } - this.selectionChange.emit( - this._createStepperSelectionEvent(this._selectedIndex - 1, this._selectedIndex)); + this._emitStepperSelectionEvent(this._selectedIndex - 1, this._selectedIndex); this._setStepFocused(this._selectedIndex); } @@ -104,19 +129,20 @@ export class CdkStepper { return `mat-step-label-${this._groupId}-${i}`; } - /** Returns a unique id for each step content element. */ + /** Returns nique id for each step content element. */ _getStepContentId(i: number): string { return `mat-step-content-${this._groupId}-${i}`; } - private _createStepperSelectionEvent(newIndex: number, - oldIndex: number): CdkStepperSelectionEvent { + private _emitStepperSelectionEvent(newIndex: number, + oldIndex: number): void { this._selectedIndex = newIndex; const event = new CdkStepperSelectionEvent(); event.newIndex = newIndex; event.oldIndex = oldIndex; - event.step = this._steps.toArray()[this._selectedIndex]; - return event; + event.oldStep = this._steps.toArray()[oldIndex]; + event.newStep = this._steps.toArray()[this._selectedIndex]; + this.selectionChange.emit(event); } _onKeydown(event: KeyboardEvent) { @@ -124,16 +150,20 @@ export class CdkStepper { case RIGHT_ARROW: if (this._focusIndex != this._steps.length - 1) { this._setStepFocused(this._focusIndex + 1); + } else { + this._setStepFocused(0); } break; case LEFT_ARROW: if (this._focusIndex != 0) { this._setStepFocused(this._focusIndex - 1); + } else { + this._setStepFocused(this._steps.length - 1); } break; case SPACE: case ENTER: - this._createStepperSelectionEvent(this._focusIndex, this._selectedIndex); + this._emitStepperSelectionEvent(this._focusIndex, this._selectedIndex); break; default: return; diff --git a/src/lib/stepper/index.ts b/src/lib/stepper/index.ts index 23d5d3e8f192..a764b73d6f31 100644 --- a/src/lib/stepper/index.ts +++ b/src/lib/stepper/index.ts @@ -13,14 +13,15 @@ import {MdButtonModule} from '../button/index'; import {MdHorizontalStepper} from './stepper-horizontal'; import {MdVerticalStepper} from './stepper-vertical'; import {MdStep} from './step'; +import {MdStepper} from './stepper'; import {CdkStepperModule} from '@angular/cdk'; import {MdCommonModule} from '../core'; import {MdStepLabel} from './step-label'; @NgModule({ imports: [MdCommonModule, CommonModule, PortalModule, MdButtonModule, CdkStepperModule], - exports: [MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel], - declarations: [MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel] + exports: [MdCommonModule, MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel, MdStepper], + declarations: [MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel, MdStepper], }) export class MdStepperModule {} @@ -28,3 +29,4 @@ export * from './stepper-horizontal'; export * from './stepper-vertical'; export * from './step'; export * from './step-label'; +export * from './stepper'; diff --git a/src/lib/stepper/step-label.ts b/src/lib/stepper/step-label.ts index 8aae79962738..26bcf44e1c55 100644 --- a/src/lib/stepper/step-label.ts +++ b/src/lib/stepper/step-label.ts @@ -13,7 +13,7 @@ import {CdkStepLabel} from '@angular/cdk'; selector: '[md-step-label], [mat-step-label]', }) export class MdStepLabel extends CdkStepLabel { - constructor(public template: TemplateRef) { + constructor(template: TemplateRef) { super(template); } } diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index b9b6f30e3394..dcddf4f36db7 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -9,6 +9,7 @@ import {Component, ContentChild, TemplateRef, ViewChild} from '@angular/core'; import {CdkStep} from '@angular/cdk'; import {MdStepLabel} from './step-label'; +import {MdStepper} from './stepper'; @Component({ moduleId: module.id, @@ -21,4 +22,8 @@ export class MdStep extends CdkStep { /** Template inside the MdStep view that contains an . */ @ViewChild(TemplateRef) content: TemplateRef; + + constructor(mdStepper: MdStepper) { + super(mdStepper); + } } diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index 3d83f60a16bd..b9ff6371c10d 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -1,38 +1,38 @@
-
- diff --git a/src/lib/stepper/stepper-horizontal.ts b/src/lib/stepper/stepper-horizontal.ts index bd815cd232b1..7d4b13a9602e 100644 --- a/src/lib/stepper/stepper-horizontal.ts +++ b/src/lib/stepper/stepper-horizontal.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, ContentChildren, QueryList} from '@angular/core'; +import {Component, ContentChildren, forwardRef, QueryList} from '@angular/core'; import {MdStep} from './step'; -import {CdkStepper} from '@angular/cdk'; +import {MdStepper} from './stepper'; @Component({ moduleId: module.id, @@ -16,7 +16,9 @@ import {CdkStepper} from '@angular/cdk'; templateUrl: 'stepper-horizontal.html', styleUrls: ['stepper.scss'], inputs: ['selectedIndex'], + providers: [{ provide: MdStepper, useExisting: forwardRef(() => MdHorizontalStepper) }] }) -export class MdHorizontalStepper extends CdkStepper { +export class MdHorizontalStepper extends MdStepper { + /** Steps that the horizontal stepper holds. */ @ContentChildren(MdStep) _steps: QueryList; } diff --git a/src/lib/stepper/stepper-vertical.html b/src/lib/stepper/stepper-vertical.html index 9a03495cdd99..ef33cbef0fbc 100644 --- a/src/lib/stepper/stepper-vertical.html +++ b/src/lib/stepper/stepper-vertical.html @@ -1,37 +1,36 @@
-
-
diff --git a/src/lib/stepper/stepper-vertical.ts b/src/lib/stepper/stepper-vertical.ts index a4b4b08b2d30..d9ccbaf290c9 100644 --- a/src/lib/stepper/stepper-vertical.ts +++ b/src/lib/stepper/stepper-vertical.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, ContentChildren, QueryList} from '@angular/core'; +import {Component, ContentChildren, forwardRef, QueryList} from '@angular/core'; import {MdStep} from './step'; -import {CdkStepper} from '@angular/cdk'; +import {MdStepper} from './stepper'; @Component({ moduleId: module.id, @@ -16,7 +16,9 @@ import {CdkStepper} from '@angular/cdk'; templateUrl: 'stepper-vertical.html', styleUrls: ['stepper.scss'], inputs: ['selectedIndex'], + providers: [{ provide: MdStepper, useExisting: forwardRef(() => MdVerticalStepper) }] }) -export class MdVerticalStepper extends CdkStepper { +export class MdVerticalStepper extends MdStepper { + /** Steps that the vertical stepper holds. */ @ContentChildren(MdStep) _steps: QueryList; } diff --git a/src/lib/stepper/stepper.ts b/src/lib/stepper/stepper.ts new file mode 100644 index 000000000000..b13f0ac0a6ab --- /dev/null +++ b/src/lib/stepper/stepper.ts @@ -0,0 +1,11 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {CdkStepper} from '@angular/cdk'; + +export class MdStepper extends CdkStepper { } From 26f73f976ab478a9cac2f2ef0f1086a8a8ee4d36 Mon Sep 17 00:00:00 2001 From: Ji Won Shin Date: Wed, 19 Jul 2017 13:51:27 -0700 Subject: [PATCH 26/29] API change based on review --- src/cdk/stepper/stepper.ts | 74 +++++++++++-------------- src/demo-app/stepper/stepper-demo.html | 6 +- src/demo-app/stepper/stepper-demo.ts | 3 - src/lib/stepper/step.ts | 5 +- src/lib/stepper/stepper-horizontal.html | 65 +++++++++++----------- src/lib/stepper/stepper-horizontal.ts | 4 ++ src/lib/stepper/stepper-vertical.html | 59 ++++++++++---------- src/lib/stepper/stepper-vertical.ts | 4 ++ src/lib/stepper/stepper.scss | 8 +-- 9 files changed, 106 insertions(+), 122 deletions(-) diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index ed93037f8575..cd918b9252a2 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -17,10 +17,13 @@ import { // This import is only used to define a generic type. The current TypeScript version incorrectly // considers such imports as unused (https://github.com/Microsoft/TypeScript/issues/14953) // tslint:disable-next-line:no-unused-variable - ElementRef, Component, ContentChild, ViewChild, TemplateRef + ElementRef, + Component, + ContentChild, + ViewChild, + TemplateRef } from '@angular/core'; import {LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE} from '../keyboard/keycodes'; -import {coerceNumberProperty} from '../coercion/number-property'; import {CdkStepLabel} from './step-label'; /** Used to generate unique ID for each stepper component. */ @@ -60,12 +63,12 @@ export class CdkStep { /** Selects this step component. */ select(): void { - this._stepper.select(this); + this._stepper.selected = this; } } @Directive({ - selector: 'cdkStepper', + selector: 'cdk-stepper', host: { '(focus)': '_setStepfocused()', '(keydown)': '_onKeydown($event)', @@ -78,13 +81,22 @@ export class CdkStepper { /** The list of step headers of the steps in the stepper. */ @ViewChildren('stepHeader') _stepHeader: QueryList; - /** The index of the currently selected step. */ - @Input() + /** The index of the selected step. */ get selectedIndex() { return this._selectedIndex; } - set selectedIndex(value: any) { - this._selectedIndex = coerceNumberProperty(value); + set selectedIndex(index: number) { + if (this._selectedIndex == index) { return; } + this._emitStepperSelectionEvent(index); + this._setStepFocused(this._selectedIndex); + } + private _selectedIndex: number = 0; + + /** Returns the step that is selected. */ + get selected() { return this._steps[this.selectedIndex]; } + /** Sets selectedIndex as the index of the provided step. */ + set selected(step: CdkStep) { + let index = this._steps.toArray().indexOf(step); + this.selectedIndex = index; } - private _selectedIndex: number; /** Event emitted when the selected step has changed. */ @Output() selectionChange = new EventEmitter(); @@ -99,29 +111,16 @@ export class CdkStepper { this._groupId = nextId++; } - /** Selects and focuses the provided step. */ - select(step: CdkStep | number): void { - if (typeof step == 'number') { - this._emitStepperSelectionEvent(step, this._selectedIndex); - } else { - let stepsArray = this._steps.toArray(); - this._emitStepperSelectionEvent(stepsArray.indexOf(step), this._selectedIndex); - } - this._setStepFocused(this._selectedIndex); - } - /** Selects and focuses the next step in list. */ next(): void { if (this._selectedIndex == this._steps.length - 1) { return; } - this._emitStepperSelectionEvent(this._selectedIndex + 1, this._selectedIndex); - this._setStepFocused(this._selectedIndex); + this.selectedIndex++; } /** Selects and focuses the previous step in list. */ previous(): void { if (this._selectedIndex == 0) { return; } - this._emitStepperSelectionEvent(this._selectedIndex - 1, this._selectedIndex); - this._setStepFocused(this._selectedIndex); + this.selectedIndex--; } /** Returns a unique id for each step label element. */ @@ -134,38 +133,31 @@ export class CdkStepper { return `mat-step-content-${this._groupId}-${i}`; } - private _emitStepperSelectionEvent(newIndex: number, - oldIndex: number): void { - this._selectedIndex = newIndex; + private _emitStepperSelectionEvent(newIndex: number): void { const event = new CdkStepperSelectionEvent(); + event.oldIndex = this._selectedIndex; event.newIndex = newIndex; - event.oldIndex = oldIndex; - event.oldStep = this._steps.toArray()[oldIndex]; - event.newStep = this._steps.toArray()[this._selectedIndex]; + let stepsArray = this._steps.toArray(); + event.oldStep = stepsArray[this._selectedIndex]; + event.newStep = stepsArray[newIndex]; + this._selectedIndex = newIndex; this.selectionChange.emit(event); } _onKeydown(event: KeyboardEvent) { switch (event.keyCode) { case RIGHT_ARROW: - if (this._focusIndex != this._steps.length - 1) { - this._setStepFocused(this._focusIndex + 1); - } else { - this._setStepFocused(0); - } + this._setStepFocused((this._focusIndex + 1) % this._steps.length); break; case LEFT_ARROW: - if (this._focusIndex != 0) { - this._setStepFocused(this._focusIndex - 1); - } else { - this._setStepFocused(this._steps.length - 1); - } + this._setStepFocused((this._focusIndex + this._steps.length - 1) % this._steps.length); break; case SPACE: case ENTER: - this._emitStepperSelectionEvent(this._focusIndex, this._selectedIndex); + this._emitStepperSelectionEvent(this._focusIndex); break; default: + // Return to avoid calling preventDefault on keys that are not explicitly handled. return; } event.preventDefault(); diff --git a/src/demo-app/stepper/stepper-demo.html b/src/demo-app/stepper/stepper-demo.html index 2c97ff94013a..ab68e34e2624 100644 --- a/src/demo-app/stepper/stepper-demo.html +++ b/src/demo-app/stepper/stepper-demo.html @@ -1,5 +1,5 @@

Horizontal Stepper Demo

- + @@ -8,7 +8,7 @@

Horizontal Stepper Demo

Horizontal Stepper Demo with Templated Label

- + {{step.label}} @@ -18,7 +18,7 @@

Horizontal Stepper Demo with Templated Label

Vertical Stepper Demo

- + diff --git a/src/demo-app/stepper/stepper-demo.ts b/src/demo-app/stepper/stepper-demo.ts index df1eb3b0c0bb..7df83cde23f5 100644 --- a/src/demo-app/stepper/stepper-demo.ts +++ b/src/demo-app/stepper/stepper-demo.ts @@ -7,9 +7,6 @@ import {Component} from '@angular/core'; styleUrls: ['stepper-demo.scss'], }) export class StepperDemo { - verticalActiveIndex = 0; - horizontalActiveIndex = 0; - labelTemplateIndex = 0; steps = [ {label: 'Confirm your name', content: 'Last name, First name.'}, {label: 'Confirm your contact information', content: '123-456-7890'}, diff --git a/src/lib/stepper/step.ts b/src/lib/stepper/step.ts index dcddf4f36db7..fd0366298266 100644 --- a/src/lib/stepper/step.ts +++ b/src/lib/stepper/step.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Component, ContentChild, TemplateRef, ViewChild} from '@angular/core'; +import {Component, ContentChild} from '@angular/core'; import {CdkStep} from '@angular/cdk'; import {MdStepLabel} from './step-label'; import {MdStepper} from './stepper'; @@ -20,9 +20,6 @@ export class MdStep extends CdkStep { /** Content for the step label given by . */ @ContentChild(MdStepLabel) stepLabel: MdStepLabel; - /** Template inside the MdStep view that contains an . */ - @ViewChild(TemplateRef) content: TemplateRef; - constructor(mdStepper: MdStepper) { super(mdStepper); } diff --git a/src/lib/stepper/stepper-horizontal.html b/src/lib/stepper/stepper-horizontal.html index b9ff6371c10d..f487e25fcef2 100644 --- a/src/lib/stepper/stepper-horizontal.html +++ b/src/lib/stepper/stepper-horizontal.html @@ -1,38 +1,35 @@ -
-
-