diff --git a/angular-cli.json b/.angular-cli.json similarity index 57% rename from angular-cli.json rename to .angular-cli.json index 612151d..2c11959 100644 --- a/angular-cli.json +++ b/.angular-cli.json @@ -1,24 +1,27 @@ { + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "project": { - "version": "1.0.0-beta.17", "name": "indigo" }, "apps": [ { "root": "src", "outDir": "dist", - "assets": ["assets"], + "assets": [ + "assets", + "favicon.ico", + "USERGUIDE.md" + ], "index": "index.html", "main": "main.ts", + "polyfills": "polyfills.ts", "test": "test.ts", - "tsconfig": "tsconfig.json", + "tsconfig": "tsconfig.app.json", + "testTsconfig": "tsconfig.spec.json", "prefix": "app", - "mobile": false, "styles": [ "styles.css", - "obeu-theme.scss", - "../node_modules/prismjs/themes/prism-okaidia.css" - + "obeu-theme.scss" ], "scripts": [], "environmentSource": "environments/environment.ts", @@ -28,13 +31,22 @@ } } ], - "addons": [], - "packages": [], "e2e": { "protractor": { "config": "./protractor.conf.js" } }, + "lint": [ + { + "project": "src/tsconfig.app.json" + }, + { + "project": "src/tsconfig.spec.json" + }, + { + "project": "e2e/tsconfig.e2e.json" + } + ], "test": { "karma": { "config": "./karma.conf.js" @@ -42,6 +54,6 @@ }, "defaults": { "styleExt": "css", - "prefixInterfaces": false + "component": {} } } diff --git a/.editorconfig b/.editorconfig index ab3246c..6e87a00 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,16 +1,13 @@ -# @TheLarkInn -# http://editorconfig.org - +# Editor configuration, see http://editorconfig.org root = true [*] charset = utf-8 indent_style = space indent_size = 2 -end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true [*.md] -insert_final_newline = false +max_line_length = off trim_trailing_whitespace = false diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index a92ce48..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parserOptions": { - "ecmaVersion": 6 - } -} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 389f9d8..54bfd20 100644 --- a/.gitignore +++ b/.gitignore @@ -1,58 +1,42 @@ -# Logs -logs -*.log +# See http://help.github.com/ignore-files/ for more about ignoring files. -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release +# compiled output +/dist +/tmp +/out-tsc -# Users Environment Variables -.lock-wscript +# dependencies +/node_modules -# OS generated files # +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +testem.log +/typings + +# e2e +/e2e/*.js +/e2e/*.map + +# System Files .DS_Store -ehthumbs.db -Icon? Thumbs.db - -# Node Files # -/node_modules -/bower_components - -# Typing TSD # -/src/typings/tsd/ -/typings/ -/tsd_typings/ - -# Dist # -/dist -/public/__build__/ -/src/*/__build__/ -__build__/** -.webpack.json - -#doc -/doc - -# IDE # -.idea/ -*.swp -!/typings/custom.d.ts - -# Build Artifacts # -release -distout -*.ngfactory.ts \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 401115f..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Open Knowledge Greece - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index 652e99c..607c7cd 100644 --- a/README.md +++ b/README.md @@ -41,4 +41,4 @@ Indigo lets you set the following configuration options, by editing the `src/env 5. `baseHref`: The path of the application. Defaults to "indigo/" ### Usage -Currently, Indigo offers two analysis functions: descriptive statistics and time series analysis. You can start [here](USERGUIDE.md) . \ No newline at end of file +Currently, Indigo offers two analysis functions: descriptive statistics and time series analysis. You can start [here](USERGUIDE.md) . diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts new file mode 100644 index 0000000..9010b91 --- /dev/null +++ b/e2e/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { IndigoPage } from './app.po'; + +describe('indigo App', () => { + let page: IndigoPage; + + beforeEach(() => { + page = new IndigoPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getParagraphText()).toEqual('Welcome to app!!'); + }); +}); diff --git a/e2e/app.po.ts b/e2e/app.po.ts new file mode 100644 index 0000000..cff7839 --- /dev/null +++ b/e2e/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class IndigoPage { + navigateTo() { + return browser.get('/'); + } + + getParagraphText() { + return element(by.css('app-root h1')).getText(); + } +} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json new file mode 100644 index 0000000..e2a9a2f --- /dev/null +++ b/e2e/tsconfig.e2e.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "node" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js index e28922a..4d9ab9d 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -4,30 +4,25 @@ module.exports = function (config) { config.set({ basePath: '', - frameworks: ['jasmine', 'angular-cli'], + frameworks: ['jasmine', '@angular/cli'], plugins: [ require('karma-jasmine'), require('karma-chrome-launcher'), - require('karma-remap-istanbul'), - require('angular-cli/plugins/karma') + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular/cli/plugins/karma') ], - files: [ - { pattern: './src/test.ts', watched: false } - ], - preprocessors: { - './src/test.ts': ['angular-cli'] + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser }, - remapIstanbulReporter: { - reports: { - html: 'coverage', - lcovonly: './coverage/coverage.lcov' - } + coverageIstanbulReporter: { + reports: [ 'html', 'lcovonly' ], + fixWebpackSourcePaths: true }, angularCli: { - config: './angular-cli.json', environment: 'dev' }, - reporters: ['progress', 'karma-remap-istanbul'], + reporters: ['progress', 'kjhtml'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..aac36d3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6970 @@ +{ + "name": "@obeu/indigo", + "version": "1.0.0", + "lockfileVersion": 1, + "dependencies": { + "@angular/animations": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-4.1.3.tgz", + "integrity": "sha1-bomh4Pv9bQ6Qvk8q4ZCqxn+DpBE=" + }, + "@angular/cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.1.1.tgz", + "integrity": "sha1-7lz3Y3rYWcCOil56fyFh0OdM56U=", + "dev": true + }, + "@angular/common": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.1.3.tgz", + "integrity": "sha1-58R5HjITHPdMI5QowqZ9qrLu8Bc=" + }, + "@angular/compiler": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.1.3.tgz", + "integrity": "sha1-0t0whTsM9KVHWLSjFGMsIx+clMM=" + }, + "@angular/compiler-cli": { + "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, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@angular/core": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.1.3.tgz", + "integrity": "sha1-KFSY64arfQtvmC+Pn0h+9hABOzU=" + }, + "@angular/flex-layout": { + "version": "2.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-2.0.0-beta.8.tgz", + "integrity": "sha1-uc9XhlqTyhWP5W2FCVJCPySNEDs=" + }, + "@angular/forms": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.1.3.tgz", + "integrity": "sha1-OAq0w6+ExdHXSMKn0EFRx9yOSYI=" + }, + "@angular/http": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-4.1.3.tgz", + "integrity": "sha1-650cMCoBcoFfmlczENm+C964Ra4=" + }, + "@angular/language-service": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-4.1.3.tgz", + "integrity": "sha1-6/YH3WtKdtkw7lcVrCymyYymWt4=", + "dev": true + }, + "@angular/material": { + "version": "git+https://github.com/angular/material2-builds.git#8cd7bcef1eeba95248373b7fef578da91553ac39" + }, + "@angular/platform-browser": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.1.3.tgz", + "integrity": "sha1-T6HbURndF4sxXdrlsym+4akypb0=" + }, + "@angular/platform-browser-dynamic": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.1.3.tgz", + "integrity": "sha1-PBP9z1kdSH9u/cHUaRPygMbYwuw=" + }, + "@angular/router": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-4.1.3.tgz", + "integrity": "sha1-3a/UaufMyLH3SQT/tF85TkRiUhY=" + }, + "@angular/tsc-wrapped": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.1.3.tgz", + "integrity": "sha1-LWNyyRh78WIerNlguUs5xPlSk80=", + "dev": true + }, + "@ngrx/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ngrx/core/-/core-1.2.0.tgz", + "integrity": "sha1-iCtGq6+i4ObYh8txobLC+j5tDcY=" + }, + "@ngrx/db": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@ngrx/db/-/db-2.0.2.tgz", + "integrity": "sha1-2z3dL2DWBfxeQmvohFoA+jLlhzo=" + }, + "@ngrx/effects": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-2.0.3.tgz", + "integrity": "sha1-5UzjQIBt2RqBgmeW8T4kRq7q+3c=" + }, + "@ngrx/router-store": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-1.2.6.tgz", + "integrity": "sha1-ousMpRXps2d4HxAwJQ3WS7c8CGs=" + }, + "@ngrx/store": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-2.2.2.tgz", + "integrity": "sha1-oAMFpkUgMqM4WIahHOUp3OLa5ls=" + }, + "@ngrx/store-devtools": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-3.2.4.tgz", + "integrity": "sha1-LOTRO/NISKnlHsh+OxJe1ntR5VA=" + }, + "@ngtools/json-schema": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", + "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", + "dev": true + }, + "@ngtools/webpack": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.4.1.tgz", + "integrity": "sha1-bUmPIc0a/AJ7i3RthSSn9OkeHas=", + "dev": true + }, + "@types/d3": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-4.7.0.tgz", + "integrity": "sha1-Zn2E87vwA+rID97XiTDPHCS820w=", + "dev": true + }, + "@types/d3-array": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.0.tgz", + "integrity": "sha1-mx/DIC/BqffaDyhzvTi0QxN6nTQ=", + "dev": true + }, + "@types/d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-hKdpgjuEFhEBcco2GCJ2EHJuccQ=", + "dev": true + }, + "@types/d3-brush": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.0.7.tgz", + "integrity": "sha1-BcMEQPTVN/0j+Xaw5sS6IjAB70U=", + "dev": true + }, + "@types/d3-chord": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha1-BYnrl6MZH07a8Xt73kmEYokM4ew=", + "dev": true + }, + "@types/d3-collection": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.5.tgz", + "integrity": "sha1-ux86qXzcjYgWRVQbnWz4ft/um8M=", + "dev": true + }, + "@types/d3-color": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.0.5.tgz", + "integrity": "sha1-ytdV8Pxt57cPpuXgivqB70wiSN4=", + "dev": true + }, + "@types/d3-dispatch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.5.tgz", + "integrity": "sha1-8fkYe1OOywUVdWnY3C9w37BPG1I=", + "dev": true + }, + "@types/d3-drag": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.1.0.tgz", + "integrity": "sha1-kQXjXKWKoMR4PzzoMIK8skzLaWA=", + "dev": true + }, + "@types/d3-dsv": { + "version": "1.0.30", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.0.30.tgz", + "integrity": "sha1-eODd3eQoNWb0Y+UVUal6Y8Fw1ag=", + "dev": true + }, + "@types/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha1-k6MBhovp4VBh89RDQ7GrP4rLbwk=", + "dev": true + }, + "@types/d3-force": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.0.7.tgz", + "integrity": "sha1-jjxTNpcUPrtwJ11WhAIG6Lp4kYU=", + "dev": true + }, + "@types/d3-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.2.0.tgz", + "integrity": "sha1-PhKO/J5t0J34/SHx2YGraOFAqKI=", + "dev": true + }, + "@types/d3-geo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.6.3.tgz", + "integrity": "sha1-IbUB0f4iTYiHfzn4TLjJ3Yqhvyg=", + "dev": true + }, + "@types/d3-hierarchy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.0.tgz", + "integrity": "sha1-UPHuBShAY4A1y91KyrH8NHCQWQc=", + "dev": true + }, + "@types/d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha1-ZAQbFcnAMsNI2hsiuqvFn6TRYTY=", + "dev": true + }, + "@types/d3-path": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.6.tgz", + "integrity": "sha512-YHW4cs+wOU9gFUzudjJs9TkrB/8GOgKhq32ZyNaZ2rzZjOhkqG486sGr9XSh4C91CcgIg1FRGoDaN29Ropx9nw==", + "dev": true + }, + "@types/d3-polygon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.5.tgz", + "integrity": "sha1-Na1U7YTDnX6fElK2U1vmAL5srOI=", + "dev": true + }, + "@types/d3-quadtree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.5.tgz", + "integrity": "sha1-HOHmWerkUw3wyxJ/KX8XQaNnqC4=", + "dev": true + }, + "@types/d3-queue": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-queue/-/d3-queue-3.0.5.tgz", + "integrity": "sha1-Pky+Kv9h22oLK4xIACmeTsasyFA=", + "dev": true + }, + "@types/d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-LdCPEVnHBxknDkp8g0r4XIuI0sM=", + "dev": true + }, + "@types/d3-request": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-request/-/d3-request-1.0.2.tgz", + "integrity": "sha1-2524FU9HgWWEcGxub3Ar5m8i9L4=", + "dev": true + }, + "@types/d3-scale": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-1.0.10.tgz", + "integrity": "sha512-2CCyRc9o7oawNqNXuv6P1QBFH4PYnZt4IZK6J5nKykQjzezPC/RqCeRDBTk0JhBC8pLcLWYzGR6G2zG2OUwPag==", + "dev": true + }, + "@types/d3-selection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.1.0.tgz", + "integrity": "sha1-WbiPENLP99n/1/6Yazqu894EgiQ=", + "dev": true + }, + "@types/d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-UgoS04Z+YdH9Scdaj/p85ZbKtD4=", + "dev": true + }, + "@types/d3-time": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.0.6.tgz", + "integrity": "sha1-QgDlda7lke5weNSlwjXf9p2t94I=", + "dev": true + }, + "@types/d3-time-format": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.0.5.tgz", + "integrity": "sha1-HUxbp37VNSsQx/zgYsiDOC8eFuA=", + "dev": true + }, + "@types/d3-timer": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.6.tgz", + "integrity": "sha1-eG1OIHMa3wOvLF32yG/ilmf+Qps=", + "dev": true + }, + "@types/d3-transition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.1.0.tgz", + "integrity": "sha1-dEddSo+KCUSlF9XvhhlwzDAofkA=", + "dev": true + }, + "@types/d3-voronoi": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.6.tgz", + "integrity": "sha1-tSJSwdYZcufHURNYkK6hEtXa3G0=", + "dev": true + }, + "@types/d3-zoom": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.3.0.tgz", + "integrity": "sha512-ynEwHgrsygbapCHDvBjv5aITklc6K43tAiSLqm9BD5ZwDuoMupiM+6pkuc7rjJTeWpP/PRK4LgjlTIcdaMsobg==", + "dev": true + }, + "@types/geojson": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.2.tgz", + "integrity": "sha1-sC0QqwKOKSisWSoFGqpJgaGUHQM=", + "dev": true + }, + "@types/hammerjs": { + "version": "2.0.34", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.34.tgz", + "integrity": "sha1-nLrE9BywOUNhQXheG+ULOrEKBKk=", + "dev": true + }, + "@types/jasmine": { + "version": "2.5.45", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.45.tgz", + "integrity": "sha1-WJKKYh0BTOarWcWpxBBx9zKLDKk=", + "dev": true + }, + "@types/jquery": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.41.tgz", + "integrity": "sha1-uHugUQEfme2+WG2Plygud4bgGm0=", + "dev": true + }, + "@types/lodash": { + "version": "4.14.55", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.55.tgz", + "integrity": "sha1-ddfU66Ag7kED1MvQ8qPvXbj3U08=", + "dev": true + }, + "@types/node": { + "version": "6.0.78", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.78.tgz", + "integrity": "sha512-+vD6E8ixntRzzZukoF3uP1iV+ZjVN3koTcaeK+BEoc/kSfGbLDIGC7RmCaUgVpUfN6cWvfczFRERCyKM9mkvXg==", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "2.53.42", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz", + "integrity": "sha1-dMt3+2BS7a/yqJhN2v2I1BnyXKw=", + "dev": true + }, + "@types/urijs": { + "version": "1.15.31", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.15.31.tgz", + "integrity": "sha1-aBmlUs7/ZwziiGkPDFiL+Wt5wSk=", + "dev": true + }, + "@types/valid-url": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/valid-url/-/valid-url-1.0.2.tgz", + "integrity": "sha1-YPpDXOJL/VuhB7jSqAeWrq86j0U=", + "dev": true + }, + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true + }, + "acorn": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", + "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "adm-zip": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, + "ajv": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.1.5.tgz", + "integrity": "sha1-hzSTG2AfANT+73xlc4130bZdH2g=", + "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 + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "angular2-markdown": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/angular2-markdown/-/angular2-markdown-1.6.0.tgz", + "integrity": "sha1-hja/narXD8NWMxJnB/+zPmhPurE=" + }, + "angular2-masonry": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/angular2-masonry/-/angular2-masonry-0.4.0.tgz", + "integrity": "sha1-W+fIe9q8UO04TwHFhfUPUXDN/xA=" + }, + "angular2-prettyjson": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/angular2-prettyjson/-/angular2-prettyjson-2.0.5.tgz", + "integrity": "sha1-zTeuyNjYTZr+5SiRYtJsXR53bp8=" + }, + "angular2-uuid": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/angular2-uuid/-/angular2-uuid-1.1.1.tgz", + "integrity": "sha1-cvA81TK39AAy6x7PufhFc4S+lW4=" + }, + "ansi-escapes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true + }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==", + "dev": true + }, + "are-we-there-yet": { + "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 + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true + }, + "arr-flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "optional": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", + "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "dev": true + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", + "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "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 + }, + "babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "dev": true, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true + }, + "babel-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "dev": true + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "dev": true + }, + "babel-traverse": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "dev": true + }, + "babel-types": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "dev": true + }, + "babylon": { + "version": "6.17.3", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.3.tgz", + "integrity": "sha512-mq0x3HCAGGmQyZXviOVe5TRsw37Ijy3D43jCqt/9WVf+onx2dUgW3PosnqCbScAFhRO9DGs8nxoMzU0iiosMqQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "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 + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", + "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true + }, + "big.js": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", + "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=", + "dev": true + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "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, + "optional": true + }, + "blocking-proxy": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz", + "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "dev": true + }, + "body-parser": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "dev": true, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", + "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "dev": true + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", + "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true, + "optional": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "optional": true + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true + }, + "caniuse-db": { + "version": "1.0.30000683", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000683.tgz", + "integrity": "sha1-WLV+0eC7naVOrxRimFFHu+Fmefo=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true + }, + "cipher-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", + "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", + "dev": true + }, + "clap": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.1.3.tgz", + "integrity": "sha1-s7026T3Uy/s5WjwmiWNSRFJlwFs=", + "dev": true + }, + "clean-css": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.3.tgz", + "integrity": "sha1-B8/omA7bINRV3cI6rc8eBMblCc4=", + "dev": true + }, + "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 + }, + "cli-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "dev": true + }, + "clipboard": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz", + "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=", + "optional": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "dependencies": { + "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 + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.2.tgz", + "integrity": "sha1-K6n+w7SqQ9eknX5sNWHpIGG2vOw=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-3.0.1.tgz", + "integrity": "sha1-uma3sqpWT+n0XWAEtAA60s8RaCg=", + "dev": true + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true + }, + "color-name": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", + "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "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 + }, + "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 + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=" + }, + "common-tags": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", + "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", + "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", + "dev": true + }, + "compression": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz", + "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=", + "dev": true, + "dependencies": { + "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 + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz", + "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", + "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.1.3.tgz", + "integrity": "sha1-lSdx6w3dwcs/ovb75RpSLpOz7go=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true + }, + "crypto-browserify": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz", + "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=", + "dev": true + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.4.tgz", + "integrity": "sha1-bPNXkZLONV6LONX0Ldeh8uyJjQ8=", + "dev": true + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "optional": true + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "d3": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/d3/-/d3-4.7.3.tgz", + "integrity": "sha1-G8ewKCtB2XZCvbZzNyyI6B7MpKM=" + }, + "d3-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.1.1.tgz", + "integrity": "sha1-oBq+Y6Jf+5HTQjw8bQUbTTa8igk=" + }, + "d3-axis": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.6.tgz", + "integrity": "sha1-3MvCGnPleG3oIL8aIrI39SK4eL4=" + }, + "d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=" + }, + "d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=" + }, + "d3-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.3.tgz", + "integrity": "sha1-AL3qlPvBYo1DWruuL03CFk433TQ=" + }, + "d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=" + }, + "d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=" + }, + "d3-drag": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.0.4.tgz", + "integrity": "sha1-qcFgnxHdVTCuJ169ZDd+xU77nY8=" + }, + "d3-dsv": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.5.tgz", + "integrity": "sha1-QZ99tH9ih4n8P9tjbmeESdCCETY=" + }, + "d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=" + }, + "d3-force": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.0.6.tgz", + "integrity": "sha1-6n4bdzDiZkzTFPWU1nGMV8wTK3k=" + }, + "d3-format": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.1.1.tgz", + "integrity": "sha1-JuCU57D6kl02FapvQ7JlxcqCtG4=" + }, + "d3-geo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.6.3.tgz", + "integrity": "sha1-IWg6Q6Bh6rohp/JUtR1ZN+tkB1Y=" + }, + "d3-hierarchy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.4.tgz", + "integrity": "sha1-lsOULz8hz5l6EbTt8A3eKne0xtA=" + }, + "d3-interpolate": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.4.tgz", + "integrity": "sha1-pD7Fs77jUNhRbv34GaTAjAU9swI=" + }, + "d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=" + }, + "d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=" + }, + "d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=" + }, + "d3-queue": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.5.tgz", + "integrity": "sha1-DO/+HxMcRZsTufafEFa0HfwzwA0=" + }, + "d3-random": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.0.3.tgz", + "integrity": "sha1-ZSbIRKpefEV+Kd2s1vJzT4RbQsE=" + }, + "d3-request": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.5.tgz", + "integrity": "sha1-TarpRtHdDVff4B8CKVY1SVjVHyM=" + }, + "d3-scale": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.5.tgz", + "integrity": "sha1-QYUG8PsY6wUrOF4ZY5iswqQTSFg=" + }, + "d3-selection": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.0.5.tgz", + "integrity": "sha1-lIxztBpE4o0XQq4v8gfCrryic0s=" + }, + "d3-shape": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.0.6.tgz", + "integrity": "sha1-sJ4wXPDHxrmpjJDmtC9i2sS8/Vs=" + }, + "d3-svg-legend": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/d3-svg-legend/-/d3-svg-legend-2.21.0.tgz", + "integrity": "sha1-bq4G1K8af55DcZsy9WeQpXajWDY=", + "dependencies": { + "d3-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.0.1.tgz", + "integrity": "sha1-N1wCh0/NlsFu2fG89bSnvlPzWOc=" + }, + "d3-dispatch": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.1.tgz", + "integrity": "sha1-S9ZaQ87P9DGN653yRVKqi/KBqEA=" + }, + "d3-format": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.0.2.tgz", + "integrity": "sha1-E4YYMgtLvrQ7XA/zBRkHn7vXN14=" + }, + "d3-scale": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.3.tgz", + "integrity": "sha1-T56PDMLqDzkl/wSsJ63AkEX6TJA=" + }, + "d3-selection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.0.2.tgz", + "integrity": "sha1-rmYq/UcCrJxdoDmyEHoXZPockHA=" + }, + "d3-transition": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.0.3.tgz", + "integrity": "sha1-kdyYa92zCXNjkyCoXbcs5KsaJ7s=" + } + } + }, + "d3-time": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.6.tgz", + "integrity": "sha1-pVsT19FdOhYK6RcIIy4INfHV6UU=" + }, + "d3-time-format": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.0.5.tgz", + "integrity": "sha1-nXeAIE98kRnJFwsaVttN6aivly4=" + }, + "d3-timer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.5.tgz", + "integrity": "sha1-smbUdscbDSaeesXzUrQQo7b+bvA=" + }, + "d3-transition": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.0.4.tgz", + "integrity": "sha1-4anrrjhpqdnCh0qwCEH6gxOuXeU=" + }, + "d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=" + }, + "d3-zoom": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.1.3.tgz", + "integrity": "sha1-C9SIYi8i3AU0iU90SkDsl5WZ/cQ=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-freeze-strict": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-freeze-strict/-/deep-freeze-strict-1.1.1.tgz", + "integrity": "sha1-d9BYPKJKab5LvZrC+uQV1VUj5bA=" + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegate": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.1.3.tgz", + "integrity": "sha1-moJRp3fXAl+qVXN7w7BxdCEnqf0=", + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true + }, + "desandro-matches-selector": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz", + "integrity": "sha1-cXvu1NwT59jzdi9wem1YpndCGOE=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true + }, + "directory-encoder": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/directory-encoder/-/directory-encoder-0.7.2.tgz", + "integrity": "sha1-WbTiqk8lQi9sY7UntGL14tDdLFg=", + "dev": true, + "dependencies": { + "fs-extra": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz", + "integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=", + "dev": true + } + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz", + "integrity": "sha1-ZK8Pnv08PGrNV9cfg7Scp+6cS0M=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true + }, + "ember-cli-normalize-entity-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz", + "integrity": "sha1-CxT3vLxZmqEXtf3cgeT9A8S61bc=", + "dev": true + }, + "ember-cli-string-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "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 + }, + "enhanced-resolve": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz", + "integrity": "sha1-n0tib1dyRe3PSyrYPYbhf09CHew=", + "dev": true + }, + "ensure-posix-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz", + "integrity": "sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI=", + "dev": true + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "enum-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/enum-values/-/enum-values-1.0.1.tgz", + "integrity": "sha1-wdaZRJzBa7qa2VoX+jybTbCKTUU=" + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", + "dev": true + }, + "ev-emitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.0.tgz", + "integrity": "sha1-+jKVjOMZ9FUqQEr4yhbxWYUf7YQ=" + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", + "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true + }, + "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 + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true + }, + "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 + }, + "exports-loader": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", + "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", + "dev": true + }, + "express": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", + "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "external-editor": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", + "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true + }, + "extract-text-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", + "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", + "dev": true + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "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 + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true + }, + "file-loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz", + "integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true + } + } + }, + "finalhandler": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", + "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "fizzy-ui-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.5.tgz", + "integrity": "sha1-1y3rx00snSctvLt7ABcHiX9sMhA=" + }, + "flag-icon-css": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-2.8.0.tgz", + "integrity": "sha1-7BDCD+QXreeHoJUgBjAGnKQ2pWk=" + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true + }, + "forwarded": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=", + "dev": true + }, + "fresh": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true + }, + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz", + "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=", + "dev": true, + "optional": true, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", + "integrity": "sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true, + "optional": true + }, + "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 + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true + }, + "block-stream": { + "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 + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "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 + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "optional": true + }, + "deep-extend": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz", + "integrity": "sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=", + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "optional": true + }, + "extend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", + "integrity": "sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=", + "dev": true, + "optional": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz", + "integrity": "sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=", + "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, + "optional": true + }, + "gauge": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.3.tgz", + "integrity": "sha1-HCOFX5YvF7OtPQ3HRD8wRULt/gk=", + "dev": true, + "optional": true + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true, + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "optional": true + }, + "getpass": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true, + "optional": true + }, + "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 + }, + "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, + "optional": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true, + "optional": true + }, + "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 + }, + "is-my-json-valid": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", + "dev": true, + "optional": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true, + "optional": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", + "dev": true, + "optional": true + }, + "mime-db": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz", + "integrity": "sha1-6v/NDk/Gk1z4E02iRuLmw1MFrf8=", + "dev": true + }, + "mime-types": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz", + "integrity": "sha1-9+99l1g/yvO30oK2+LVnnaselO4=", + "dev": true + }, + "minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "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, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.33", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz", + "integrity": "sha1-ZArFUZj2qSWXLgwWxKwmoDTV7Mk=", + "dev": true, + "optional": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true + }, + "npmlog": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz", + "integrity": "sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=", + "dev": true, + "optional": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "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, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "optional": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.1.tgz", + "integrity": "sha1-kYwLO802Z5dyuvE1say0wWUe150=", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz", + "integrity": "sha1-xepWS7B6/5/TpbMukGwdOmWUD+o=", + "dev": true, + "optional": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true + }, + "sshpk": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.2.tgz", + "integrity": "sha1-1agEziJpVRVjjnmNviMnPeBwpfo=", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true + }, + "tar-pack": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz", + "integrity": "sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=", + "dev": true, + "optional": true, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "dev": true, + "optional": true + } + } + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz", + "integrity": "sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=", + "dev": true, + "optional": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true + }, + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "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": { + "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 + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + } + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true, + "optional": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-size/-/get-size-2.0.2.tgz", + "integrity": "sha1-VV6pirhzLgwCHp4j4iGa3L45jpg=" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true + }, + "globule": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.1.0.tgz", + "integrity": "sha1-xJNS5NwYPYWJPuglOF65lLtt9F8=", + "dev": true, + "optional": true, + "dependencies": { + "lodash": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz", + "integrity": "sha1-0iyaxmAojzhD4Wun0rXQbMon13c=", + "dev": true, + "optional": true + } + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "handlebars": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", + "integrity": "sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ=", + "dev": true, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true + }, + "uglify-js": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz", + "integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=", + "dev": true, + "optional": true + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true + }, + "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 + }, + "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, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true + }, + "hash.js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz", + "integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=", + "dev": true + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", + "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "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 + }, + "html-webpack-plugin": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz", + "integrity": "sha1-LnhjtX5f1I/iYzA+L/yTTDBk0Ak=", + "dev": true, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "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 + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "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 + }, + "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 + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "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 + }, + "iconv-lite": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz", + "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0=" + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "dependencies": { + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dev": true + } + } + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "image-size": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.4.tgz", + "integrity": "sha1-lOB77sBlk4bxrvuEsiIuiEBUhc0=", + "dev": true, + "optional": true + }, + "img-stats": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/img-stats/-/img-stats-0.5.2.tgz", + "integrity": "sha1-wgNJbELy2esuWrgjL6dWurMsnis=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "optional": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "inquirer": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.1.0.tgz", + "integrity": "sha512-JLl89yPOEoGohLjeGs3XCekeovADbrEw/WRJQYgPED6zeJWrpIsY9i9/rn+VltZox/9w94lVYqo94QfEmniB1w==", + "dev": true + }, + "interpret": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ipaddr.js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", + "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "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 + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "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 + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "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 + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "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 + }, + "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 + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", + "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", + "dev": true + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.0.tgz", + "integrity": "sha1-OVZSF/NmF4nooKDAgNX35rxG4aA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.9.tgz", + "integrity": "sha512-zV14oa+hjBNP3gJTM/BzNdJpInHKbZ9cLIEwVasuaTUA1ebF9TBOIfcC5SDAE3C11rXxOw3KSimKGMiFz6PpWQ==", + "dev": true + }, + "istanbul-instrumenter-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz", + "integrity": "sha1-5UkpAKsLuoNe+oAkywC+mz7qJwA=", + "dev": true, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true + } + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", + "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz", + "integrity": "sha512-lPgUY+Pa5dlq2/l0qs1PJZ54QPSfo+s4+UZdkb2d0hbOyrEIAbUJphBLFjEyXBdeCONgGRADFzs3ojfFtmuwFA==", + "dev": true + }, + "istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==", + "dev": true + }, + "istanbul-lib-source-maps": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", + "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", + "dev": true + }, + "istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-P8G873A0kW24XRlxHVGhMJBhQ8gWAec+dae7ZxOBzxT4w+a9ATSPvRVK3LB1RAJ9S8bg2tOyWHAGW40Zd2dKfw==", + "dev": true, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true + }, + "uglify-js": { + "version": "2.8.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz", + "integrity": "sha512-WqKNbmNJKzIdIEQu/U2ytgGBbhCy2PVks94GoetczOAJ/zCgVu2CuO7gguI5KPFGPtUtI1dmPQl6h0D4cPzypA==", + "dev": true, + "optional": true, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true, + "optional": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true + } + } + }, + "jasmine": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz", + "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=", + "dev": true + }, + "jasmine-core": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.3.tgz", + "integrity": "sha1-RQcpUOSkKx4yL+VcABEApGXXeBU=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.1.0.tgz", + "integrity": "sha1-uKp1hN9Y5Nq2Gs2++3bQlqo4Zj8=", + "dev": true + }, + "jasminewd2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz", + "integrity": "sha1-2llSddGuYx3nNqwKfH2Fyfc+9lI=", + "dev": true + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" + }, + "js-base64": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "dev": true + }, + "js-tokens": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", + "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jschardet": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.4.2.tgz", + "integrity": "sha1-KqEH8UKvQSHRRWWdRPUIMJYeaZo=", + "dev": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-loader": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz", + "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "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 + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "karma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", + "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", + "dev": true, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz", + "integrity": "sha1-IWh5xorATY1RQOmWGboEtZr9Rs8=", + "dev": true + }, + "karma-cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", + "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", + "dev": true + }, + "karma-coverage-istanbul-reporter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.3.0.tgz", + "integrity": "sha1-0ULNnFVzHJ42Pvc3To7xoxvr+ts=", + "dev": true + }, + "karma-jasmine": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", + "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "dev": true + }, + "karma-jasmine-html-reporter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", + "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true + }, + "less": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz", + "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=", + "dev": true + }, + "less-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.4.tgz", + "integrity": "sha1-tKjEOEPmXGfS6i6xRltcQjPVAGo=", + "dev": true, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "optional": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "dev": true, + "optional": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "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 + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "optional": true + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.0.tgz", + "integrity": "sha512-aHGs865JXz6bkB4AHL+3AhyvTFKL3iZamKVWjIUKnXOXyasJvqPK8WAjOnAQKQZVpeXDVz19u1DD0r/12bWAdQ==", + "dev": true, + "optional": true + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "magic-string": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz", + "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=", + "dev": true + }, + "make-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", + "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "marked": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=" + }, + "masonry-layout": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/masonry-layout/-/masonry-layout-4.2.0.tgz", + "integrity": "sha1-Q4Nca24Ncu/ywxoRjIAAzMxKuWU=" + }, + "matcher-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.0.4.tgz", + "integrity": "sha1-L2auCGmZbynkPQtiyD3R1D5YF1U=", + "dev": true + }, + "material2-srcs": { + "version": "git+https://github.com/angular/material2.git#c2816efde4c5d8021ee36034dd61655a71bfa3f3" + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "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 + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "optional": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true + }, + "miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true, + "optional": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "ngrx-store-freeze": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/ngrx-store-freeze/-/ngrx-store-freeze-0.1.7.tgz", + "integrity": "sha1-6gzvshn1WOkbKFw9cjhVPRo3LEE=" + }, + "no-case": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", + "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=", + "dev": true + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "optional": true, + "dependencies": { + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true + } + } + }, + "node-libs-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", + "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", + "dev": true, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "node-modules-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", + "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", + "dev": true + }, + "node-sass": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", + "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", + "dev": true, + "optional": true + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true + }, + "normalize-package-data": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", + "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", + "dev": true + }, + "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 + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true + }, + "npmlog": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", + "dev": true + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": 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 + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true + } + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true + }, + "outlayer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/outlayer/-/outlayer-2.1.1.tgz", + "integrity": "sha1-KYY7beEOpdrf/8rfoNcokHOH6aI=" + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", + "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true + }, + "postcss-loader": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz", + "integrity": "sha1-piHqH6KQYqg5cqRvVEhncTAZFus=", + "dev": true + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dev": true, + "dependencies": { + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dev": true + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "dependencies": { + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dev": true + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "dependencies": { + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dev": true + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "dependencies": { + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dev": true + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true + }, + "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 + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true + }, + "postcss-url": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-5.1.2.tgz", + "integrity": "sha1-mLMWW+jVkkccsMqt3iwNH4MvEz4=", + "dev": true + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.0.tgz", + "integrity": "sha1-h/Tp1waiTIfWy+6fq+wAH8+Mddg=", + "dev": true + }, + "prismjs": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.6.0.tgz", + "integrity": "sha1-EY2V+3pm26InLjQ7NF9SNmWds2U=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "promise": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", + "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", + "dev": true, + "optional": true + }, + "protractor": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz", + "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=", + "dev": true, + "dependencies": { + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "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, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + } + } + }, + "proxy-addr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", + "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", + "dev": true + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true, + "optional": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "qjobs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "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, + "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 + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "dependencies": { + "safe-buffer": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", + "integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "dev": true, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "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 + }, + "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 + }, + "readable-stream": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", + "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", + "dev": true + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "optional": true + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true + }, + "reflect-metadata": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz", + "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=", + "dev": true + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "dev": true + }, + "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 + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true + }, + "rsvp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.5.0.tgz", + "integrity": "sha1-pixXOkrk4d/QaX68YkLnnGgeqjQ=", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true + }, + "rxjs": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.0.tgz", + "integrity": "sha1-p9sUqxV/nXqsalbmVeejhg05vyY=" + }, + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + }, + "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, + "optional": true + }, + "sass-loader": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.5.tgz", + "integrity": "sha1-qEeRDzZEKqVsWYWHnVTrUZ4koyg=", + "dev": true + }, + "saucelabs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", + "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", + "dev": true + }, + "sax": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz", + "integrity": "sha1-/YYxojvHgmvvXYcb24c3jJVkeCg=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true + }, + "script-loader": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.0.tgz", + "integrity": "sha1-aF3H5waeDe56kmdPDrxbD1W6pew=", + "dev": true + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "optional": true, + "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, + "optional": true + } + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "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, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true + } + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true + }, + "send": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", + "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", + "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", + "dev": true + }, + "serve-static": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", + "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "dev": true + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dev": true, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dev": true + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "dev": true + } + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "silent-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", + "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true + }, + "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, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "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 + } + } + }, + "sockjs": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "dev": true, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.2.tgz", + "integrity": "sha1-8CEqhVDkyUaMjM6u79LjSTwDOtU=", + "dev": true, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "source-map-loader": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.1.tgz", + "integrity": "sha1-SBJr6SML1H+tBeRqjDwuPS2r5Qc=", + "dev": true, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true + } + } + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "optional": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true + }, + "stream-http": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.1.tgz", + "integrity": "sha1-VGpRdBrVprB+njGwsQRBqRffUoo=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "dev": true + }, + "string-width": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", + "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true + }, + "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 + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "optional": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", + "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", + "dev": true + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true + } + } + }, + "stylus-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", + "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", + "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" + }, + "systemjs": { + "version": "0.19.43", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.19.43.tgz", + "integrity": "sha1-mQLOW9qroDQTV1kCxrsYutLdq44=", + "dependencies": { + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=" + } + } + }, + "tapable": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.6.tgz", + "integrity": "sha1-IGvo4YiGC1FEJTdebxrom/sB/Y0=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "optional": true + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz", + "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=", + "dev": true + }, + "tiny-emitter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.0.tgz", + "integrity": "sha1-utMnrbGAS0KiMa+nQVMr2ITNCa0=", + "optional": true + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "toposort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.3.tgz", + "integrity": "sha1-8CzYp0vYvi/A6YYRw7rLlaFxhpw=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true, + "optional": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-node": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.0.6.tgz", + "integrity": "sha1-VRJ/95DH7r9rpowebd6UsJqqIeA=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tsconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "dev": true, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tsickle": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", + "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tslib": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", + "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=" + }, + "tslint": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.3.2.tgz", + "integrity": "sha1-5WRZ+wlacwfxA7hAUhdPXju+9u0=", + "dev": true, + "dependencies": { + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true + } + } + }, + "tsutils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.4.0.tgz", + "integrity": "sha1-rUzm26Dlo+2934Ymt8oEB4IYn+o=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true + }, + "typescript": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", + "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=", + "dev": true + }, + "uglify-js": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.15.tgz", + "integrity": "sha1-qssyOoRrI0YCJw3q2KMkQaiAb0I=", + "dev": true + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "urijs": { + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.18.7.tgz", + "integrity": "sha1-YT7kGURS/ma4ctYkaJRt+TqUFJI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.8.tgz", + "integrity": "sha1-uRg7GAHg+EdxhnNnMEC8ncHHFcU=", + "dev": true + }, + "url-parse": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", + "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", + "dev": true, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "useragent": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.1.13.tgz", + "integrity": "sha1-u6Q+iqJNXOuDwpN0c+EC4h33TBA=", + "dev": true, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true + }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + }, + "validate-npm-package-license": { + "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 + }, + "vary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true + }, + "vlq": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz", + "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=", + "dev": true + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "walk-sync": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.2.tgz", + "integrity": "sha512-FMB5VqpLqOCcqrzA9okZFc0wq0Qbmdm396qJxvQZhDpyu0W95G9JCmp74tx7iyYnyOcBtUuKJsgIKAqjozvmmQ==", + "dev": true + }, + "watchpack": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.3.1.tgz", + "integrity": "sha1-fYaTkHsozmAT5/NhCqKhrPB9rYc=", + "dev": true + }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true + }, + "webdriver-js-extender": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", + "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", + "dev": true, + "dependencies": { + "adm-zip": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", + "dev": true + }, + "sax": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", + "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", + "dev": true + }, + "selenium-webdriver": { + "version": "2.53.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", + "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", + "dev": true + }, + "tmp": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", + "dev": true + }, + "xml2js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", + "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", + "dev": true + } + } + }, + "webpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.4.1.tgz", + "integrity": "sha1-FakdvjSWbYpLmcfWVu/ZKi5ab2o=", + "dev": true, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true + }, + "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 + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true + }, + "source-list-map": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz", + "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "uglify-js": { + "version": "2.8.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz", + "integrity": "sha512-WqKNbmNJKzIdIEQu/U2ytgGBbhCy2PVks94GoetczOAJ/zCgVu2CuO7gguI5KPFGPtUtI1dmPQl6h0D4cPzypA==", + "dev": true, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true + } + } + }, + "webpack-sources": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", + "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz", + "integrity": "sha1-LiUs4d+wINvaHMs33ybzCrAU29E=", + "dev": true + }, + "webpack-dev-server": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.4.5.tgz", + "integrity": "sha1-MThM6BE2vhCAtLTN4OubkOVO5s8=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "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 + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true + } + } + }, + "webpack-merge": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-2.6.1.tgz", + "integrity": "sha1-8dgB0sXTn4P/7J8RkkCz476ZShw=", + "dev": true + }, + "webpack-sources": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", + "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", + "dev": true, + "dependencies": { + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "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", + "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "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, + "dependencies": { + "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 + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "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 + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xml2js": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "dev": true + }, + "xmlbuilder": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + }, + "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, + "optional": true + }, + "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 + } + } + }, + "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, + "optional": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.12.tgz", + "integrity": "sha1-hv9QU8mK7CkaC/S7rFAdaUoFz7s=" + } + } +} diff --git a/package.json b/package.json index f33e5ac..9f03160 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,15 @@ { "name": "@obeu/indigo", "version": "1.0.0", - "description": "An indicators and analytics app for OpenBudgets.eu", + "description": "An analytics app for OpenBudgets.eu", "main": "index.ts", "scripts": { - "build": "ng build --prod", - "start": "ng serve --host 0.0.0.0 " + "ng": "ng", + "start": "ng serve --host 0.0.0.0 --disableHostCheck=true", + "build": "ng build", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" }, "repository": { "type": "git", @@ -18,72 +22,71 @@ }, "homepage": "https://github.com/okgreece/indigo#readme", "engines": { - "node": ">= 6.0.0", - "npm": ">= 4" + "node": ">= 7.0.0", + "npm": ">= 5" }, "dependencies": { - "@angular/cli": "1.0.0-rc.4", - "@angular/common": "2.4.10", - "@angular/compiler": "2.4.10", - "@angular/compiler-cli": "2.4.10", - "@angular/core": "2.4.10", - "@angular/flex-layout": "^2.0.0-rc.1", - "@angular/forms": "2.4.10", - "@angular/http": "2.4.10", - "@angular/material": "2.0.0-beta.2", - "@angular/platform-browser": "2.4.10", - "@angular/platform-browser-dynamic": "2.4.10", - "@angular/platform-server": "2.4.10", - "@angular/router": "3.4.10", - "@covalent/core": "1.0.0-beta.1-1", + "@angular/animations": "4.1.3", + "@angular/common": "4.1.3", + "@angular/compiler": "4.1.3", + "@angular/core": "4.1.3", + "@angular/flex-layout": "2.0.0-beta.8", + "@angular/forms": "4.1.3", + "@angular/http": "4.1.3", + "@angular/material": "git+https://github.com/angular/material2-builds.git", + "@angular/platform-browser": "4.1.3", + "@angular/platform-browser-dynamic": "4.1.3", + "@angular/router": "4.1.3", "@ngrx/core": "1.2.0", - "@ngrx/db": "2.0.1", - "@ngrx/effects": "2.0.1", - "@ngrx/router-store": "1.2.5", - "@ngrx/store": "^2.2.1", - "@ngrx/store-devtools": "3.2.3", - "@types/d3": "4.7.0", - "@types/hammerjs": "2.0.34", - "@types/jquery": "2.0.41", - "@types/urijs": "1.15.31", - "@types/valid-url": "1.0.2", - "angular2-fontawesome": "~0.8.0", + "@ngrx/db": "2.0.2", + "@ngrx/effects": "2.0.3", + "@ngrx/router-store": "1.2.6", + "@ngrx/store": "2.2.2", + "@ngrx/store-devtools": "3.2.4", "angular2-markdown": "^1.6.0", "angular2-masonry": "0.4.0", - "angular2-prettyjson": "2.0.3", + "angular2-prettyjson": "2.0.5", "angular2-uuid": "1.1.1", - "core-js": "2.4.1", + "core-js": "^2.4.1", "d3": "4.7.3", "d3-svg-legend": "2.21.0", + "enum-values": "^1.0.1", "flag-icon-css": "2.8.0", "hammerjs": "2.0.8", "jquery": "3.2.1", "lodash": "4.17.4", - "ng-http-interceptor": "2.0.3", + "material2-srcs": "git+https://github.com/angular/material2.git#master", "ngrx-store-freeze": "0.1.7", - "rxjs": "5.2.0", - "ts-helpers": "1.1.2", - "typescript": "2.2.1", + "rxjs": "^5.1.0", "underscore": "1.8.3", "urijs": "1.18.7", "valid-url": "1.0.9", - "zone.js": "0.7.2" + "zone.js": "^0.8.4" }, "devDependencies": { - "@angular/cli": "1.0.0-beta.31", - "@types/jasmine": "2.5.46", + "@angular/cli": "1.1.1", + "@angular/compiler-cli": "4.1.3", + "@angular/language-service": "4.1.3", + "@types/d3": "4.7.0", + "@types/hammerjs": "2.0.34", + "@types/jasmine": "2.5.45", + "@types/jquery": "2.0.41", "@types/lodash": "4.14.55", - "@types/node": "7.0.10", - "codelyzer": "~2.0.0", - "jasmine-core": "2.5.2", - "jasmine-spec-reporter": "3.2.0", - "karma": "1.4.1", - "karma-chrome-launcher": "2.0.0", - "karma-cli": "1.0.1", - "karma-jasmine": "1.1.0", - "karma-remap-istanbul": "0.6.0", - "protractor": "5.1.1", - "ts-node": "3.0.2", - "tslint": "4.5.1" + "@types/node": "~6.0.60", + "@types/urijs": "1.15.31", + "@types/valid-url": "1.0.2", + "codelyzer": "~3.0.1", + "jasmine-core": "~2.6.2", + "jasmine-spec-reporter": "~4.1.0", + "karma": "~1.7.0", + "karma-chrome-launcher": "~2.1.1", + "karma-cli": "~1.0.1", + "karma-coverage-istanbul-reporter": "^1.2.1", + "karma-jasmine": "~1.1.0", + "karma-jasmine-html-reporter": "^0.2.2", + "protractor": "~5.1.2", + "ts-node": "~3.0.4", + "tslint": "~5.3.2", + "typescript": "~2.3.3" } } diff --git a/protractor.conf.js b/protractor.conf.js index 169743b..7ee3b5e 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -1,8 +1,7 @@ // Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/docs/referenceConf.js +// https://github.com/angular/protractor/blob/master/lib/config.ts -/*global jasmine */ -var SpecReporter = require('jasmine-spec-reporter'); +const { SpecReporter } = require('jasmine-spec-reporter'); exports.config = { allScriptsTimeout: 11000, @@ -20,13 +19,10 @@ exports.config = { defaultTimeoutInterval: 30000, print: function() {} }, - useAllAngular2AppRoots: true, - beforeLaunch: function() { + onPrepare() { require('ts-node').register({ - project: 'e2e' + project: 'e2e/tsconfig.e2e.json' }); - }, - onPrepare: function() { - jasmine.getEnv().addReporter(new SpecReporter()); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); } }; diff --git a/src/app/actions/algorithm/algorithm.ts b/src/app/actions/algorithm/algorithm.ts index fef1b27..1419385 100644 --- a/src/app/actions/algorithm/algorithm.ts +++ b/src/app/actions/algorithm/algorithm.ts @@ -28,7 +28,7 @@ export const ActionTypes = { export class SearchAction implements Action { type = ActionTypes.SEARCH; - constructor(public payload: string) { } + constructor(public payload: any) { } } export class SearchCompleteAction implements Action { diff --git a/src/app/actions/cube/collection.ts b/src/app/actions/cube/collection.ts index 9e24d0e..f89e6f8 100644 --- a/src/app/actions/cube/collection.ts +++ b/src/app/actions/cube/collection.ts @@ -90,4 +90,4 @@ export type Actions | RemoveCubeFailAction | LoadAction | LoadSuccessAction - | LoadFailAction + | LoadFailAction; diff --git a/src/app/actions/cube/cube2.ts b/src/app/actions/cube/cube2.ts index 62a8eec..9c43ace 100644 --- a/src/app/actions/cube/cube2.ts +++ b/src/app/actions/cube/cube2.ts @@ -28,14 +28,13 @@ export const ActionTypes = { export class SearchAction implements Action { type = ActionTypes.SEARCH; - constructor(public payload: string) { } + constructor(public payload: any) { } } export class SearchCompleteAction implements Action { type = ActionTypes.SEARCH_COMPLETE; constructor(public payload: any[]|any) { - } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c521006..c2c27e9 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -7,7 +7,7 @@ import { EffectsModule } from '@ngrx/effects'; import { DBModule } from '@ngrx/db'; import { RouterStoreModule } from '@ngrx/router-store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; -import {MaterialModule, MaterialRootModule} from '@angular/material'; +import {MaterialModule, MdCardModule} from '@angular/material'; import { ComponentsModule } from './components'; import { BookEffects } from './effects/book'; @@ -31,7 +31,6 @@ import {FindCubePageComponent} from './containers/cube/find-cube-page'; import {SelectedCubePageComponent} from './containers/cube/selected-cube-page'; import {CubeExistsGuard} from './guards/cube-exists'; import {CubeEffects} from './effects/cube'; -import {TreeExecution} from './services/tree-execution'; import {AlgorithmsService} from './services/algorithms'; import {CubeAnalyticsPage} from './containers/cube/cube-analytics'; import {AnalysisService} from './services/analysis'; @@ -42,8 +41,10 @@ import {CubeExistsLightGuard} from './guards/cube-exists-light'; import {AggregatePreviewDialog, FactsPreviewDialog} from './components/cube/analytics/cube-analytics-detail'; import {FlexLayoutModule} from '@angular/flex-layout'; import 'hammerjs'; -import {MarkdownModule} from "angular2-markdown"; +import {MarkdownModule} from 'angular2-markdown'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import { InfiniteScrollerDirective } from './infinite-scroller.directive'; @NgModule({ @@ -51,12 +52,15 @@ import {MarkdownModule} from "angular2-markdown"; CommonModule, BrowserModule, - MaterialRootModule, +/* + MaterialModule, +*/ + BrowserAnimationsModule, FlexLayoutModule, ComponentsModule, RouterModule.forRoot(routes, { useHash: true }), MarkdownModule.forRoot(), - +MdCardModule, /** * StoreModule.provideStore is imported once in the root module, accepting a reducer * function or object map of reducer functions. If passed an object of @@ -122,7 +126,6 @@ import {MarkdownModule} from "angular2-markdown"; CubeExistsLightGuard, GoogleBooksService, ApiCubesService, - TreeExecution, AlgorithmsService, AnalysisService, {provide: APP_BASE_HREF, useValue: environment.baseHref}, diff --git a/src/app/components/analysis/clustering/clustering.html b/src/app/components/analysis/clustering/clustering.html index a6ca30b..349c83b 100644 --- a/src/app/components/analysis/clustering/clustering.html +++ b/src/app/components/analysis/clustering/clustering.html @@ -95,7 +95,7 @@
-
@@ -121,7 +121,7 @@
- @@ -147,7 +147,7 @@
-
diff --git a/src/app/components/analysis/clustering/clustering.ts b/src/app/components/analysis/clustering/clustering.ts index 839d977..0db42e6 100644 --- a/src/app/components/analysis/clustering/clustering.ts +++ b/src/app/components/analysis/clustering/clustering.ts @@ -75,7 +75,6 @@ import {IterablePipe} from "../../../pipes/mapToIterable"; } svg { - background: url("src/public/sprites/grid_paper.png"); font-family: monospace; } @@ -83,19 +82,15 @@ svg text { font-family: monospace; } -analytics-clustering-output md-card { - background: #303030; -} -md-spinner svg{ + +md-progress-spinner svg{ background: none; } -md-card{ -margin:5px; -} + `] }) -export class ClusteringOutputComponent extends AfterViewInit { +export class ClusteringOutputComponent implements AfterViewInit { get data(): any { return this._data; } @@ -133,7 +128,6 @@ export class ClusteringOutputComponent extends AfterViewInit { constructor( private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/analysis/descriptive/descriptive.html b/src/app/components/analysis/descriptive/descriptive.html index a6ca30b..f0f105f 100644 --- a/src/app/components/analysis/descriptive/descriptive.html +++ b/src/app/components/analysis/descriptive/descriptive.html @@ -95,7 +95,7 @@
-
@@ -121,7 +121,7 @@
- @@ -147,7 +147,7 @@
-
diff --git a/src/app/components/analysis/descriptive/descriptive.ts b/src/app/components/analysis/descriptive/descriptive.ts index d0a659f..956934d 100644 --- a/src/app/components/analysis/descriptive/descriptive.ts +++ b/src/app/components/analysis/descriptive/descriptive.ts @@ -75,7 +75,6 @@ import {IterablePipe} from "../../../pipes/mapToIterable"; } svg { - background: url("src/public/sprites/grid_paper.png"); font-family: monospace; } @@ -83,10 +82,8 @@ svg text { font-family: monospace; } -analytics-descriptive-output md-card { - background: #303030; -} -md-spinner svg{ + +md-progress-spinner svg{ background: none; } md-card{ @@ -95,7 +92,7 @@ margin:5px; `] }) -export class DescriptiveStatisticsOutputComponent extends AfterViewInit { +export class DescriptiveStatisticsOutputComponent implements AfterViewInit { get data(): any { return this._data; } @@ -106,8 +103,10 @@ export class DescriptiveStatisticsOutputComponent extends AfterViewInit { this._data = value; - if (value) - this.init(value); + if (value) { + this.init(value); + } + this.ref.detectChanges(); @@ -133,7 +132,6 @@ export class DescriptiveStatisticsOutputComponent extends AfterViewInit { constructor( private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/analysis/outlier/outlier_detection.html b/src/app/components/analysis/outlier/outlier_detection.html new file mode 100644 index 0000000..fc8b8cb --- /dev/null +++ b/src/app/components/analysis/outlier/outlier_detection.html @@ -0,0 +1,48 @@ +
+
+ + + + Outliers + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
ItemScoreTarget
{{item.Item}}{{item.Sco}}{{item.Targ}}
+ + +
+ +
+ +
+ + +
diff --git a/src/app/components/analysis/outlier/outlier_detection.ts b/src/app/components/analysis/outlier/outlier_detection.ts new file mode 100644 index 0000000..11935be --- /dev/null +++ b/src/app/components/analysis/outlier/outlier_detection.ts @@ -0,0 +1,151 @@ +/** + * Created by larjo on 18/10/2016. + */ +import { + ChangeDetectionStrategy, ViewEncapsulation, + Component, Input, ElementRef, + AfterViewInit, ViewChild, NgModule +} from '@angular/core'; +import {Inject, NgZone, ChangeDetectorRef} from '@angular/core'; +import * as d3 from 'd3'; +import {Observable} from 'rxjs'; +import * as $ from 'jquery'; +import * as _ from 'lodash'; + +import {Store} from '@ngrx/store'; +import {Cube} from '../../../models/cube'; +import {AnalysisCall} from '../../../models/analysis/analysisCall'; +import {IterablePipe} from '../../../pipes/mapToIterable'; + + +@Component({ + selector: 'analytics-outliers-output', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + templateUrl: './outlier_detection.html', + styles: [` + + + .axis path, +.axis line { + fill: none; + stroke: #000; + shape-rendering: crispEdges; +} + +.x.axis path { + display: none; +} + +.line { + fill: none; + stroke: #82bf5e; + stroke-width: 1.5px; +} + +.lineUp80 { + fill: none; + stroke: orange; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} +.lineUp95 { + fill: none; + stroke: red; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} + + +.lineLow95 { + fill: none; + stroke: green; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} +.lineLow80 { + fill: none; + stroke: gold; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} + +svg { + font-family: monospace; +} + +svg text { + font-family: monospace; +} + + +md-progress-spinner svg{ +background: none; +} +md-card{ +margin:5px; +} + + `] +}) +export class OutliersDetectionOutputComponent implements AfterViewInit { + get data(): any { + return this._data; + } + + + @Input() + set data(value: any) { + this._data = value; + + + if (value) + this.init(value); + + this.ref.detectChanges(); + } + ngAfterViewInit(): void { + + let that = this; + + } + + @ViewChild('container') container: any; + + + private _data: any; + + + init(values: any) { + + let that = this; + this.container = this.elementRef; + + } + + + constructor( private elementRef: ElementRef, private ref: ChangeDetectorRef) { + setInterval(() => { + // the following is required, otherwise the view will not be updated + this.ref.markForCheck(); + }, 5000); + } + @Input() + get analysisCall(): AnalysisCall { + return this._analysisCall; + } + + set analysisCall(value: AnalysisCall) { + this._analysisCall = value; + } + + private _analysisCall: AnalysisCall; + @Input() + public cube: Cube; + + +} diff --git a/src/app/components/analysis/rulemining/rulemining.html b/src/app/components/analysis/rulemining/rulemining.html new file mode 100644 index 0000000..349c83b --- /dev/null +++ b/src/app/components/analysis/rulemining/rulemining.html @@ -0,0 +1,159 @@ +
+
+ + + + Statistical measures + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Statistical Measure{{item.label}} ({{item.currency}})
Minimum observed value{{data?.descriptives.Min[item.ref][0]}}
Maximum observed value{{data?.descriptives.Max[item.ref][0]}}
Range of values{{data?.descriptives.Range[item.ref][0]}}
Mean{{data?.descriptives.Mean[item.ref][0]}}
Quantiles +
    +
  • 25%: {{data?.descriptives.Quantiles[item.ref][0]}}
  • +
  • 75%: {{data?.descriptives.Quantiles[item.ref][1]}}
  • +
+
Variance{{data?.descriptives.Variance[item.ref][0]}}
Standard Deviation + {{data?.descriptives.StandardDeviation[item.ref][0]}} +
Skewness{{data?.descriptives.Skewness[0]}}
Kurtosis{{data?.descriptives.Kurtosis[0]}}
+ + +
+ +
+ +
+ +
+ + + + Frequency chart + + share + + + +
+ +
+ + + + +
+ + +
+ +
+ +
+
+ + + + Box plot + + share + + + +
+ + + + + +
+ +
+ +
+ + +
+ + + + Histogram + + share + + + +
+ + + +
+ +
+ +
+ + +
diff --git a/src/app/components/analysis/rulemining/rulemining.ts b/src/app/components/analysis/rulemining/rulemining.ts new file mode 100644 index 0000000..fb11e56 --- /dev/null +++ b/src/app/components/analysis/rulemining/rulemining.ts @@ -0,0 +1,150 @@ +/** + * Created by larjo on 18/10/2016. + */ +import { + ChangeDetectionStrategy, ViewEncapsulation, + Component, Input, ElementRef, + AfterViewInit, ViewChild, NgModule +} from '@angular/core'; +import {Inject, NgZone, ChangeDetectorRef} from '@angular/core'; +import * as d3 from 'd3'; +import {Observable} from "rxjs"; +import * as $ from 'jquery' +import * as _ from 'lodash'; + +import {Store} from "@ngrx/store"; +import {Cube} from "../../../models/cube"; +import {AnalysisCall} from "../../../models/analysis/analysisCall"; +import {IterablePipe} from "../../../pipes/mapToIterable"; + + +@Component({ + selector: 'app-analytics-rulemining-output', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + templateUrl: './rulemining.html', + styles: [` + + + .axis path, +.axis line { + fill: none; + stroke: #000; + shape-rendering: crispEdges; +} + +.x.axis path { + display: none; +} + +.line { + fill: none; + stroke: #82bf5e; + stroke-width: 1.5px; +} + +.lineUp80 { + fill: none; + stroke: orange; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} +.lineUp95 { + fill: none; + stroke: red; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} + + +.lineLow95 { + fill: none; + stroke: green; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} +.lineLow80 { + fill: none; + stroke: gold; + stroke-width: 1.5px; + stroke-dasharray: 5,5; + +} + +svg { + font-family: monospace; +} + +svg text { + font-family: monospace; +} + + +md-progress-spinner svg{ +background: none; +} + + + `] +}) +export class RuleMiningOutputComponent implements AfterViewInit { + get data(): any { + return this._data; + } + + + @Input() + set data(value: any) { + this._data = value; + + + if (value) + this.init(value); + + + this.ref.detectChanges(); + } + ngAfterViewInit(): void { + + let that = this; + + } + + @ViewChild('container') container: any; + + + private _data: any; + + + init(values: any) { + + let that = this; + this.container = this.elementRef; + + } + + + constructor( private elementRef: ElementRef, private ref: ChangeDetectorRef) { + setInterval(() => { + // the following is required, otherwise the view will not be updated + this.ref.markForCheck(); + }, 5000); + } + @Input() + get analysisCall(): AnalysisCall { + return this._analysisCall; + } + + set analysisCall(value: AnalysisCall) { + this._analysisCall = value; + } + + private _analysisCall: AnalysisCall; + @Input() + public cube: Cube; + + +} diff --git a/src/app/components/analysis/timeseries/timeseries.html b/src/app/components/analysis/timeseries/timeseries.html index 0c65c0d..d50f12e 100644 --- a/src/app/components/analysis/timeseries/timeseries.html +++ b/src/app/components/analysis/timeseries/timeseries.html @@ -69,7 +69,7 @@
-
@@ -88,7 +88,7 @@
-
@@ -114,7 +114,7 @@
- @@ -292,7 +292,7 @@
-
@@ -313,7 +313,7 @@
-
@@ -341,7 +341,7 @@
- @@ -364,7 +364,7 @@
- @@ -391,7 +391,7 @@
-
@@ -412,7 +412,7 @@
-
@@ -433,7 +433,7 @@
-
@@ -529,7 +529,7 @@
-
diff --git a/src/app/components/analysis/timeseries/timeseries.ts b/src/app/components/analysis/timeseries/timeseries.ts index 2a837b3..88dbc64 100644 --- a/src/app/components/analysis/timeseries/timeseries.ts +++ b/src/app/components/analysis/timeseries/timeseries.ts @@ -17,80 +17,80 @@ import {Cube} from '../../../models/cube'; encapsulation: ViewEncapsulation.None, templateUrl: './timeseries.html', styles: [` -.axis path, -.axis line { - fill: none; - stroke: #000; - shape-rendering: crispEdges; -} + .axis path, + .axis line { + fill: none; + stroke: #000; + shape-rendering: crispEdges; + } -.x.axis path { - display: none; -} + .x.axis path { + display: none; + } -.line { - fill: none; - stroke: #82bf5e; - stroke-width: 2px; -} + .line { + fill: none; + stroke: #82bf5e; + stroke-width: 2px; + } -.lineUp80 { - fill: none; - stroke: orange; - stroke-width: 2px; - stroke-dasharray: 5, 5; + .lineUp80 { + fill: none; + stroke: orange; + stroke-width: 2px; + stroke-dasharray: 5, 5; -} + } -.lineUp95 { - fill: none; - stroke: red; - stroke-width: 2px; - stroke-dasharray: 5, 5; + .lineUp95 { + fill: none; + stroke: red; + stroke-width: 2px; + stroke-dasharray: 5, 5; -} + } -.lineLow95 { - fill: none; - stroke: green; - stroke-width: 2px; - stroke-dasharray: 5, 5; + .lineLow95 { + fill: none; + stroke: green; + stroke-width: 2px; + stroke-dasharray: 5, 5; -} + } -.lineLow80 { - fill: none; - stroke: gold; - stroke-width: 1.5px; - stroke-dasharray: 5, 5; + .lineLow80 { + fill: none; + stroke: gold; + stroke-width: 1.5px; + stroke-dasharray: 5, 5; -} + } -svg { - background: url("src/public/sprites/grid_paper.png"); - font-family: monospace; -} + svg { + background: url('assets/sprites/grid_paper.png'); + font-family: monospace; + } -svg text { - font-family: monospace; -} + svg text { + font-family: monospace; + } -analytics-timeseries-output md-card { - background: #303030; -} + analytics-timeseries-output md-card { + background: #303030; + } -md-spinner svg{ -background: none; -} + md-progress-spinner svg { + background: none; + } -md-card{ -margin:5px; -} + .content-card md-card { + margin: 5px; + } `] }) -export class TimeSeriesOutputComponent extends AfterViewInit { +export class TimeSeriesOutputComponent implements AfterViewInit { @Input() get analysisCall(): AnalysisCall { @@ -142,7 +142,6 @@ export class TimeSeriesOutputComponent extends AfterViewInit { constructor( private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/analysis/visualizations/boxPlot.ts b/src/app/components/analysis/visualizations/boxPlot.ts index 1ff1a66..d8d6645 100644 --- a/src/app/components/analysis/visualizations/boxPlot.ts +++ b/src/app/components/analysis/visualizations/boxPlot.ts @@ -8,12 +8,12 @@ import { } from '@angular/core'; import {Inject, NgZone, ChangeDetectorRef} from '@angular/core'; import * as d3 from 'd3'; -import {Observable} from "rxjs"; -import * as $ from 'jquery' +import {Observable} from 'rxjs'; +import * as $ from 'jquery'; import * as _ from 'lodash'; -import {Store} from "@ngrx/store"; -import {AnalysisVisualization} from "../visualization"; +import {Store} from '@ngrx/store'; +import {AnalysisVisualization} from '../visualization'; @Component({ selector: 'analytics-box-plot', @@ -66,7 +66,7 @@ stroke: green; `] }) -export class BoxPlotVisualization extends AfterViewInit { +export class BoxPlotVisualization implements AfterViewInit { get data(): any { return this._data; } @@ -258,7 +258,6 @@ export class BoxPlotVisualization extends AfterViewInit { constructor( private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/analysis/visualizations/frequencyChart.ts b/src/app/components/analysis/visualizations/frequencyChart.ts index 5cd66c4..d66b0cd 100644 --- a/src/app/components/analysis/visualizations/frequencyChart.ts +++ b/src/app/components/analysis/visualizations/frequencyChart.ts @@ -54,7 +54,7 @@ import {AnalysisVisualization} from "../visualization"; `] }) -export class FrequencyVisualization extends AfterViewInit { +export class FrequencyVisualization implements AfterViewInit { get data(): any { return this._data; } @@ -232,7 +232,6 @@ export class FrequencyVisualization extends AfterViewInit { constructor( private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/analysis/visualizations/histogram.ts b/src/app/components/analysis/visualizations/histogram.ts index b67140c..e405958 100644 --- a/src/app/components/analysis/visualizations/histogram.ts +++ b/src/app/components/analysis/visualizations/histogram.ts @@ -36,7 +36,7 @@ import {AnalysisVisualization} from "../visualization"; `] }) -export class HistogramVisualization extends AfterViewInit { +export class HistogramVisualization implements AfterViewInit { get values(): any { return this._values; } @@ -217,7 +217,7 @@ export class HistogramVisualization extends AfterViewInit { } @Input() - legend:boolean = false; + legend: boolean = false; init(values: any) { @@ -225,7 +225,7 @@ export class HistogramVisualization extends AfterViewInit { let that = this; - d3.select(that.vizCanvas.nativeElement).html(""); + d3.select(that.vizCanvas.nativeElement).html(''); // this.vizCanvas = this.elementRef; @@ -242,7 +242,6 @@ export class HistogramVisualization extends AfterViewInit { constructor(private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/analysis/visualizations/lineChart.ts b/src/app/components/analysis/visualizations/lineChart.ts index 4f92fe9..c017daa 100644 --- a/src/app/components/analysis/visualizations/lineChart.ts +++ b/src/app/components/analysis/visualizations/lineChart.ts @@ -36,7 +36,7 @@ import {AnalysisVisualization} from "../visualization"; `] }) -export class LineChartVisualization extends AfterViewInit { +export class LineChartVisualization implements AfterViewInit { get values(): any { return this._values; } @@ -289,7 +289,6 @@ export class LineChartVisualization extends AfterViewInit { constructor(private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/analysis/visualizations/scatterPlot.ts b/src/app/components/analysis/visualizations/scatterPlot.ts index 912060b..a082f62 100644 --- a/src/app/components/analysis/visualizations/scatterPlot.ts +++ b/src/app/components/analysis/visualizations/scatterPlot.ts @@ -40,7 +40,7 @@ fill: blue; `] }) -export class ScatterPlotVisualization extends AfterViewInit { +export class ScatterPlotVisualization implements AfterViewInit { get y_accessor(): string { return this._y_accessor; } @@ -146,12 +146,12 @@ export class ScatterPlotVisualization extends AfterViewInit { let xis: number[] = data.map(function (d: any) { - return d[that._x_accessor]; + return Number(d[that._x_accessor]); }); let yis: number[] = data.map(function (d: any) { - return d[that._y_accessor]; + return Number(d[that._y_accessor]); }); @@ -248,7 +248,6 @@ export class ScatterPlotVisualization extends AfterViewInit { constructor(private elementRef: ElementRef, private ref: ChangeDetectorRef) { - super(); setInterval(() => { // the following is required, otherwise the view will not be updated this.ref.markForCheck(); diff --git a/src/app/components/cube/analytics/cube-analytics-detail.html b/src/app/components/cube/analytics/cube-analytics-detail.html index ba4b588..e00c57a 100644 --- a/src/app/components/cube/analytics/cube-analytics-detail.html +++ b/src/app/components/cube/analytics/cube-analytics-detail.html @@ -1,12 +1,11 @@ -

- + {{ (cube$|async).pckg.title }}: {{ executionConfiguration.title }} - @@ -19,7 +18,6 @@ -

@@ -122,17 +120,18 @@
-
- -
+ + + {{item | + nestedProperty:'label'}} + + + +
@@ -141,60 +140,62 @@
-
- + - + + +
-
-
- + + + + - -
+
@@ -210,14 +211,14 @@
- + error
{{error}}
- + +
diff --git a/src/app/components/cube/analytics/cube-analytics-detail.ts b/src/app/components/cube/analytics/cube-analytics-detail.ts index 1fd696c..e5cd71b 100644 --- a/src/app/components/cube/analytics/cube-analytics-detail.ts +++ b/src/app/components/cube/analytics/cube-analytics-detail.ts @@ -22,6 +22,7 @@ import {IterablePipe} from '../../../pipes/mapToIterable'; import {IterablePairsPipe} from '../../../pipes/mapToPairsIterable'; import {PipesModule} from '../../../pipes/index'; import {ExecutionConfiguration} from '../../../models/analysis/executionConfiguration'; +import {JobTimeoutException} from '../../../models/analysis/jobTimeoutException'; /** * Tip: Export type aliases for your component's inputs and outputs. Until we @@ -43,16 +44,20 @@ export type RemoveOutput = Cube; padding: 0 14px; } - .example-spacer { flex: 1 1 auto; } + :host { display: flex; justify-content: center; } + md-progress-spinner svg { + background: none; + } + md-card-title { justify-content: center; align-items: center; @@ -62,6 +67,7 @@ export type RemoveOutput = Cube; .mat-button-toggle-checked { background-color: transparent; + color: white; } img { @@ -83,31 +89,33 @@ export type RemoveOutput = Cube; } + md-toolbar { + display: flex; + align-items: center; + padding: 0 15px; + } + .well { background-color: #615f5f; } - - - md-card.input-card md-card-header{ - background: #82BF5E; - } - + md-card.input-card md-card-header { + } md-card.input-card { - background: dimgray; + background: #f3f3f3; margin: 5px 0; } - md-card.input-card:first-child{ + md-card.input-card:first-child { margin: 0 0 5px 0; } - - .content-card{ + + .content-card { margin: 0 0 5px 10px; - background: url("src/public/sprites/footer_lodyas.png"); - box-shadow: 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12); - transition: box-shadow 280ms cubic-bezier(.4,0,.2,1); + background: url("assets/sprites/brushed_alu.png"); + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12); + transition: box-shadow 280ms cubic-bezier(.4, 0, .2, 1); will-change: box-shadow; display: block; position: relative; @@ -115,6 +123,10 @@ export type RemoveOutput = Cube; border-radius: 2px; } + .content-card .error-card { + text-align: center; + } + `] }) @@ -137,6 +149,7 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { this._algorithmName = value; } + get configurationName(): Observable { return this._configurationName; } @@ -162,6 +175,7 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { set algorithm(value: Algorithm) { this._algorithm = value; } + get executionConfiguration(): ExecutionConfiguration { return this._executionConfiguration; } @@ -207,27 +221,24 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { this.cube$ = this.store.let(fromRoot.getSelectedCube); this.loading$ = this.store.let(fromRoot.getExecutionLoading); - debugger; - let that = this; + const that = this; this.cube$.subscribe(function (cube) { that.cube = cube; - let observableAlgorithm: Observable = that.algorithmName.flatMap(name => that.algorithmsService.getAlgorithm(name, that.cube)); + const observableAlgorithm: Observable = that.algorithmName.flatMap(name => that.algorithmsService.getAlgorithm(name, that.cube)); observableAlgorithm.subscribe(function (algorithm: Algorithm) { - debugger; - let observableConfiguration: Observable = that.configurationName.map(name => algorithm.configurations.get(name)); + const observableConfiguration: Observable = that.configurationName.map(name => algorithm.configurations.get(name)); that.algorithm = algorithm; observableConfiguration.subscribe(function (config: ExecutionConfiguration) { that.executionConfiguration = config; - let call = new AnalysisCall(config, that.cube); + const call = new AnalysisCall(config, that.cube); call.deParametrizeInputs(that.route.snapshot.queryParams); that.analysisCall = call; - debugger; if (call.valid) that.execute(that.executionConfiguration); }); - }); + }); }); } @@ -262,17 +273,17 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { openFactsDialog(input) { - let that = this; + const that = this; this.apiCubesService.fact(this.analysisCall.inputs[input.name]).subscribe(function (json) { - let dialogRef = that.dialog.open(FactsPreviewDialog); + const dialogRef = that.dialog.open(FactsPreviewDialog); dialogRef.componentInstance['json'] = json; dialogRef.componentInstance['request'] = that.analysisCall.inputs[input.name]; dialogRef.componentInstance['cube'] = that.cube; -/* dialogRef.afterClosed().subscribe(result => { - that.selectedOption = result; - });*/ + /* dialogRef.afterClosed().subscribe(result => { + that.selectedOption = result; + });*/ }); @@ -280,26 +291,25 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { openAggregateDialog(input) { - let that = this; + const that = this; this.apiCubesService.aggregate(this.analysisCall.inputs[input.name]).subscribe(function (json) { - let dialogRef = that.dialog.open(AggregatePreviewDialog); + const dialogRef = that.dialog.open(AggregatePreviewDialog); dialogRef.componentInstance['json'] = json; dialogRef.componentInstance['request'] = that.analysisCall.inputs[input.name]; dialogRef.componentInstance['cube'] = that.cube; -/* dialogRef.afterClosed().subscribe(result => { - that.selectedOption = result; - });*/ + /* dialogRef.afterClosed().subscribe(result => { + that.selectedOption = result; + });*/ }); } - private prepareTimeSeries() { - let dateTimeDimension = this.analysisCall.inputs['json_data'].drilldowns.find(drilldown => this.isDateTime(drilldown.column)); + const dateTimeDimension = this.analysisCall.inputs['json_data'].drilldowns.find(drilldown => this.isDateTime(drilldown.column)); this.analysisCall.inputs['json_data'].cube = this.cube; @@ -319,10 +329,10 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { this.analysisCall.inputs[input_name] = []; for (let i = 0; i < eventTarget.options.length; i++) { - let optionElement = eventTarget.options[i]; + const optionElement = eventTarget.options[i]; if (optionElement.selected === true) { - let key = eventTarget.options[i].attributes['data-key'].value; + const key = eventTarget.options[i].attributes['data-key'].value; this.analysisCall.inputs[input_name].push(collection.get(key)); } @@ -348,17 +358,20 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { this.prepareDescriptiveStatistics(); - let that = this; + const that = this; this.store.dispatch(new execution.ExecuteAction(null)); this.analysisService.execute(configuration, this.analysisCall.queryParams()) .catch((error: any) => { - if (error.status < 400 || error.status === 500) { + if (error.status < 400 || error.status === 500) { return Observable.throw(new Error(error.status)); } else if (error.status === 400) { return Observable.throw(new Error(error._body)); } + else if (error instanceof JobTimeoutException) { + return Observable.throw(new Error('We are sorry, the analysis process did not finish in timely manner')); + } }) .subscribe(function (values) { @@ -366,14 +379,19 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { that.ref.detectChanges(); that.store.dispatch(new execution.ExecuteCompleteAction(null)); - }, err => { this.error = err; that.store.dispatch(new execution.ExecuteCompleteAction(null)); - debugger; console.log(err); } ); + }, err => { + this.error = err; + that.store.dispatch(new execution.ExecuteCompleteAction(null)); + console.log(err); + }, () => { + console.log('Completed'); + }); } newFactRequest = new FactRequest; - aggregateShown: boolean = false; - factsShown: boolean = false; + aggregateShown = false; + factsShown = false; toggleAggregate() { @@ -390,16 +408,17 @@ export class CubeAnalyticsDetailComponent implements AfterViewInit { @Component({ selector: 'facts-preview-dialog', template: ` -

Facts preview ({{json.data.length}} records)

-
+

Facts preview ({{json.data.length}} records)

+
@@ -437,13 +456,14 @@ export class FactsPreviewDialog { @Component({ selector: 'aggregate-preview-dialog', template: ` -

Aggregate preview ({{json.cells.length}} results)

-
+

Aggregate preview ({{json.cells.length}} results)

+
- {{cube.model.attributes.get(col)?.dimension.label}} - {{cube.model.attributes.get(col)?.label}} + {{cube.model.attributes.get(col)?.dimension.label}} - {{cube.model.attributes.get(col)?.label}} {{cube.model.measures.get(col)?.label}} - - + +
- {{cube.model.attributes.get(col)?.dimension.label}} - {{cube.model.attributes.get(col)?.label}} + {{cube.model.attributes.get(col)?.dimension.label}} - {{cube.model.attributes.get(col)?.label}} diff --git a/src/app/components/cube/analytics/cube-analytics-list.ts b/src/app/components/cube/analytics/cube-analytics-list.ts index 6b2c1ce..4f6f96b 100644 --- a/src/app/components/cube/analytics/cube-analytics-list.ts +++ b/src/app/components/cube/analytics/cube-analytics-list.ts @@ -12,20 +12,28 @@ import * as fromRoot from '../../../reducers'; template: ` - - - {{cube.pckg.title}} - - -
- - -
- - -
+ + {{cube.pckg.title}} + + + + + + + + + +
@@ -38,13 +46,28 @@ import * as fromRoot from '../../../reducers'; } md-card { - margin: 0 16px 16px 0; + margin: 0 0 16px 0; + width: 100%; + } + + masonry { + margin: 0 auto; + text-align: center; + + } + + md-sidenav a{ + color:white; } .card-container { display: flex; flex-direction: row; } + + .mat-card md-card-title{ + text-align: center; + } `] }) export class CubeAnalyticsListComponent { @@ -64,20 +87,20 @@ export class CubeAnalyticsListComponent { that.cube = cube; let observable: Observable = - that.algorithmsService.getCompatibleAlgorithms(cube); + that.algorithmsService.getActualCompatibleAlgorithms(); observable.subscribe(function (algorithms: Algorithm[]) { that.algorithms = algorithms; }); - let observable2: Observable = - that.algorithmsService.getActualCompatibleAlgorithms(cube); - - observable2.subscribe(function (algorithms: Algorithm[]) { - that.actualAlgorithms = algorithms; - }); + /* let observable2: Observable = + that.algorithmsService.getActualCompatibleAlgorithms(cube); + observable2.subscribe(function (algorithms: Algorithm[]) { + that.actualAlgorithms = algorithms; + }); + */ }); setInterval(() => { diff --git a/src/app/components/cube/analytics/cube-analytics-preview.ts b/src/app/components/cube/analytics/cube-analytics-preview.ts index 603da12..8cc0c3a 100644 --- a/src/app/components/cube/analytics/cube-analytics-preview.ts +++ b/src/app/components/cube/analytics/cube-analytics-preview.ts @@ -32,7 +32,7 @@ import {Cube} from '../../../models/cube'; md-card { width: 400px; margin: 15px; - background: dimgray; + background: #f7f7f7; } md-card-title { @@ -77,9 +77,7 @@ import {Cube} from '../../../models/cube'; margin-bottom: 0; } - md-card.algo-card md-card-header { - background: #82BF5E; - } + `] }) @@ -89,7 +87,6 @@ export class CubeAnalyticsPreviewComponent { get cubeId() { - //debugger; return this.cube.name; } diff --git a/src/app/components/cube/cube-detail.html b/src/app/components/cube/cube-detail.html index c994f5a..ac14d93 100644 --- a/src/app/components/cube/cube-detail.html +++ b/src/app/components/cube/cube-detail.html @@ -3,10 +3,6 @@ Cube: {{ name }} - - Loading... - - +
+ + + + + + + + +
+ `, styles: [` - masonry{ + masonry { margin: 0 auto; - text-align: center; + text-align: center; + + } + + - } - - - `] }) export class CubePreviewListComponent { @Input() cubes: Cube[]; + + + + + + + + constructor() { + + + } + } diff --git a/src/app/components/cube/cube-preview.ts b/src/app/components/cube/cube-preview.ts index 9d60571..af243e8 100644 --- a/src/app/components/cube/cube-preview.ts +++ b/src/app/components/cube/cube-preview.ts @@ -4,33 +4,36 @@ import {Cube} from '../../models/cube'; @Component({ selector: 'indigo-cube-preview', - template: ` - - - {{ cube.pckg.title }} - {{ cube.pckg.author }} - - - -
- - -
- -
+ template: ` + + + + {{ cube.pckg.title }} + {{ cube.pckg.author }} + + + + + + `, styles: [` - md-card-title{ - font-size:18px; - } + md-card-title { + font-size: 18px; + } + a { color: inherit; text-decoration: none; } + img { width: 60px; min-width: 60px; @@ -41,50 +44,48 @@ import {Cube} from '../../models/cube'; display: inline-block; font-size: 13px; } - - md-card { + + md-card { margin: 0 16px 16px 0; - width: 350px; + width: 20rem; } - - .flag-icon{ - width: 48px; - height: 36px; - min-width: 48px; - min-height: 36px; - max-width: 48px; - max-height: 36px; - margin-right: -16px; - margin-top: -20px; - - opacity: .75; - transform: rotate(90deg); + .flag-icon { + width: 48px; + height: 36px; + min-width: 48px; + min-height: 36px; + max-width: 48px; + max-height: 36px; + margin-right: -16px; + margin-top: -20px; + opacity: .75; + transform: rotate(90deg); - box-shadow: 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12); - transition: box-shadow 280ms cubic-bezier(.4,0,.2,1); + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12); + transition: box-shadow 280ms cubic-bezier(.4, 0, .2, 1); will-change: box-shadow; - + border-radius: 2px; - - + } - md-card-title-group{ -overflow-wrap: break-word; - word-wrap: break-word; - - -ms-word-break: break-all; - /* This is the dangerous one in WebKit, as it breaks things wherever */ - word-break: break-all; - /* Instead use this non-standard one: */ - word-break: break-word; - - /* Adds a hyphen where the word breaks, if supported (No Blink) */ - -ms-hyphens: auto; - -moz-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; + + md-card-title-group { + overflow-wrap: break-word; + word-wrap: break-word; + + -ms-word-break: break-all; + /* This is the dangerous one in WebKit, as it breaks things wherever */ + word-break: break-all; + /* Instead use this non-standard one: */ + word-break: break-word; + + /* Adds a hyphen where the word breaks, if supported (No Blink) */ + -ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; } `] }) diff --git a/src/app/components/cube/cube-search.ts b/src/app/components/cube/cube-search.ts index 41a4a90..9037dca 100644 --- a/src/app/components/cube/cube-search.ts +++ b/src/app/components/cube/cube-search.ts @@ -52,7 +52,7 @@ import {Component, Output, Input, EventEmitter, AfterViewInit} from '@angular/co }) export class CubeSearchComponent implements AfterViewInit{ ngAfterViewInit(): void { - this.search.emit("") + this.search.emit(''); } @Input() query: string = ''; diff --git a/src/app/components/index.ts b/src/app/components/index.ts index 4970378..46f9b5c 100644 --- a/src/app/components/index.ts +++ b/src/app/components/index.ts @@ -1,5 +1,4 @@ import { CommonModule } from '@angular/common'; -import { MaterialModule } from '@angular/material'; import { NgModule } from '@angular/core'; import {ReactiveFormsModule, FormsModule} from '@angular/forms'; import { RouterModule } from '@angular/router'; @@ -19,11 +18,8 @@ import {CubeDetailComponent} from './cube/cube-detail'; import {CubePreviewComponent} from './cube/cube-preview'; import {CubePreviewListComponent} from './cube/cube-preview-list'; import {CubeSearchComponent} from './cube/cube-search'; -import {TreeBuilder} from './tree/tree-builder'; -import {BarChartVisualization} from './tree/visualizations/barchart'; import {AggregateRequestBuilder} from './request/aggregate-request-builder'; -import {JsonTreeComponent} from '../lib/json-tree/json-tree'; -import {JsonNodeComponent} from '../lib/json-tree/json-node'; + import {CubeAnalyticsDetailComponent} from './cube/analytics/cube-analytics-detail'; import { LineChartVisualization, LineChartTrends, LineChartRemainders, @@ -53,6 +49,12 @@ import LineString = GeoJSON.LineString; import {FlexLayoutModule} from '@angular/flex-layout'; import {UserGuidePageComponent} from "./user-guide"; import {MarkdownComponent, MarkdownModule} from "angular2-markdown"; +import {OutliersDetectionOutputComponent} from "./analysis/outlier/outlier_detection"; +import { + MdButtonModule, MdCheckboxModule, MdInputModule, MdSidenavModule, MdChipsModule, MdButtonToggleModule, + MdTooltipModule, MdProgressBarModule, MdCardModule, MaterialModule, MdIconModule, MdDialogModule, MdProgressSpinnerModule, MdSelectModule, MdOptionModule, +} from '@angular/material'; +import {InfiniteScrollerDirective} from "../infinite-scroller.directive"; @@ -71,12 +73,9 @@ export const COMPONENTS = [ NavItemComponent, SidenavComponent, ToolbarComponent, - TreeBuilder, HistogramVisualization, - BarChartVisualization, AggregateRequestBuilder, FactRequestBuilder, - JsonTreeComponent, UserGuidePageComponent, CubeAnalyticsDetailComponent, CubeAnalyticsIndexComponent, @@ -84,7 +83,6 @@ export const COMPONENTS = [ BoxPlotVisualization, LineChartVisualization, ScatterPlotVisualization, - JsonNodeComponent, TimeSeriesOutputComponent, DescriptiveStatisticsOutputComponent, AcfChartVisualization, @@ -95,6 +93,7 @@ export const COMPONENTS = [ ScatterPlotTimeseriesDecompositionFittedResiduals, ScatterPlotTimeseriesFittingFittedResiduals, LineChartFittingResiduals, + OutliersDetectionOutputComponent, LineChartFittingTimeFitted, PacfChartVisualizationRegular, PacfChartVisualizationResiduals, @@ -106,7 +105,8 @@ export const COMPONENTS = [ CubeAnalyticsEmbedComponent, LineChartTimeSeriesForecast, FrequencyChartDescriptive, - HistogramDescriptive + HistogramDescriptive, + InfiniteScrollerDirective ]; @@ -114,13 +114,25 @@ export const COMPONENTS = [ imports: [ CommonModule, ReactiveFormsModule, - MaterialModule, RouterModule, PipesModule, FormsModule, MasonryModule, FlexLayoutModule, - MarkdownModule + MarkdownModule, + MdProgressBarModule, + MdInputModule, + MdSidenavModule, + MdButtonModule, + MdChipsModule, + MdButtonToggleModule, + MdTooltipModule, + MdCardModule, + MdIconModule, + MdDialogModule, + MdProgressSpinnerModule, + MdOptionModule, + MdSelectModule ], declarations: COMPONENTS, exports: COMPONENTS, diff --git a/src/app/components/layout.ts b/src/app/components/layout.ts index 2aa7e04..2859aae 100644 --- a/src/app/components/layout.ts +++ b/src/app/components/layout.ts @@ -8,49 +8,128 @@ import {Observable} from "rxjs"; @Component({ selector: 'bc-layout', - template: ` - - - - - Browse datasets - - - - - Read the manual - - - - - - - - indigo - - -
-
- + template: ` + + + + + + + + + +
+
+ + +
+
-
-

- Indigo was developed with support from the OpenBudgets.eu project, funded by the European Union’s H2020 EU research and innovation programme, under grant agreement No 645833. - -

-
-
-
+ `, styles: [` - + *, /deep/ * { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } - - + * { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @@ -59,47 +138,57 @@ import {Observable} from "rxjs"; .secondary { color: rgba(0, 0, 0, .54); } - - - .footer{ + + bc-nav-item { + display: flex; + padding: 10px; + + } + + bc-nav-item:focus { + outline: none; + } + + .footer { color: gainsboro; text-align: center; font-size: x-small; justify-content: center; display: flex; } - - .footer p{ + + .footer p { max-width: calc(90em * 0.5); padding: 10px; - border-top: 1px solid #4caf50; } - .site{ + .site { display: flex; flex-direction: column; min-height: 93.5vh; } - .content{ + + .content { flex: 1; } - + md-sidenav-layout { - color:white; - // right: 30% !important; // Make space for the devtools, demo only + color: white; + / / right: 30 % !important; + / / Make space for the devtools, demo only } md-sidenav { width: 300px; - color:white; + color: white; } - - .indigo{ + + .indigo { font-family: 'Leckerli One', cursive; - color:white; + color: white; } - - .md-button-wrapper{ + + .md-button-wrapper { color: #29367f; } `] diff --git a/src/app/components/nav-item.ts b/src/app/components/nav-item.ts index caf8071..3b50c5d 100644 --- a/src/app/components/nav-item.ts +++ b/src/app/components/nav-item.ts @@ -4,7 +4,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'bc-nav-item', template: ` - + {{ icon }} {{ hint }} @@ -15,10 +15,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core'; color: rgba(0, 0, 0, 0.54); } - a:focus, a:hover { - color: white; - text-decoration: none; - } + `] }) export class NavItemComponent { diff --git a/src/app/components/ng-chosen.ts b/src/app/components/ng-chosen.ts index 7b49eab..a01943f 100644 --- a/src/app/components/ng-chosen.ts +++ b/src/app/components/ng-chosen.ts @@ -25,10 +25,10 @@ import {NestedPropertyPipe} from "../pipes/nestedProperty"; }) export class NgChosenComponent implements AfterViewInit { - @ViewChild('selectElem') el:ElementRef; + @ViewChild('selectElem') el: ElementRef; @Input() public items = []; - @Input() public valueAccessor:string; - @Input() public labelAccessor:string; + @Input() public valueAccessor: string; + @Input() public labelAccessor: string; onChangeObj(newObj) { @@ -47,12 +47,12 @@ export class NgChosenComponent implements AfterViewInit { } - get selectedItem():any { + get selectedItem(): any { return this._selectedItem; } - set selectedItem(value:any) { + set selectedItem(value: any) { /*if(value) this.selectedItemChange.emit({value:value});*/ this._selectedItem = value; @@ -63,10 +63,10 @@ export class NgChosenComponent implements AfterViewInit { selectedItemChange = new EventEmitter(); ngAfterViewInit() { - if (this.items.length>0) { + if (this.items.length > 0) { - this.selectedItem =this.items[0]; + this.selectedItem = this.items[0]; } diff --git a/src/app/components/request/aggreegate-request-builder.html b/src/app/components/request/aggreegate-request-builder.html index c612bbf..9cc9378 100644 --- a/src/app/components/request/aggreegate-request-builder.html +++ b/src/app/components/request/aggreegate-request-builder.html @@ -1,189 +1,209 @@ -
-

Aggregates

-
+ -
    -
  • -
    - -
    -
    {{aggregate.column.label}}
    -
  • + +

    Aggregates

    + +
    + + {{aggregate.column.label}} -
+
+ + -
- - -
- -
+ - -
-

Filters

-
-
    -
  • -
    - -
    -
    {{cut.column.fullLabel}}: {{cut.value}}
    +
    -
  • +
    + + + {{item | + nestedProperty:'label'}} + + -
+
+ +
+ +
-
- -
-
- -
+ +

Filters

+ +
+ + {{cut.column.fullLabel}}: {{cut.value}} -
- +
+ + -
- -
+ +
+ +
+ + + + {{item | + nestedProperty:'label'}} + + + + + -
-
-

Drill down

-
+ + -
    -
  • -
    - -
    -
    {{drilldown.column.fullLabel}}
    + + + {{member}} + + -
  • +
+
+ + +
-
-
- + + + + +

Drill-down

+ +
+ + {{drilldown.column.fullLabel}} + +
+
+ + +
+
+ +
+ + + {{item | + nestedProperty:'label'}} + + + +
+ +
+
- +
-
-
-

Sorting

-
-
    -
  • -
    - -
    -
    {{sort.column.fullLabel}}: {{sort.direction.label}}
    + -
  • + -
-
-
- + + +
-
-
- +
+ +
+
- -
-
-

Pagination

-
- + + -
-
- +

Pagination

+ + + -
+ + + -
+ diff --git a/src/app/components/request/aggregate-request-builder.ts b/src/app/components/request/aggregate-request-builder.ts index 26390e9..bf2b92e 100644 --- a/src/app/components/request/aggregate-request-builder.ts +++ b/src/app/components/request/aggregate-request-builder.ts @@ -73,9 +73,6 @@ span.node-key { cursor: pointer; } -.well { - background-color: #615f5f; -} `] }) export class AggregateRequestBuilder { @@ -272,4 +269,12 @@ export class AggregateRequestBuilder { } + aggregatePageNumberChanged(value) { + this.newAggregateRequest.page = value; + } + + aggregatePageSizeChanged(value) { + this.newAggregateRequest.pageSize = value; + } + } diff --git a/src/app/components/request/fact-request-builder.html b/src/app/components/request/fact-request-builder.html index a011c37..ecfc851 100644 --- a/src/app/components/request/fact-request-builder.html +++ b/src/app/components/request/fact-request-builder.html @@ -1,120 +1,139 @@ -
-

Filters

-
-
    -
  • -
    - -
    -
    {{cut.column.fullLabel}}: {{cut.value}}
    + -
  • -
+ +

Filters

+ +
+ + {{cut.column.fullLabel}}: {{cut.value}} +
-
-
- -
+ + + + {{item | nestedProperty:'label'}} + + + -
- -
-
- + + -
- -
- -
+ + + {{member}} + + -
-
-

Sorting

-
-
    -
  • -
    - -
    -
    {{sort.column.fullLabel}}: {{sort.direction.label}}
    - -
  • - -
-
+
-
- +
+ -
+
-
-
- - + -
-

Pagination

-
- + + +

Sorting

+ +
+ + {{sort.column.fullLabel}}: {{sort.direction.label}} +
+ + +
+ + +
+ + +
+ +
+ + + + + {{item | nestedProperty:'label'}} + + + -
-
- + + + {{item | nestedProperty:'label'}} + + + + + + +
+ +
+ + +
+
-
+ + + + +

Pagination

+ + + + + + + + + + +
+ diff --git a/src/app/components/request/fact-request-builder.ts b/src/app/components/request/fact-request-builder.ts index 1e38abd..366b0f2 100644 --- a/src/app/components/request/fact-request-builder.ts +++ b/src/app/components/request/fact-request-builder.ts @@ -32,6 +32,11 @@ import {FactRequest} from '../../models/fact/factRequest'; encapsulation: ViewEncapsulation.None, templateUrl: './fact-request-builder.html', styles: [` + + form{ + margin: 30px 0 0; + } + ul.alt-list{padding:0; margin:10px 0} ul.alt-list li { list-style-type: none; diff --git a/src/app/components/tree/tree-builder.html b/src/app/components/tree/tree-builder.html deleted file mode 100644 index a914dcc..0000000 --- a/src/app/components/tree/tree-builder.html +++ /dev/null @@ -1,178 +0,0 @@ -
- - -
- - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - -

- - - - - - - - - - - - -

-
- -
-
- -
- -

{{activeNode?.label}}

-
-
-
Definition
- -
Values
- - -
-
- - - -
-
- -
- -
- - -
diff --git a/src/app/components/tree/tree-builder.ts b/src/app/components/tree/tree-builder.ts deleted file mode 100644 index c21ea0d..0000000 --- a/src/app/components/tree/tree-builder.ts +++ /dev/null @@ -1,592 +0,0 @@ -import {Cube} from "../../models/cube"; -import {Observable} from "rxjs/Rx"; - -import { - ChangeDetectionStrategy, ViewEncapsulation, - Component, Input, Attribute as MetadataAttribute, ElementRef, - AfterViewInit, ViewChild -} from '@angular/core'; -import {Inject, NgZone, ChangeDetectorRef} from '@angular/core'; - - -import {ExpressionTree} from "../../models/expressionTree"; -import {State, getTree} from "../../reducers/index"; -import {Store} from "@ngrx/store"; -import {ExpressionNode} from "../../models/expressionNode"; -import {AggregateNode} from "../../models/aggregate/aggregateNode"; -import {ApiCubesService} from "../../services/api-cubes"; -import {TreeExecution} from "../../services/tree-execution"; -import {FuncNode, FuncType} from '../../models/func/funcNode' -import * as _ from 'lodash'; - -import * as d3 from 'd3'; -import {ValueNode} from "../../models/value/valueNode"; -import {Value} from "../../models/value/val"; -import * as $ from 'jquery'; -import {ReplaceAction} from "../../actions/tree"; -import {AggregateRequest} from "../../models/aggregate/aggregateRequest"; -import {HierarchyPointNode} from "d3-hierarchy"; -/* - * We're loading this component asynchronously - * We are using some magic with es6-promise-loader that will wrap the module with a Promise - * see https://github.com/gdi2290/es6-promise-loader for more info - */ - -console.log('`Tree Builder` component loaded asynchronously'); - -@Component({ - selector: 'bc-tree-builder', - changeDetection: ChangeDetectionStrategy.OnPush, // ⇐⇐⇐ - encapsulation: ViewEncapsulation.None, - templateUrl: './tree-builder.html', - styles: [` - .node { - cursor: pointer; - } - - .overlay{ - background-color:#EEE; - } - - .nodeSymbol{ - fill:white; - font-weight:bold; - - } - - .node circle { - fill: #fff; - stroke: steelblue; - stroke-width: 2px; - } - - .node text { - font-size:10px; - font-family:sans-serif; - } - - .link { - fill: none; - stroke: #ccc; - stroke-width: 2px; - } - - .templink { - fill: none; - stroke: indigo; - stroke-width: 3px; - } - - .ghostCircle.show{ - display:block; - } - - .ghostCircle, .activeDrag .ghostCircle{ - display: none; - } - - .expanded-indicator{ - cursor: pointer; - } - - #drawingCanvas svg{ - width:100%; - height: 600px; - } - - a.action-anchor{ - cursor:pointer; - margin: auto 10px ; - - } - - .md-tab-label{ - min-width:100%!important; - - } - - md-toolbar-row [md-mini-fab]{ - margin:2px; - - } - - .md-tab-body-wrapper{ - - max-height:700px; - overflow-y:auto!important; - - } - - span.node-key { - cursor: pointer; - } - - md-toolbar.md-primary { - color: rgba(0, 0, 0, 0.87); -} - `] -}) -export class TreeBuilder implements AfterViewInit { - - @Input() expressionTree: Observable; - expressionTreeInstance: ExpressionTree; - length: number; - @ViewChild('drawingCanvas') drawingCanvas; - @ViewChild('jsonModal') jsonModal: any; - - constructor(@Inject(ElementRef) elementRef: ElementRef, - @MetadataAttribute('width') width: number, - @MetadataAttribute('height') height: number, - private store: Store, - private rudolfCubesService: ApiCubesService, - private treeExecution: TreeExecution, private zone: NgZone, private ref: ChangeDetectorRef) { - - this.width = width; - this.height = height; - this.expressionTree = store.let(getTree); - - setInterval(() => { - // the following is required, otherwise the view will not be updated - this.ref.markForCheck(); - }, 5000); - } - - - _cube: Cube; - - public get cube() { - return this._cube; - } - - @Input() - - public set cube(value: Cube) { - let that = this; - that._cube = value; - } - - width: number; - height: number; - - // size of the diagram - @Input() - viewerWidth: number;// $(document).width(); - @Input() - - viewerHeight: number;// $(document).height(); - root:any; - - - aggregates = []; - duration = 750; - - - ngAfterViewInit() { - - window.setTimeout(() => { - /* this.baseSvg = d3.select(this.drawingCanvas.nativeElement).append("svg").attr("width", this.viewerWidth) - .attr("height", this.viewerHeight) - .call(this.zoomListener);*/ - let that = this; - this.expressionTree.subscribe(function (expressionTree_) { - let expressionTree = new ExpressionTree().deserialize(JSON.parse(JSON.stringify(expressionTree_))); - - if (that.tree && that.expressionTreeInstance.root == expressionTree.root) { - that.expressionTreeInstance = expressionTree; - // that.update(expressionTree.root); - } - else { - that.expressionTreeInstance = new ExpressionTree().deserialize(JSON.parse(JSON.stringify(expressionTree_))); - - //that.baseSvg.html(""); - - that.init(); - - } - - - }); - }); - - - } - - tree: any; - - activeNode: any; - - - treemap: any; - - g:any; - - init() { - - - - let treeData = this.expressionTreeInstance.root; - let margin = {top: 20, right: 90, bottom: 30, left: 90}, - width = 1000 - margin.left - margin.right, - height = 500 - margin.top - margin.bottom; - -// append the svg object to the body of the page -// appends a 'group' element to 'svg' -// moves the 'group' element to the top left margin - d3.select(this.drawingCanvas.nativeElement).html(""); - let svg = d3.select(this.drawingCanvas.nativeElement).append("svg") - .attr("width", width + margin.right + margin.left) - .attr("height", height + margin.top + margin.bottom); - - this.g = svg - - .append("g") - .attr("transform", "translate(" - + margin.left + "," + margin.top + ")"); - - - - svg.append("rect") - .attr("width", width) - .attr("height", height) - .style("fill", "none") - .style("pointer-events", "all") - .call(d3.zoom() - .scaleExtent([1 / 2, 4]) - .on("zoom", zoomed)); - - let that = this; - - function zoomed() { - let transform = d3.event.transform; - that.g.attr("transform", function() { - return transform.translate(margin.left,margin.top).toString(); - }); - } - - -// declares a tree layout and assigns the size - this.treemap = d3.tree().size([height, width]); - -// Assigns parent, children, height, depth - this.root = d3.hierarchy(treeData, function (d) { - return d.children; - }); - this.root.x0 = height / 2; - this.root.y0 = 0; - -// Collapse after the second level - if (this.root.children) - this.root.children.forEach(collapse); - - this.activeNode = this.root; - - this.update(this.root); - -// Collapse the node and all it's children - function collapse(d) { - if (d.children) { - d._children = d.children; - d._children.forEach(collapse); - d.children = null - } - } - - - - - } - update(source) { - - - - // Assigns the x and y position for the nodes - let treeData = this.treemap(this.root); - - // Compute the new tree layout. - let nodes = treeData.descendants(), - links = treeData.descendants().slice(1); - - // Normalize for fixed-depth. - nodes.forEach(function (d) { - d.y = d.depth * 180 - }); - - // ****************** Nodes section *************************** - - // Update the nodes... - let node = this.g.selectAll('g.node') - .data(nodes, function (d: HierarchyPointNode) { - return d.id ; - }); - - // Enter any new modes at the parent's previous position. - let nodeEnter = node.enter().append('g') - .attr('class', 'node') - .attr("transform", function (d) { - return "translate(" + source.y0 + "," + source.x0 + ")"; - }) - .on('click', click); - - // Add Circle for the nodes - nodeEnter.append('circle') - .attr('class', 'node') - .attr('r', 1e-6) - .style("fill", function (d: HierarchyPointNode) { - return d.children ? "lightsteelblue" : "#fff"; - }); - - - nodeEnter.append("text") - .attr("x", function (d) { - return d.children ? -15 : 15; - }) - .attr("dy", ".35em") - .attr('class', 'nodeText') - .attr("text-anchor", function (d:HierarchyPointNode) { - return d.children ? "end" : "start"; - }) - .text(function (d: HierarchyPointNode) { - return d.data.label; - }); - - // UPDATE - let nodeUpdate = nodeEnter.merge(node); - - // Transition to the proper position for the node - nodeUpdate.transition() - .duration(this.duration) - .attr("transform", function (d) { - return "translate(" + d.y + "," + d.x + ")"; - }); - - // Update the node attributes and style - nodeUpdate.select('circle.node') - .attr('r', 10) - .style("fill", function (d) { - return d._children ? "lightsteelblue" : "#fff"; - }) - .attr('cursor', 'pointer'); - - - // Remove any exiting nodes - let nodeExit = node.exit().transition() - .duration(this.duration) - .attr("transform", function (d:HierarchyPointNode) { - return "translate(" + source.y + "," + source.x + ")"; - }) - .remove(); - - // On exit reduce the node circles size to 0 - nodeExit.select('circle') - .attr('r', 1e-6); - - // On exit reduce the opacity of text labels - nodeExit.select('text') - .style('fill-opacity', 1e-6); - - // ****************** links section *************************** - - // Update the links... - let link = this.g.selectAll('path.link') - .data(links, function (d: HierarchyPointNode) { - return d.data.id; - }); - - // Enter any new links at the parent's previous position. - let linkEnter = link.enter().insert('path', "g") - .attr("class", "link") - .attr('d', function (d) { - let o = {x: source.x0, y: source.y0}; - return diagonal(o, o) - }); - - // UPDATE - let linkUpdate = linkEnter.merge(link); - - // Transition back to the parent element position - linkUpdate.transition() - .duration(this.duration) - .attr('d', function (d) { - return diagonal(d, d.parent) - }); - - // Remove any exiting links - let linkExit = link.exit().transition() - .duration(this.duration) - .attr('d', function (d) { - let o = {x: source.x, y: source.y}; - return diagonal(o, o) - }) - .remove(); - - // Store the old positions for transition. - nodes.forEach(function (d: HierarchyPointNode) { - d.data.x0 = d.x; - d.data.y0 = d.y; - }); - - // Creates a curved (diagonal) path from parent to the child nodes - function diagonal(s, d) { - - let path = `M ${s.y} ${s.x} - C ${(s.y + d.y) / 2} ${s.x}, - ${(s.y + d.y) / 2} ${d.x}, - ${d.y} ${d.x}`; - - return path - } - - // Toggle children on click. - function click(d) { - if (d.children) { - d._children = d.children; - d.children = null; - } else { - d.children = d._children; - d._children = null; - } - this.update(d); - } - } - removeNode() { - - if (!this.activeNode)return; - if (!this.activeNode == this.root) return; - - - if (this.activeNode.parent) { - let parent: ExpressionNode = this.activeNode.parent; - - let index = this.activeNode.parent.children.indexOf(this.activeNode); - if (index > -1) { - this.activeNode.parent.children.splice(index, 1); - } - - parent.executed = false; - - - this.activeNode = parent; - } - - this.store.dispatch(new ReplaceAction(this.expressionTreeInstance)); - - } - - - newCustomValue: any; - - addValueChild() { - if (!this.activeNode)return; - - let valueNode = new ValueNode; - let val = new Value(); - val.cells = [{value: this.newCustomValue}]; - - valueNode.element = val; - - - if (this.activeNode instanceof FuncNode) { - this.activeNode.children.push(valueNode); - - } - else { - this.activeNode.parent.children.push(valueNode); - } - - this.activeNode.executed = false; - - this.store.dispatch(new ReplaceAction(this.expressionTreeInstance)); - - - } - - execute() { - - - this.treeExecution.execute(this.expressionTreeInstance, this.activeNode).subscribe(() => { - this.ref.markForCheck(); - - }); - - - } - - - public funcType = FuncType; - - addFuncChild(funcType: FuncType) { - if (!this.activeNode)return; - let funcNode = new FuncNode(funcType); - - if (this.activeNode instanceof FuncNode) { - this.activeNode.children.push(funcNode); - - } - else { - this.activeNode.parent.children.push(funcNode); - } - - this.store.dispatch(new ReplaceAction(this.expressionTreeInstance)); - - - } - - clearAll() { - this.root.children = []; - this.update(this.root); - this.store.dispatch(new ReplaceAction(this.expressionTreeInstance)); - - } - - @ViewChild('childModal') public childModal: any; - - public showChildModal(): void { - this.editableExpressionTreeInstance = JSON.stringify(this.expressionTreeInstance); - this.childModal.show(); - } - - - public showSerializationModal(): void { - this.editableExpressionTreeInstance = JSON.stringify(this.expressionTreeInstance); - this.jsonModal.show(); - } - - - public saveSerializationModal(): void { - - this.jsonModal.hide(); - let tree = new ExpressionTree().deserialize(JSON.parse(this.editableExpressionTreeInstance)); - - this.store.dispatch(new ReplaceAction(tree)); - - } - - - public buildAggregateRequestNode(): void { - - if (!this.activeNode)return; - this.newAggregateRequest.cube = this.cube; - let aggregateNode = new AggregateNode(); - aggregateNode.element = this.newAggregateRequest; - - if (this.activeNode.data instanceof FuncNode) { - this.activeNode.data.children.push(aggregateNode); - - } - else { - this.activeNode.data.parent.children.push(aggregateNode); - } - - this.activeNode.data.executed = false; - - this.store.dispatch(new ReplaceAction(this.expressionTreeInstance)); - - this.newAggregateRequest = new AggregateRequest; - } - - editableExpressionTreeInstance: string; - - - newAggregateRequest = new AggregateRequest; - -} diff --git a/src/app/components/tree/visualization.html b/src/app/components/tree/visualization.html deleted file mode 100644 index 49059a6..0000000 --- a/src/app/components/tree/visualization.html +++ /dev/null @@ -1,2 +0,0 @@ -
- diff --git a/src/app/components/tree/visualization.ts b/src/app/components/tree/visualization.ts deleted file mode 100644 index 422184c..0000000 --- a/src/app/components/tree/visualization.ts +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Created by larjo on 29/7/2016. - */ -import {Observable} from "rxjs/Rx"; - - -import { - ChangeDetectionStrategy, ViewEncapsulation, - Component, Input, ElementRef, - AfterViewInit, ViewChild -} from '@angular/core'; -import {Inject, NgZone, ChangeDetectorRef} from '@angular/core'; -import * as d3 from 'd3'; -import {ExpressionTree} from "../../models/expressionTree"; -import {Store} from "@ngrx/store"; -import {ExpressionNode} from "../../models/expressionNode"; - -import {getTree, TreesState} from "../../reducers/tree/trees"; -import * as $ from 'jquery' -/* - * We're loading this component asynchronously - * We are using some magic with es6-promise-loader that will wrap the module with a Promise - * see https://github.com/gdi2290/es6-promise-loader for more info - */ - -console.log('`Tree Builder` component loaded asynchronously'); - -@Component({ - moduleId: 'visualization', - selector: 'visualization', - changeDetection: ChangeDetectionStrategy.OnPush, // ⇐⇐⇐ - encapsulation: ViewEncapsulation.None, - templateUrl: './visualization.html', - -}) -export class TreeVisualization implements AfterViewInit { - ngAfterViewInit(): any { - - let that = this; - that.width = $(that.vizCanvas.nativeElement).width() - that.margin.left - that.margin.right; - that.height = 400 - that.margin.top - that.margin.bottom; - - - this.expressionTree.subscribe(function (expressionTree) { - - - - that.expressionTreeInstance = expressionTree; - - - that.init(expressionTree.root); - - }); - - - - } - - protected baseSvg; - - @ViewChild('vizCanvas') vizCanvas; - - constructor(@Inject(ElementRef) elementRef:ElementRef, - private store:Store, - private ref: ChangeDetectorRef) { - - - this.vizCanvas = elementRef; - this.expressionTree = store.let(getTree); - - setInterval(() => { - - // the following is required, otherwise the view will not be updated - this.ref.markForCheck(); - }, 1000); - } - - - width; - height; - - margin = {top: 20, right: 20, bottom: 70, left: 40}; - - - public init(root: ExpressionNode){ - - } - - - @Input() expressionTree: Observable; - expressionTreeInstance: ExpressionTree; - _root: ExpressionNode; - - public get root(){ - return this._root; - } - @Input() - public set root(value){ - this._root = value; - if(value)this.init(value); - } -} diff --git a/src/app/components/tree/visualizations/barchart.ts b/src/app/components/tree/visualizations/barchart.ts deleted file mode 100644 index 5b32c69..0000000 --- a/src/app/components/tree/visualizations/barchart.ts +++ /dev/null @@ -1,207 +0,0 @@ -import {Observable} from "rxjs/Rx"; -import * as _ from 'lodash'; -import { - ChangeDetectionStrategy, ViewEncapsulation, - Component, Input, ElementRef, ViewChild -} from '@angular/core'; -import {Inject, ChangeDetectorRef} from '@angular/core'; -import * as d3 from 'd3'; -import {ExpressionTree} from "../../../models/expressionTree"; -import {Store} from "@ngrx/store"; -import {ExpressionNode} from "../../../models/expressionNode"; -import {TreeVisualization} from "../visualization"; -import {TreesState} from "../../../reducers/tree/trees"; -declare let $: JQueryStatic; - -/** - * Created by larjo on 25/8/2016. - */ - -@Component({ - moduleId: 'visualizaation', - selector: 'barchart', - changeDetection: ChangeDetectionStrategy.OnPush, // ⇐⇐⇐ - encapsulation: ViewEncapsulation.None, - templateUrl: '../visualization.html', - styles: [` - - - .bar:hover { - stroke: indigo; - } - - .axis { - font: 10px sans-serif; - } - - .axis path, - .axis line { - fill: none; - stroke: #000; - shape-rendering: crispEdges; - } - - .x.axis path { - display: none; - } - - `] -}) -export class BarChartVisualization extends TreeVisualization { - xAxis; - yAxis; - - - @ViewChild('vizCanvas') vizCanvas; - - private generateBarChart(data: any, tuple) { - let colors = d3.scaleOrdinal(d3.schemeCategory20); - let that = this; - let baseSvg = d3.select(that.vizCanvas.nativeElement).append("svg") - .attr("width", that.width + that.margin.left + that.margin.right) - .attr("height", that.height + that.margin.top + that.margin.bottom) - .append("g") - .attr("transform", "translate(" + that.margin.left + "," + that.margin.top + ")"); - that.x = d3.scaleBand() - .rangeRound([0, that.width]) - .padding(.1); - - that.y = d3.scaleLinear() - .range([that.height, 0]); - - that.xAxis = d3.axisBottom(that.x); - - - that.yAxis = d3.axisLeft(that.y) - - .ticks(20, ".0s"); - - that.x.domain(data.attributes); - - - that.x.domain(data.cells.map(function (d:any) { - return d[data.attributes[0]] - })); - that.y.domain([0, d3.max(data.cells, function (d) { - return d[data.aggregates[0]]; - - })]); - baseSvg.html(""); - baseSvg.append("g") - .attr("class", "x axis") - .attr("transform", "translate(0," + that.height + ")") - .call(that.xAxis) - .selectAll("text") - .attr("y", 0) - .attr("x", 9) - .attr("dy", ".35em") - .attr("transform", "rotate(90)") - .style("text-anchor", "start"); - - baseSvg.append("g") - .attr("class", "y axis") - .call(that.yAxis) - .append("text") - .attr("transform", "rotate(-90)") - .attr("y", 6) - .attr("dy", ".31em") - .style("text-anchor", "end") - .text(data.aggregates[0]); - - baseSvg.selectAll(".bar") - .data(data.cells) - .enter().append("rect") - .attr("class", "bar") - .attr("fill", function (d, i) { - return colors(i.toString()) - }) - .attr("x", function (d:ExpressionNode) { - return that.x(d[data.attributes[0]]); - }) - .attr("width", that.x.rangeBand()) - .attr("y", function (d:ExpressionNode) { - return that.y(d[data.aggregates[0]]); - }) - .attr("height", function (d:ExpressionNode) { - return that.height - that.y(d[data.aggregates[0]]); - }); - - - if (tuple) { - baseSvg.append("text") - .attr("x", (that.width / 2)) - .attr("y", 0 - (that.margin.top / 2)) - .attr("text-anchor", "middle") - .style("font-size", "16px") - .style("text-decoration", "underline") - .text(JSON.stringify(tuple)); - } - - - } - - init(root: ExpressionNode) { - - - let that = this; - let data = root.value; - if (!data) return; - d3.select(that.vizCanvas.nativeElement).html(""); - - - let dimensions = _.difference(_.uniq(_.flatten(_.map(data.cells, function (cell) { - return _.keys(cell); - }))), data.aggregates); - - if (dimensions.length > 1) { - let restDimensions = _.slice(dimensions, 1); - let tuples = _.uniqWith(_.map(data.cells, function (cell) { - return _.pick(cell, restDimensions) - }), _.isEqual); - - _.each(tuples, function (tuple) { - let subset = _.clone(data); - subset.cells = _.map(_.filter(data.cells, function (cell) { - return _.isEqual(_.pick(cell, restDimensions), tuple) - }), function (cell) { - return _.pick(cell, _.union(_.slice(dimensions, 0, 1), data.aggregates)) - }); - that.generateBarChart(subset, tuple); - - }); - - } - else { - this.generateBarChart(data, null); - } - - - - } - - @Input() expressionTree: Observable; - - x; - y; - - public get root() { - return this._root; - } - - @Input() - public set root(value) { - this._root = value; - if (value)this.init(value); - } - - - constructor(@Inject(ElementRef) elementRef: ElementRef, - store: Store, - ref: ChangeDetectorRef) { - - super(elementRef, store, ref); - - } - - -} diff --git a/src/app/components/user-guide.ts b/src/app/components/user-guide.ts index f528e73..097800e 100644 --- a/src/app/components/user-guide.ts +++ b/src/app/components/user-guide.ts @@ -15,7 +15,7 @@ import {ChangeDetectionStrategy, Component} from '@angular/core'; -
+
diff --git a/src/app/containers/app.ts b/src/app/containers/app.ts index dc01706..e7c5da7 100644 --- a/src/app/containers/app.ts +++ b/src/app/containers/app.ts @@ -1,5 +1,5 @@ import 'rxjs/add/operator/let'; -import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {Component, ChangeDetectionStrategy, NgModule} from '@angular/core'; import { Router, @@ -10,7 +10,6 @@ import { NavigationError } from '@angular/router'; import {Http} from '@angular/http'; -import {HttpInterceptorService} from "ng-http-interceptor"; @@ -28,6 +27,7 @@ import {HttpInterceptorService} from "ng-http-interceptor"; ` }) + export class AppComponent { diff --git a/src/app/containers/collection-page.ts b/src/app/containers/collection-page.ts index dfcad2e..35f3564 100644 --- a/src/app/containers/collection-page.ts +++ b/src/app/containers/collection-page.ts @@ -20,7 +20,7 @@ import { Book } from '../models/book'; /** * Container components are permitted to have just enough styles * to bring the view together. If the number of styles grow, - * consider breaking them out into presentational + * consider breaking them out into presentational * components. */ styles: [` diff --git a/src/app/containers/cube/collection-page.ts b/src/app/containers/cube/collection-page.ts index 75dacd8..a17b329 100644 --- a/src/app/containers/cube/collection-page.ts +++ b/src/app/containers/cube/collection-page.ts @@ -15,7 +15,7 @@ import { Cube } from '../../models/cube'; My Collection - + `, /** * Container components are permitted to have just enough styles @@ -32,8 +32,16 @@ import { Cube } from '../../models/cube'; }) export class CollectionCubePageComponent { cubes$: Observable; + currentPage: number = 1; + constructor(store: Store) { this.cubes$ = store.let(fromRoot.getCubeCollection); } + + scrolled(event) { + + + } + } diff --git a/src/app/containers/cube/cube-analytics-index-page.ts b/src/app/containers/cube/cube-analytics-index-page.ts index d4e2847..e4eca46 100644 --- a/src/app/containers/cube/cube-analytics-index-page.ts +++ b/src/app/containers/cube/cube-analytics-index-page.ts @@ -10,8 +10,8 @@ import { AddOutput, RemoveOutput } from '../../components/cube/analytics/cube-analytics-detail'; -import {Cube} from "../../models/cube"; -import {ActivatedRoute} from "@angular/router"; +import {Cube} from '../../models/cube'; +import {ActivatedRoute} from '@angular/router'; @Component({ diff --git a/src/app/containers/cube/find-cube-page.ts b/src/app/containers/cube/find-cube-page.ts index 4baa814..6739826 100644 --- a/src/app/containers/cube/find-cube-page.ts +++ b/src/app/containers/cube/find-cube-page.ts @@ -1,42 +1,75 @@ import 'rxjs/add/operator/let'; import 'rxjs/add/operator/take'; -import { Component, ChangeDetectionStrategy } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs/Observable'; +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {Observable} from 'rxjs/Observable'; import * as fromRoot from '../../reducers'; import * as cube from '../../actions/cube/cube2'; -import { Cube } from '../../models/cube'; +import {Cube} from '../../models/cube'; +import {environment} from "../../../environments/environment"; @Component({ selector: 'bc-find-cube-page', changeDetection: ChangeDetectionStrategy.OnPush, template: ` - - + + `, - styles:[` - indigo-cube-preview-list{ - margin-top:20px; - display: block; - } + styles: [` + indigo-cube-preview-list { + margin-top: 20px; + display: block; + } -`] + `] }) export class FindCubePageComponent { searchQuery$: Observable; cubes$: Observable; loading$: Observable; + private query: string; + private currentPage = 0; constructor(private store: Store) { this.searchQuery$ = store.let(fromRoot.getCubeSearchQuery).take(1); this.cubes$ = store.let(fromRoot.getCubeSearchResults); this.loading$ = store.let(fromRoot.getCubeSearchLoading); + this.searchQuery$.subscribe(query => this.query = query); + this.scrollCallback = this.getCubes.bind(this); + + } + + scrollCallback; + + + search(query: string, size?: number, from?: number) { + if (!from) from = 0; + if (!size) size = environment.searchSize; + this.store.dispatch(new cube.SearchAction({query: query, from: from, size: size})); + } + + scrolled() { + this.currentPage++; + + this.store.dispatch(new cube.SearchAction({ + query: this.query, + from: this.currentPage * environment.searchSize, + size: environment.searchSize + })); + return this.cubes$; + } - search(query: string) { - this.store.dispatch(new cube.SearchAction(query)); + getCubes() { + this.scrolled(); + return Observable.range(0, 3) + .delay(1000); } } diff --git a/src/app/effects/cube.ts b/src/app/effects/cube.ts index 7bf8d04..53d61d7 100644 --- a/src/app/effects/cube.ts +++ b/src/app/effects/cube.ts @@ -4,14 +4,14 @@ import 'rxjs/add/operator/switchMap'; import 'rxjs/add/operator/debounceTime'; import 'rxjs/add/operator/skip'; import 'rxjs/add/operator/takeUntil'; -import { Injectable } from '@angular/core'; -import { Effect, Actions } from '@ngrx/effects'; -import { Action } from '@ngrx/store'; -import { Observable } from 'rxjs/Observable'; -import { empty } from 'rxjs/observable/empty'; -import { of } from 'rxjs/observable/of'; - -import { ApiCubesService } from '../services/api-cubes'; +import {Injectable} from '@angular/core'; +import {Effect, Actions} from '@ngrx/effects'; +import {Action} from '@ngrx/store'; +import {Observable} from 'rxjs/Observable'; +import {empty} from 'rxjs/observable/empty'; +import {of} from 'rxjs/observable/of'; + +import {ApiCubesService} from '../services/api-cubes'; import * as cube from '../actions/cube/cube2'; @@ -31,7 +31,8 @@ import * as cube from '../actions/cube/cube2'; @Injectable() export class CubeEffects { - constructor(private actions$: Actions, private rudolfCubes: ApiCubesService) { } + constructor(private actions$: Actions, private rudolfCubes: ApiCubesService) { + } @Effect() @@ -39,21 +40,23 @@ export class CubeEffects { .ofType(cube.ActionTypes.SEARCH) .debounceTime(300) .map(action => action.payload) - .switchMap(query => { - /* if (query === '') { - return empty(); - }*/ + .switchMap(params => { + /* if (query === '') { + return empty(); + }*/ const nextSearch$ = this.actions$.ofType(cube.ActionTypes.SEARCH).skip(1); - - return this.rudolfCubes.searchCubes(query) + return this.rudolfCubes.searchCubes(params.query, params.size, params.from) .takeUntil(nextSearch$) - .map(cubes => {return new cube.SearchCompleteAction(cubes.filter(function (cube) { - if(query=="")return true; - return (cube.package.title.toLocaleLowerCase().indexOf(query.toLocaleLowerCase())>-1); - }));}) + .map(cubes => { + + return new cube.SearchCompleteAction({cubes: cubes.filter(function (cube) { + + if (params.query === '') return true; + return (cube.package.title.toLocaleLowerCase().indexOf(params.query.toLocaleLowerCase()) > -1); + }), params: params}); + }) .catch(() => of(new cube.SearchCompleteAction([]))); }); - } diff --git a/src/app/infinite-scroller.directive.ts b/src/app/infinite-scroller.directive.ts new file mode 100644 index 0000000..a088610 --- /dev/null +++ b/src/app/infinite-scroller.directive.ts @@ -0,0 +1,106 @@ +import {Directive, AfterViewInit, ElementRef, Input, OnDestroy} from '@angular/core'; + +import { Observable, Subscription } from 'rxjs/Rx'; +import 'rxjs/add/observable/fromEvent'; +import 'rxjs/add/operator/pairwise'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/exhaustMap'; +import 'rxjs/add/operator/filter'; +import 'rxjs/add/operator/startWith'; +import * as $ from 'jquery'; + +interface ScrollPosition { + sH: number; + sT: number; + cH: number; +}; + +const DEFAULT_SCROLL_POSITION: ScrollPosition = { + sH: 0, + sT: 0, + cH: 0 +}; + +@Directive({ + selector: '[appInfiniteScroller]' +}) +export class InfiniteScrollerDirective implements AfterViewInit, OnDestroy { + + private scrollEvent$; + + private userScrolledDown$; + + private requestStream$; + + private requestOnScroll$; + + @Input() + scrollCallback; + + @Input() + immediateCallback; + + @Input() + scrollPercent = 70; + + constructor(private elm: ElementRef) { } + + ngAfterViewInit() { + + this.registerScrollEvent(); + + this.streamScrollEvents(); + + this.requestCallbackOnScroll(); + + } + + private registerScrollEvent() { + + this.scrollEvent$ = Observable.fromEvent($('[cdk-scrollable]'), 'scroll'); + } + + private streamScrollEvents() { + this.userScrolledDown$ = Observable.fromEvent($('[cdk-scrollable]'), 'scroll') + .map((e: any): ScrollPosition => { return ({ + sH: e.target.scrollHeight, + sT: e.target.scrollTop, + cH: e.target.clientHeight + });}) + .pairwise() + .filter(positions => this.isUserScrollingDown(positions) && this.isScrollExpectedPercent(positions[1])); + } + + private subscription: Subscription ; + + private requestCallbackOnScroll() { + + this.requestOnScroll$ = this.userScrolledDown$; + + + + if (this.immediateCallback) { + this.requestOnScroll$ + .startWith([DEFAULT_SCROLL_POSITION, DEFAULT_SCROLL_POSITION]); + } + + this.subscription = this.requestOnScroll$ + .exhaustMap(() => {debugger; return this.scrollCallback(); }) + .subscribe(() => { }); + + } + + public ngOnDestroy(): void { + debugger; + this.subscription.unsubscribe(); + } + + private isUserScrollingDown = (positions) => { + return positions[0].sT < positions[1].sT; + }; + + private isScrollExpectedPercent = (position) => { + return ((position.sT + position.cH) / position.sH) > (this.scrollPercent / 100); + } + +} diff --git a/src/app/lib/json-tree/json-node.ts b/src/app/lib/json-tree/json-node.ts deleted file mode 100644 index 8ee6139..0000000 --- a/src/app/lib/json-tree/json-node.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Created by larjo on 26/7/2016. - */ -import { Component, Input, HostBinding } from '@angular/core'; - -import * as types from './types'; - -@Component({ - selector: 'ngrx-json-node', - styles: [` - :host { - display: block; - padding: 2px 2px 2px 20px; - position: relative; - color: #70AFCD; - font-family: 'monaco', 'Consolas', 'Lucida Console', monospace; - } - .expanded-indicator { - position: absolute; - top: 7px; - left: 5px; - font-size: 10px; - transition: transform 200ms; - } - - .expanded .expanded-indicator { - transform: rotate(90deg); - } - - .node-key::after { - content: ': '; - display: inline; - } - - .expanded .node-label { - color: #BABBBD !important; - } - - .node-label { - color: #9AC05C; - } - - .node-label.array, .node-label.null, .node-label.iterable { - color: #D182C0; - } - - .node-label.number, .node-label.undefined, .node-label.boolean { - color: #F86936; - } - `], - template: ` -
- - {{ key }} - {{ label }} -
-
- -
- ` -}) -export class JsonNodeComponent { - label: string; - type: string; - children: any[]; - - @Input() key: string; - @Input() expanded: boolean = false; - @Input() set value(value: any) { - this.label = types.getLabelFor(value); - this.type = types.getTypeOf(value); - - if (this.type === types.KNOWN.Array || this.type === types.KNOWN.Object || this.type === types.KNOWN.Iterable) { - this.children = types.getChildrenFor(value); - } - else { - this.children = null; - } - } - - toggle() { - if (this.children) { - this.expanded = !this.expanded; - } - } -} diff --git a/src/app/lib/json-tree/json-tree.ts b/src/app/lib/json-tree/json-tree.ts deleted file mode 100644 index 3375510..0000000 --- a/src/app/lib/json-tree/json-tree.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Created by larjo on 26/7/2016. - */ -import { Component, Input } from '@angular/core'; - -import { getChildrenFor } from './types'; -import { JsonNodeComponent } from './json-node'; - -@Component({ - selector: 'ngrx-json-tree', - template: ` - - ` -}) -export class JsonTreeComponent { - children: any[] = []; - - @Input() expanded: boolean = true; - @Input() set value (value: any) { - if(value==undefined)return; - this.children = getChildrenFor(value); - } -} diff --git a/src/app/lib/json-tree/types.ts b/src/app/lib/json-tree/types.ts deleted file mode 100644 index 5d32eda..0000000 --- a/src/app/lib/json-tree/types.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Created by larjo on 26/7/2016. - */ -import { compose } from '@ngrx/core/compose'; - -export const KNOWN = { - Array: 'array', - Object: 'object', - Null: 'null', - Undefined: 'undefined', - Boolean: 'boolean', - Number: 'number', - String: 'string', - Symbol: 'symbol', - Function: 'function', - Iterable: 'iterable' -}; - -export function getTypeOf(object: any) { - const literalType = typeof object; - - if (literalType === 'object') { - if (Array.isArray(object)) { - return KNOWN.Array; - } - if (object === null) { - return KNOWN.Null; - } - if (typeof object[Symbol.iterator] === 'function') { - return KNOWN.Iterable; - } - } - - return literalType; -} - -const arrayLength = (value: any[]) => value.length; -const lengthLabel = (single: string, plural: string) => (length: number) => `${length} ${length === 1 ? single : plural }`; -const typeIndicator = (typeIndicator: string) => (input: string) => `${typeIndicator} ${input}`; -const typeIdentity = (type: string) => () => type; -const withQuotes = (val: string) => `"${val}"`; -const toString = (val: Object) => val.toString(); -const iterableToArray = (value: Iterable) => Array.from(value); - -const labelFactoriesForTypes = { - [KNOWN.Array]: compose(typeIndicator('[]'), lengthLabel('item', 'items'), arrayLength), - [KNOWN.Object]: compose(typeIndicator('{}'), lengthLabel('key', 'keys'), arrayLength, Object.getOwnPropertyNames), - [KNOWN.Null]: typeIdentity(KNOWN.Null), - [KNOWN.Undefined]: typeIdentity(KNOWN.Undefined), - [KNOWN.Boolean]: (val: boolean) => val ? 'true' : 'false', - [KNOWN.Number]: toString, - [KNOWN.String]: withQuotes, - [KNOWN.Symbol]: compose(withQuotes, toString), - [KNOWN.Function]: typeIdentity(KNOWN.Function), - [KNOWN.Iterable]: compose(typeIndicator('()'), lengthLabel('entry', 'entries'), arrayLength, iterableToArray) -}; - -const lookupLabelForType = (type: string) => labelFactoriesForTypes[type]; - -export const getLabelFor = (object: any) => labelFactoriesForTypes[getTypeOf(object)](object); - -export function getChildrenFor(object: any): any[] { - const literalType = getTypeOf(object); - - if (literalType === KNOWN.Object) { - return Object.getOwnPropertyNames(object).filter(function(name){return typeof object[name]!='function';}) - .map(name => { - return { key: name, value: object[name] }; - }); - } - else if (literalType === KNOWN.Array) { - - return object.map((value, index) => { - return { key: index, value }; - }); - } - else if (literalType === KNOWN.Iterable) { - - return Array.from(object).map((value, index) => { - return { key: index, value }; - }); - } - - throw new TypeError(`Tried to get children for non-enumerable type "${literalType}"`); -} diff --git a/src/app/models/aggregate/aggregateRequest.ts b/src/app/models/aggregate/aggregateRequest.ts index b421322..d3878bd 100644 --- a/src/app/models/aggregate/aggregateRequest.ts +++ b/src/app/models/aggregate/aggregateRequest.ts @@ -68,9 +68,6 @@ export class AggregateRequest implements Serializable { return this; } - toURI() { - - } } diff --git a/src/app/models/analysis/algorithm.ts b/src/app/models/analysis/algorithm.ts index 94de820..c3f6181 100644 --- a/src/app/models/analysis/algorithm.ts +++ b/src/app/models/analysis/algorithm.ts @@ -21,7 +21,7 @@ export class Algorithm { for (let key of Object.keys(data.configurations)){ - let config = new ExecutionConfiguration().deserialize(data.input[key]); + let config = new ExecutionConfiguration().deserialize(data.configurations[key]); config.algorithm = this; configurations.set(key, config); } @@ -29,9 +29,30 @@ export class Algorithm { this.configurations = configurations; this.name = data.name; - this.title = data.algorithm.title; + this.description = data.description; + this.title = data.title; return this; } + serialize(): any { + + let output = {}; + + output['configurations'] = {}; + + this.configurations.forEach(function(value, key){ + output['configurations'][key] = value.serialize(); + }); + + + + output['name'] = this.name; + output['title'] = this.title; + output['description'] = this.description; + + + + return output; + } } diff --git a/src/app/models/analysis/analysisCall.ts b/src/app/models/analysis/analysisCall.ts index 64c7e37..e5c2449 100644 --- a/src/app/models/analysis/analysisCall.ts +++ b/src/app/models/analysis/analysisCall.ts @@ -59,12 +59,12 @@ export class AnalysisCall { public constructor(public config: ExecutionConfiguration, public cube: Cube) { - this.init(); + this.initialize(); } - public init() { + public initialize() { let that = this; this.config.inputs.forEach((input) => { @@ -367,7 +367,7 @@ export class AnalysisCall { request.pageSize = parseInt(parts['pagesize']); } if (parts['page']) { - request.pageSize = parseInt(parts['page']); + request.page = parseInt(parts['page']); } return request; diff --git a/src/app/models/analysis/executionConfiguration.ts b/src/app/models/analysis/executionConfiguration.ts index 74b5f25..33879a4 100644 --- a/src/app/models/analysis/executionConfiguration.ts +++ b/src/app/models/analysis/executionConfiguration.ts @@ -2,7 +2,7 @@ import {RequestMethod} from '@angular/http'; import {Output} from './output'; import {Input} from './input'; import {environment} from '../../../environments/environment'; -import {Algorithm} from "./algorithm"; +import {Algorithm} from './algorithm'; /** * Created by larjo on 28/4/2017. */ @@ -23,8 +23,8 @@ export class ExecutionConfiguration { let inputs = new Map(); - for (let key of Object.keys(data.input)){ - inputs.set(key, new Input().deserialize(data.input[key])); + for (let key of Object.keys(data.inputs)){ + inputs.set(key, new Input().deserialize(data.inputs[key])); } this.inputs = inputs; @@ -34,21 +34,48 @@ export class ExecutionConfiguration { let outputs = new Map(); - for (let key of Object.keys(data.output)){ - outputs.set(key, new Output().deserialize(data.output[key])); + for (let key of Object.keys(data.outputs)){ + outputs.set(key, new Output().deserialize(data.outputs[key])); } this.outputs = outputs; - this.prompt = data.algorithm.prompt; - this.method = data.algorithm.method; - this.endpoint = new URL(environment[data.algorithm.endpoint[0]] + '/' + data.algorithm.name); + this.prompt = data.prompt; + this.method = data.method; + this.endpoint = new URL(data.endpoint ); this.name = data.name; this.title = data.title; return this; } + serialize() { + + let output = {}; + + output['inputs'] = {}; + + this.inputs.forEach(function (value, key, map) { + output['inputs'][key] = value.serialize(); + }); + + output['outputs'] = {}; + + this.outputs.forEach(function (value, key, map) { + output['outputs'][key] = value.serialize(); + }); + + output['prompt'] = this.prompt; + output['method'] = this.method; + output['endpoint'] = this.endpoint.toString(); + output['name'] = this.name; + output['title'] = this.title; + + + + + return output; + } } diff --git a/src/app/models/analysis/input.ts b/src/app/models/analysis/input.ts index 31469cc..3303f62 100644 --- a/src/app/models/analysis/input.ts +++ b/src/app/models/analysis/input.ts @@ -3,19 +3,20 @@ */ -export const InputTypes = { - PARAMETER: 'Algorithm parameter', - ATTRIBUTE_REF: 'Cube Dimension Attribute', - MEASURE_REF: 'Cube Measure', - AGGREGATE_REF: 'Cube Aggregate', - QUERY: 'Query to the data store', - RAW_DATA: 'Raw data', - RAW_DATA_URI: 'URI pointing to raw data', - BABBAGE_AGGREGATE_URI: 'URI pointing to a Babbage compliant aggregates API request', - BABBAGE_AGGREGATE_RAW_DATA: 'Raw data coming from a Babbage compliant aggregates API request', - BABBAGE_FACT_URI: 'URI pointing to a Babbage compliant facts API request', - BABBAGE_FACT_RAW_DATA: 'Raw data coming from a Babbage compliant facts API request' -}; +export enum InputTypes { + PARAMETER= 'Algorithm parameter', + ATTRIBUTE_REF= 'Cube Dimension Attribute', + MEASURE_REF= 'Cube Measure', + AGGREGATE_REF= 'Cube Aggregate', + QUERY= 'Query to the data store', + RAW_DATA= 'Raw data', + RAW_DATA_URI= 'URI pointing to raw data', + BABBAGE_AGGREGATE_URI= 'URI pointing to a Babbage compliant aggregates API request', + BABBAGE_AGGREGATE_RAW_DATA= 'Raw data coming from a Babbage compliant aggregates API request', + BABBAGE_FACT_URI= 'URI pointing to a Babbage compliant facts API request', + BABBAGE_FACT_RAW_DATA= 'Raw data coming from a Babbage compliant facts API request', + BABBAGE_MEMBER= 'Member values from a dimension' +} @@ -24,12 +25,13 @@ export class Input { name: string; cardinality: string = '1'; description: string; - type: string; + type: InputTypes; title: string; data_type: string; default_value: any; guess: boolean; required: boolean; + data: any; deserialize(data: any): Input { @@ -41,11 +43,25 @@ export class Input { this.default_value = data.default_value; this.required = data.required; this.data_type = data.data_type; - this.type = InputTypes[data.type]; + this.type = data.type; return this; } + serialize() { + let output = {}; + + output['name'] = this.name; + output['title'] = this.title; + output['cardinality'] = this.cardinality; + output['guess'] = this.guess; + output['default_value'] = this.default_value; + output['required'] = this.required; + output['data_type'] = this.data_type; + output['type'] = this.type; + + return output; + } } diff --git a/src/app/models/analysis/jobTimeoutException.ts b/src/app/models/analysis/jobTimeoutException.ts new file mode 100644 index 0000000..ce1e03f --- /dev/null +++ b/src/app/models/analysis/jobTimeoutException.ts @@ -0,0 +1,6 @@ +/** + * Created by larjo on 16/5/2017. + */ +export class JobTimeoutException { + +} diff --git a/src/app/models/analysis/output.ts b/src/app/models/analysis/output.ts index 6e0c35a..0f92679 100644 --- a/src/app/models/analysis/output.ts +++ b/src/app/models/analysis/output.ts @@ -2,12 +2,12 @@ * Created by larjo on 12/10/2016. */ -export const OutputTypes = { - TABLE: 'table', - ADJACENCY_MATRIX: 'adjacency matrix', - OBJECT_COLLECTION: 'collection of objects', - VISUALIZATION_PREFERENCE: 'visualization preference', - VISUALIZATION_RENDERING: 'rendered visualization' +export enum OutputTypes { + TABLE= 'table', + ADJACENCY_MATRIX= 'adjacency matrix', + OBJECT_COLLECTION= 'collection of objects', + VISUALIZATION_PREFERENCE= 'visualization preference', + VISUALIZATION_RENDERING= 'rendered visualization' }; @@ -16,7 +16,7 @@ export class Output { name: string; cardinality: number= 1; - type: string; + type: OutputTypes; deserialize(data: any): Output { @@ -25,10 +25,20 @@ export class Output { this.name = data.name; this.cardinality = data.cardinality; - this.type = OutputTypes[data.type]; + this.type = data.type; return this; } + serialize() { + let output = {}; + + output['name'] = this.name; + output['cardinality'] = this.cardinality; + + output['type'] = this.type; + + return output; + } } diff --git a/src/app/models/attribute.ts b/src/app/models/attribute.ts index 07eb732..2b972bf 100644 --- a/src/app/models/attribute.ts +++ b/src/app/models/attribute.ts @@ -1,14 +1,14 @@ -import {Dimension} from "./dimension"; -import {Serializable} from "./iserializeable"; +import {Dimension} from './dimension'; +import {Serializable} from './iserializeable'; /** * Created by larjo on 16/7/2016. */ -export class Attribute implements Serializable{ +export class Attribute implements Serializable { serialize(input: Attribute): Object { return this; } - deserialize(input:any):Attribute { + deserialize(input: any): Attribute { this.ref = input.ref; this.datatype = input.datatype; @@ -18,17 +18,19 @@ export class Attribute implements Serializable{ return this; } - constructor(){} + constructor() { - ref:string; - datatype:string; - label:string; - orig_attribute:string; - dimension:Dimension; + } + + ref: string; + datatype: string; + label: string; + orig_attribute: string; + dimension: Dimension; - public get fullLabel():string{ - return (this.dimension?this.dimension.label:"")+"→"+this.label; + public get fullLabel(): string{ + return (this.dimension ? this.dimension.label : '') + '→' + this.label; } diff --git a/src/app/models/dimension.ts b/src/app/models/dimension.ts index 17d5ff1..d0df5ec 100644 --- a/src/app/models/dimension.ts +++ b/src/app/models/dimension.ts @@ -49,7 +49,20 @@ export class Dimension implements Serializable { hierarchy: string; - attributes: Map = new Map(); + attributes: Map = new Map(); + + + get significants(): Map{ + + const significants = new Map(); + + significants.set(this.key_attribute, this.attributes.get(this.key_attribute)); + significants.set(this.label_attribute, this.attributes.get(this.label_attribute)); + + + return significants; + + } } diff --git a/src/app/reducers/cube/cubes.ts b/src/app/reducers/cube/cubes.ts index 5238c35..7f6e6b1 100644 --- a/src/app/reducers/cube/cubes.ts +++ b/src/app/reducers/cube/cubes.ts @@ -24,17 +24,19 @@ export function reducer(state = initialState, action: cube.Actions | collection. switch (action.type) { case cube.ActionTypes.SEARCH_COMPLETE: case collection.ActionTypes.LOAD_SUCCESS: { - const packages:any = action.payload; - const newPackages = packages.filter(pckg => !state.entities[pckg.id]); + const packages: any = action.payload.cubes; + const newPackages = action.payload.params.from < 2 ? [ ...packages ] : packages.filter(pckg => !state.entities[pckg.id]); const newPackageIds = newPackages.map(pckg => pckg.id); const newCubeEntities = newPackages.reduce((entities: { [id: string]: any }, pckg: any) => { return Object.assign(entities, { - [pckg.id]: {pckg:pckg.package, id:pckg.id} + [pckg.id]: {pckg: pckg.package, id: pckg.id} }); }, {}); + let entities = Object.assign({}, state.entities, newCubeEntities); + let ids = action.payload.params.from < 2 ? [ ...newPackageIds ] : [ ...state.ids, ...newPackageIds ]; return { - ids: [ ...state.ids, ...newPackageIds ], - entities: Object.assign({}, state.entities, newCubeEntities), + ids: ids, + entities: entities, selectedCubeId: state.selectedCubeId }; } @@ -44,7 +46,7 @@ export function reducer(state = initialState, action: cube.Actions | collection. /* if (state.ids.indexOf(cube.name) > -1) { return state; }*/ - let mergedCube = Object.assign({}, state.entities[cube.name],cube); + let mergedCube = Object.assign({}, state.entities[cube.name], cube); return { ids: [ ...state.ids, cube.name ], entities: Object.assign({}, state.entities, { diff --git a/src/app/reducers/cube/search.ts b/src/app/reducers/cube/search.ts index cc3dd53..e78fe4a 100644 --- a/src/app/reducers/cube/search.ts +++ b/src/app/reducers/cube/search.ts @@ -7,18 +7,24 @@ export interface State { ids: string[]; loading: boolean; query: string; + size: number; + from: number; } const initialState: State = { ids: [], loading: false, - query: '' + query: '', + size: 50, + from: 0 }; export function reducer(state = initialState, action: cube.Actions): State { switch (action.type) { case cube.ActionTypes.SEARCH: { - const query = action.payload; + const query = action.payload.query; + const size = action.payload.size; + const from = action.payload.from; /* if (query === '') { return { @@ -29,17 +35,19 @@ export function reducer(state = initialState, action: cube.Actions): State { }*/ return Object.assign({}, state, { - query, + query, size, from, loading: true }); } case cube.ActionTypes.SEARCH_COMPLETE: { - const cubes = action.payload; + const cubes = action.payload.cubes; return { ids: cubes.map(cube => cube.id), loading: false, - query: state.query + query: state.query, + size: state.size, + from: state.from }; } @@ -60,6 +68,12 @@ export function getCubeIds(state$: Observable) { export function getQuery(state$: Observable) { return state$.select(state => state.query); } +export function getSize(state$: Observable) { + return state$.select(state => state.size); +} +export function getFrom(state$: Observable) { + return state$.select(state => state.from); +} export function getLoading(state$: Observable) { return state$.select(state => { diff --git a/src/app/reducers/index.ts b/src/app/reducers/index.ts index 24068ba..c2ea36a 100644 --- a/src/app/reducers/index.ts +++ b/src/app/reducers/index.ts @@ -1,11 +1,11 @@ import '@ngrx/core/add/operator/select'; import 'rxjs/add/operator/switchMap'; import 'rxjs/add/operator/let'; -import { Observable } from 'rxjs/Observable'; -import { combineLatest } from 'rxjs/observable/combineLatest'; -import { ActionReducer } from '@ngrx/store'; +import {Observable} from 'rxjs/Observable'; +import {combineLatest} from 'rxjs/observable/combineLatest'; +import {ActionReducer} from '@ngrx/store'; import * as fromRouter from '@ngrx/router-store'; -import { Book } from '../models/book'; +import {Book} from '../models/book'; import {ExpressionTree} from '../models/expressionTree'; /** @@ -16,14 +16,14 @@ import {ExpressionTree} from '../models/expressionTree'; * * More: https://drboolean.gitbooks.io/mostly-adequate-guide/content/ch5.html */ -import { compose } from '@ngrx/core/compose'; +import {compose} from '@ngrx/core/compose'; /** * storeFreeze prevents state from being mutated. When mutation occurs, an * exception will be thrown. This is useful during development mode to * ensure that none of the reducers accidentally mutates the state. */ -import { storeFreeze } from 'ngrx-store-freeze'; +import {storeFreeze} from 'ngrx-store-freeze'; /** * combineReducers is another useful metareducer that takes a map of reducer @@ -33,7 +33,7 @@ import { storeFreeze } from 'ngrx-store-freeze'; * * More: https://egghead.io/lessons/javascript-redux-implementing-combinereducers-from-scratch */ -import { combineReducers } from '@ngrx/store'; +import {combineReducers} from '@ngrx/store'; /** @@ -132,7 +132,7 @@ export function reducer(state: any, action: any) { * ``` * */ - export function getBooksState(state$: Observable) { +export function getBooksState(state$: Observable) { return state$.select(state => state.books); } @@ -151,9 +151,9 @@ export function reducer(state: any, action: any) { * observable. Each subscription to the resultant observable * is shared across all subscribers. */ - export const getBookEntities = compose(fromBooks.getBookEntities, getBooksState); - export const getBookIds = compose(fromBooks.getBookIds, getBooksState); - export const getSelectedBook = compose(fromBooks.getSelectedBook, getBooksState); +export const getBookEntities = compose(fromBooks.getBookEntities, getBooksState); +export const getBookIds = compose(fromBooks.getBookIds, getBooksState); +export const getSelectedBook = compose(fromBooks.getSelectedBook, getBooksState); /** @@ -161,7 +161,7 @@ export function reducer(state: any, action: any) { * reducer's and collection reducer's selectors. */ export function getSearchState(state$: Observable) { - return state$.select(s => s.search); + return state$.select(s => s.search); } export const getSearchBookIds = compose(fromSearch.getBookIds, getSearchState); @@ -179,11 +179,10 @@ export const getSearchResults = function (state$: Observable) { state$.let(getBookEntities), state$.let(getSearchBookIds) ) - .map(([ entities, ids ]) => ids.map(id => entities[id])); + .map(([entities, ids]) => ids.map(id => entities[id])); }; - export function getCollectionState(state$: Observable) { return state$.select(s => s.collection); } @@ -197,7 +196,7 @@ export const getBookCollection = function (state$: Observable) { state$.let(getBookEntities), state$.let(getCollectionBookIds) ) - .map(([ entities, ids ]) => ids.map(id => entities[id])); + .map(([entities, ids]) => ids.map(id => entities[id])); }; export const isSelectedBookInCollection = function (state$: Observable) { @@ -205,17 +204,10 @@ export const isSelectedBookInCollection = function (state$: Observable) { state$.let(getCollectionBookIds), state$.let(getSelectedBook) ) - .map(([ ids, selectedBook ]) => ids.indexOf(selectedBook.id) > -1); + .map(([ids, selectedBook]) => ids.indexOf(selectedBook.id) > -1); }; - - - - - - - export function getExecutionState(state$: Observable) { return state$.select(s => { return s.executions; @@ -226,14 +218,6 @@ export function getExecutionState(state$: Observable) { export const getExecutionLoading = compose(fromExecutions.getLoading, getExecutionState); - - - - - - - - /** * A selector function is a map function factory. We pass it parameters and it * returns a function that maps from the larger state tree into a smaller @@ -295,6 +279,8 @@ export function getCubeSearchState(state$: Observable) { export const getSearchCubeIds = compose(fromCubeSearch.getCubeIds, getCubeSearchState); export const getCubeSearchStatus = compose(fromCubeSearch.getStatus, getCubeSearchState); export const getCubeSearchQuery = compose(fromCubeSearch.getQuery, getCubeSearchState); +export const getCubeSearchSize = compose(fromCubeSearch.getSize, getCubeSearchState); +export const getCubeSearchFrom = compose(fromCubeSearch.getFrom, getCubeSearchState); export const getCubeSearchLoading = compose(fromCubeSearch.getLoading, getCubeSearchState); @@ -306,13 +292,14 @@ export const getCubeSearchResults = function (state$: Observable) { return combineLatest<{ [name: string]: Cube }, string[]>( state$.let(getCubeEntities), - state$.let(getSearchCubeIds) + state$.let(getCubeIds) ) - .map(([ entities, ids ]) => ids.map(name => { return entities[name]; })); + .map(([entities, ids]) => ids.map(name => { + return entities[name]; + })); }; - export function getCubeCollectionState(state$: Observable) { return state$.select(s => s.collection); } @@ -326,7 +313,7 @@ export const getCubeCollection = function (state$: Observable) { state$.let(getCubeEntities), state$.let(getCollectionCubeIds) ) - .map(([ entities, ids ]) => ids.map(name => entities[name])); + .map(([entities, ids]) => ids.map(name => entities[name])); }; export const isSelectedCubeInCollection = function (state$: Observable) { @@ -334,7 +321,7 @@ export const isSelectedCubeInCollection = function (state$: Observable) { state$.let(getCollectionCubeIds), state$.let(getSelectedCube) ) - .map(([ ids, selectedCube ]) => ids.indexOf(selectedCube.name) > -1); + .map(([ids, selectedCube]) => ids.indexOf(selectedCube.name) > -1); }; @@ -351,8 +338,6 @@ export function getTreesState(state$: Observable) { } - - /** * Layout Reducers */ diff --git a/src/app/services/algorithms.ts b/src/app/services/algorithms.ts index efca449..fe2335c 100644 --- a/src/app/services/algorithms.ts +++ b/src/app/services/algorithms.ts @@ -13,36 +13,43 @@ import {Configuration} from 'jasmine-spec-reporter/built/configuration'; @Injectable() export class AlgorithmsService { - private API_DAM_PATH: string = environment.DAMUrl + '/cubes'; + private API_DAM_PATH: string = environment.DAMUrl ; constructor(private http: Http) { } - getCompatibleAlgorithms(cube: Cube): Observable { - let that = this; - return Observable.create(function (observer: any) { - observer.next([AlgorithmsService.dummyTimeSeries(), AlgorithmsService.dummyDescriptiveStatistics(), AlgorithmsService.dummyClustering()]); - }); + + getActualCompatibleAlgorithms(): Observable { + // console.log(JSON.stringify({time_series: AlgorithmsService.dummyTimeSeries().serialize(), descriptive_statistics: AlgorithmsService.dummyDescriptiveStatistics().serialize(), clustering: AlgorithmsService.dummyClustering().serialize()})); + + return this.http.get(`${environment.DAMUrl}/services/meta/all`) + .map(res => { + let algorithms = []; + let response = res.json(); + for (let key of Object.keys(response)){ + let algorithm = new Algorithm().deserialize(response[key]); + + algorithms.push(algorithm); + + } + + return algorithms; + + }); + } - getActualCompatibleAlgorithms(cube: Cube): Observable { - return this.http.get(`${this.API_DAM_PATH}/${cube.name}/algo`) + getActualCompatibleAlgorithm( algorithmName): Observable { + + return this.http.get(`${environment.DAMUrl}/services/meta/${algorithmName}`) .map(res => { let response = res.json(); - - let algorithms = []; - for (let algorithmName of response.algos) { - let algorithm = new Algorithm(); - algorithm.name = algorithmName; - algorithm.title = algorithmName; - algorithms.push(algorithm); - } - return algorithms; + return new Algorithm().deserialize(response); }); @@ -51,24 +58,34 @@ export class AlgorithmsService { getTimeSeriesAlgorithm(): Observable { let that = this; - debugger; - return Observable.create(function (observer: any) { - observer.next(AlgorithmsService.dummyTimeSeries()); - }); + return this.getActualCompatibleAlgorithm('time_series'); + } getDescriptiveStatisticsAlgorithm(): Observable { - let that = this; - return Observable.create(function (observer: any) { - observer.next(AlgorithmsService.dummyDescriptiveStatistics()); - }); + return this.getActualCompatibleAlgorithm('descriptive_statistics'); + } getClusteringAlgorithm(): Observable { + return this.getActualCompatibleAlgorithm('clustering'); + + } + + getOutlierDetectionAlgorithm(): Observable { let that = this; - return Observable.create(function (observer: any) { - observer.next(AlgorithmsService.dummyClustering()); - }); + return this.getActualCompatibleAlgorithm('outlier_detection'); + /*return Observable.create(function (observer: any) { + observer.next(AlgorithmsService.dummyOutlierDetection()); + });*/ + } + + getRuleMiningAlgorithm(): Observable { + let that = this; + return this.getActualCompatibleAlgorithm('rule_mining'); + /*return Observable.create(function (observer: any) { + observer.next(AlgorithmsService.dummyOutlierDetection()); + });*/ } getAlgorithm(name, cube: Cube): Observable { @@ -79,8 +96,12 @@ export class AlgorithmsService { return this.getDescriptiveStatisticsAlgorithm(); case 'clustering': return this.getClusteringAlgorithm(); + case 'outlier_detection': + return this.getOutlierDetectionAlgorithm(); + case 'rule_mining': + return this.getRuleMiningAlgorithm(); default: - return this.http.get(`${this.API_DAM_PATH}/algo/${name}`) + return this.http.get(`${this.API_DAM_PATH}/${name}`) .map(res => { let response = res.json(); @@ -93,290 +114,9 @@ export class AlgorithmsService { } - static dummyTimeSeries(): Algorithm { - let timeSeriesAlgorithm = new Algorithm(); - timeSeriesAlgorithm.title = 'Time Series'; - timeSeriesAlgorithm.name = 'time_series'; - timeSeriesAlgorithm.description = 'Time series analysis comprises methods for analyzing time series data in order to extract meaningful statistics and other characteristics of the data. Time series forecasting is the use of a model to predict future values based on previously observed values. While regression analysis is often employed in such a way as to test theories that the current values of one or more independent time series affect the current value of another time series, this type of analysis of time series is not called "time series analysis", which focuses on comparing values of a single time series or multiple dependent time series at different points in time.'; - - let raw_data_input = new Input(); - raw_data_input.cardinality = '1'; - raw_data_input.type = InputTypes.BABBAGE_AGGREGATE_URI; - raw_data_input.name = 'json_data'; - raw_data_input.title = 'Data coming from an aggregation'; - raw_data_input.guess = false; - raw_data_input.description = 'This is the aggregated data that will be sent to the time series algorithm. You need to select at least a year-related drilldown and an amount-related aggregate.'; - raw_data_input.required = true; - - let time_dimension_input = new Input(); - time_dimension_input.cardinality = '1'; - time_dimension_input.type = InputTypes.ATTRIBUTE_REF; - time_dimension_input.name = 'time'; - time_dimension_input.title = 'Time dimension'; - time_dimension_input.description = 'This is the time dimension that should exist in the aggregation result.'; - time_dimension_input.guess = true; - time_dimension_input.required = true; - - let amount_aggregate_input = new Input(); - amount_aggregate_input.cardinality = '1'; - amount_aggregate_input.type = InputTypes.AGGREGATE_REF; - amount_aggregate_input.name = 'amount'; - amount_aggregate_input.title = 'Amount aggregate'; - amount_aggregate_input.description = 'This is the amount aggregate that should exist in the aggregation result'; - amount_aggregate_input.guess = true; - amount_aggregate_input.required = true; - - let prediction_steps_input = new Input(); - prediction_steps_input.cardinality = '1'; - prediction_steps_input.type = InputTypes.PARAMETER; - prediction_steps_input.name = 'prediction_steps'; - prediction_steps_input.title = 'Prediction Steps'; - prediction_steps_input.description = 'The number of time steps you want to get prediction for.'; - prediction_steps_input.data_type = 'number'; - prediction_steps_input.default_value = 4; - prediction_steps_input.guess = false; - prediction_steps_input.required = false; - - let configuration = new ExecutionConfiguration; - - configuration.inputs.set(raw_data_input.name, raw_data_input); - configuration.inputs.set(time_dimension_input.name, time_dimension_input); - configuration.inputs.set(amount_aggregate_input.name, amount_aggregate_input); - configuration.inputs.set(prediction_steps_input.name, prediction_steps_input); - - let json_output = new Output; - json_output.name = 'output'; - json_output.cardinality = 1 ; - json_output.type = OutputTypes.TABLE; - - configuration.outputs.set(json_output.name, json_output); - configuration.name = 'aggregate'; - configuration.title = 'Timeseries of aggregated data'; - configuration.algorithm = timeSeriesAlgorithm; - configuration.method = RequestMethod.Post; - configuration.endpoint = new URL(environment.openCpuEndpoint + '/library/TimeSeries.OBeu/R/open_spending.ts/print'); - configuration.prompt = 'Build an aggregate, with a time-related drilldown and then enter the prediction steps parameter from the left and click on the execute button on top right.'; - - timeSeriesAlgorithm.configurations.set('aggregate', configuration); - - - - - return timeSeriesAlgorithm; - - } - - - - static dummyDescriptiveStatistics(): Algorithm { - let descriptiveStatisticsAlgorithm = new Algorithm(); - descriptiveStatisticsAlgorithm.title = 'Descriptive Statistics'; - descriptiveStatisticsAlgorithm.name = 'descriptive_statistics'; - descriptiveStatisticsAlgorithm.description = 'Descriptive statistics provide simple summaries about the sample and about the observations that have been made. Such summaries may be either quantitative, i.e. summary statistics, or visual, i.e. simple-to-understand graphs. These summaries may either form the basis of the initial description of the data as part of a more extensive statistical analysis, or they may be sufficient in and of themselves for a particular investigation.'; - - - let raw_data_input = new Input(); - raw_data_input.cardinality = '1'; - raw_data_input.type = InputTypes.BABBAGE_FACT_URI; - raw_data_input.name = 'json_data'; - raw_data_input.title = 'Tabular data'; - raw_data_input.description = 'These are the raw budget facts that will be sent for analysis. By default, all dimensions are included.'; - raw_data_input.guess = false; - - let what_dimension_input = new Input(); - what_dimension_input.cardinality = 'n'; - what_dimension_input.type = InputTypes.ATTRIBUTE_REF; - what_dimension_input.name = 'dimensions'; - what_dimension_input.title = 'Analyzed dimensions'; - what_dimension_input.required = true; - what_dimension_input.description = 'Select a specific dimension for further frequency analysis. If a dimension contains empty values, it should not be selected for further analysis.'; - what_dimension_input.guess = false; - - /* let to_what_dimension_input = new Input(); - to_what_dimension_input.cardinality = '1'; - to_what_dimension_input.type = InputTypes.ATTRIBUTE_REF; - to_what_dimension_input.name = 'to.what'; - to_what_dimension_input.title = 'To what'; - what_dimension_input.required = true; - to_what_dimension_input.guess = false;*/ - - - let amount_aggregate_input = new Input(); - amount_aggregate_input.cardinality = 'n'; - amount_aggregate_input.type = InputTypes.MEASURE_REF; - amount_aggregate_input.name = 'amounts'; - amount_aggregate_input.description = 'This is the measure that will be used for the descriptive statistics analysis.'; - amount_aggregate_input.title = 'Amount measure'; - amount_aggregate_input.guess = false; - amount_aggregate_input.required = true; - let factsConfig = new ExecutionConfiguration(); - factsConfig.inputs.set(raw_data_input.name, raw_data_input); - factsConfig.inputs.set(what_dimension_input.name, what_dimension_input); -// descriptiveStatisticsAlgorithm.inputs.set(to_what_dimension_input.name, to_what_dimension_input); - factsConfig.inputs.set(amount_aggregate_input.name, amount_aggregate_input); - factsConfig.prompt = 'Build an budget facts subset, by selecting at least the dimension that is to be analyzed.'; - - let json_output = new Output; - json_output.name = 'output'; - json_output.cardinality = 1 ; - json_output.type = OutputTypes.TABLE; - - factsConfig.outputs.set(json_output.name, json_output); - factsConfig.name = 'facts'; - factsConfig.title = 'Descriptive statistics from facts'; - factsConfig.method = RequestMethod.Post; - factsConfig.endpoint = new URL(environment.openCpuEndpoint + '/library/DescriptiveStats.OBeu/R/open_spending.ds'); - factsConfig.algorithm = descriptiveStatisticsAlgorithm; - - descriptiveStatisticsAlgorithm.configurations.set('facts', factsConfig); - - return descriptiveStatisticsAlgorithm; - - - - } - - static dummyClustering(): Algorithm { - let clusteringAlgorithm = new Algorithm(); - clusteringAlgorithm.title = 'Clustering'; - clusteringAlgorithm.name = 'clustering'; - clusteringAlgorithm.description = 'Cluster analysis or clustering is the task of grouping a set of objects in such a way that objects in the same group (called a cluster) are more similar (in some sense or another) to each other than to those in other groups (clusters). It is a main task of exploratory data mining, and a common technique for statistical data analysis, used in many fields, including machine learning, pattern recognition, image analysis, information retrieval, bioinformatics, data compression, and computer graphics.'; - - - let raw_data_input = new Input(); - raw_data_input.cardinality = '1'; - raw_data_input.type = InputTypes.BABBAGE_FACT_URI; - raw_data_input.name = 'json_data'; - raw_data_input.title = 'Tabular data'; - raw_data_input.description = 'These are the raw budget facts that will be sent for analysis. By default, all dimensions are included.'; - raw_data_input.guess = false; - - let agg_raw_data_input = new Input(); - agg_raw_data_input.cardinality = '1'; - agg_raw_data_input.type = InputTypes.BABBAGE_AGGREGATE_URI; - agg_raw_data_input.name = 'json_data'; - agg_raw_data_input.title = 'Aggregate'; - agg_raw_data_input.description = 'This is budget aggregate that will be sent for analysis. By default, all dimensions are included.'; - agg_raw_data_input.guess = false; - - let what_dimension_input = new Input(); - what_dimension_input.cardinality = 'n'; - what_dimension_input.type = InputTypes.ATTRIBUTE_REF; - what_dimension_input.name = 'dimensions'; - what_dimension_input.title = 'Analyzed dimensions'; - what_dimension_input.required = true; - what_dimension_input.description = 'Select a specific dimension for further frequency analysis. If a dimension contains empty values, it should not be selected for further analysis.'; - what_dimension_input.guess = false; - - - let measured_dimension_input = new Input(); - measured_dimension_input.cardinality = 'n'; - measured_dimension_input.type = InputTypes.ATTRIBUTE_REF; - measured_dimension_input.name = 'measured.dim'; - measured_dimension_input.title = 'Aggregate modifier dimension'; - measured_dimension_input.required = true; - measured_dimension_input.description = 'This dimension is used to create additional, virtual measure aggregates, based on the actual values of the dimension.'; - measured_dimension_input.guess = false; - - /* let to_what_dimension_input = new Input(); - to_what_dimension_input.cardinality = '1'; - to_what_dimension_input.type = InputTypes.ATTRIBUTE_REF; - to_what_dimension_input.name = 'to.what'; - to_what_dimension_input.title = 'To what'; - what_dimension_input.required = true; - to_what_dimension_input.guess = false;*/ - - - let amount_measure_input = new Input(); - amount_measure_input.cardinality = 'n'; - amount_measure_input.type = InputTypes.MEASURE_REF; - amount_measure_input.name = 'amounts'; - amount_measure_input.description = 'This is the measure that will be used for the descriptive statistics analysis.'; - amount_measure_input.title = 'Amount measure'; - amount_measure_input.guess = false; - amount_measure_input.required = true; - - - let amount_aggregate_input = new Input(); - amount_aggregate_input.cardinality = 'n'; - amount_aggregate_input.type = InputTypes.AGGREGATE_REF; - amount_aggregate_input.name = 'amounts'; - amount_aggregate_input.description = 'This is the aggregate that will be used for the descriptive statistics analysis.'; - amount_aggregate_input.title = 'Amount aggregate'; - amount_aggregate_input.guess = false; - amount_aggregate_input.required = true; - - let clustering_method_input = new Input(); - clustering_method_input.cardinality = '1'; - clustering_method_input.type = InputTypes.PARAMETER; - clustering_method_input.name = 'cl.method'; - clustering_method_input.title = 'Clustering Method'; - clustering_method_input.description = 'The method used to cluster observations.'; - clustering_method_input.data_type = 'string'; - clustering_method_input.default_value = 'pam'; - clustering_method_input.guess = false; - clustering_method_input.required = false; - - - let factsConfiguration = new ExecutionConfiguration(); - let aggregatesConfiguration = new ExecutionConfiguration(); - - - - factsConfiguration.inputs.set(raw_data_input.name, raw_data_input); - factsConfiguration.inputs.set(what_dimension_input.name, what_dimension_input); - factsConfiguration.inputs.set(clustering_method_input.name, clustering_method_input); -// descriptiveStatisticsAlgorithm.inputs.set(to_what_dimension_input.name, to_what_dimension_input); - factsConfiguration.inputs.set(amount_measure_input.name, amount_measure_input); - factsConfiguration.prompt = 'Build an budget facts subset, by selecting at least the dimension that is to be analyzed.'; - - - aggregatesConfiguration.inputs.set(agg_raw_data_input.name, agg_raw_data_input); - aggregatesConfiguration.inputs.set(what_dimension_input.name, what_dimension_input); - aggregatesConfiguration.inputs.set(measured_dimension_input.name, measured_dimension_input); - aggregatesConfiguration.inputs.set(clustering_method_input.name, clustering_method_input); - -// descriptiveStatisticsAlgorithm.inputs.set(to_what_dimension_input.name, to_what_dimension_input); - aggregatesConfiguration.inputs.set(amount_aggregate_input.name, amount_aggregate_input); - aggregatesConfiguration.prompt = 'Build an budget aggregate, by selecting at least the dimension that is to be analyzed.'; - - let json_output = new Output; - json_output.name = 'output'; - json_output.cardinality = 1 ; - json_output.type = OutputTypes.TABLE; - - factsConfiguration.outputs.set(json_output.name, json_output); - - factsConfiguration.method = RequestMethod.Post; - factsConfiguration.endpoint = new URL(environment.openCpuEndpoint + '/library/Cluster.OBeu/R/open_spending.cl'); - factsConfiguration.algorithm = clusteringAlgorithm; - factsConfiguration.name = 'facts'; - factsConfiguration.title = 'Clustering facts'; - - - clusteringAlgorithm.configurations.set('facts', factsConfiguration); - - aggregatesConfiguration.outputs.set(json_output.name, json_output); - - aggregatesConfiguration.method = RequestMethod.Post; - aggregatesConfiguration.endpoint = new URL(environment.openCpuEndpoint + '/library/Cluster.OBeu/R/open_spending.cl'); - aggregatesConfiguration.algorithm = clusteringAlgorithm; - aggregatesConfiguration.name = 'aggregates'; - aggregatesConfiguration.title = 'Clustering aggregates'; - - - - clusteringAlgorithm.configurations.set('facts', factsConfiguration); - clusteringAlgorithm.configurations.set('aggregates', aggregatesConfiguration); - - return clusteringAlgorithm; - - - - } } diff --git a/src/app/services/analysis.ts b/src/app/services/analysis.ts index 0d67073..8455325 100644 --- a/src/app/services/analysis.ts +++ b/src/app/services/analysis.ts @@ -9,6 +9,9 @@ import {AnalysisCall} from '../models/analysis/analysisCall'; import {Algorithm} from '../models/analysis/algorithm'; import {ApiCubesService} from './api-cubes'; import {ExecutionConfiguration} from '../models/analysis/executionConfiguration'; +import {environment} from '../../environments/environment'; +import {OperationCanceledException} from 'typescript'; +import {JobTimeoutException} from '../models/analysis/jobTimeoutException'; @Injectable() export class AnalysisService { @@ -32,6 +35,14 @@ export class AnalysisService { } + else if (configuration.algorithm.name === 'outlier_detection') { + return this.outlier(configuration, inputs); + } + else if (configuration.algorithm.name === 'rule_mining') { + return this.outlier(configuration, inputs); + } + + } timeseries(configuration, inputs) { @@ -42,10 +53,9 @@ export class AnalysisService { body.set('prediction_steps', inputs['prediction_steps']); body.set('json_data', '\'' + inputs['json_data'] + '\''); - return that.http.post(configuration.endpoint.toString() , body).map(res => { + return that.http.post(configuration.endpoint.toString(), body).map(res => { let response = res.json(); - debugger; let forecasts = response['forecasts']; let values: any = []; @@ -278,8 +288,85 @@ export class AnalysisService { }); + } + + outlier(configuration, inputs) { + let that = this; + let body = new URLSearchParams(); + + body.set('BABBAGE_FACT_URI', inputs['BABBAGE_FACT_URI']); + return that.http.get(configuration.endpoint.toString(), {search: body}).map(res => { + return res.json(); + }).mergeMap(resp => { + + + return this.http.get(environment.DAMUrl + '/results/' + resp.jobid) + .map(res => { + let response = res.json(); + + if (!response.hasOwnProperty('result')) { + throw 'ex'; + + } + if(configuration.name === 'LOF') { + let values: any = response.result.result; + return {values: values}; + + }else { + let values: any = response.result; + + return {values: values}; + + } + + + }).retryWhen(function (attempts) { + return Observable.range(1, environment.DAMretries).zip(attempts, function (i) { return i; }).flatMap(function (i) { + console.log('delay retry by ' + i + ' second(s)'); + if (i === environment.DAMretries) return Observable.throw(new JobTimeoutException); + return Observable.timer(i * environment.DAMpollingInitialStep); + }); + }); + }); + + + } + + rulemining(configuration, inputs) { + let that = this; + let body = new URLSearchParams(); + + body.set('BABBAGE_FACT_URI', inputs['BABBAGE_FACT_URI']); +debugger; + return that.http.get(configuration.endpoint.toString(), {search: body}).map(res => { + return res.json(); + }).mergeMap(resp => { + + + return this.http.get(environment.DAMUrl + '/results/' + resp.jobid) + .map(res => { + let response = res.json(); + + if (!response.hasOwnProperty('result')) { + throw 'ex'; + + } + let values: any = response.result; + + return {values: values}; + + }).retryWhen(function (attempts) { + return Observable.range(1, environment.DAMretries).zip(attempts, function (i) { return i; }).flatMap(function (i) { + console.log('delay retry by ' + i + ' second(s)'); + if (i === environment.DAMretries) return Observable.throw(new JobTimeoutException); + return Observable.timer(i * environment.DAMpollingInitialStep); + }); + }); + }); + } + clustering(configuration, inputs) { let that = this; let body = new URLSearchParams(); @@ -288,17 +375,15 @@ export class AnalysisService { let measuredDimString = '\'' + inputs['measured.dim'] + '\''; - body.set('amounts', '\'' + inputs['amounts'] + '\''); body.set('dimensions', dimensionColumnString); body.set('measured.dim', measuredDimString); body.set('cl.method', '\'' + inputs['cl.method'] + '\''); body.set('json_data', '\'' + inputs['json_data'] + '\''); - return that.http.post(configuration.endpoint.toString() , body).map(res => { + return that.http.post(configuration.endpoint.toString(), body).map(res => { let response = res.json(); - debugger; let forecasts = response['forecasts']; let values: any = []; @@ -532,6 +617,7 @@ export class AnalysisService { } + descriptive(configuration, inputs) { let that = this; let body = new URLSearchParams(); @@ -570,8 +656,6 @@ export class AnalysisService { } - - let boxplotResponse = response.boxplot; let boxplots = []; let boxplotkeys = Object.keys(boxplotResponse); diff --git a/src/app/services/api-cubes.ts b/src/app/services/api-cubes.ts index 94dc74a..fa36e19 100644 --- a/src/app/services/api-cubes.ts +++ b/src/app/services/api-cubes.ts @@ -18,11 +18,12 @@ export class ApiCubesService { constructor(private http: Http) { } - searchCubes(queryTitle: string): Observable { + searchCubes(queryTitle: string, size: number, from: number): Observable { let params = new URLSearchParams(); params.set('q', `"${queryTitle}"`); - params.set('size', '10000'); + params.set('size', size.toString()); + params.set('from', from.toString()); return this.http.get(`${this.API_PACKAGES_PATH}`, {search: params}) .map(res => res.json()) ; @@ -77,7 +78,6 @@ export class ApiCubesService { let orderString = element.sorts.map(s => s.column.ref + ':' + s.direction.key).join('|'); let cutString = element.cuts.map(c => c.column.ref + c.transitivity.key + ':' + c.value).join('|'); - debugger; let params = new URLSearchParams(); if (element.cuts.length > 0) params.set('cut', cutString); if (element.sorts.length > 0) params.set('order', orderString); diff --git a/src/app/services/tree-execution.ts b/src/app/services/tree-execution.ts deleted file mode 100644 index 83f2b45..0000000 --- a/src/app/services/tree-execution.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Created by larjo on 14/7/2016. - */ -import 'rxjs/add/operator/map'; -import { Injectable } from '@angular/core'; -import {Store} from "@ngrx/store"; -import {Observable} from 'rxjs/Observable'; -import {ApiCubesService} from "./api-cubes"; -import {ExpressionNode} from "../models/expressionNode"; -import {AggregateNode} from "../models/aggregate/aggregateNode"; -import {ExpressionTree} from "../models/expressionTree"; -import {State} from "../reducers/index"; -import {Cube} from "../models/cube"; -import 'rxjs/add/operator/mergeMap' -import {FuncNode} from "../models/func/funcNode"; -import {ReplaceAction} from "../actions/tree"; - -@Injectable() -export class TreeExecution { - - constructor(private rudolfCubesService: ApiCubesService, private store:Store) {} - - execute(expressionTree: ExpressionTree, rootNode:ExpressionNode){ - let that = this; - if(rootNode instanceof AggregateNode){ - let observable = this.rudolfCubesService.aggregate(rootNode.element).share(); - observable.subscribe(response=>{ - rootNode.value = response; - rootNode.executed = true; - that.store.dispatch(new ReplaceAction(expressionTree)); - // return rootNode.value; - - }); - - return observable; - - /* .catch(() => Observable.of(this.cubeActions.searchComplete([]));*/ - } - else if(rootNode instanceof FuncNode) { - - if(rootNode.children.length<1){ - return Observable.create(function (observer) { - rootNode.executed = true; - that.store.dispatch(new ReplaceAction(expressionTree)); - - observer.next({}); - }) - } - let observables = []; - - rootNode.children.map(function (child) { - return child.value; - }); - - rootNode.children.forEach((child) => { - observables.push(this.execute(expressionTree, child)); - }); - - let observable = Observable.forkJoin(observables).share(); - observable.subscribe(response=>{ - let data = rootNode.children.map(function (child) { - return child.value; - }); - rootNode.value = rootNode.element.invoke(data); - rootNode.executed = true; - that.store.dispatch(new ReplaceAction(expressionTree)); - }); - - return observable; - - - } - - - } - -} diff --git a/USERGUIDE.md b/src/assets/USERGUIDE.md similarity index 97% rename from USERGUIDE.md rename to src/assets/USERGUIDE.md index 80b3b17..49bc96e 100644 --- a/USERGUIDE.md +++ b/src/assets/USERGUIDE.md @@ -13,7 +13,7 @@ In the near future, Indigo is going to be backed by DAM, a service that can coor When you visit Indigo's home page, you are presented with a search box, where you can type a word that is contained in a dataset's name in order to filter the datasets: - + If you type nothing in the search box, you get all the datasets in the configured store. If you are using a Rudolf API store, you also get the Global dataset - you will use it in the following sections to build a time series analysis task. If you have spotted the dataset you want to analyze, press the green button "Analytics & Data Mining". diff --git a/src/assets/img/OpenBudgets_Team.jpg b/src/assets/img/OpenBudgets_Team.jpg new file mode 100644 index 0000000..13325e7 Binary files /dev/null and b/src/assets/img/OpenBudgets_Team.jpg differ diff --git a/src/assets/img/OpenBudgets_Team_cropped.png b/src/assets/img/OpenBudgets_Team_cropped.png new file mode 100644 index 0000000..5f8b2e6 Binary files /dev/null and b/src/assets/img/OpenBudgets_Team_cropped.png differ diff --git a/src/assets/img/banner-image.png b/src/assets/img/banner-image.png new file mode 100644 index 0000000..1c4f18a Binary files /dev/null and b/src/assets/img/banner-image.png differ diff --git a/src/assets/img/berlin2.jpg b/src/assets/img/berlin2.jpg new file mode 100644 index 0000000..66ba315 Binary files /dev/null and b/src/assets/img/berlin2.jpg differ diff --git a/src/assets/img/cd-arrow.svg b/src/assets/img/cd-arrow.svg new file mode 100644 index 0000000..eb8f50b --- /dev/null +++ b/src/assets/img/cd-arrow.svg @@ -0,0 +1,20 @@ + + + + +Imported Layers +Created with Sketch. + + + + + + + + + + + + diff --git a/src/assets/img/cd-icon-arrow-1.svg b/src/assets/img/cd-icon-arrow-1.svg new file mode 100644 index 0000000..757be23 --- /dev/null +++ b/src/assets/img/cd-icon-arrow-1.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/src/assets/img/cd-icon-arrow-2.svg b/src/assets/img/cd-icon-arrow-2.svg new file mode 100644 index 0000000..84a72fa --- /dev/null +++ b/src/assets/img/cd-icon-arrow-2.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/src/assets/img/cd-logo.svg b/src/assets/img/cd-logo.svg new file mode 100644 index 0000000..cbd742e --- /dev/null +++ b/src/assets/img/cd-logo.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/src/assets/img/cd-socials.svg b/src/assets/img/cd-socials.svg new file mode 100644 index 0000000..df7c367 --- /dev/null +++ b/src/assets/img/cd-socials.svg @@ -0,0 +1 @@ +cd-socials \ No newline at end of file diff --git a/src/assets/img/chart.svg b/src/assets/img/chart.svg new file mode 100644 index 0000000..e1a3bcf --- /dev/null +++ b/src/assets/img/chart.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/deliverable.png b/src/assets/img/deliverable.png new file mode 100644 index 0000000..ed410d3 Binary files /dev/null and b/src/assets/img/deliverable.png differ diff --git a/src/assets/img/down-arrow.svg b/src/assets/img/down-arrow.svg new file mode 100644 index 0000000..bf9f800 --- /dev/null +++ b/src/assets/img/down-arrow.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/img/embed.svg b/src/assets/img/embed.svg new file mode 100644 index 0000000..fb9827a --- /dev/null +++ b/src/assets/img/embed.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/europes-money.png b/src/assets/img/europes-money.png new file mode 100644 index 0000000..cf10bea Binary files /dev/null and b/src/assets/img/europes-money.png differ diff --git a/src/assets/img/find.svg b/src/assets/img/find.svg new file mode 100644 index 0000000..2e0ad07 --- /dev/null +++ b/src/assets/img/find.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/img/heart.svg b/src/assets/img/heart.svg new file mode 100644 index 0000000..9c57e7b --- /dev/null +++ b/src/assets/img/heart.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/img/logos/TI.png b/src/assets/img/logos/TI.png new file mode 100644 index 0000000..abf7346 Binary files /dev/null and b/src/assets/img/logos/TI.png differ diff --git a/src/assets/img/logos/VSE.png b/src/assets/img/logos/VSE.png new file mode 100644 index 0000000..826fac0 Binary files /dev/null and b/src/assets/img/logos/VSE.png differ diff --git a/src/assets/img/logos/fraunhofer.png b/src/assets/img/logos/fraunhofer.png new file mode 100644 index 0000000..20cf15a Binary files /dev/null and b/src/assets/img/logos/fraunhofer.png differ diff --git a/src/assets/img/logos/j++.png b/src/assets/img/logos/j++.png new file mode 100644 index 0000000..13edc8b Binary files /dev/null and b/src/assets/img/logos/j++.png differ diff --git a/src/assets/img/logos/logo_civio.png b/src/assets/img/logos/logo_civio.png new file mode 100644 index 0000000..84b20cf Binary files /dev/null and b/src/assets/img/logos/logo_civio.png differ diff --git a/src/assets/img/logos/okf.png b/src/assets/img/logos/okf.png new file mode 100644 index 0000000..a5d9f4e Binary files /dev/null and b/src/assets/img/logos/okf.png differ diff --git a/src/assets/img/logos/okfde.png b/src/assets/img/logos/okfde.png new file mode 100644 index 0000000..b5fb4e4 Binary files /dev/null and b/src/assets/img/logos/okfde.png differ diff --git a/src/assets/img/logos/okfngr.svg b/src/assets/img/logos/okfngr.svg new file mode 100644 index 0000000..6f975b5 --- /dev/null +++ b/src/assets/img/logos/okfngr.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/logos/unibonn.png b/src/assets/img/logos/unibonn.png new file mode 100644 index 0000000..12f50d6 Binary files /dev/null and b/src/assets/img/logos/unibonn.png differ diff --git a/src/assets/img/mapping-the-landscape.png b/src/assets/img/mapping-the-landscape.png new file mode 100644 index 0000000..22f739d Binary files /dev/null and b/src/assets/img/mapping-the-landscape.png differ diff --git a/src/assets/img/mining.svg b/src/assets/img/mining.svg new file mode 100644 index 0000000..1d3bd35 --- /dev/null +++ b/src/assets/img/mining.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/img/open-budget-survey.png b/src/assets/img/open-budget-survey.png new file mode 100644 index 0000000..623873e Binary files /dev/null and b/src/assets/img/open-budget-survey.png differ diff --git a/src/assets/img/openbudgets-logo-squared.png b/src/assets/img/openbudgets-logo-squared.png new file mode 100644 index 0000000..176b944 Binary files /dev/null and b/src/assets/img/openbudgets-logo-squared.png differ diff --git a/src/assets/img/openbudgets-logo-white.png b/src/assets/img/openbudgets-logo-white.png new file mode 100644 index 0000000..9d11599 Binary files /dev/null and b/src/assets/img/openbudgets-logo-white.png differ diff --git a/src/assets/img/openbudgets-logo.png b/src/assets/img/openbudgets-logo.png new file mode 100644 index 0000000..09d0177 Binary files /dev/null and b/src/assets/img/openbudgets-logo.png differ diff --git a/src/assets/img/openbudgets-logo.svg b/src/assets/img/openbudgets-logo.svg new file mode 100644 index 0000000..418b4e8 --- /dev/null +++ b/src/assets/img/openbudgets-logo.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/pattern.svg b/src/assets/img/pattern.svg new file mode 100644 index 0000000..d8e269b --- /dev/null +++ b/src/assets/img/pattern.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/performance.svg b/src/assets/img/performance.svg new file mode 100644 index 0000000..f0dddbd --- /dev/null +++ b/src/assets/img/performance.svg @@ -0,0 +1 @@ +performance \ No newline at end of file diff --git a/src/assets/img/placeholder.svg b/src/assets/img/placeholder.svg new file mode 100644 index 0000000..76910d5 --- /dev/null +++ b/src/assets/img/placeholder.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/img/reply.svg b/src/assets/img/reply.svg new file mode 100644 index 0000000..dd6a26b --- /dev/null +++ b/src/assets/img/reply.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/img/retweet.svg b/src/assets/img/retweet.svg new file mode 100644 index 0000000..e9eca1e --- /dev/null +++ b/src/assets/img/retweet.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/img/team.jpg b/src/assets/img/team.jpg new file mode 100644 index 0000000..81c6bee Binary files /dev/null and b/src/assets/img/team.jpg differ diff --git a/src/assets/img/technical-structure.svg b/src/assets/img/technical-structure.svg new file mode 100644 index 0000000..1572fce --- /dev/null +++ b/src/assets/img/technical-structure.svg @@ -0,0 +1,2371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Knowledge + + + Base + + + + + + + + + + + + Linked + + + Open Data + + + Cloud + + + Data + + + Export + + + + + + + + + + + + + + + + Access and + + + + + + + + + + + + + + Feedback + + + Service + + + + Companies + + + Media + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NGOs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data + + + + (RDf2Any) + + + Knowledge Discovery + + + Public + + + + Public + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Flat + + + Files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stakeholders + + + OpenBudgets.eu SaaS portal + + + OpenBudgets.eu Open Source Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data + + + + + + + + + + + + + + + + + + + + + + + + + Data + + + + Mining + + + + CSV + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Journalism + + + + + + + + + + + + Financial + + + Transparency + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/technical_structure.jpg b/src/assets/img/technical_structure.jpg new file mode 100644 index 0000000..c0eaab7 Binary files /dev/null and b/src/assets/img/technical_structure.jpg differ diff --git a/src/assets/img/tree-map.svg b/src/assets/img/tree-map.svg new file mode 100644 index 0000000..24f8ca4 --- /dev/null +++ b/src/assets/img/tree-map.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/upload1.jpg b/src/assets/img/upload1.jpg new file mode 100644 index 0000000..7900da8 Binary files /dev/null and b/src/assets/img/upload1.jpg differ diff --git a/src/assets/img/upload2.jpg b/src/assets/img/upload2.jpg new file mode 100644 index 0000000..e63348b Binary files /dev/null and b/src/assets/img/upload2.jpg differ diff --git a/src/assets/img/upload3.jpg b/src/assets/img/upload3.jpg new file mode 100644 index 0000000..03d0a06 Binary files /dev/null and b/src/assets/img/upload3.jpg differ diff --git a/src/assets/img/workpackagestructure.png b/src/assets/img/workpackagestructure.png new file mode 100644 index 0000000..3314461 Binary files /dev/null and b/src/assets/img/workpackagestructure.png differ diff --git a/resources/indigo_cube_find.gif b/src/assets/resources/indigo_cube_find.gif similarity index 100% rename from resources/indigo_cube_find.gif rename to src/assets/resources/indigo_cube_find.gif diff --git a/src/assets/sprites/brushed_alu.png b/src/assets/sprites/brushed_alu.png new file mode 100644 index 0000000..bf5a581 Binary files /dev/null and b/src/assets/sprites/brushed_alu.png differ diff --git a/src/public/sprites/footer_lodyas.png b/src/assets/sprites/footer_lodyas.png similarity index 100% rename from src/public/sprites/footer_lodyas.png rename to src/assets/sprites/footer_lodyas.png diff --git a/src/public/sprites/grid_paper.png b/src/assets/sprites/grid_paper.png similarity index 100% rename from src/public/sprites/grid_paper.png rename to src/assets/sprites/grid_paper.png diff --git a/src/assets/sprites/icon.png b/src/assets/sprites/icon.png new file mode 100644 index 0000000..4cdf78f Binary files /dev/null and b/src/assets/sprites/icon.png differ diff --git a/src/assets/sprites/openbudgets-logo.svg b/src/assets/sprites/openbudgets-logo.svg new file mode 100644 index 0000000..418b4e8 --- /dev/null +++ b/src/assets/sprites/openbudgets-logo.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/environments/environment.ts b/src/environments/environment.ts index e0c0ff7..90aa13d 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -5,9 +5,12 @@ export const environment = { production: false, + searchSize: 50, apiUrl: 'http://localhost/rudolf/public', openCpuEndpoint: 'http://okfnrg.math.auth.gr/ocpu/', versionSuffix: '3', baseHref: 'indigo/', - DAMUrl: 'http://192.168.0.108:5000' + DAMUrl: 'http://dam-obeu.iais.fraunhofer.de', + DAMretries: 12, + DAMpollingInitialStep: 1000, }; diff --git a/src/index.html b/src/index.html index fc798a9..a8e26ec 100644 --- a/src/index.html +++ b/src/index.html @@ -27,9 +27,7 @@ -webkit-animation: fullexpand 1.5s ease-out; } - html{ - background-color: #303030; - } + /* Full Width Animation Bar */ @@ -54,13 +52,12 @@ - - + - + diff --git a/src/main.ts b/src/main.ts index 6dfa9a6..5c3c520 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,8 +9,4 @@ if (environment.production) { enableProdMode(); } -if (!/localhost/.test(document.location.host)) { - enableProdMode(); -} - platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/src/obeu-theme.scss b/src/obeu-theme.scss index 8268937..a300606 100644 --- a/src/obeu-theme.scss +++ b/src/obeu-theme.scss @@ -1,29 +1,118 @@ -@import '~@angular/material/core/theming/all-theme'; +@import '~@angular/material/theming'; @include mat-core(); + + + + + + +// Foreground palette for dark themes. +$mat-dark-theme-foreground: ( + base: white, + divider: $white-12-opacity, + dividers: $white-12-opacity, + disabled: rgba(white, 0.3), + disabled-button: rgba(white, 0.3), + disabled-text: rgba(white, 0.3), + hint-text: rgba(white, 0.3), + secondary-text: rgba(white, 0.7), + icon: white, + icons: white, + text: white, + slider-off: rgba(white, 0.3), + slider-off-active: rgba(white, 0.3), +); + + + + + + +$md-obeupalette0: ( + 50 : #eaf7eb, + 100 : #cbeacd, + 200 : #a8dcac, + 300 : #85ce8a, + 400 : #6ac471, + 500 : #50b958, + 600 : #49b250, + 700 : #40aa47, + 800 : #37a23d, + 900 : #27932d, + A100 : #d4ffd6, + A200 : #a1ffa5, + A400 : #6eff74, + A700 : #54ff5c, + contrast: ( + 50 : #000000, + 100 : #000000, + 200 : #000000, + 300 : #000000, + 400 : #000000, + 500 : #000000, + 600 : #000000, + 700 : #ffffff, + 800 : #ffffff, + 900 : #ffffff, + A100 : #000000, + A200 : #000000, + A400 : #000000, + A700 : #000000, + ) +); + + + + + + + + + + + + + + + + + + + + + // Define the palettes for your theme using the Material Design palettes available in palette.scss // (imported above). For each palette, you can optionally specify a default, lighter, and darker // hue. -$indigo-app-primary: mat-palette($mat-green); -$indigo-app-accent: mat-palette($mat-indigo, A200, A100, A400); +$indigo-app-primary: mat-palette($md-obeupalette0); +$indigo-app-accent: mat-palette($md-obeupalette0, A200, A100, A400); + // The warn palette is optional (defaults to red). $indigo-app-warn: mat-palette($mat-red); // Create the theme object (a Sass map containing all of the palettes). -$indigo-app-theme: mat-dark-theme($indigo-app-primary, $indigo-app-accent, $indigo-app-warn); +$indigo-app-theme: mat-light-theme($indigo-app-primary, $indigo-app-accent, $indigo-app-warn); +$indigo-app-theme-button: mat-dark-theme($indigo-app-primary, $indigo-app-accent, $indigo-app-warn); +@include mat-button-theme($indigo-app-theme-button); + +$mat-font-family: 'Cabin', sans-serif; // Include theme styles for core and each component used in your app. // Alternatively, you can import and @include the theme mixins for each component // that you are using. @include angular-material-theme($indigo-app-theme); - +md-card-header, #giant, md-toolbar{ + background-color: map_get($md-obeupalette0, 500); + color: map_get( map_get($md-obeupalette0, 'contrast'), 700) +} .mat-card-header-text{ display: flex; } .output-card{ - background: rgba(48, 48, 48, 0.71); + background: rgba(255, 255, 255, 0.58); margin: 10px 0; } @@ -31,7 +120,10 @@ $indigo-app-theme: mat-dark-theme($indigo-app-primary, $indigo-app-accent, $indi margin: 0 0 10px 0; } - +bc-toolbar.indigo { + display: flex; + background: #4caf50; +} .output-card md-card-title{ font-size: 20px; @@ -43,6 +135,11 @@ $indigo-app-theme: mat-dark-theme($indigo-app-primary, $indigo-app-accent, $indi } +footer{ + background: #4E6864; +} + + th { text-align: center; background: gainsboro; @@ -58,3 +155,678 @@ md-chip { } +*{ + font-family: 'Cabin', sans-serif; +} + + +.mat-select-placeholder{ + font-size: 14px; +} + +.font-override { // body or wrapper class + .mat-button-toggle, + %mat-button-base, + .mat-button, + .mat-raised-button, + .mat-fab, + .mat-icon-button, + .mat-mini-fab, + .mat-card, + .mat-checkbox, + .mat-input-container, + .mat-list, + .mat-menu-item, + .mat-radio-button, + .mat-select, + .mat-list .mat-list-item .mat-list-item-content, + .mat-nav-list .mat-list-item .mat-list-item-content, + .mat-simple-snackbar, + .mat-tab-label, + .mat-slide-toggle-content, + .mat-option, + .mat-toolbar, + + .mat-tooltip { + font-family: $mat-font-family!important; + } +} + + +md-chip-list{ + overflow: auto; + padding: 0 20px 0 0; +} + +md-chip{ + cursor: pointer; +} + + +.row-item{ + margin: 10px 0; +} + + +md-card-header md-card-title, md-toolbar{ + + color:white; +} + +md-card-header .mat-button, md-card-header .mat-icon-button, md-card-header .mat-raised-button { + color: white; +} + +.mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary { + color: white; +} + +md-select{ + width:100%; +} + +md-chip-list .mat-chip:not(.mat-basic-chip)+.mat-chip:not(.mat-basic-chip) { + margin: 3px; +} + +md-card.input-card{ + margin: 5px 0; +} + +fact-request-builder>md-card, aggregate-request-builder>md-card{ + margin: 5px 0; +} + + +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS and IE text size adjust after device orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined for any HTML5 element in IE 8/9. Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. Correct `block` display not defined for `main` in IE 11. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } + +/** 1. Correct `inline-block` display not defined in IE 8/9. 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ +audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9/10. Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +/* Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background-color: transparent; } + +/** Improve readability of focused elements when they are also in an active/hover state. */ +a:active, a:hover { outline: 0; } + +/* Text-level semantics ========================================================================== */ +/** Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari and Chrome. */ +dfn { font-style: italic; } + +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9/10. */ +img { border: 0; } + +/** Correct overflow not hidden in IE 9/10/11. */ +svg:not(:root) { overflow: hidden; } + +/* Grouping content ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari. */ +figure { margin: 1em 40px; } + +/** Address differences between Firefox and other browsers. */ +hr { box-sizing: content-box; height: 0; } + +/** Contain overflow in all browsers. */ +pre { overflow: auto; } + +/** Address odd `em`-unit font size rendering in all browsers. */ +code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } + + + +/* Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +td, th { padding: 0; } + +html { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } + +*, *:before, *:after { -webkit-box-sizing: inherit; -moz-box-sizing: inherit; box-sizing: inherit; } + +select { margin-bottom: 1.5rem; max-width: 100%; width: auto; } + +ul, ol { list-style-type: none; margin: 0; padding: 0; } +article ul { list-style-type: disc; margin-bottom: 0.75rem; padding-left: 1.5rem; } +article ol { list-style-type: decimal; margin-bottom: 0.75rem; padding-left: 1.5rem; } + +dl { margin-bottom: 0.75rem; } +dl dt { font-weight: bold; margin-top: 0.75rem; } +dl dd { margin: 0; } + +table { -webkit-font-feature-settings: "kern", "liga", "tnum"; -moz-font-feature-settings: "kern", "liga", "tnum"; -ms-font-feature-settings: "kern", "liga", "tnum"; font-feature-settings: "kern", "liga", "tnum"; border-collapse: collapse; margin: 0.75rem 0; table-layout: fixed; width: 100%; } + +th { border-bottom: 1px solid #a4c2bc; font-weight: 600; padding: 0.75rem 0; text-align: left; } + +td { border-bottom: 2px solid #d1e1de; padding: 0.75rem 0; } + +tr, td, th { vertical-align: middle; } + +body { -webkit-font-feature-settings: "kern", "liga", "pnum"; -moz-font-feature-settings: "kern", "liga", "pnum"; -ms-font-feature-settings: "kern", "liga", "pnum"; font-feature-settings: "kern", "liga", "pnum"; -webkit-font-smoothing: antialiased; color: #868593; font-family: "Cabin", "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif; font-size: 1em; line-height: 1.5; } + +h1, h2, h3, h4, h5, h6 { font-family: "Cabin", "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif; font-size: 1em; line-height: 1.2; margin: 1.5rem 0 0.75rem 0; color: #112233; } + +p { margin: 0 0 0.75rem; } + +a { color: #50B958; text-decoration: none; transition: color 0.1s linear; } +a:active, a:focus, a:hover { color: #36873c; } +a:active, a:focus { outline: none; } + +h1 { font-size: 1.625rem; } +@media (min-width: 40rem) { h1 { font-size: 1.875rem; } } + +h2 { font-size: 1.5rem; } +@media (min-width: 40rem) { h2 { font-size: 1.625rem; } } + +h3 { font-size: 1.375rem; } +@media (min-width: 40rem) { h3 { font-size: 1.5rem; } } + +h4 { font-size: 1.25rem; } +@media (min-width: 40rem) { h4 { font-size: 1.375rem; } } + +h5 { font-size: 1.125rem; } +@media (min-width: 40rem) { h5 { font-size: 1.25rem; } } + +h6 { font-size: 1rem; } +@media (min-width: 40rem) { h6 { font-size: 1.125rem; } } + +/* -------------------------------- + +Modules - reusable parts of our design + +-------------------------------- */ +.cd-img-replace { /* replace text with a background-image */ display: inline-block; overflow: hidden; text-indent: 100%; white-space: nowrap; } + +.overflow-hidden { overflow: hidden; } + +/* -------------------------------- + +Main components + +-------------------------------- */ +.cd-main-content { /* set a min-height and a z-index to be sure that the main element completely covers the lateral menu */ min-height: 100%; position: relative; background-color: #fff; z-index: 2; padding-top: 50px; /* Force Hardware Acceleration in WebKit */ -webkit-transform: translateZ(0); -webkit-backface-visibility: hidden; -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property: transform; -webkit-transition-duration: 0.4s; -moz-transition-duration: 0.4s; transition-duration: 0.4s; } +.cd-main-content.lateral-menu-is-open { /* translate to show the lateral menu - all content needs to be put in the .cd-main-content to translate*/ -webkit-transform: translateX(-260px); -moz-transform: translateX(-260px); -ms-transform: translateX(-260px); -o-transform: translateX(-260px); transform: translateX(-260px); } +@media only screen and (min-width: 40rem) { .cd-main-content { padding-top: 70px; } } +@media only screen and (min-width: 53.75rem) { .cd-main-content { padding-top: 125px; } } + +.site-header { position: absolute; top: 0; left: 0; height: 50px; width: 100%; background: #50B958; z-index: 3; /* Force Hardware Acceleration in WebKit */ -webkit-transform: translateZ(0); -webkit-backface-visibility: hidden; -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property: transform; -webkit-transition-duration: 0.4s; -moz-transition-duration: 0.4s; transition-duration: 0.4s; } +.site-header.lateral-menu-is-open { /* translate to show the lateral menu */ -webkit-transform: translateX(-260px); -moz-transform: translateX(-260px); -ms-transform: translateX(-260px); -o-transform: translateX(-260px); transform: translateX(-260px); } +.site-header.is-fixed { position: fixed; } +@media only screen and (min-width: 40rem) { .site-header { height: 70px; } } +@media only screen and (min-width: 53.75rem) { .site-header { height: 125px; } } + +#cd-menu-trigger { position: absolute; right: 0; top: 0; height: 100%; width: 50px; background-color: #74c87b; } +#cd-menu-trigger .cd-menu-text { height: 100%; text-transform: uppercase; color: #FFF; font-weight: 600; display: none; } +#cd-menu-trigger .cd-menu-icon { /* this span is the central line in the menu menu */ display: inline-block; position: absolute; left: 50%; top: 50%; bottom: auto; right: auto; -webkit-transform: translateX(-50%) translateY(-50%); -moz-transform: translateX(-50%) translateY(-50%); -ms-transform: translateX(-50%) translateY(-50%); -o-transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%); width: 18px; height: 2px; background-color: #FFF; /* these are the upper and lower lines in the menu menu */ } +#cd-menu-trigger .cd-menu-icon::before, #cd-menu-trigger .cd-menu-icon:after { content: ''; width: 100%; height: 100%; position: absolute; background-color: inherit; left: 0; } +#cd-menu-trigger .cd-menu-icon::before { bottom: 5px; } +#cd-menu-trigger .cd-menu-icon::after { top: 5px; } +#cd-menu-trigger.is-clicked .cd-menu-icon { background-color: rgba(255, 255, 255, 0); } +#cd-menu-trigger.is-clicked .cd-menu-icon::before, #cd-menu-trigger.is-clicked .cd-menu-icon::after { background-color: white; } +#cd-menu-trigger.is-clicked .cd-menu-icon::before { bottom: 0; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg); } +#cd-menu-trigger.is-clicked .cd-menu-icon::after { top: 0; -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); -ms-transform: rotate(-45deg); -o-transform: rotate(-45deg); transform: rotate(-45deg); } +@media only screen and (min-width: 40rem) { #cd-menu-trigger { width: 110px; padding-left: 1.25em; } + #cd-menu-trigger .cd-menu-text { display: inline-block; line-height: 70px; } + #cd-menu-trigger .cd-menu-icon { left: auto; right: 1.25em; -webkit-transform: translateX(0); -moz-transform: translateX(0); -ms-transform: translateX(0); -o-transform: translateX(0); transform: translateX(0); } } + +#cd-lateral-nav { position: fixed; height: 100%; right: 0; top: 0; visibility: hidden; /* the secondary navigation is covered by the main element */ z-index: 1; width: 260px; background-color: #333; overflow-y: auto; /* Force Hardware Acceleration in WebKit */ -webkit-transform: translateZ(0); -webkit-backface-visibility: hidden; -webkit-transition: -webkit-transform .4s 0s, visibility 0s .4s; -moz-transition: -moz-transform .4s 0s, visibility 0s .4s; transition: transform .4s 0s, visibility 0s .4s; /* this creates the subtle slide in animation of the navigation */ -webkit-transform: translateX(80px); -moz-transform: translateX(80px); -ms-transform: translateX(80px); -o-transform: translateX(80px); transform: translateX(80px); } +#cd-lateral-nav .cd-navigation { margin: 10px 0 16px; } +#cd-lateral-nav .sub-menu { padding: 0 10px 20px 15px; display: none; } +#cd-lateral-nav a { display: block; line-height: 2em; padding: 0 16px 0 32px; color: #F0F5F4; } +#cd-lateral-nav a.current { background-color: #4d4d4d; color: #FFF; } +.no-touch #cd-lateral-nav a:hover { color: #FFF; } +@media only screen and (min-width: 40rem) { #cd-lateral-nav .cd-navigation { margin: 20px 0; } } +#cd-lateral-nav.lateral-menu-is-open { -webkit-transform: translateX(0); -moz-transform: translateX(0); -ms-transform: translateX(0); -o-transform: translateX(0); transform: translateX(0); visibility: visible; -webkit-transition: -webkit-transform .4s 0s, visibility 0s 0s; -moz-transition: -moz-transform .4s 0s, visibility 0s 0s; transition: transform .4s 0s, visibility 0s 0s; /* smooth the scrolling on touch devices - webkit browsers */ -webkit-overflow-scrolling: touch; } + +/* style menu items which have a submenu */ +#cd-lateral-nav .item-has-children > a { position: relative; text-transform: uppercase; font-weight: 600; /* this is the right arrow to show that the item has a submenu */ } +#cd-lateral-nav .item-has-children > a::after { content: ''; display: block; height: 11px; width: 8px; position: absolute; top: 50%; bottom: auto; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); right: 1em; background: url("assets/img/cd-arrow.svg") no-repeat center center; background-size: 8px 11px; -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property: transform; -webkit-transition-duration: 0.2s; -moz-transition-duration: 0.2s; transition-duration: 0.2s; } +#cd-lateral-nav .item-has-children > a.submenu-open::after { -webkit-transform: translateY(-50%) rotate(90deg); -moz-transform: translateY(-50%) rotate(90deg); -ms-transform: translateY(-50%) rotate(90deg); -o-transform: translateY(-50%) rotate(90deg); transform: translateY(-50%) rotate(90deg); } + +#cd-lateral-nav .socials { padding: 0 32px; } +#cd-lateral-nav .socials::after { clear: both; content: ""; display: table; } + +#cd-lateral-nav .socials a, .site-header .socials a { height: 32px; width: 32px; float: left; padding: 0; background-image: url("assets/img/cd-socials.svg"); background-repeat: no-repeat; background-size: 160px 96px; margin-right: 1em; border-radius: 32px; } +#cd-lateral-nav .socials a.cd-twitter, .site-header .socials a.cd-twitter { background-position: 0 -64px; } +#cd-lateral-nav .socials a.cd-github, .site-header .socials a.cd-github { background-position: -32px -64px; } +#cd-lateral-nav .socials a.cd-facebook, .site-header .socials a.cd-facebook { background-position: -64px -64px; } +#cd-lateral-nav .socials a.cd-google, .site-header .socials a.cd-google { background-position: -96px -64px; } +#cd-lateral-nav .socials a.cd-linkedin, .site-header .socials a.cd-linkedin { background-position: -128px -64px; } +.no-touch #cd-lateral-nav .socials a:hover, .no-touch .site-header .socials a:hover { background-color: #50B958; } +.no-touch #cd-lateral-nav .socials a:hover.cd-twitter, .no-touch .site-header .socials a:hover.cd-twitter { background-position: 0 -32px; } +.no-touch #cd-lateral-nav .socials a:hover.cd-github, .no-touch .site-header .socials a:hover.cd-github { background-position: -32px -32px; } +.no-touch #cd-lateral-nav .socials a:hover.cd-facebook, .no-touch .site-header .socials a:hover.cd-facebook { background-position: -64px -32px; } +.no-touch #cd-lateral-nav .socials a:hover.cd-google, .no-touch .site-header .socials a:hover.cd-google { background-position: -96px -32px; } +.no-touch #cd-lateral-nav .socials a:hover.cd-linkedin, .no-touch .site-header .socials a:hover.cd-linkedin { background-position: -128px -32px; } + +#cd-lateral-nav .socials a.cd-twitter { background-position: 0 -32px; } +#cd-lateral-nav .socials a.cd-github { background-position: -32px -32px; } +#cd-lateral-nav .socials a.cd-facebook { background-position: -64px -32px; } +#cd-lateral-nav .socials a.cd-google { background-position: -96px -32px; } +#cd-lateral-nav .socials a.cd-linkedin { background-position: -128px -32px; } + +.site-header .socials { margin-left: 0.75rem; } + +html { overflow-x: hidden; } + +body { background-color: #fff; } + +hr { border-bottom: 2px solid #d1e1de; border-bottom-width: 1px; border-left: none; border-right: none; border-top: none; margin: 1.5rem 0; } + +img, picture { margin: 0; max-width: 100%; } + +.wrapper { max-width: 68rem; margin-left: auto; margin-right: auto; } +.wrapper::after { clear: both; content: ""; display: table; } +.wrapper > article, .wrapper > aside { padding: 1.5rem; margin-top: 0.75rem; } +@media (min-width: 53.75rem) { .wrapper.aside { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUCB1jWL1qxX8ABv4C/R7sPqQAAAAASUVORK5CYII=); background-repeat: repeat-y; background-position: 76%; } } +@media (min-width: 53.75rem) { .wrapper.aside > article { float: left; display: block; margin-right: 2.35765%; width: 74.41059%; } + .wrapper.aside > article:last-child { margin-right: 0; } } +@media (min-width: 53.75rem) { .wrapper.aside > aside { float: left; display: block; margin-right: 2.35765%; width: 23.23176%; } + .wrapper.aside > aside:last-child { margin-right: 0; } } +.wrapper.aside > aside > section { padding-bottom: 1.5rem; } +.wrapper.aside > aside > section.news-feed div { padding-bottom: 0.75rem; border-bottom: dotted 1px rgba(213, 213, 213, 0.3); } +.wrapper.aside > aside > section.news-feed div h5 { font-size: 1.1em; margin-bottom: 0.375rem; } +.wrapper.aside > aside > section.news-feed div span { font-size: 0.9em; } +.wrapper.aside > aside > section.news-feed div > a { color: inherit; display: block; line-height: 1.3; margin-top: 0.75rem; font-size: 0.8em; } +.wrapper.aside > aside > section.twitter-feed { font-size: 0.8em; } +.wrapper.aside > aside > section.twitter-feed li { border-bottom: dotted 1px rgba(213, 213, 213, 0.3); margin-bottom: 0.375rem; padding-top: 0.375rem; padding-left: 40px; } +.wrapper.aside > aside > section.twitter-feed .user a { color: inherit; font-weight: bold; } +.wrapper.aside > aside > section.twitter-feed .user a span[data-scribe="element:screen_name"] { color: rgba(213, 213, 213, 0.5); font-weight: normal; } +.wrapper.aside > aside > section.twitter-feed .user img { width: 32px; margin-left: -40px; float: left; border-radius: 3px; display: block; margin-top: 3px; } +.wrapper.aside > aside > section.twitter-feed .tweet { margin-bottom: 0.375rem; word-break: break-word; } +.wrapper.aside > aside > section.twitter-feed .interact a { display: inline-block; height: 1em; line-height: 1.5; overflow: hidden; width: 16px; height: 16px; background-size: auto 14px; background-repeat: no-repeat; background-position: center; margin-right: 0.75rem; opacity: 0.4; } +.wrapper.aside > aside > section.twitter-feed .interact a::before { content: ""; display: block; width: 0; height: 100%; } +.wrapper.aside > aside > section.twitter-feed .interact a.twitter_reply_icon { background-image: url("assets/img/reply.svg"); } +.wrapper.aside > aside > section.twitter-feed .interact a.twitter_retweet_icon { background-image: url("assets/img/retweet.svg"); } +.wrapper.aside > aside > section.twitter-feed .interact a.twitter_fav_icon { background-image: url("assets/img/heart.svg"); } +.wrapper.aside > aside > section.twitter-feed .interact a:hover { opacity: 0.5; } + +.wrapper-flex{ + width: 68rem; + margin: 0 auto; +} + +.banner { background-color: #50B958; color: rgba(255, 255, 255, 0.7); font-weight: bold; font-size: 1.3em; } +.banner h1, .banner h2, .banner h3, .banner h4, .banner h5, .banner h6, .banner a { color: #fff; } +.banner h1 { font-size: 2.5em; margin-bottom: 0.1rem; } +.banner .wrapper { padding: 1.5rem; } +@media (min-width: 40rem) { .banner .wrapper { padding: 3.75rem 1.5rem; } } +@media (min-width: 53.75rem) { .banner span { float: left; display: block; margin-right: 2.35765%; width: 65.88078%; position: relative; padding-right: 3rem; } + .banner span:last-child { margin-right: 0; } + .banner span :first-child { margin-top: 0; } + .banner span :last-child { margin-bottom: 0; } } + +.video-wrapper { height: 0; overflow: hidden; padding-bottom: 56.25%; position: relative; } +.video-wrapper embed, .video-wrapper object, .video-wrapper iframe { position: absolute; top: 0; left: 0; height: 100%; width: 100%; } + +section.users > div { max-width: 68rem; margin-left: auto; margin-right: auto; padding: 1.5rem; } +section.users > div::after { clear: both; content: ""; display: table; } +section.users > div h2 { margin-bottom: 3rem; } +section.users > div .item { display: block; text-align: center; } +section.users > div .item img { height: 100px; } +section.users > div .item h3 { text-transform: uppercase; font-size: 1.15em; } +section.users > div .item h3 a { color: inherit; } +@media (min-width: 53.75rem) { section.users > div .item { float: left; display: block; margin-right: 2.35765%; width: 31.76157%; font-size: 1.1em; } + section.users > div .item:last-child { margin-right: 0; } } + +.site-header { background-color: #fff; color: #868593; } +.site-header .wrapper { padding: 0 1.5rem; } +.site-header .logo { display: block; float: left; padding-top: 10px; } +@media only screen and (min-width: 40rem) { .site-header .logo { padding-top: 17px; } } +@media only screen and (min-width: 53.75rem) { .site-header .logo { padding-top: 28px; } } +.site-header .logo img { display: block; height: 36px; } +@media (min-width: 53.75rem) { .site-header .logo img { height: 60px; } } +.site-header .socials { float: right; display: none; padding-top: 32px; } +@media (min-width: 53.75rem) { .site-header .socials { display: block; } } +.site-header .socials a { margin: 0; } +.site-header nav { display: none; padding-top: 30px; color: #112233; } +@media (min-width: 53.75rem) { .site-header nav { display: block; } } +.site-header nav > ul { list-style: none; position: relative; border-left: solid 1px #D5D5D5; margin: 0 0 0 210px; padding: 15px 20px; } +.site-header nav > ul a { display: block; color: inherit; text-decoration: none; line-height: 28px; padding: 0 0.75rem; } +.site-header nav > ul li { position: relative; display: inline-block; margin: 0; padding: 0; } +.site-header nav > ul > li { margin-left: 3px; } +.site-header nav > ul > li > a { border: solid 2px #fff; border-radius: 6px; font-weight: 600; font-size: 1.2em; } +.site-header nav > ul > li.active > a { border-color: #50B958; background-color: #50B958; color: #fff; } +.site-header nav > ul > li:hover > a { border-color: #868593; background-color: #868593; color: #fff; } +.site-header nav > ul > li.has-children:hover { position: relative; } +.site-header nav > ul > li.has-children:hover > a { border-radius: 6px 6px 0 0; border-color: #F0F5F4; } +.site-header nav > ul > li.has-children:hover:after { content: ''; display: block; height: 4px; background-color: #fff; position: absolute; left: 0; right: 0; bottom: -2px; z-index: 2; border-left: solid 2px #F0F5F4; border-right: solid 2px #F0F5F4; } +.site-header nav > ul ul { display: none; position: absolute; top: 100%; left: 0; background-color: #fff; padding: 0; border: solid 2px #F0F5F4; border-radius: 0 6px 6px 6px; overflow: hidden; z-index: 1; color: #868593; } +.site-header nav > ul ul li { float: none; width: 12.7074em; } +.site-header nav > ul ul li.active { background: #F0F5F4; } +.site-header nav > ul ul li.active > a { color: inherit; } +.site-header nav > ul ul a { padding-top: 0.2em; padding-bottom: 0.2em; font-size: 0.9em; } +.site-header nav > ul ul a:hover { background-color: #F0F5F4; } +.site-header nav > ul ul ul { top: 0; left: 100%; } +.site-header nav > ul li:hover > ul { display: block; } +@media (min-width: 53.75rem) { .site-header #cd-menu-trigger { display: none; } } + +.footer-nav { background-color: #273D3A; } +.footer-nav > ul { max-width: 68rem; margin-left: auto; margin-right: auto; padding-top: 0.75rem; padding-bottom: 0.75rem; } +.footer-nav > ul::after { clear: both; content: ""; display: table; } +@media screen and (min-width: 40rem) { .footer-nav > ul > li { display: inline-block; } } +.footer-nav > ul > li a { display: inline-block; padding: 0.75rem 1.5rem; color: rgba(255, 255, 255, 0.7); font-size: .9em; } +.footer-nav > ul > li a:hover { color: #fff; } + +html { background: #333; } + +/* footer */ +.site-footer { background: #333; width: 100%; position: relative; z-index: 99; color: white; } +.site-footer .wrapper { padding: 1.5rem; } +.site-footer .wrapper::after { clear: both; content: ""; display: table; } +.site-footer .wrapper .footer-logo { margin-right: 1em; margin-bottom: 1em; margin-top: -4px; } +@media screen and (min-width: 53.75rem) { .site-footer .wrapper .footer-logo { float: left; margin-bottom: 0; } } +.site-footer .wrapper .footer-logo img { opacity: .7; } +.site-footer .wrapper .footer-logo img { height: 2em; } +.site-footer .wrapper ul { margin-bottom: 1em; } +@media screen and (min-width: 53.75rem) { .site-footer .wrapper ul { float: left; margin-left: 1em; margin-bottom: 0; } } +.site-footer .wrapper ul li { padding-right: 1em; } +@media screen and (min-width: 53.75rem) { .site-footer .wrapper ul li { display: inline; text-align: left; } } +.site-footer .wrapper a { color: rgba(255, 255, 255, 0.6); } +.site-footer .wrapper a:hover { color: white; } +.site-footer .wrapper a[rel~="external"]:after { display: none; } +.site-footer .wrapper svg { fill: currentColor; } +.site-footer .wrapper .footer-primary-links { display: none; } +@media screen and (min-width: 53.75rem) { .site-footer .wrapper .footer-secondary-links { float: right; } } +.site-footer .wrapper .footer-secondary-links li { font-size: .8em; font-weight: 400; } +.site-footer .wrapper .footer-secondary-links ul.footer-social { margin-top: 1em; } +@media screen and (min-width: 53.75rem) { .site-footer .wrapper .footer-secondary-links ul.footer-social { float: right; margin-top: 0; } } +.site-footer .wrapper .footer-secondary-links ul.footer-social li { float: left; font-size: 1em; padding-right: 1em; } +@media screen and (min-width: 53.75rem) { .site-footer .wrapper .footer-secondary-links ul.footer-social li { padding-right: .45em; } } +.site-footer .wrapper .footer-secondary-links ul.footer-social li:last-child { padding-right: 0; } +.site-footer .wrapper .footer-secondary-links ul.footer-social li a { height: 1em; line-height: 1.5; overflow: hidden; background-image: url(assets/img/cd-socials.svg); background-size: 9em 5.4em; width: 1.8em; height: 1.8em; display: block; opacity: .7; } +.site-footer .wrapper .footer-secondary-links ul.footer-social li a::before { content: ""; display: block; width: 0; height: 100%; } +.site-footer .wrapper .footer-secondary-links ul.footer-social li a.facebook { background-position: -3.6em -1.8em; } +.site-footer .wrapper .footer-secondary-links ul.footer-social li a.twitter { background-position: 0 -1.8em; } +.site-footer .wrapper .footer-secondary-links ul.footer-social li a.github { background-position: -1.8em -1.8em; } +.site-footer .wrapper .footer-secondary-links ul.footer-social li a.linkedin { background-position: -7.2em -1.8em; } +.site-footer .wrapper .footer-secondary-links ul.footer-social li a:hover { opacity: 1; } +.site-footer .wrapper .footer-secondary-links ul.footer-social img { opacity: .7; height: 1.6em; padding: 1px; } +.site-footer .wrapper .footer-secondary-links ul.footer-social img:hover { opacity: 1; } +.site-footer hr { float: left; display: block; margin-right: 2.35765%; width: 100%; border-color: rgba(255, 255, 255, 0.4); } +.site-footer hr:last-child { margin-right: 0; } +.site-footer p { float: left; display: block; margin-right: 2.35765%; width: 100%; font-size: 0.75rem; color: rgba(255, 255, 255, 0.4); } +.site-footer p:last-child { margin-right: 0; } +.site-footer .attribution { display: none; } +@media screen and (min-width: 53.75rem) { .site-footer .attribution { display: inline; } } + +.home .banner h1 { font-size: 1.5em; } +.home > section > a { margin-bottom: 1.5rem; } +.home > section.blog-posts { background-color: #F0F5F4; } +@media (min-width: 53.75rem) { .home > section.blog-posts { margin-top: 6em; } } +.home > section.blog-posts .wrapper { padding: 1.5rem; } +.home > section.blog-posts h2 { color: #50B958; } +@media (min-width: 40rem) { .home > section.blog-posts h2 { font-size: 2em; } } +@media (min-width: 53.75rem) { .home > section.blog-posts h2 { width: 50%; font-size: 3em; position: relative; top: -2.8em; } } +.home > section.blog-posts article { padding: 0; margin-bottom: 2.25rem; } +@media (min-width: 40rem) { .home > section.blog-posts article { float: left; display: block; margin-right: 2.35765%; width: 48.82117%; } + .home > section.blog-posts article:last-child { margin-right: 0; } + .home > section.blog-posts article .text { font-size: 1.1em; } + .home > section.blog-posts article .text h3 { font-size: 1.7em; } + .home > section.blog-posts article.post-1 { padding-right: 1.5rem; } + .home > section.blog-posts article.post-2 { padding-left: 1.5rem; } } +@media (min-width: 53.75rem) { .home > section.blog-posts article { margin-top: -5em; } } +.home > section.blog-posts .image { display: none; } +@media (min-width: 40rem) { .home > section.blog-posts .image { display: block; padding: 0 0 1.5rem 1.5rem; text-align: center; } + .home > section.blog-posts .image span { display: inline-block; height: 0; width: 250px; padding-top: 250px; background-size: cover; border-radius: 50%; } } +.home > section.blog-posts .date { font-weight: bold; color: #273D3A; display: block; } +.home > section.users { padding-top: 1.5rem; } +.home > section.users h2 { display: none; } +@media (min-width: 53.75rem) { .home > section.users { padding-top: 4.5rem; padding-bottom: 3rem; } } +.home > section.users .item .more { display: none; } +@media (min-width: 53.75rem) { .home > section.about .wrapper { background-image: url(assets/img/team.jpg); background-repeat: no-repeat; background-position: right center; padding-top: 7.5rem; padding-bottom: 7.5rem; } } +.home > section.about article { padding-top: 0.75rem; padding-bottom: 0.75rem; } +.home > section.about article h2 { margin-top: 1rem; } +@media (min-width: 53.75rem) { .home > section.about article { width: 50%; background-color: rgba(255, 255, 255, 0.75); } + .home > section.about article h2 { font-size: 2.8em; } + .home > section.about article p { font-size: 1.1em; } } + +.modal label { cursor: pointer; margin-bottom: 0; } +.modal label img { border-radius: 150px; display: block; max-width: 300px; } +.modal input[type="checkbox"] { display: none; } +.modal .modal-open { overflow: hidden; } +.modal .modal-window { -webkit-transition: opacity 0.25s ease; -moz-transition: opacity 0.25s ease; transition: opacity 0.25s ease; position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; background: rgba(0, 0, 0, 0.85); opacity: 0; text-align: left; visibility: hidden; z-index: 99999999999; } +.modal .modal-window .modal-bg { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; cursor: pointer; } +.modal .modal-close { position: absolute; top: 1.5em; right: 1.5em; height: 1.5em; width: 1.5em; cursor: pointer; background: #fff; } +.modal .modal-close:after, .modal .modal-close:before { position: absolute; top: 3px; right: 3px; bottom: 0; left: 50%; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg); height: 1.5em; width: 0.15em; background: #F0F5F4; content: ''; display: block; margin: -3px 0 0 -1px; } +.modal .modal-close:hover:after, .modal .modal-close:hover:before { background: #d1e1de; } +.modal .modal-close:before { -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); -ms-transform: rotate(-45deg); -o-transform: rotate(-45deg); transform: rotate(-45deg); } +.modal .modal-inner { -webkit-transition: opacity 0.25s ease; -moz-transition: opacity 0.25s ease; transition: opacity 0.25s ease; border-radius: 3px; background: #fff; margin: auto; max-height: 95%; position: relative; overflow: auto; width: 95%; padding: 1.5em; margin-top: .6em; } +@media screen and (min-width: 40rem) { .modal .modal-inner { padding: 3em; width: 60%; max-height: 60%; margin-top: 10em; } } +@media screen and (min-width: 53.75rem) { .modal .modal-inner { width: 50%; margin-top: 10em; } } +.modal .modal-inner h1 { color: #868593; text-align: left; text-transform: capitalize; } +.modal .modal-inner p.body, .modal .modal-inner p.intro { font-size: 1em; max-width: 100% !important; text-align: left; } +.modal .modal-inner a.cta { color: white; display: inline-block; margin-right: .5em; margin-top: 1em; } +.modal .modal-inner a.cta:last-child { padding: 0 2em; } +.modal .modal-state:checked + .modal-window, .modal.modal-active .modal-window { opacity: 1; visibility: visible; } +.modal .modal-state:checked + .modal-window .modal-inner, .modal.modal-active .modal-window .modal-inner { top: 0; } + +.events .wrapper { margin-bottom: 1.5rem; } +.events .wrapper section h2 { display: inline-block; font-size: 1em; text-transform: uppercase; border-bottom: solid 1px #868593; font-weight: 600; } +.events .wrapper section h3 a { color: #868593; } +.events .wrapper section .date { font-style: italic; } +.events .wrapper section.featured { background-color: #F0F5F4; padding: 1.5rem; margin-top: 1.5rem; margin-bottom: 1.5rem; } +.events .wrapper section:not(.featured) h2 { margin: 1.5rem 1.5rem 0 1.5rem; } +.events .wrapper .event-list > li { border-bottom: solid 1px #F0F5F4; padding: 1.5rem; } + +.posts .post-list { margin-top: 1.5rem; margin-bottom: 1.5rem; } +.posts .post-list > article { padding: 1.5rem; border-bottom: 1px solid #F0F5F4; max-width: 68rem; margin-left: auto; margin-right: auto; } +.posts .post-list > article::after { clear: both; content: ""; display: table; } +.posts .post-list > article .date { font-weight: bold; color: #273D3A; } +@media (min-width: 40rem) { .posts .post-list > article .text { float: left; display: block; margin-right: 2.35765%; width: 74.41059%; } + .posts .post-list > article .text:last-child { margin-right: 0; } } +.posts .post-list > article .text .categories { padding: 0; } +.posts .post-list > article .text .categories li { display: inline-block; font-size: 0.75em; text-transform: uppercase; border-bottom: solid 1px #868593; margin-right: 0.75rem; font-weight: 600; } +.posts .post-list > article .text p { margin: 0; } +.posts .post-list > article .text > a { text-transform: uppercase; color: #478a4b; font-weight: bold; display: inline-block; margin-top: 1.5rem; } +.posts .post-list > article .image { display: none; } +@media (min-width: 40rem) { .posts .post-list > article .image { float: left; display: block; margin-right: 2.35765%; width: 23.23176%; padding: 0 0 1.5rem 1.5rem; } + .posts .post-list > article .image:last-child { margin-right: 0; } + .posts .post-list > article .image span { display: block; height: 0; padding-top: 100%; background-size: cover; border-radius: 50%; } } +.posts .pagination { max-width: 68rem; margin-left: auto; margin-right: auto; margin-top: 1.5rem; margin-bottom: 1.5rem; padding-left: 1.5rem; padding-right: 1.5rem; } +.posts .pagination::after { clear: both; content: ""; display: table; } + +.blog-table td { padding: 0.25rem 0px; font-size: 0.90em; background-color: #F0F5F4; } + +@media (min-width: 53.75rem) { .post .banner { display: none; } } +.post article .header { display: none; } +@media (min-width: 53.75rem) { .post article::after { clear: both; content: ""; display: table; } + .post article .header { float: left; display: block; margin-right: 2.35765%; width: 31.76157%; padding-right: 1.5rem; border-right: solid 1px #F0F5F4; } + .post article .header:last-child { margin-right: 0; } + .post article .header h1 { margin-top: 0; } + .post article .content { float: left; display: block; margin-right: 2.35765%; width: 65.88078%; text-align: justify; } + .post article .content:last-child { margin-right: 0; } } + +.pagination li { /* hide numbers on small devices */ display: none; margin: 0 .2em; } +.pagination li.button { /* make sure prev next buttons are visible */ display: inline-block; } +.pagination a, .pagination span { display: inline-block; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; /* use padding and font-size to change buttons size */ padding: .6em .8em; font-size: 0.9rem; } +.pagination a { border: 1px solid #d1e1de; border-radius: 3px; } +.no-touch .pagination a:hover { background-color: #e1ebe9; } +.pagination a:active { /* click effect */ -webkit-transform: scale(0.9); -moz-transform: scale(0.9); -ms-transform: scale(0.9); -o-transform: scale(0.9); transform: scale(0.9); } +.pagination a.disabled { /* button disabled */ color: rgba(80, 185, 88, 0.4); pointer-events: none; } +.pagination a.disabled::before, .pagination a.disabled::after { opacity: .4; } +.pagination .button:first-of-type a::before { content: '\00ab '; } +.pagination .button:last-of-type a::after { content: ' \00bb'; } +.pagination .current { /* selected number */ background-color: #D5D5D5; border-color: #D5D5D5; color: #F0F5F4; pointer-events: none; } +@media only screen and (min-width: 40rem) { .pagination li { display: inline-block; } } +@media only screen and (min-width: 53.75rem) { .pagination { margin: 4em auto 8em; } } + +/* -------------------------------- + +No space - remove distance between list items + +-------------------------------- */ +.pagination.no-space { width: auto; max-width: none; display: inline-block; border-radius: 3px; border: 1px solid #d1e1de; } +.pagination.no-space::after { clear: both; content: ""; display: table; } +.pagination.no-space li { margin: 0; float: left; border-right: 1px solid #d1e1de; } +.pagination.no-space li:last-of-type { border-right: none; } +.pagination.no-space a, .pagination.no-space span { float: left; border-radius: 0; padding: .8em 1em; border: none; } +.pagination.no-space li:first-of-type a { border-radius: 3px 0 0 3px; } +.pagination.no-space li:last-of-type a { border-radius: 0 3px 3px 0; } + +/* -------------------------------- + +move buttons - move prev and next buttons to the sides + +-------------------------------- */ +.pagination.move-buttons::after { clear: both; content: ""; display: table; } +.pagination.move-buttons .button:first-of-type { float: left; } +.pagination.move-buttons .button:last-of-type { float: right; } + +.pagination.no-space.move-buttons { width: 90%; max-width: 40rem; display: block; overflow: hidden; } +.pagination.no-space.move-buttons li { float: none; border: none; } +.pagination.no-space.move-buttons a, .pagination.no-space.move-buttons span { float: none; } + +/* -------------------------------- + +custom icons - customize the small arrow inside the next and prev buttons + +-------------------------------- */ +.pagination.custom-icons .button a { position: relative; } +.pagination.custom-icons .button:first-of-type a { padding-left: 2.4em; } +.pagination.custom-icons .button:last-of-type a { padding-right: 2.4em; } +.pagination.custom-icons .button:first-of-type a::before, .pagination.custom-icons .button:last-of-type a::after { content: ''; position: absolute; display: inline-block; /* set size for custom icons */ width: 16px; height: 16px; top: 50%; /* set margin-top = icon height/2 */ margin-top: -8px; background: transparent url("assets/img/cd-icon-arrow-1.svg") no-repeat center center; } +.pagination.custom-icons .button:first-of-type a::before { left: .8em; } +.pagination.custom-icons .button:last-of-type a::after { right: .8em; -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); } + +/* -------------------------------- + +custom buttons - replace prev and next buttons text with a custom icon + +-------------------------------- */ +.pagination.custom-buttons a, .pagination.custom-buttons span { vertical-align: middle; } +.pagination.custom-buttons .button a { /* set custom width */ width: 40px; /* image replacement */ overflow: hidden; white-space: nowrap; text-indent: 100%; color: transparent; background-image: url("assets/img/cd-icon-arrow-2.svg"); background-repeat: no-repeat; background-position: center center; } +.pagination.custom-buttons .button:last-of-type a { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); } +.no-touch .pagination.custom-buttons .button:last-of-type a:active { -webkit-transform: scale(0.9) rotate(180deg); -moz-transform: scale(0.9) rotate(180deg); -ms-transform: scale(0.9) rotate(180deg); -o-transform: scale(0.9) rotate(180deg); transform: scale(0.9) rotate(180deg); } + +.pagination.no-space.custom-buttons .button:last-of-type a { border-radius: 3px 0 0 3px; } + +/* -------------------------------- + +animated buttons - animate the text inside prev and next buttons + +-------------------------------- */ +.pagination.animated-buttons a, .pagination.animated-buttons span { padding: 0 1.4em; height: 40px; line-height: 40px; overflow: hidden; } +.pagination.animated-buttons .button a { position: relative; padding: 0 2em; } +.pagination.animated-buttons .button:first-of-type a::before, .pagination.animated-buttons .button:last-of-type a::after { left: 50%; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); right: auto; -webkit-transition: -webkit-transform 0.3s; -moz-transition: -moz-transform 0.3s; transition: transform 0.3s; } +.pagination.animated-buttons .button:last-of-type a::after { -webkit-transform: translateX(-50%) rotate(180deg); -moz-transform: translateX(-50%) rotate(180deg); -ms-transform: translateX(-50%) rotate(180deg); -o-transform: translateX(-50%) rotate(180deg); transform: translateX(-50%) rotate(180deg); } +.pagination.animated-buttons i { display: block; height: 100%; -webkit-transform: translateY(100%); -moz-transform: translateY(100%); -ms-transform: translateY(100%); -o-transform: translateY(100%); transform: translateY(100%); -webkit-transition: -webkit-transform 0.3s; -moz-transition: -moz-transform 0.3s; transition: transform 0.3s; } + +.no-touch .pagination.animated-buttons .button a:hover i { -webkit-transform: translateY(0); -moz-transform: translateY(0); -ms-transform: translateY(0); -o-transform: translateY(0); transform: translateY(0); } + +.no-touch .pagination.animated-buttons .button:first-of-type a:hover::before { -webkit-transform: translateX(-50%) translateY(-50px); -moz-transform: translateX(-50%) translateY(-50px); -ms-transform: translateX(-50%) translateY(-50px); -o-transform: translateX(-50%) translateY(-50px); transform: translateX(-50%) translateY(-50px); } + +.no-touch .pagination.animated-buttons .button:last-of-type a:hover::after { -webkit-transform: translateX(-50%) rotate(180deg) translateY(50px); -moz-transform: translateX(-50%) rotate(180deg) translateY(50px); -ms-transform: translateX(-50%) rotate(180deg) translateY(50px); -o-transform: translateX(-50%) rotate(180deg) translateY(50px); transform: translateX(-50%) rotate(180deg) translateY(50px); } + +.partners .logos { max-width: 68rem; margin-left: auto; margin-right: auto; margin-top: 1.5rem; margin-bottom: 1.5rem; } +.partners .logos::after { clear: both; content: ""; display: table; } +.partners .logos li { padding: 1.5rem; } +@media (max-width: 40rem) { .partners .logos li { float: left; display: block; margin-right: 2.35765%; width: 48.82117%; } + .partners .logos li:last-child { margin-right: 0; } + .partners .logos li:nth-child(2n) { margin-right: 0; } + .partners .logos li:nth-child(2n+1) { clear: left; } } +@media (min-width: 40rem) { .partners .logos li { float: left; display: block; margin-right: 2.35765%; width: 23.23176%; } + .partners .logos li:last-child { margin-right: 0; } + .partners .logos li:nth-child(4n) { margin-right: 0; } + .partners .logos li:nth-child(4n+1) { clear: left; } } +.partners .logos li a { display: block; height: 0; padding-top: 100%; overflow: hidden; background-size: contain; background-repeat: no-repeat; background-position: center center; } + +.contact form { max-width: 68rem; margin-left: auto; margin-right: auto; padding: 1.5rem; margin-top: 0.75rem; margin-bottom: 0.75rem; } +.contact form::after { clear: both; content: ""; display: table; } +.contact form fieldset { margin: 0; padding: 0; border: none; background-color: transparent; } +@media (min-width: 40rem) { .contact form fieldset { float: left; display: block; margin-right: 2.35765%; width: 48.82117%; } + .contact form fieldset:last-child { margin-right: 0; } } +.contact form fieldset:nth-child(odd) { margin-right: 0; } + +.tools .tool-list { clear: both; padding-top: 200px; padding-bottom: 100px; } +.tools .tool-list .tool { padding: 1.5rem; } +.tools .tool-list .tool .type { color: #95E19A; } +.tools .tool-list .tool img { height: 100px; } +.tools .tool-list .tool .name { color: #273D3A; font-size: 1.3em; } +.tools .tool-list .tool .name a { color: inherit; } +.tools .tool-list .tool .primary-link { display: block; text-transform: uppercase; font-weight: bold; color: #478a4b; } +.tools .tool-list .tool .secondary-link { display: block; font-style: italic; } +@media (min-width: 40rem) and (max-width: 53.75rem) { .tools .tool-list .tool { float: left; display: block; margin-right: 2.35765%; width: 48.82117%; } + .tools .tool-list .tool:last-child { margin-right: 0; } + .tools .tool-list .tool:nth-child(2n) { margin-right: 0; } + .tools .tool-list .tool:nth-child(2n+1) { clear: left; } } +@media (min-width: 53.75rem) { .tools .tool-list .tool { float: left; display: block; margin-right: 2.35765%; width: 31.76157%; } + .tools .tool-list .tool:last-child { margin-right: 0; } + .tools .tool-list .tool:nth-child(3n) { margin-right: 0; } + .tools .tool-list .tool:nth-child(3n+1) { clear: left; } } +.tools .tool-filters { display: none; } +.js .tools .tool-filters { display: block; position: absolute; z-index: 1; padding: 1.5rem 0.75rem; } +.js .tools .tool-filters .filter-select { float: left; margin: 0.75rem; } +.js .tools .tool-filters .filter-select .current { background-color: #e2e2e2; display: block; margin: 0; padding: 0.75rem; border-radius: 3px; cursor: pointer; color: #273D3A; border: solid 1px #D5D5D5; position: relative; } +.js .tools .tool-filters .filter-select .current:after { content: ''; display: block; width: 20px; height: 20px; position: absolute; right: 0.75rem; top: 50%; margin-top: -10px; background-image: url("assets/img/down-arrow.svg"); background-repeat: no-repeat; background-position: center; background-size: contain; } +.js .tools .tool-filters .filter-select .current span { display: block; width: 0; height: 0; overflow: hidden; } +.js .tools .tool-filters .filter-select .filter-buttons { height: 0; overflow: hidden; border: solid 1px #D5D5D5; opacity: 0; } +.js .tools .tool-filters .filter-select .filter-buttons li { padding: 0.75rem 100px 0.75rem 0.75rem; } +.js .tools .tool-filters .filter-select.open .current { border-radius: 3px 3px 0 0; } +.js .tools .tool-filters .filter-select.open .filter-buttons { height: auto; opacity: 1; max-height: 50vh; overflow-y: auto; background-color: #F0F5F4; border-radius: 0 0 3px 3px; } +.js .tools .tool-filters .filter-select.open .filter-buttons li:hover { background-color: rgba(149, 225, 154, 0.5); cursor: pointer; } +.js .tools .tool-filters .filter-select.open .filter-buttons li.active { background-color: #50B958; color: #fff; } + +.docs h2 { color: #50B958; } +@media (min-width: 40rem) { .docs h2 { font-size: 2em; } } +@media (min-width: 53.75rem) { .docs h2 { font-size: 3em; } } +.docs article { margin-bottom: 1.5rem; } +@media (min-width: 53.75rem) { .docs article { margin-bottom: 9rem; } } +.docs .step .wrapper { padding: 1.5rem; } +@media (min-width: 53.75rem) { .docs .step .wrapper { padding-top: 3rem; padding-bottom: 3rem; } } +.docs .step figure { text-align: center; margin-left: auto; margin-right: auto; max-width: 768px; } +.docs .step figure figcaption { text-align: left; } +.docs .step figure figcaption h3 { font-size: 1.3em; margin: 0 0 0.4em 0; } +.docs .step figure img { margin-top: 1.5rem; } +.docs .step.done { background-image: url("assets/img/pattern.svg"); background-position: center top; } +.docs .users { background-color: #F0F5F4; padding-bottom: 3rem; } +@media (min-width: 53.75rem) { .docs .users { padding-bottom: 4.5rem; } } +@media (min-width: 53.75rem) { .docs .users h2 { position: relative; top: -1.7em; } } + +body{ + margin:0; +} + + +indigo-cube-preview md-card.mat-card{ + background-color: map_get($md-obeupalette0, 50) ; +} diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json new file mode 100644 index 0000000..5e2507d --- /dev/null +++ b/src/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "module": "es2015", + "baseUrl": "", + "types": [] + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ] +} diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json new file mode 100644 index 0000000..510e3f1 --- /dev/null +++ b/src/tsconfig.spec.json @@ -0,0 +1,20 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "module": "commonjs", + "target": "es5", + "baseUrl": "", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json index ffe935d..a35a8ee 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,41 +1,20 @@ { + "compileOnSave": false, "compilerOptions": { - "baseUrl": ".", - "declaration": true, - "stripInternal": true, + "outDir": "./dist/out-tsc", + "baseUrl": "src", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "module": "es2015", - "moduleResolution": "node", - "noEmitOnError": false, - "noImplicitAny": true, - "noImplicitReturns": true, - "outDir": "./dist", - "rootDir": ".", - "sourceMap": true, - "inlineSources": true, - "lib": ["es2015", "dom"], "target": "es5", - "skipLibCheck": true, - "types": [ - "node", - "hammerjs", - "jquery", - "d3", - "lodash", - "URI" + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2016", + "dom" ] - }, - "awesomeTypescriptLoaderOptions": { - "useWebpackText": true // Allows other loaders to be chained to awesome-typescript-loader. - }, - "exclude": [ - "node_modules" - ], - "include": [ - "typings/**/*" - ], - "compileOnSave": false, - "buildOnSave": false, - "atom": { "rewriteTsconfig": false } + } } diff --git a/tslint.json b/tslint.json index 85bf3f4..dd117b3 100644 --- a/tslint.json +++ b/tslint.json @@ -1,29 +1,87 @@ { + "rulesDirectory": [ + "node_modules/codelyzer" + ], "rules": { + "arrow-return-shorthand": true, + "callable-types": true, "class-name": true, "comment-format": [ true, "check-space" ], + "curly": true, + "eofline": true, + "forin": true, + "import-blacklist": [ + true, + "rxjs" + ], + "import-spacing": true, "indent": [ true, "spaces" ], - "no-duplicate-variable": true, + "interface-over-type-literal": true, + "label-position": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + "static-before-instance", + "variables-before-functions" + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-super": true, + "no-empty": false, + "no-empty-interface": true, "no-eval": true, - "no-internal-module": true, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-misused-new": true, + "no-non-null-assertion": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-string-throw": true, + "no-switch-case-fall-through": true, "no-trailing-whitespace": true, + "no-unnecessary-initializer": true, + "no-unused-expression": true, + "no-use-before-declare": true, "no-var-keyword": true, + "object-literal-sort-keys": false, "one-line": [ true, "check-open-brace", + "check-catch", + "check-else", "check-whitespace" ], + "prefer-const": true, "quotemark": [ true, "single" ], - "semicolon": true, + "radix": true, + "semicolon": [ + "always" + ], "triple-equals": [ true, "allow-null-check" @@ -38,11 +96,9 @@ "variable-declaration": "nospace" } ], - "variable-name": [ - true, - "ban-keywords", - "allow-leading-underscore" - ], + "typeof-compare": true, + "unified-signatures": true, + "variable-name": false, "whitespace": [ true, "check-branch", @@ -50,6 +106,30 @@ "check-operator", "check-separator", "check-type" - ] + ], + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true, + "no-access-missing-member": true, + "templates-use-public": true, + "invoke-injectable": true } } diff --git a/typings.json b/typings.json deleted file mode 100644 index 7952350..0000000 --- a/typings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "dependencies": { - "d3": "registry:npm/d3#3.0.0+20160723033700", - "lodash": "registry:npm/lodash#4.0.0+20161015015725" - }, - "globalDevDependencies": { - "node": "registry:dt/node#7.0.0+20170204020307" - } -}