├── .gitignore ├── .npmignore ├── demo ├── src │ ├── main.js │ ├── index.html │ ├── styles │ │ ├── global.css │ │ └── main.css │ └── components │ │ └── Main.js ├── package.json └── build.js ├── README.md ├── src ├── CloseIcon.js ├── Wrapper.js ├── styles.js ├── Step.js └── index.js ├── package.json ├── LICENCE ├── lib ├── CloseIcon.js ├── Wrapper.js ├── styles.js ├── Step.js └── index.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store 3 | *.log 4 | dist/ 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store 3 | *.log 4 | .gitignore 5 | .git/ 6 | src/ 7 | demo/ 8 | -------------------------------------------------------------------------------- /demo/src/main.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDom from 'react-dom'; 3 | import Main from 'components/Main'; 4 | 5 | ReactDom.render(
, document.getElementById('root')); 6 | -------------------------------------------------------------------------------- /demo/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /demo/src/styles/global.css: -------------------------------------------------------------------------------- 1 | body, 2 | html { 3 | width: 100%; 4 | height: 100%; 5 | background: #f0f0f0; 6 | box-sizing: border-box; 7 | font-family: Helvetica, Arial, 'sans-serif'; 8 | font-size: 62.5%; 9 | font-weight: 400; 10 | } 11 | 12 | body * { 13 | box-sizing: inherit; 14 | } 15 | 16 | .cf:before, 17 | .cf:after { 18 | content: " "; 19 | display: table; 20 | } 21 | 22 | .cf:after { 23 | clear: both; 24 | } 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-walkthru 2 | ![](https://badge.fury.io/js/react-walkthru.svg) 3 | ![](https://david-dm.org/Adphorus/react-walkthru.svg) 4 | ![](https://david-dm.org/Adphorus/react-walkthru/dev-status.svg) 5 | 6 | Easy to use step-by-step site guide component for React. 7 | 8 | **Live Demo :** [http://adphorus.github.io/react-walkthru](http://adphorus.github.io/react-walkthru) 9 | 10 | > Documentation is coming soon. For now, please check the 'demo' folder. 11 | -------------------------------------------------------------------------------- /src/CloseIcon.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | export default class CloseIcon extends Component { 4 | render() { 5 | return ( 6 | 7 | 8 | 9 | ) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Wrapper.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | 3 | export default class Wrapper extends Component { 4 | getStyles() { 5 | const { show } = this.props; 6 | 7 | return { 8 | display : (show) ? 'block' : 'none', 9 | position : 'absolute', 10 | width : '100%', 11 | height : 0, 12 | left : 0, 13 | top : 0, 14 | transform : 'scale(1)', 15 | } 16 | } 17 | 18 | render() { 19 | return ( 20 |
21 | { this.props.children } 22 |
23 | ) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "walkthru-demo", 3 | "version": "0.0.1", 4 | "description": "walkthru-demo", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "node build.js", 8 | "start-dev": "NODE_ENV=development npm run build", 9 | "build-prod": "NODE_ENV=production npm run build" 10 | }, 11 | "keywords": [], 12 | "author": "Burak Can ", 13 | "dependencies": { 14 | "normalize.css": "^3.0.3", 15 | "react": "^0.14.0", 16 | "react-dom": "^0.14.0" 17 | }, 18 | "devDependencies": { 19 | "babel-core": "5.8.34", 20 | "babel-loader": "5.3.2", 21 | "css-loader": "^0.19.0", 22 | "html-webpack-plugin": "^1.6.1", 23 | "react-hot-loader": "^1.3.0", 24 | "style-loader": "^0.12.4", 25 | "webpack": "^1.12.6", 26 | "webpack-dev-server": "^1.12.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-walkthru", 3 | "version": "0.0.5", 4 | "description": "Easy to use step-by-step site guide component for React.", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "start-dev": "babel ./src --watch --out-dir ./lib & cd demo && npm install && npm run start-dev", 8 | "prebuild": "rm -rf lib/*", 9 | "build": "babel ./src --out-dir ./lib", 10 | "prepublish": "npm run build" 11 | }, 12 | "keywords": [ 13 | "walk", 14 | "through", 15 | "walkthrough", 16 | "guide", 17 | "react" 18 | ], 19 | "author": "Burak Can ", 20 | "license": "MIT", 21 | "repository": { 22 | "type": "git", 23 | "url": "http://github.com/Adphorus/react-walkthru" 24 | }, 25 | "bugs": { 26 | "url": "http://github.com/Adphorus/react-walkthru/issues" 27 | }, 28 | "dependencies": { 29 | "react": ">=0.13.0" 30 | }, 31 | "devDependencies": { 32 | "babel": "^5.8.34" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /demo/src/styles/main.css: -------------------------------------------------------------------------------- 1 | :local(.Main) { 2 | width: 800px; 3 | margin: 40px auto; 4 | text-align: center; 5 | } 6 | 7 | h1 { 8 | font-size: 4.2rem; 9 | font-weight: 200; 10 | display: block; 11 | } 12 | 13 | h4 { 14 | font-size: 2.4rem; 15 | font-weight: 200; 16 | display: block; 17 | } 18 | 19 | p { 20 | font-size: 1.2rem; 21 | line-height: 1.9rem; 22 | } 23 | 24 | .Github { 25 | display: inline-block; 26 | width: 200px; 27 | height: 50px; 28 | color: #fff; 29 | background: #4183c4; 30 | border-radius: 4px; 31 | margin: 40px 20px 0; 32 | text-align: center; 33 | line-height: 50px; 34 | font-size: 2.2rem; 35 | text-decoration: none; 36 | font-weight: 200; 37 | } 38 | 39 | .Npm { 40 | display: inline-block; 41 | width: 200px; 42 | height: 50px; 43 | color: #fff; 44 | background: #cb3837; 45 | border-radius: 4px; 46 | margin: 40px 20px 0; 47 | text-align: center; 48 | line-height: 50px; 49 | font-size: 2.2rem; 50 | text-decoration: none; 51 | font-weight: 200; 52 | } 53 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2018 Adphorus 3 | 4 | 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: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | 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. 9 | -------------------------------------------------------------------------------- /lib/CloseIcon.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 10 | 11 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 12 | 13 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 14 | 15 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 16 | 17 | var _react = require('react'); 18 | 19 | var _react2 = _interopRequireDefault(_react); 20 | 21 | var CloseIcon = (function (_Component) { 22 | _inherits(CloseIcon, _Component); 23 | 24 | function CloseIcon() { 25 | _classCallCheck(this, CloseIcon); 26 | 27 | _get(Object.getPrototypeOf(CloseIcon.prototype), 'constructor', this).apply(this, arguments); 28 | } 29 | 30 | _createClass(CloseIcon, [{ 31 | key: 'render', 32 | value: function render() { 33 | return _react2['default'].createElement( 34 | 'svg', 35 | { viewBox: '0 0 24 24', preserveAspectRatio: 'xMidYMid meet', fit: true, style: this.props.style, onClick: this.props.onClick }, 36 | _react2['default'].createElement( 37 | 'g', 38 | null, 39 | _react2['default'].createElement('path', { d: 'M19 6.41l-1.41-1.41-5.59 5.59-5.59-5.59-1.41 1.41 5.59 5.59-5.59 5.59 1.41 1.41 5.59-5.59 5.59 5.59 1.41-1.41-5.59-5.59z' }) 40 | ) 41 | ); 42 | } 43 | }]); 44 | 45 | return CloseIcon; 46 | })(_react.Component); 47 | 48 | exports['default'] = CloseIcon; 49 | module.exports = exports['default']; -------------------------------------------------------------------------------- /lib/Wrapper.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 10 | 11 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 12 | 13 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 14 | 15 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 16 | 17 | var _react = require('react'); 18 | 19 | var _react2 = _interopRequireDefault(_react); 20 | 21 | var Wrapper = (function (_Component) { 22 | _inherits(Wrapper, _Component); 23 | 24 | function Wrapper() { 25 | _classCallCheck(this, Wrapper); 26 | 27 | _get(Object.getPrototypeOf(Wrapper.prototype), 'constructor', this).apply(this, arguments); 28 | } 29 | 30 | _createClass(Wrapper, [{ 31 | key: 'getStyles', 32 | value: function getStyles() { 33 | var show = this.props.show; 34 | 35 | return { 36 | display: show ? 'block' : 'none', 37 | position: 'absolute', 38 | width: '100%', 39 | height: 0, 40 | left: 0, 41 | top: 0, 42 | transform: 'scale(1)' 43 | }; 44 | } 45 | }, { 46 | key: 'render', 47 | value: function render() { 48 | return _react2['default'].createElement( 49 | 'div', 50 | { className: 'WalkThru-Wrapper', style: this.getStyles() }, 51 | this.props.children 52 | ); 53 | } 54 | }]); 55 | 56 | return Wrapper; 57 | })(_react.Component); 58 | 59 | exports['default'] = Wrapper; 60 | module.exports = exports['default']; -------------------------------------------------------------------------------- /demo/build.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack'); 2 | var HtmlWebpackPlugin = require('html-webpack-plugin'); 3 | var UglifyJsPlugin = webpack.optimize.UglifyJsPlugin; 4 | var path = require('path'); 5 | var DefinePlugin = webpack.DefinePlugin; 6 | var WebpackDevServer = require("webpack-dev-server"); 7 | var NODE_ENV = process.env.NODE_ENV || 'production'; 8 | 9 | var config = { 10 | entry : { 11 | main : [path.join(__dirname, '/src/main.js')] 12 | }, 13 | 14 | output : { 15 | path : path.join(__dirname, '/dist'), 16 | filename : '[name].js', 17 | publicPath : '/' 18 | }, 19 | 20 | devtool : ((NODE_ENV==='development') ? 'source-map' : false), 21 | 22 | plugins : [ 23 | new HtmlWebpackPlugin({ 24 | title : '', 25 | template : path.join(__dirname, '/src/index.html'), 26 | inject : true, 27 | filename : 'index.html' 28 | }), 29 | 30 | new webpack.DefinePlugin({ 31 | 'process.env' : { 32 | NODE_ENV : JSON.stringify(NODE_ENV) 33 | } 34 | }), 35 | ], 36 | 37 | resolve : { 38 | extensions : ['', '.js', '.css'], 39 | alias : { 40 | 'root' : path.join(__dirname, '/src'), 41 | 'components' : path.join(__dirname, '/src/components'), 42 | 'styles' : path.join(__dirname, '/src/styles') 43 | } 44 | }, 45 | 46 | module : { 47 | loaders : [ 48 | { test : /\.js$/, 49 | loaders : ['react-hot', 'babel-loader'], 50 | include : path.join(__dirname, '/src'), 51 | }, { 52 | test : /\.css$/, 53 | loaders : ['style', 'css'] 54 | } 55 | ] 56 | } 57 | } 58 | 59 | if (NODE_ENV === 'production') { 60 | config.plugins.push(new UglifyJsPlugin({ 61 | compress : { warnings : false }, 62 | sourcemap : false, 63 | mangle : true 64 | })); 65 | } else if (NODE_ENV === 'development') { 66 | config.entry.main.unshift('webpack/hot/only-dev-server'); 67 | config.entry.main.unshift('webpack-dev-server/client?http://0.0.0.0:3000'); 68 | config.plugins.push(new webpack.HotModuleReplacementPlugin()); 69 | } 70 | 71 | const compiler = webpack(config); 72 | 73 | if (NODE_ENV === 'development') { 74 | const server = new WebpackDevServer(compiler, { 75 | contentBase : path.join(__dirname, 'dist'), 76 | noInfo: false, 77 | quiet: false, 78 | lazy: false, 79 | hot: true, 80 | publicPath: '/', 81 | stats: { 82 | colors: true, 83 | chunks: false 84 | } 85 | }); 86 | 87 | server.listen(3000, 'localhost', function(){ 88 | console.log('Webpack Dev Server is listening on port 3000'); 89 | }); 90 | } else if (NODE_ENV === 'production') { 91 | compiler.run(function (err, stats) { 92 | if (err) throw err; 93 | 94 | console.log(stats.toString({ 95 | colors : true, 96 | chunks : false 97 | })); 98 | }); 99 | } 100 | -------------------------------------------------------------------------------- /src/styles.js: -------------------------------------------------------------------------------- 1 | const step = { 2 | 3 | } 4 | 5 | const arrow = { 6 | position : 'absolute', 7 | top : -10, 8 | left : -9, 9 | width : 0, 10 | height : 0, 11 | border : '10px solid transparent', 12 | borderRight : '10px solid #fff', 13 | zIndex : '10' 14 | } 15 | 16 | const content = { 17 | background : '#ffffff', 18 | marginLeft : 10, 19 | top : -30, 20 | borderRadius : 4, 21 | padding : '11px 11px 50px', 22 | maxWidth : 280, 23 | minWidth : 280, 24 | fontSize : 12, 25 | lineHeight : '19px', 26 | border : '1px solid #b7efe8', 27 | boxShadow : '0 8px 34px rgba(0, 0, 0, 0.2)', 28 | position : 'relative', 29 | overflow : 'hidden', 30 | boxSizing : 'border-box', 31 | zIndex : '9' 32 | } 33 | 34 | const footer = { 35 | position : 'absolute', 36 | left : 0, 37 | bottom : 0, 38 | width : '100%', 39 | height : 34, 40 | background : '#eaeaec', 41 | boxSizing : 'border-box', 42 | } 43 | 44 | const button = { 45 | border : 0, 46 | outline : 'none', 47 | width : 85, 48 | height : 34, 49 | float : 'right', 50 | margin : 0, 51 | padding : 0, 52 | background : '#00cdb5', 53 | color : '#ffffff', 54 | boxSizing : 'border-box', 55 | } 56 | 57 | const fullButton= { 58 | ...button, 59 | width : '100%', 60 | } 61 | 62 | const nav = { 63 | padding : '0 11px', 64 | boxSizing : 'border-box', 65 | } 66 | 67 | const navText = { 68 | lineHeight : '34px', 69 | fontSize : 11, 70 | display : 'inline-block', 71 | boxSizing : 'border-box', 72 | verticalAlign : 'middle' 73 | } 74 | 75 | const dots = { 76 | display : 'inline-block', 77 | lineHeight : footer.height + 'px', 78 | marginLeft : 10 79 | } 80 | 81 | const dot = { 82 | width : 10, 83 | height : 10, 84 | display : 'inline-block', 85 | borderRadius : 5, 86 | border : '1px solid #B7BAC2', 87 | background : footer.background, 88 | cursor : 'pointer', 89 | marginLeft : 5, 90 | verticalAlign : 'middle', 91 | transition : 'background .4s ease', 92 | boxSizing : 'border-box', 93 | } 94 | 95 | const dotActive = { 96 | ...dot, 97 | background : '#00cdb5', 98 | border : 'none' 99 | } 100 | 101 | const dotPast = { 102 | ...dot, 103 | background : '#B7BAC2', 104 | } 105 | 106 | const closeIcon = { 107 | fill : '#B7BAC2', 108 | width : '18px', 109 | height : '18px', 110 | position : 'absolute', 111 | right : 5, 112 | top : 5, 113 | cursor : 'pointer', 114 | } 115 | 116 | export default function getStyles(userTheme = {}) { 117 | const theme = { 118 | step, 119 | arrow, 120 | content, 121 | footer, 122 | button, 123 | fullButton, 124 | navText, 125 | nav, 126 | dots, 127 | dot, 128 | dotActive, 129 | dotPast, 130 | closeIcon 131 | } 132 | 133 | for (var key in userTheme) { 134 | if (theme.hasOwnProperty(key)) { 135 | theme[key] = { 136 | ...theme[key], 137 | ...userTheme[key] 138 | } 139 | } 140 | } 141 | 142 | return theme; 143 | } 144 | -------------------------------------------------------------------------------- /src/Step.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | import CloseIcon from './CloseIcon'; 3 | 4 | export default class Step extends Component { 5 | 6 | constructor(props, context) { 7 | super(props, context); 8 | this.styles = props.theme; 9 | } 10 | 11 | getPositionStyle(interpolated) { 12 | const { offset } = this.props.data; 13 | const position = interpolated || this.props.data.position; 14 | 15 | let top = 0, left = 0; 16 | 17 | if (position instanceof HTMLElement) { 18 | let element = position; 19 | 20 | do { 21 | if (!isNaN(element.offsetLeft)) { 22 | left += element.offsetLeft; 23 | top += element.offsetTop; 24 | } 25 | } while ( element = element.offsetParent ); 26 | 27 | } else if (typeof position === 'function') { 28 | return this.getPositionStyle( position() ); 29 | } else { 30 | top = position.top; 31 | left = position.left; 32 | } 33 | 34 | offset && offset.top && (top = top + offset.top); 35 | offset && offset.left && (left = left + offset.left); 36 | 37 | return { 38 | top, 39 | left, 40 | position : 'absolute' 41 | } 42 | } 43 | 44 | renderDots() { 45 | const { steps, step, goTo } = this.props; 46 | 47 | return steps.map((data, index) => { 48 | const active = (index + 1) === step; 49 | const past = (index + 1) < step; 50 | 51 | let style; 52 | 53 | if (active) { 54 | style = this.styles['dotActive']; 55 | } else if (past) { 56 | style = this.styles['dotPast']; 57 | } else { 58 | style = this.styles['dot']; 59 | } 60 | 61 | return ( 62 |
goTo(index + 1) } 67 | /> 68 | ) 69 | }); 70 | } 71 | 72 | render() { 73 | const { data, step, steps, next, hide } = this.props; 74 | const single = (steps.length === 1); 75 | const last = (!single && steps.length === step) ? true : false; 76 | 77 | return ( 78 |
79 |
80 |
81 | 82 | { data.content } 83 |
84 | 88 |
89 | step { step } 90 |
91 | { this.renderDots() } 92 |
93 |
94 |
95 |
96 |
97 | ) 98 | } 99 | } 100 | 101 | Step.defaultProps = { 102 | theme : {} 103 | } 104 | -------------------------------------------------------------------------------- /lib/styles.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 8 | 9 | exports['default'] = getStyles; 10 | var step = {}; 11 | 12 | var arrow = { 13 | position: 'absolute', 14 | top: -10, 15 | left: -9, 16 | width: 0, 17 | height: 0, 18 | border: '10px solid transparent', 19 | borderRight: '10px solid #fff', 20 | zIndex: '10' 21 | }; 22 | 23 | var content = { 24 | background: '#ffffff', 25 | marginLeft: 10, 26 | top: -30, 27 | borderRadius: 4, 28 | padding: '11px 11px 50px', 29 | maxWidth: 280, 30 | minWidth: 280, 31 | fontSize: 12, 32 | lineHeight: '19px', 33 | border: '1px solid #b7efe8', 34 | boxShadow: '0 8px 34px rgba(0, 0, 0, 0.2)', 35 | position: 'relative', 36 | overflow: 'hidden', 37 | boxSizing: 'border-box', 38 | zIndex: '9' 39 | }; 40 | 41 | var footer = { 42 | position: 'absolute', 43 | left: 0, 44 | bottom: 0, 45 | width: '100%', 46 | height: 34, 47 | background: '#eaeaec', 48 | boxSizing: 'border-box' 49 | }; 50 | 51 | var button = { 52 | border: 0, 53 | outline: 'none', 54 | width: 85, 55 | height: 34, 56 | float: 'right', 57 | margin: 0, 58 | padding: 0, 59 | background: '#00cdb5', 60 | color: '#ffffff', 61 | boxSizing: 'border-box' 62 | }; 63 | 64 | var fullButton = _extends({}, button, { 65 | width: '100%' 66 | }); 67 | 68 | var nav = { 69 | padding: '0 11px', 70 | boxSizing: 'border-box' 71 | }; 72 | 73 | var navText = { 74 | lineHeight: '34px', 75 | fontSize: 11, 76 | display: 'inline-block', 77 | boxSizing: 'border-box', 78 | verticalAlign: 'middle' 79 | }; 80 | 81 | var dots = { 82 | display: 'inline-block', 83 | lineHeight: footer.height + 'px', 84 | marginLeft: 10 85 | }; 86 | 87 | var dot = { 88 | width: 10, 89 | height: 10, 90 | display: 'inline-block', 91 | borderRadius: 5, 92 | border: '1px solid #B7BAC2', 93 | background: footer.background, 94 | cursor: 'pointer', 95 | marginLeft: 5, 96 | verticalAlign: 'middle', 97 | transition: 'background .4s ease', 98 | boxSizing: 'border-box' 99 | }; 100 | 101 | var dotActive = _extends({}, dot, { 102 | background: '#00cdb5', 103 | border: 'none' 104 | }); 105 | 106 | var dotPast = _extends({}, dot, { 107 | background: '#B7BAC2' 108 | }); 109 | 110 | var closeIcon = { 111 | fill: '#B7BAC2', 112 | width: '18px', 113 | height: '18px', 114 | position: 'absolute', 115 | right: 5, 116 | top: 5, 117 | cursor: 'pointer' 118 | }; 119 | 120 | function getStyles() { 121 | var userTheme = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; 122 | 123 | var theme = { 124 | step: step, 125 | arrow: arrow, 126 | content: content, 127 | footer: footer, 128 | button: button, 129 | fullButton: fullButton, 130 | navText: navText, 131 | nav: nav, 132 | dots: dots, 133 | dot: dot, 134 | dotActive: dotActive, 135 | dotPast: dotPast, 136 | closeIcon: closeIcon 137 | }; 138 | 139 | for (var key in userTheme) { 140 | if (theme.hasOwnProperty(key)) { 141 | theme[key] = _extends({}, theme[key], userTheme[key]); 142 | } 143 | } 144 | 145 | return theme; 146 | } 147 | 148 | module.exports = exports['default']; -------------------------------------------------------------------------------- /demo/src/components/Main.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import ReactDom from 'react-dom'; 3 | import WalkThru from 'walkthru'; 4 | 5 | import 'normalize.css'; 6 | import 'styles/global' 7 | import styles from 'styles/main'; 8 | 9 | export default class Main extends Component { 10 | 11 | showThemingDemo() { 12 | WalkThru.create({ 13 | renderer : ReactDom, 14 | theme : { 15 | step : { 16 | transition : 'left .3s ease, top .3s ease', 17 | }, 18 | content : { 19 | padding : '50px 11px 11px', 20 | border : 'none', 21 | top : -50, 22 | }, 23 | footer : { 24 | background : '#444', 25 | color : '#fff', 26 | bottom : 'initial', 27 | top : 0, 28 | }, 29 | button : { 30 | background : '#cb3837' 31 | }, 32 | dotActive : { 33 | background : '#cb3837' 34 | } 35 | }, 36 | steps : [ 37 | { position : this.refs['title'], 38 | offset : { left: 500, top: 20 }, 39 | content : ( 40 |
41 |

Lorem ipsum dolor sit amet

42 |

43 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 44 |

45 |
46 | ), 47 | }, 48 | { position : this.refs['subtitle'], 49 | offset : { left: 200, top: 16 }, 50 | content : ( 51 |
52 |

53 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. 54 |

55 |
56 | ), 57 | }, 58 | { position : () => document.getElementsByClassName('Github')[0], 59 | offset : { left: 190, top: 25 }, 60 | content : ( 61 |
62 |

Github repo

63 |

64 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. 65 |

66 |
67 | ), 68 | }, 69 | { position : document.getElementsByClassName('Npm')[0], 70 | offset : { left: 190, top: 25 }, 71 | content : ( 72 |
73 |

NPM package

74 |

75 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. 76 |

77 |
78 | ), 79 | }, 80 | ] 81 | }) 82 | } 83 | 84 | componentDidMount() { 85 | WalkThru.create({ 86 | renderer : ReactDom, 87 | onEnd : this.showThemingDemo.bind(this), 88 | steps : [ 89 | { position : this.refs['title'], 90 | offset : { left: 500, top: 20 }, 91 | content : ( 92 |
93 |

Lorem ipsum dolor sit amet

94 |

95 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 96 |

97 |
98 | ), 99 | }, 100 | { position : this.refs['subtitle'], 101 | offset : { left: 200, top: 16 }, 102 | content : ( 103 |
104 |

105 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. 106 |

107 |
108 | ), 109 | }, 110 | { position : () => document.getElementsByClassName('Github')[0], 111 | offset : { left: 190, top: 25 }, 112 | content : ( 113 |
114 |

Github repo

115 |

116 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. 117 |

118 |
119 | ), 120 | }, 121 | { position : document.getElementsByClassName('Npm')[0], 122 | offset : { left: 190, top: 25 }, 123 | content : ( 124 |
125 |

NPM package

126 |

127 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. 128 |

129 |
130 | ), 131 | }, 132 | ] 133 | }); 134 | } 135 | 136 | render() { 137 | return ( 138 |
139 |

React - walkthru

140 |

Easy to use step-by-step site guide component for React.

141 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

142 | Github 143 | NPM 144 |
145 | ) 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | import Wrapper from './Wrapper'; 3 | import Step from './Step'; 4 | import getStyles from './styles'; 5 | 6 | export default class WalkThru extends Component { 7 | 8 | static checkFrequency({ id, frequencyCap, steps }) { 9 | if (!id) return false; 10 | 11 | const storageId = `___walkthru___.${id}.${frequencyCap}.${steps.length}`; 12 | const impressions = parseInt(localStorage.getItem(storageId) || 0); 13 | 14 | // false = should show 15 | 16 | if (impressions === -1) { 17 | return true; 18 | } else if (impressions >= frequencyCap) { 19 | return impressions >= frequencyCap; 20 | } else { 21 | localStorage.setItem(storageId, impressions + 1); 22 | return false; 23 | } 24 | } 25 | 26 | static create(props){ 27 | 28 | if (WalkThru.checkFrequency(props)) return null; 29 | 30 | const wrapper = document.createElement('div'); 31 | const element = React.createElement(WalkThru, Object.assign({ 32 | ___wrapper : wrapper, 33 | ___portal : true 34 | }, props)); 35 | 36 | const instance = props.renderer.render(element, wrapper); 37 | document.body.appendChild(wrapper); 38 | 39 | return instance; 40 | } 41 | 42 | constructor(props) { 43 | super(props); 44 | 45 | this.state = { 46 | step : 1, 47 | show : props.show, 48 | steps : this.processSteps(props.steps), 49 | } 50 | 51 | this.theme = props.noStyle ? {} : getStyles(props.theme); 52 | } 53 | 54 | processSteps(steps) { 55 | return steps.reduce((list, step) => { 56 | const { startDate, endDate } = step; 57 | 58 | if (!startDate && !endDate) { 59 | list.push(step); 60 | return list; 61 | } 62 | 63 | const now = Date.now(); 64 | const startTime = ( startDate && startDate.getTime() ) || now; 65 | const endTime = ( endDate && endDate.getTime() ) || now; 66 | 67 | if (now >= startTime && now <= endTime) { 68 | list.push(step); 69 | } 70 | 71 | return list; 72 | }, []); 73 | } 74 | 75 | next() { 76 | const { step, steps } = this.state; 77 | 78 | if (step === steps.length) { 79 | this.props.onEnd && this.props.onEnd(); 80 | return this.destroy(); 81 | } 82 | 83 | if (!this.props.___portal) { 84 | this.___portal.goTo(step + 1); 85 | } 86 | 87 | this.goTo(step + 1); 88 | } 89 | 90 | goTo(step) { 91 | const { steps } = this.state; 92 | 93 | if (steps[step - 1]) { 94 | 95 | if (!this.props.___portal) { 96 | this.___portal.setState({ step }); 97 | } 98 | 99 | this.setState({ step }); 100 | } 101 | } 102 | 103 | show() { 104 | if (!this.props.___portal) { 105 | this.___portal.setState({ show : true }); 106 | } 107 | 108 | this.setState({ show : true }); 109 | } 110 | 111 | hide() { 112 | 113 | if (!this.props.___portal) { 114 | this.___portal.setState({ show : false }); 115 | } 116 | 117 | this.setState({ show : false }); 118 | 119 | const { id, frequencyCap, steps } = this.props; 120 | const storageId = `___walkthru___.${id}.${frequencyCap}.${steps.length}`; 121 | 122 | localStorage.setItem(storageId, -1); 123 | } 124 | 125 | destroy() { 126 | const { renderer, ___wrapper, ___portal } = this.props; 127 | 128 | if (!___portal) { 129 | return this.___portal.destroy(); 130 | } 131 | 132 | try { 133 | renderer.unmountComponentAtNode(___wrapper, this); 134 | } catch (e) { 135 | } finally { 136 | document.body.removeChild(this.props.___wrapper); 137 | } 138 | } 139 | 140 | componentWillUnmount() { 141 | if (!this.props.___portal) { 142 | this.___portal.destroy(); 143 | } else { 144 | window.removeEventListener('resize', this.___resizeHandler); 145 | } 146 | } 147 | 148 | componentWillMount() { 149 | if (!this.props.___portal && this.checkFrequency()) { 150 | this.___portal = WalkThru.create(this.props); 151 | } else { 152 | this.___resizeHandler = function() { 153 | this.forceUpdate(); 154 | }.bind(this); 155 | 156 | window.addEventListener( 157 | 'resize', this.___resizeHandler 158 | ) 159 | } 160 | } 161 | 162 | render() { 163 | const { ___portal, theme } = this.props; 164 | const { show, step, steps } = this.state; 165 | 166 | if (!___portal) return null; 167 | if (steps.length === 0) return null; 168 | 169 | const current = steps[step - 1]; 170 | 171 | return ( 172 | 173 | 182 | 183 | ) 184 | } 185 | } 186 | 187 | WalkThru.defaultProps = { 188 | renderer : React, 189 | show : true, 190 | theme : {}, 191 | noStyle : false, 192 | steps : [], 193 | } 194 | 195 | const RENDERER_DEFINITION = { 196 | render : PropTypes.func.isRequired 197 | } 198 | 199 | const STEP_DEFINITION = PropTypes.shape({ 200 | position : PropTypes.oneOfType([ 201 | PropTypes.shape({ 202 | top : PropTypes.number, 203 | left : PropTypes.number, 204 | }), 205 | PropTypes.instanceOf(HTMLElement), 206 | PropTypes.func, 207 | ]).isRequired, 208 | offset : PropTypes.shape({ 209 | top : PropTypes.number, 210 | left : PropTypes.number, 211 | }), 212 | endDate : PropTypes.instanceOf(Date), 213 | startDate : PropTypes.instanceOf(Date), 214 | content : PropTypes.oneOfType([ 215 | PropTypes.string, 216 | PropTypes.element, 217 | ]).isRequired, 218 | }); 219 | 220 | const THEME_DEFINITION = { 221 | arrow : PropTypes.object, 222 | content : PropTypes.object, 223 | footer : PropTypes.object, 224 | button : PropTypes.object, 225 | fullButton : PropTypes.object, 226 | navText : PropTypes.object, 227 | nav : PropTypes.object, 228 | dots : PropTypes.object, 229 | dot : PropTypes.object, 230 | dotActive : PropTypes.object, 231 | dotPast : PropTypes.object, 232 | } 233 | 234 | WalkThru.propTypes = { 235 | id : PropTypes.string, 236 | frequencyCap : (props, propName, componentName) => { 237 | if (props.hasOwnProperty('frequencyCap') && !props.hasOwnProperty('id')) { 238 | return new Error('You specified frequencyCap to a step in '+ componentName +' but didn\'t specify an id.'); 239 | } 240 | }, 241 | renderer : PropTypes.shape( RENDERER_DEFINITION ), 242 | steps : PropTypes.arrayOf( STEP_DEFINITION ), 243 | show : PropTypes.bool, 244 | theme : PropTypes.shape( THEME_DEFINITION ), 245 | noStyle : PropTypes.bool, 246 | } 247 | -------------------------------------------------------------------------------- /lib/Step.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 8 | 9 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 10 | 11 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 12 | 13 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 14 | 15 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 16 | 17 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 18 | 19 | var _react = require('react'); 20 | 21 | var _react2 = _interopRequireDefault(_react); 22 | 23 | var _CloseIcon = require('./CloseIcon'); 24 | 25 | var _CloseIcon2 = _interopRequireDefault(_CloseIcon); 26 | 27 | var Step = (function (_Component) { 28 | _inherits(Step, _Component); 29 | 30 | function Step(props, context) { 31 | _classCallCheck(this, Step); 32 | 33 | _get(Object.getPrototypeOf(Step.prototype), 'constructor', this).call(this, props, context); 34 | this.styles = props.theme; 35 | } 36 | 37 | _createClass(Step, [{ 38 | key: 'getPositionStyle', 39 | value: function getPositionStyle(interpolated) { 40 | var offset = this.props.data.offset; 41 | 42 | var position = interpolated || this.props.data.position; 43 | 44 | var top = 0, 45 | left = 0; 46 | 47 | if (position instanceof HTMLElement) { 48 | var element = position; 49 | 50 | do { 51 | if (!isNaN(element.offsetLeft)) { 52 | left += element.offsetLeft; 53 | top += element.offsetTop; 54 | } 55 | } while (element = element.offsetParent); 56 | } else if (typeof position === 'function') { 57 | return this.getPositionStyle(position()); 58 | } else { 59 | top = position.top; 60 | left = position.left; 61 | } 62 | 63 | offset && offset.top && (top = top + offset.top); 64 | offset && offset.left && (left = left + offset.left); 65 | 66 | return { 67 | top: top, 68 | left: left, 69 | position: 'absolute' 70 | }; 71 | } 72 | }, { 73 | key: 'renderDots', 74 | value: function renderDots() { 75 | var _this = this; 76 | 77 | var _props = this.props; 78 | var steps = _props.steps; 79 | var step = _props.step; 80 | var goTo = _props.goTo; 81 | 82 | return steps.map(function (data, index) { 83 | var active = index + 1 === step; 84 | var past = index + 1 < step; 85 | 86 | var style = undefined; 87 | 88 | if (active) { 89 | style = _this.styles['dotActive']; 90 | } else if (past) { 91 | style = _this.styles['dotPast']; 92 | } else { 93 | style = _this.styles['dot']; 94 | } 95 | 96 | return _react2['default'].createElement('div', { 97 | key: index, 98 | className: 'WalkThru-Nav-dot ' + (active ? 'active ' : '') + (past ? 'past ' : ''), 99 | style: style, 100 | onClick: function () { 101 | return goTo(index + 1); 102 | } 103 | }); 104 | }); 105 | } 106 | }, { 107 | key: 'render', 108 | value: function render() { 109 | var _props2 = this.props; 110 | var data = _props2.data; 111 | var step = _props2.step; 112 | var steps = _props2.steps; 113 | var next = _props2.next; 114 | var hide = _props2.hide; 115 | 116 | var single = steps.length === 1; 117 | var last = !single && steps.length === step ? true : false; 118 | 119 | return _react2['default'].createElement( 120 | 'div', 121 | { className: 'WalkThru-Step ' + (single ? 'single ' : 'multi'), style: _extends({}, this.getPositionStyle(), this.styles['step']) }, 122 | _react2['default'].createElement('div', { className: 'WalkThru-arrow', style: this.styles['arrow'] }), 123 | _react2['default'].createElement( 124 | 'div', 125 | { className: 'WalkThru-Content', style: this.styles['content'] }, 126 | _react2['default'].createElement(_CloseIcon2['default'], { style: this.styles['closeIcon'], onClick: hide }), 127 | data.content, 128 | _react2['default'].createElement( 129 | 'div', 130 | { className: 'WalkThru-Footer', style: this.styles['footer'] }, 131 | _react2['default'].createElement( 132 | 'button', 133 | { onClick: next, style: single ? this.styles['fullButton'] : this.styles['button'] }, 134 | single && 'OK Got It', 135 | !single && (last ? 'Done' : 'Next') 136 | ), 137 | _react2['default'].createElement( 138 | 'div', 139 | { className: 'WalkThru-Nav', style: this.styles['nav'] }, 140 | _react2['default'].createElement( 141 | 'span', 142 | { className: 'WalkThru-Nav-text', style: this.styles['navText'] }, 143 | 'step ', 144 | step 145 | ), 146 | _react2['default'].createElement( 147 | 'div', 148 | { className: 'WalkThru-Nav-dots', style: this.styles['dots'] }, 149 | this.renderDots() 150 | ) 151 | ) 152 | ) 153 | ) 154 | ); 155 | } 156 | }]); 157 | 158 | return Step; 159 | })(_react.Component); 160 | 161 | exports['default'] = Step; 162 | 163 | Step.defaultProps = { 164 | theme: {} 165 | }; 166 | module.exports = exports['default']; -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 10 | 11 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 12 | 13 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 14 | 15 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 16 | 17 | var _react = require('react'); 18 | 19 | var _react2 = _interopRequireDefault(_react); 20 | 21 | var _Wrapper = require('./Wrapper'); 22 | 23 | var _Wrapper2 = _interopRequireDefault(_Wrapper); 24 | 25 | var _Step = require('./Step'); 26 | 27 | var _Step2 = _interopRequireDefault(_Step); 28 | 29 | var _styles = require('./styles'); 30 | 31 | var _styles2 = _interopRequireDefault(_styles); 32 | 33 | var WalkThru = (function (_Component) { 34 | _inherits(WalkThru, _Component); 35 | 36 | _createClass(WalkThru, null, [{ 37 | key: 'checkFrequency', 38 | value: function checkFrequency(_ref) { 39 | var id = _ref.id; 40 | var frequencyCap = _ref.frequencyCap; 41 | var steps = _ref.steps; 42 | 43 | if (!id) return false; 44 | 45 | var storageId = '___walkthru___.' + id + '.' + frequencyCap + '.' + steps.length; 46 | var impressions = parseInt(localStorage.getItem(storageId) || 0); 47 | 48 | // false = should show 49 | 50 | if (impressions === -1) { 51 | return true; 52 | } else if (impressions >= frequencyCap) { 53 | return impressions >= frequencyCap; 54 | } else { 55 | localStorage.setItem(storageId, impressions + 1); 56 | return false; 57 | } 58 | } 59 | }, { 60 | key: 'create', 61 | value: function create(props) { 62 | 63 | if (WalkThru.checkFrequency(props)) return null; 64 | 65 | var wrapper = document.createElement('div'); 66 | var element = _react2['default'].createElement(WalkThru, Object.assign({ 67 | ___wrapper: wrapper, 68 | ___portal: true 69 | }, props)); 70 | 71 | var instance = props.renderer.render(element, wrapper); 72 | document.body.appendChild(wrapper); 73 | 74 | return instance; 75 | } 76 | }]); 77 | 78 | function WalkThru(props) { 79 | _classCallCheck(this, WalkThru); 80 | 81 | _get(Object.getPrototypeOf(WalkThru.prototype), 'constructor', this).call(this, props); 82 | 83 | this.state = { 84 | step: 1, 85 | show: props.show, 86 | steps: this.processSteps(props.steps) 87 | }; 88 | 89 | this.theme = props.noStyle ? {} : (0, _styles2['default'])(props.theme); 90 | } 91 | 92 | _createClass(WalkThru, [{ 93 | key: 'processSteps', 94 | value: function processSteps(steps) { 95 | return steps.reduce(function (list, step) { 96 | var startDate = step.startDate; 97 | var endDate = step.endDate; 98 | 99 | if (!startDate && !endDate) { 100 | list.push(step); 101 | return list; 102 | } 103 | 104 | var now = Date.now(); 105 | var startTime = startDate && startDate.getTime() || now; 106 | var endTime = endDate && endDate.getTime() || now; 107 | 108 | if (now >= startTime && now <= endTime) { 109 | list.push(step); 110 | } 111 | 112 | return list; 113 | }, []); 114 | } 115 | }, { 116 | key: 'next', 117 | value: function next() { 118 | var _state = this.state; 119 | var step = _state.step; 120 | var steps = _state.steps; 121 | 122 | if (step === steps.length) { 123 | this.props.onEnd && this.props.onEnd(); 124 | return this.destroy(); 125 | } 126 | 127 | if (!this.props.___portal) { 128 | this.___portal.goTo(step + 1); 129 | } 130 | 131 | this.goTo(step + 1); 132 | } 133 | }, { 134 | key: 'goTo', 135 | value: function goTo(step) { 136 | var steps = this.state.steps; 137 | 138 | if (steps[step - 1]) { 139 | 140 | if (!this.props.___portal) { 141 | this.___portal.setState({ step: step }); 142 | } 143 | 144 | this.setState({ step: step }); 145 | } 146 | } 147 | }, { 148 | key: 'show', 149 | value: function show() { 150 | if (!this.props.___portal) { 151 | this.___portal.setState({ show: true }); 152 | } 153 | 154 | this.setState({ show: true }); 155 | } 156 | }, { 157 | key: 'hide', 158 | value: function hide() { 159 | 160 | if (!this.props.___portal) { 161 | this.___portal.setState({ show: false }); 162 | } 163 | 164 | this.setState({ show: false }); 165 | 166 | var _props = this.props; 167 | var id = _props.id; 168 | var frequencyCap = _props.frequencyCap; 169 | var steps = _props.steps; 170 | 171 | var storageId = '___walkthru___.' + id + '.' + frequencyCap + '.' + steps.length; 172 | 173 | localStorage.setItem(storageId, -1); 174 | } 175 | }, { 176 | key: 'destroy', 177 | value: function destroy() { 178 | var _props2 = this.props; 179 | var renderer = _props2.renderer; 180 | var ___wrapper = _props2.___wrapper; 181 | var ___portal = _props2.___portal; 182 | 183 | if (!___portal) { 184 | return this.___portal.destroy(); 185 | } 186 | 187 | try { 188 | renderer.unmountComponentAtNode(___wrapper, this); 189 | } catch (e) {} finally { 190 | document.body.removeChild(this.props.___wrapper); 191 | } 192 | } 193 | }, { 194 | key: 'componentWillUnmount', 195 | value: function componentWillUnmount() { 196 | if (!this.props.___portal) { 197 | this.___portal.destroy(); 198 | } else { 199 | window.removeEventListener('resize', this.___resizeHandler); 200 | } 201 | } 202 | }, { 203 | key: 'componentWillMount', 204 | value: function componentWillMount() { 205 | if (!this.props.___portal && this.checkFrequency()) { 206 | this.___portal = WalkThru.create(this.props); 207 | } else { 208 | this.___resizeHandler = (function () { 209 | this.forceUpdate(); 210 | }).bind(this); 211 | 212 | window.addEventListener('resize', this.___resizeHandler); 213 | } 214 | } 215 | }, { 216 | key: 'render', 217 | value: function render() { 218 | var _props3 = this.props; 219 | var ___portal = _props3.___portal; 220 | var theme = _props3.theme; 221 | var _state2 = this.state; 222 | var show = _state2.show; 223 | var step = _state2.step; 224 | var steps = _state2.steps; 225 | 226 | if (!___portal) return null; 227 | if (steps.length === 0) return null; 228 | 229 | var current = steps[step - 1]; 230 | 231 | return _react2['default'].createElement( 232 | _Wrapper2['default'], 233 | { show: show }, 234 | _react2['default'].createElement(_Step2['default'], { 235 | theme: this.theme, 236 | data: current, 237 | steps: steps, 238 | step: step, 239 | hide: this.hide.bind(this), 240 | next: this.next.bind(this), 241 | goTo: this.goTo.bind(this) 242 | }) 243 | ); 244 | } 245 | }]); 246 | 247 | return WalkThru; 248 | })(_react.Component); 249 | 250 | exports['default'] = WalkThru; 251 | 252 | WalkThru.defaultProps = { 253 | renderer: _react2['default'], 254 | show: true, 255 | theme: {}, 256 | noStyle: false, 257 | steps: [] 258 | }; 259 | 260 | var RENDERER_DEFINITION = { 261 | render: _react.PropTypes.func.isRequired 262 | }; 263 | 264 | var STEP_DEFINITION = _react.PropTypes.shape({ 265 | position: _react.PropTypes.oneOfType([_react.PropTypes.shape({ 266 | top: _react.PropTypes.number, 267 | left: _react.PropTypes.number 268 | }), _react.PropTypes.instanceOf(HTMLElement), _react.PropTypes.func]).isRequired, 269 | offset: _react.PropTypes.shape({ 270 | top: _react.PropTypes.number, 271 | left: _react.PropTypes.number 272 | }), 273 | endDate: _react.PropTypes.instanceOf(Date), 274 | startDate: _react.PropTypes.instanceOf(Date), 275 | content: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.element]).isRequired 276 | }); 277 | 278 | var THEME_DEFINITION = { 279 | arrow: _react.PropTypes.object, 280 | content: _react.PropTypes.object, 281 | footer: _react.PropTypes.object, 282 | button: _react.PropTypes.object, 283 | fullButton: _react.PropTypes.object, 284 | navText: _react.PropTypes.object, 285 | nav: _react.PropTypes.object, 286 | dots: _react.PropTypes.object, 287 | dot: _react.PropTypes.object, 288 | dotActive: _react.PropTypes.object, 289 | dotPast: _react.PropTypes.object 290 | }; 291 | 292 | WalkThru.propTypes = { 293 | id: _react.PropTypes.string, 294 | frequencyCap: function frequencyCap(props, propName, componentName) { 295 | if (props.hasOwnProperty('frequencyCap') && !props.hasOwnProperty('id')) { 296 | return new Error('You specified frequencyCap to a step in ' + componentName + ' but didn\'t specify an id.'); 297 | } 298 | }, 299 | renderer: _react.PropTypes.shape(RENDERER_DEFINITION), 300 | steps: _react.PropTypes.arrayOf(STEP_DEFINITION), 301 | show: _react.PropTypes.bool, 302 | theme: _react.PropTypes.shape(THEME_DEFINITION), 303 | noStyle: _react.PropTypes.bool 304 | }; 305 | module.exports = exports['default']; -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.1.1" 7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 8 | 9 | acorn@^5.2.1: 10 | version "5.7.3" 11 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" 12 | 13 | align-text@^0.1.1, align-text@^0.1.3: 14 | version "0.1.4" 15 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 16 | dependencies: 17 | kind-of "^3.0.2" 18 | longest "^1.0.1" 19 | repeat-string "^1.5.2" 20 | 21 | alter@~0.2.0: 22 | version "0.2.0" 23 | resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd" 24 | dependencies: 25 | stable "~0.1.3" 26 | 27 | amdefine@>=0.0.4: 28 | version "1.0.1" 29 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 30 | 31 | ansi-regex@^2.0.0: 32 | version "2.1.1" 33 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 34 | 35 | ansi-regex@^3.0.0: 36 | version "3.0.0" 37 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 38 | 39 | ansi-styles@^2.2.1: 40 | version "2.2.1" 41 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 42 | 43 | anymatch@^1.3.0: 44 | version "1.3.2" 45 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 46 | dependencies: 47 | micromatch "^2.1.5" 48 | normalize-path "^2.0.0" 49 | 50 | aproba@^1.0.3: 51 | version "1.2.0" 52 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 53 | 54 | are-we-there-yet@~1.1.2: 55 | version "1.1.5" 56 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 57 | dependencies: 58 | delegates "^1.0.0" 59 | readable-stream "^2.0.6" 60 | 61 | arr-diff@^2.0.0: 62 | version "2.0.0" 63 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 64 | dependencies: 65 | arr-flatten "^1.0.1" 66 | 67 | arr-diff@^4.0.0: 68 | version "4.0.0" 69 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 70 | 71 | arr-flatten@^1.0.1, arr-flatten@^1.1.0: 72 | version "1.1.0" 73 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 74 | 75 | arr-union@^3.1.0: 76 | version "3.1.0" 77 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 78 | 79 | array-unique@^0.2.1: 80 | version "0.2.1" 81 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 82 | 83 | array-unique@^0.3.2: 84 | version "0.3.2" 85 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 86 | 87 | assign-symbols@^1.0.0: 88 | version "1.0.0" 89 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 90 | 91 | ast-traverse@~0.1.1: 92 | version "0.1.1" 93 | resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6" 94 | 95 | ast-types@0.8.12: 96 | version "0.8.12" 97 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc" 98 | 99 | ast-types@0.8.15: 100 | version "0.8.15" 101 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52" 102 | 103 | ast-types@0.9.6: 104 | version "0.9.6" 105 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" 106 | 107 | async-each@^1.0.0: 108 | version "1.0.1" 109 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 110 | 111 | atob@^2.1.1: 112 | version "2.1.2" 113 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 114 | 115 | babel-core@^5.6.21: 116 | version "5.8.38" 117 | resolved "http://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558" 118 | dependencies: 119 | babel-plugin-constant-folding "^1.0.1" 120 | babel-plugin-dead-code-elimination "^1.0.2" 121 | babel-plugin-eval "^1.0.1" 122 | babel-plugin-inline-environment-variables "^1.0.1" 123 | babel-plugin-jscript "^1.0.4" 124 | babel-plugin-member-expression-literals "^1.0.1" 125 | babel-plugin-property-literals "^1.0.1" 126 | babel-plugin-proto-to-assign "^1.0.3" 127 | babel-plugin-react-constant-elements "^1.0.3" 128 | babel-plugin-react-display-name "^1.0.3" 129 | babel-plugin-remove-console "^1.0.1" 130 | babel-plugin-remove-debugger "^1.0.1" 131 | babel-plugin-runtime "^1.0.7" 132 | babel-plugin-undeclared-variables-check "^1.0.2" 133 | babel-plugin-undefined-to-void "^1.1.6" 134 | babylon "^5.8.38" 135 | bluebird "^2.9.33" 136 | chalk "^1.0.0" 137 | convert-source-map "^1.1.0" 138 | core-js "^1.0.0" 139 | debug "^2.1.1" 140 | detect-indent "^3.0.0" 141 | esutils "^2.0.0" 142 | fs-readdir-recursive "^0.1.0" 143 | globals "^6.4.0" 144 | home-or-tmp "^1.0.0" 145 | is-integer "^1.0.4" 146 | js-tokens "1.0.1" 147 | json5 "^0.4.0" 148 | lodash "^3.10.0" 149 | minimatch "^2.0.3" 150 | output-file-sync "^1.1.0" 151 | path-exists "^1.0.0" 152 | path-is-absolute "^1.0.0" 153 | private "^0.1.6" 154 | regenerator "0.8.40" 155 | regexpu "^1.3.0" 156 | repeating "^1.1.2" 157 | resolve "^1.1.6" 158 | shebang-regex "^1.0.0" 159 | slash "^1.0.0" 160 | source-map "^0.5.0" 161 | source-map-support "^0.2.10" 162 | to-fast-properties "^1.0.0" 163 | trim-right "^1.0.0" 164 | try-resolve "^1.0.0" 165 | 166 | babel-plugin-constant-folding@^1.0.1: 167 | version "1.0.1" 168 | resolved "https://registry.yarnpkg.com/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz#8361d364c98e449c3692bdba51eff0844290aa8e" 169 | 170 | babel-plugin-dead-code-elimination@^1.0.2: 171 | version "1.0.2" 172 | resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65" 173 | 174 | babel-plugin-eval@^1.0.1: 175 | version "1.0.1" 176 | resolved "https://registry.yarnpkg.com/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz#a2faed25ce6be69ade4bfec263f70169195950da" 177 | 178 | babel-plugin-inline-environment-variables@^1.0.1: 179 | version "1.0.1" 180 | resolved "https://registry.yarnpkg.com/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz#1f58ce91207ad6a826a8bf645fafe68ff5fe3ffe" 181 | 182 | babel-plugin-jscript@^1.0.4: 183 | version "1.0.4" 184 | resolved "https://registry.yarnpkg.com/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz#8f342c38276e87a47d5fa0a8bd3d5eb6ccad8fcc" 185 | 186 | babel-plugin-member-expression-literals@^1.0.1: 187 | version "1.0.1" 188 | resolved "https://registry.yarnpkg.com/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz#cc5edb0faa8dc927170e74d6d1c02440021624d3" 189 | 190 | babel-plugin-property-literals@^1.0.1: 191 | version "1.0.1" 192 | resolved "https://registry.yarnpkg.com/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz#0252301900192980b1c118efea48ce93aab83336" 193 | 194 | babel-plugin-proto-to-assign@^1.0.3: 195 | version "1.0.4" 196 | resolved "https://registry.yarnpkg.com/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz#c49e7afd02f577bc4da05ea2df002250cf7cd123" 197 | dependencies: 198 | lodash "^3.9.3" 199 | 200 | babel-plugin-react-constant-elements@^1.0.3: 201 | version "1.0.3" 202 | resolved "https://registry.yarnpkg.com/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz#946736e8378429cbc349dcff62f51c143b34e35a" 203 | 204 | babel-plugin-react-display-name@^1.0.3: 205 | version "1.0.3" 206 | resolved "https://registry.yarnpkg.com/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz#754fe38926e8424a4e7b15ab6ea6139dee0514fc" 207 | 208 | babel-plugin-remove-console@^1.0.1: 209 | version "1.0.1" 210 | resolved "https://registry.yarnpkg.com/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz#d8f24556c3a05005d42aaaafd27787f53ff013a7" 211 | 212 | babel-plugin-remove-debugger@^1.0.1: 213 | version "1.0.1" 214 | resolved "https://registry.yarnpkg.com/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz#fd2ea3cd61a428ad1f3b9c89882ff4293e8c14c7" 215 | 216 | babel-plugin-runtime@^1.0.7: 217 | version "1.0.7" 218 | resolved "https://registry.yarnpkg.com/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz#bf7c7d966dd56ecd5c17fa1cb253c9acb7e54aaf" 219 | 220 | babel-plugin-undeclared-variables-check@^1.0.2: 221 | version "1.0.2" 222 | resolved "http://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz#5cf1aa539d813ff64e99641290af620965f65dee" 223 | dependencies: 224 | leven "^1.0.2" 225 | 226 | babel-plugin-undefined-to-void@^1.1.6: 227 | version "1.1.6" 228 | resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81" 229 | 230 | babel@^5.8.34: 231 | version "5.8.38" 232 | resolved "http://registry.npmjs.org/babel/-/babel-5.8.38.tgz#dfb087c22894917c576fb67ce9cf328d458629fb" 233 | dependencies: 234 | babel-core "^5.6.21" 235 | chokidar "^1.0.0" 236 | commander "^2.6.0" 237 | convert-source-map "^1.1.0" 238 | fs-readdir-recursive "^0.1.0" 239 | glob "^5.0.5" 240 | lodash "^3.2.0" 241 | output-file-sync "^1.1.0" 242 | path-exists "^1.0.0" 243 | path-is-absolute "^1.0.0" 244 | slash "^1.0.0" 245 | source-map "^0.5.0" 246 | 247 | babylon@^5.8.38: 248 | version "5.8.38" 249 | resolved "http://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" 250 | 251 | balanced-match@^1.0.0: 252 | version "1.0.0" 253 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 254 | 255 | base@^0.11.1: 256 | version "0.11.2" 257 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 258 | dependencies: 259 | cache-base "^1.0.1" 260 | class-utils "^0.3.5" 261 | component-emitter "^1.2.1" 262 | define-property "^1.0.0" 263 | isobject "^3.0.1" 264 | mixin-deep "^1.2.0" 265 | pascalcase "^0.1.1" 266 | 267 | binary-extensions@^1.0.0: 268 | version "1.12.0" 269 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" 270 | 271 | bluebird@^2.9.33: 272 | version "2.11.0" 273 | resolved "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" 274 | 275 | brace-expansion@^1.0.0, brace-expansion@^1.1.7: 276 | version "1.1.11" 277 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 278 | dependencies: 279 | balanced-match "^1.0.0" 280 | concat-map "0.0.1" 281 | 282 | braces@^1.8.2: 283 | version "1.8.5" 284 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 285 | dependencies: 286 | expand-range "^1.8.1" 287 | preserve "^0.2.0" 288 | repeat-element "^1.1.2" 289 | 290 | braces@^2.3.1: 291 | version "2.3.2" 292 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 293 | dependencies: 294 | arr-flatten "^1.1.0" 295 | array-unique "^0.3.2" 296 | extend-shallow "^2.0.1" 297 | fill-range "^4.0.0" 298 | isobject "^3.0.1" 299 | repeat-element "^1.1.2" 300 | snapdragon "^0.8.1" 301 | snapdragon-node "^2.0.1" 302 | split-string "^3.0.2" 303 | to-regex "^3.0.1" 304 | 305 | breakable@~1.0.0: 306 | version "1.0.0" 307 | resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" 308 | 309 | cache-base@^1.0.1: 310 | version "1.0.1" 311 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 312 | dependencies: 313 | collection-visit "^1.0.0" 314 | component-emitter "^1.2.1" 315 | get-value "^2.0.6" 316 | has-value "^1.0.0" 317 | isobject "^3.0.1" 318 | set-value "^2.0.0" 319 | to-object-path "^0.3.0" 320 | union-value "^1.0.0" 321 | unset-value "^1.0.0" 322 | 323 | camelcase@^1.2.1: 324 | version "1.2.1" 325 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 326 | 327 | center-align@^0.1.1: 328 | version "0.1.3" 329 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 330 | dependencies: 331 | align-text "^0.1.3" 332 | lazy-cache "^1.0.3" 333 | 334 | chalk@^1.0.0: 335 | version "1.1.3" 336 | resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 337 | dependencies: 338 | ansi-styles "^2.2.1" 339 | escape-string-regexp "^1.0.2" 340 | has-ansi "^2.0.0" 341 | strip-ansi "^3.0.0" 342 | supports-color "^2.0.0" 343 | 344 | chokidar@^1.0.0: 345 | version "1.7.0" 346 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 347 | dependencies: 348 | anymatch "^1.3.0" 349 | async-each "^1.0.0" 350 | glob-parent "^2.0.0" 351 | inherits "^2.0.1" 352 | is-binary-path "^1.0.0" 353 | is-glob "^2.0.0" 354 | path-is-absolute "^1.0.0" 355 | readdirp "^2.0.0" 356 | optionalDependencies: 357 | fsevents "^1.0.0" 358 | 359 | chownr@^1.0.1: 360 | version "1.1.1" 361 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 362 | 363 | class-utils@^0.3.5: 364 | version "0.3.6" 365 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 366 | dependencies: 367 | arr-union "^3.1.0" 368 | define-property "^0.2.5" 369 | isobject "^3.0.0" 370 | static-extend "^0.1.1" 371 | 372 | cliui@^2.1.0: 373 | version "2.1.0" 374 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 375 | dependencies: 376 | center-align "^0.1.1" 377 | right-align "^0.1.1" 378 | wordwrap "0.0.2" 379 | 380 | code-point-at@^1.0.0: 381 | version "1.1.0" 382 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 383 | 384 | collection-visit@^1.0.0: 385 | version "1.0.0" 386 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 387 | dependencies: 388 | map-visit "^1.0.0" 389 | object-visit "^1.0.0" 390 | 391 | commander@^2.5.0, commander@^2.6.0: 392 | version "2.18.0" 393 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" 394 | 395 | commoner@~0.10.3: 396 | version "0.10.8" 397 | resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" 398 | dependencies: 399 | commander "^2.5.0" 400 | detective "^4.3.1" 401 | glob "^5.0.15" 402 | graceful-fs "^4.1.2" 403 | iconv-lite "^0.4.5" 404 | mkdirp "^0.5.0" 405 | private "^0.1.6" 406 | q "^1.1.2" 407 | recast "^0.11.17" 408 | 409 | component-emitter@^1.2.1: 410 | version "1.2.1" 411 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 412 | 413 | concat-map@0.0.1: 414 | version "0.0.1" 415 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 416 | 417 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 418 | version "1.1.0" 419 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 420 | 421 | convert-source-map@^1.1.0: 422 | version "1.6.0" 423 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 424 | dependencies: 425 | safe-buffer "~5.1.1" 426 | 427 | copy-descriptor@^0.1.0: 428 | version "0.1.1" 429 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 430 | 431 | core-js@^1.0.0: 432 | version "1.2.7" 433 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 434 | 435 | core-util-is@~1.0.0: 436 | version "1.0.2" 437 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 438 | 439 | debug@^2.1.1, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: 440 | version "2.6.9" 441 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 442 | dependencies: 443 | ms "2.0.0" 444 | 445 | decamelize@^1.0.0: 446 | version "1.2.0" 447 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 448 | 449 | decode-uri-component@^0.2.0: 450 | version "0.2.0" 451 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 452 | 453 | deep-extend@^0.6.0: 454 | version "0.6.0" 455 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 456 | 457 | define-property@^0.2.5: 458 | version "0.2.5" 459 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 460 | dependencies: 461 | is-descriptor "^0.1.0" 462 | 463 | define-property@^1.0.0: 464 | version "1.0.0" 465 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 466 | dependencies: 467 | is-descriptor "^1.0.0" 468 | 469 | define-property@^2.0.2: 470 | version "2.0.2" 471 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 472 | dependencies: 473 | is-descriptor "^1.0.2" 474 | isobject "^3.0.1" 475 | 476 | defined@^1.0.0: 477 | version "1.0.0" 478 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 479 | 480 | defs@~1.1.0: 481 | version "1.1.1" 482 | resolved "https://registry.yarnpkg.com/defs/-/defs-1.1.1.tgz#b22609f2c7a11ba7a3db116805c139b1caffa9d2" 483 | dependencies: 484 | alter "~0.2.0" 485 | ast-traverse "~0.1.1" 486 | breakable "~1.0.0" 487 | esprima-fb "~15001.1001.0-dev-harmony-fb" 488 | simple-fmt "~0.1.0" 489 | simple-is "~0.2.0" 490 | stringmap "~0.2.2" 491 | stringset "~0.2.1" 492 | tryor "~0.1.2" 493 | yargs "~3.27.0" 494 | 495 | delegates@^1.0.0: 496 | version "1.0.0" 497 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 498 | 499 | detect-indent@^3.0.0: 500 | version "3.0.1" 501 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" 502 | dependencies: 503 | get-stdin "^4.0.1" 504 | minimist "^1.1.0" 505 | repeating "^1.1.0" 506 | 507 | detect-libc@^1.0.2: 508 | version "1.0.3" 509 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 510 | 511 | detective@^4.3.1: 512 | version "4.7.1" 513 | resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" 514 | dependencies: 515 | acorn "^5.2.1" 516 | defined "^1.0.0" 517 | 518 | escape-string-regexp@^1.0.2: 519 | version "1.0.5" 520 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 521 | 522 | esprima-fb@~15001.1001.0-dev-harmony-fb: 523 | version "15001.1001.0-dev-harmony-fb" 524 | resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" 525 | 526 | esprima@^2.6.0: 527 | version "2.7.3" 528 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 529 | 530 | esprima@~3.1.0: 531 | version "3.1.3" 532 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 533 | 534 | esutils@^2.0.0: 535 | version "2.0.2" 536 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 537 | 538 | expand-brackets@^0.1.4: 539 | version "0.1.5" 540 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 541 | dependencies: 542 | is-posix-bracket "^0.1.0" 543 | 544 | expand-brackets@^2.1.4: 545 | version "2.1.4" 546 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 547 | dependencies: 548 | debug "^2.3.3" 549 | define-property "^0.2.5" 550 | extend-shallow "^2.0.1" 551 | posix-character-classes "^0.1.0" 552 | regex-not "^1.0.0" 553 | snapdragon "^0.8.1" 554 | to-regex "^3.0.1" 555 | 556 | expand-range@^1.8.1: 557 | version "1.8.2" 558 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 559 | dependencies: 560 | fill-range "^2.1.0" 561 | 562 | extend-shallow@^2.0.1: 563 | version "2.0.1" 564 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 565 | dependencies: 566 | is-extendable "^0.1.0" 567 | 568 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 569 | version "3.0.2" 570 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 571 | dependencies: 572 | assign-symbols "^1.0.0" 573 | is-extendable "^1.0.1" 574 | 575 | extglob@^0.3.1: 576 | version "0.3.2" 577 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 578 | dependencies: 579 | is-extglob "^1.0.0" 580 | 581 | extglob@^2.0.4: 582 | version "2.0.4" 583 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 584 | dependencies: 585 | array-unique "^0.3.2" 586 | define-property "^1.0.0" 587 | expand-brackets "^2.1.4" 588 | extend-shallow "^2.0.1" 589 | fragment-cache "^0.2.1" 590 | regex-not "^1.0.0" 591 | snapdragon "^0.8.1" 592 | to-regex "^3.0.1" 593 | 594 | filename-regex@^2.0.0: 595 | version "2.0.1" 596 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 597 | 598 | fill-range@^2.1.0: 599 | version "2.2.4" 600 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" 601 | dependencies: 602 | is-number "^2.1.0" 603 | isobject "^2.0.0" 604 | randomatic "^3.0.0" 605 | repeat-element "^1.1.2" 606 | repeat-string "^1.5.2" 607 | 608 | fill-range@^4.0.0: 609 | version "4.0.0" 610 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 611 | dependencies: 612 | extend-shallow "^2.0.1" 613 | is-number "^3.0.0" 614 | repeat-string "^1.6.1" 615 | to-regex-range "^2.1.0" 616 | 617 | for-in@^1.0.1, for-in@^1.0.2: 618 | version "1.0.2" 619 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 620 | 621 | for-own@^0.1.4: 622 | version "0.1.5" 623 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 624 | dependencies: 625 | for-in "^1.0.1" 626 | 627 | fragment-cache@^0.2.1: 628 | version "0.2.1" 629 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 630 | dependencies: 631 | map-cache "^0.2.2" 632 | 633 | fs-minipass@^1.2.5: 634 | version "1.2.5" 635 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 636 | dependencies: 637 | minipass "^2.2.1" 638 | 639 | fs-readdir-recursive@^0.1.0: 640 | version "0.1.2" 641 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" 642 | 643 | fs.realpath@^1.0.0: 644 | version "1.0.0" 645 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 646 | 647 | fsevents@^1.0.0: 648 | version "1.2.4" 649 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" 650 | dependencies: 651 | nan "^2.9.2" 652 | node-pre-gyp "^0.10.0" 653 | 654 | gauge@~2.7.3: 655 | version "2.7.4" 656 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 657 | dependencies: 658 | aproba "^1.0.3" 659 | console-control-strings "^1.0.0" 660 | has-unicode "^2.0.0" 661 | object-assign "^4.1.0" 662 | signal-exit "^3.0.0" 663 | string-width "^1.0.1" 664 | strip-ansi "^3.0.1" 665 | wide-align "^1.1.0" 666 | 667 | get-stdin@^4.0.1: 668 | version "4.0.1" 669 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 670 | 671 | get-value@^2.0.3, get-value@^2.0.6: 672 | version "2.0.6" 673 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 674 | 675 | glob-base@^0.3.0: 676 | version "0.3.0" 677 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 678 | dependencies: 679 | glob-parent "^2.0.0" 680 | is-glob "^2.0.0" 681 | 682 | glob-parent@^2.0.0: 683 | version "2.0.0" 684 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 685 | dependencies: 686 | is-glob "^2.0.0" 687 | 688 | glob@^5.0.15, glob@^5.0.5: 689 | version "5.0.15" 690 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 691 | dependencies: 692 | inflight "^1.0.4" 693 | inherits "2" 694 | minimatch "2 || 3" 695 | once "^1.3.0" 696 | path-is-absolute "^1.0.0" 697 | 698 | glob@^7.0.5: 699 | version "7.1.3" 700 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 701 | dependencies: 702 | fs.realpath "^1.0.0" 703 | inflight "^1.0.4" 704 | inherits "2" 705 | minimatch "^3.0.4" 706 | once "^1.3.0" 707 | path-is-absolute "^1.0.0" 708 | 709 | globals@^6.4.0: 710 | version "6.4.1" 711 | resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f" 712 | 713 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: 714 | version "4.1.11" 715 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 716 | 717 | has-ansi@^2.0.0: 718 | version "2.0.0" 719 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 720 | dependencies: 721 | ansi-regex "^2.0.0" 722 | 723 | has-unicode@^2.0.0: 724 | version "2.0.1" 725 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 726 | 727 | has-value@^0.3.1: 728 | version "0.3.1" 729 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 730 | dependencies: 731 | get-value "^2.0.3" 732 | has-values "^0.1.4" 733 | isobject "^2.0.0" 734 | 735 | has-value@^1.0.0: 736 | version "1.0.0" 737 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 738 | dependencies: 739 | get-value "^2.0.6" 740 | has-values "^1.0.0" 741 | isobject "^3.0.0" 742 | 743 | has-values@^0.1.4: 744 | version "0.1.4" 745 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 746 | 747 | has-values@^1.0.0: 748 | version "1.0.0" 749 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 750 | dependencies: 751 | is-number "^3.0.0" 752 | kind-of "^4.0.0" 753 | 754 | home-or-tmp@^1.0.0: 755 | version "1.0.0" 756 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985" 757 | dependencies: 758 | os-tmpdir "^1.0.1" 759 | user-home "^1.1.1" 760 | 761 | iconv-lite@^0.4.4, iconv-lite@^0.4.5: 762 | version "0.4.24" 763 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 764 | dependencies: 765 | safer-buffer ">= 2.1.2 < 3" 766 | 767 | ignore-walk@^3.0.1: 768 | version "3.0.1" 769 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 770 | dependencies: 771 | minimatch "^3.0.4" 772 | 773 | inflight@^1.0.4: 774 | version "1.0.6" 775 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 776 | dependencies: 777 | once "^1.3.0" 778 | wrappy "1" 779 | 780 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 781 | version "2.0.3" 782 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 783 | 784 | ini@~1.3.0: 785 | version "1.3.5" 786 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 787 | 788 | invert-kv@^1.0.0: 789 | version "1.0.0" 790 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 791 | 792 | is-accessor-descriptor@^0.1.6: 793 | version "0.1.6" 794 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 795 | dependencies: 796 | kind-of "^3.0.2" 797 | 798 | is-accessor-descriptor@^1.0.0: 799 | version "1.0.0" 800 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 801 | dependencies: 802 | kind-of "^6.0.0" 803 | 804 | is-binary-path@^1.0.0: 805 | version "1.0.1" 806 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 807 | dependencies: 808 | binary-extensions "^1.0.0" 809 | 810 | is-buffer@^1.1.5: 811 | version "1.1.6" 812 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 813 | 814 | is-data-descriptor@^0.1.4: 815 | version "0.1.4" 816 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 817 | dependencies: 818 | kind-of "^3.0.2" 819 | 820 | is-data-descriptor@^1.0.0: 821 | version "1.0.0" 822 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 823 | dependencies: 824 | kind-of "^6.0.0" 825 | 826 | is-descriptor@^0.1.0: 827 | version "0.1.6" 828 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 829 | dependencies: 830 | is-accessor-descriptor "^0.1.6" 831 | is-data-descriptor "^0.1.4" 832 | kind-of "^5.0.0" 833 | 834 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 835 | version "1.0.2" 836 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 837 | dependencies: 838 | is-accessor-descriptor "^1.0.0" 839 | is-data-descriptor "^1.0.0" 840 | kind-of "^6.0.2" 841 | 842 | is-dotfile@^1.0.0: 843 | version "1.0.3" 844 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 845 | 846 | is-equal-shallow@^0.1.3: 847 | version "0.1.3" 848 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 849 | dependencies: 850 | is-primitive "^2.0.0" 851 | 852 | is-extendable@^0.1.0, is-extendable@^0.1.1: 853 | version "0.1.1" 854 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 855 | 856 | is-extendable@^1.0.1: 857 | version "1.0.1" 858 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 859 | dependencies: 860 | is-plain-object "^2.0.4" 861 | 862 | is-extglob@^1.0.0: 863 | version "1.0.0" 864 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 865 | 866 | is-finite@^1.0.0: 867 | version "1.0.2" 868 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 869 | dependencies: 870 | number-is-nan "^1.0.0" 871 | 872 | is-fullwidth-code-point@^1.0.0: 873 | version "1.0.0" 874 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 875 | dependencies: 876 | number-is-nan "^1.0.0" 877 | 878 | is-fullwidth-code-point@^2.0.0: 879 | version "2.0.0" 880 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 881 | 882 | is-glob@^2.0.0, is-glob@^2.0.1: 883 | version "2.0.1" 884 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 885 | dependencies: 886 | is-extglob "^1.0.0" 887 | 888 | is-integer@^1.0.4: 889 | version "1.0.7" 890 | resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c" 891 | dependencies: 892 | is-finite "^1.0.0" 893 | 894 | is-number@^2.1.0: 895 | version "2.1.0" 896 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 897 | dependencies: 898 | kind-of "^3.0.2" 899 | 900 | is-number@^3.0.0: 901 | version "3.0.0" 902 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 903 | dependencies: 904 | kind-of "^3.0.2" 905 | 906 | is-number@^4.0.0: 907 | version "4.0.0" 908 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" 909 | 910 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 911 | version "2.0.4" 912 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 913 | dependencies: 914 | isobject "^3.0.1" 915 | 916 | is-posix-bracket@^0.1.0: 917 | version "0.1.1" 918 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 919 | 920 | is-primitive@^2.0.0: 921 | version "2.0.0" 922 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 923 | 924 | is-windows@^1.0.2: 925 | version "1.0.2" 926 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 927 | 928 | isarray@1.0.0, isarray@~1.0.0: 929 | version "1.0.0" 930 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 931 | 932 | isobject@^2.0.0: 933 | version "2.1.0" 934 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 935 | dependencies: 936 | isarray "1.0.0" 937 | 938 | isobject@^3.0.0, isobject@^3.0.1: 939 | version "3.0.1" 940 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 941 | 942 | js-tokens@1.0.1: 943 | version "1.0.1" 944 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" 945 | 946 | "js-tokens@^3.0.0 || ^4.0.0": 947 | version "4.0.0" 948 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 949 | 950 | jsesc@~0.5.0: 951 | version "0.5.0" 952 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 953 | 954 | json5@^0.4.0: 955 | version "0.4.0" 956 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" 957 | 958 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 959 | version "3.2.2" 960 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 961 | dependencies: 962 | is-buffer "^1.1.5" 963 | 964 | kind-of@^4.0.0: 965 | version "4.0.0" 966 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 967 | dependencies: 968 | is-buffer "^1.1.5" 969 | 970 | kind-of@^5.0.0: 971 | version "5.1.0" 972 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 973 | 974 | kind-of@^6.0.0, kind-of@^6.0.2: 975 | version "6.0.2" 976 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 977 | 978 | lazy-cache@^1.0.3: 979 | version "1.0.4" 980 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 981 | 982 | lcid@^1.0.0: 983 | version "1.0.0" 984 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 985 | dependencies: 986 | invert-kv "^1.0.0" 987 | 988 | leven@^1.0.2: 989 | version "1.0.2" 990 | resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" 991 | 992 | lodash@^3.10.0, lodash@^3.2.0, lodash@^3.9.3: 993 | version "3.10.1" 994 | resolved "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" 995 | 996 | longest@^1.0.1: 997 | version "1.0.1" 998 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 999 | 1000 | loose-envify@^1.1.0, loose-envify@^1.3.1: 1001 | version "1.4.0" 1002 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1003 | dependencies: 1004 | js-tokens "^3.0.0 || ^4.0.0" 1005 | 1006 | map-cache@^0.2.2: 1007 | version "0.2.2" 1008 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1009 | 1010 | map-visit@^1.0.0: 1011 | version "1.0.0" 1012 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1013 | dependencies: 1014 | object-visit "^1.0.0" 1015 | 1016 | math-random@^1.0.1: 1017 | version "1.0.1" 1018 | resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" 1019 | 1020 | micromatch@^2.1.5: 1021 | version "2.3.11" 1022 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1023 | dependencies: 1024 | arr-diff "^2.0.0" 1025 | array-unique "^0.2.1" 1026 | braces "^1.8.2" 1027 | expand-brackets "^0.1.4" 1028 | extglob "^0.3.1" 1029 | filename-regex "^2.0.0" 1030 | is-extglob "^1.0.0" 1031 | is-glob "^2.0.1" 1032 | kind-of "^3.0.2" 1033 | normalize-path "^2.0.1" 1034 | object.omit "^2.0.0" 1035 | parse-glob "^3.0.4" 1036 | regex-cache "^0.4.2" 1037 | 1038 | micromatch@^3.1.10: 1039 | version "3.1.10" 1040 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 1041 | dependencies: 1042 | arr-diff "^4.0.0" 1043 | array-unique "^0.3.2" 1044 | braces "^2.3.1" 1045 | define-property "^2.0.2" 1046 | extend-shallow "^3.0.2" 1047 | extglob "^2.0.4" 1048 | fragment-cache "^0.2.1" 1049 | kind-of "^6.0.2" 1050 | nanomatch "^1.2.9" 1051 | object.pick "^1.3.0" 1052 | regex-not "^1.0.0" 1053 | snapdragon "^0.8.1" 1054 | to-regex "^3.0.2" 1055 | 1056 | "minimatch@2 || 3", minimatch@^3.0.4: 1057 | version "3.0.4" 1058 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1059 | dependencies: 1060 | brace-expansion "^1.1.7" 1061 | 1062 | minimatch@^2.0.3: 1063 | version "2.0.10" 1064 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" 1065 | dependencies: 1066 | brace-expansion "^1.0.0" 1067 | 1068 | minimist@0.0.8: 1069 | version "0.0.8" 1070 | resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1071 | 1072 | minimist@^1.1.0, minimist@^1.2.0: 1073 | version "1.2.0" 1074 | resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1075 | 1076 | minipass@^2.2.1, minipass@^2.3.3: 1077 | version "2.3.4" 1078 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" 1079 | dependencies: 1080 | safe-buffer "^5.1.2" 1081 | yallist "^3.0.0" 1082 | 1083 | minizlib@^1.1.0: 1084 | version "1.1.0" 1085 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" 1086 | dependencies: 1087 | minipass "^2.2.1" 1088 | 1089 | mixin-deep@^1.2.0: 1090 | version "1.3.1" 1091 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 1092 | dependencies: 1093 | for-in "^1.0.2" 1094 | is-extendable "^1.0.1" 1095 | 1096 | mkdirp@^0.5.0, mkdirp@^0.5.1: 1097 | version "0.5.1" 1098 | resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1099 | dependencies: 1100 | minimist "0.0.8" 1101 | 1102 | ms@2.0.0: 1103 | version "2.0.0" 1104 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1105 | 1106 | nan@^2.9.2: 1107 | version "2.11.0" 1108 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" 1109 | 1110 | nanomatch@^1.2.9: 1111 | version "1.2.13" 1112 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 1113 | dependencies: 1114 | arr-diff "^4.0.0" 1115 | array-unique "^0.3.2" 1116 | define-property "^2.0.2" 1117 | extend-shallow "^3.0.2" 1118 | fragment-cache "^0.2.1" 1119 | is-windows "^1.0.2" 1120 | kind-of "^6.0.2" 1121 | object.pick "^1.3.0" 1122 | regex-not "^1.0.0" 1123 | snapdragon "^0.8.1" 1124 | to-regex "^3.0.1" 1125 | 1126 | needle@^2.2.1: 1127 | version "2.2.3" 1128 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.3.tgz#c1b04da378cd634d8befe2de965dc2cfb0fd65ca" 1129 | dependencies: 1130 | debug "^2.1.2" 1131 | iconv-lite "^0.4.4" 1132 | sax "^1.2.4" 1133 | 1134 | node-pre-gyp@^0.10.0: 1135 | version "0.10.3" 1136 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" 1137 | dependencies: 1138 | detect-libc "^1.0.2" 1139 | mkdirp "^0.5.1" 1140 | needle "^2.2.1" 1141 | nopt "^4.0.1" 1142 | npm-packlist "^1.1.6" 1143 | npmlog "^4.0.2" 1144 | rc "^1.2.7" 1145 | rimraf "^2.6.1" 1146 | semver "^5.3.0" 1147 | tar "^4" 1148 | 1149 | nopt@^4.0.1: 1150 | version "4.0.1" 1151 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1152 | dependencies: 1153 | abbrev "1" 1154 | osenv "^0.1.4" 1155 | 1156 | normalize-path@^2.0.0, normalize-path@^2.0.1: 1157 | version "2.1.1" 1158 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1159 | dependencies: 1160 | remove-trailing-separator "^1.0.1" 1161 | 1162 | npm-bundled@^1.0.1: 1163 | version "1.0.5" 1164 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" 1165 | 1166 | npm-packlist@^1.1.6: 1167 | version "1.1.11" 1168 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" 1169 | dependencies: 1170 | ignore-walk "^3.0.1" 1171 | npm-bundled "^1.0.1" 1172 | 1173 | npmlog@^4.0.2: 1174 | version "4.1.2" 1175 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1176 | dependencies: 1177 | are-we-there-yet "~1.1.2" 1178 | console-control-strings "~1.1.0" 1179 | gauge "~2.7.3" 1180 | set-blocking "~2.0.0" 1181 | 1182 | number-is-nan@^1.0.0: 1183 | version "1.0.1" 1184 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1185 | 1186 | object-assign@^4.1.0, object-assign@^4.1.1: 1187 | version "4.1.1" 1188 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1189 | 1190 | object-copy@^0.1.0: 1191 | version "0.1.0" 1192 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 1193 | dependencies: 1194 | copy-descriptor "^0.1.0" 1195 | define-property "^0.2.5" 1196 | kind-of "^3.0.3" 1197 | 1198 | object-visit@^1.0.0: 1199 | version "1.0.1" 1200 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 1201 | dependencies: 1202 | isobject "^3.0.0" 1203 | 1204 | object.omit@^2.0.0: 1205 | version "2.0.1" 1206 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1207 | dependencies: 1208 | for-own "^0.1.4" 1209 | is-extendable "^0.1.1" 1210 | 1211 | object.pick@^1.3.0: 1212 | version "1.3.0" 1213 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 1214 | dependencies: 1215 | isobject "^3.0.1" 1216 | 1217 | once@^1.3.0: 1218 | version "1.4.0" 1219 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1220 | dependencies: 1221 | wrappy "1" 1222 | 1223 | os-homedir@^1.0.0: 1224 | version "1.0.2" 1225 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1226 | 1227 | os-locale@^1.4.0: 1228 | version "1.4.0" 1229 | resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 1230 | dependencies: 1231 | lcid "^1.0.0" 1232 | 1233 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 1234 | version "1.0.2" 1235 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1236 | 1237 | osenv@^0.1.4: 1238 | version "0.1.5" 1239 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 1240 | dependencies: 1241 | os-homedir "^1.0.0" 1242 | os-tmpdir "^1.0.0" 1243 | 1244 | output-file-sync@^1.1.0: 1245 | version "1.1.2" 1246 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 1247 | dependencies: 1248 | graceful-fs "^4.1.4" 1249 | mkdirp "^0.5.1" 1250 | object-assign "^4.1.0" 1251 | 1252 | parse-glob@^3.0.4: 1253 | version "3.0.4" 1254 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1255 | dependencies: 1256 | glob-base "^0.3.0" 1257 | is-dotfile "^1.0.0" 1258 | is-extglob "^1.0.0" 1259 | is-glob "^2.0.0" 1260 | 1261 | pascalcase@^0.1.1: 1262 | version "0.1.1" 1263 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 1264 | 1265 | path-exists@^1.0.0: 1266 | version "1.0.0" 1267 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" 1268 | 1269 | path-is-absolute@^1.0.0: 1270 | version "1.0.1" 1271 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1272 | 1273 | path-parse@^1.0.5: 1274 | version "1.0.6" 1275 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1276 | 1277 | posix-character-classes@^0.1.0: 1278 | version "0.1.1" 1279 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 1280 | 1281 | preserve@^0.2.0: 1282 | version "0.2.0" 1283 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1284 | 1285 | private@^0.1.6, private@~0.1.5: 1286 | version "0.1.8" 1287 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 1288 | 1289 | process-nextick-args@~2.0.0: 1290 | version "2.0.0" 1291 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 1292 | 1293 | prop-types@^15.6.2: 1294 | version "15.6.2" 1295 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" 1296 | dependencies: 1297 | loose-envify "^1.3.1" 1298 | object-assign "^4.1.1" 1299 | 1300 | q@^1.1.2: 1301 | version "1.5.1" 1302 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" 1303 | 1304 | randomatic@^3.0.0: 1305 | version "3.1.0" 1306 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" 1307 | dependencies: 1308 | is-number "^4.0.0" 1309 | kind-of "^6.0.0" 1310 | math-random "^1.0.1" 1311 | 1312 | rc@^1.2.7: 1313 | version "1.2.8" 1314 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1315 | dependencies: 1316 | deep-extend "^0.6.0" 1317 | ini "~1.3.0" 1318 | minimist "^1.2.0" 1319 | strip-json-comments "~2.0.1" 1320 | 1321 | react@>=0.13.0: 1322 | version "16.5.1" 1323 | resolved "https://registry.yarnpkg.com/react/-/react-16.5.1.tgz#8cb8e9f8cdcb4bde41c9a138bfbf907e66132372" 1324 | dependencies: 1325 | loose-envify "^1.1.0" 1326 | object-assign "^4.1.1" 1327 | prop-types "^15.6.2" 1328 | schedule "^0.4.0" 1329 | 1330 | readable-stream@^2.0.2, readable-stream@^2.0.6: 1331 | version "2.3.6" 1332 | resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1333 | dependencies: 1334 | core-util-is "~1.0.0" 1335 | inherits "~2.0.3" 1336 | isarray "~1.0.0" 1337 | process-nextick-args "~2.0.0" 1338 | safe-buffer "~5.1.1" 1339 | string_decoder "~1.1.1" 1340 | util-deprecate "~1.0.1" 1341 | 1342 | readdirp@^2.0.0: 1343 | version "2.2.1" 1344 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 1345 | dependencies: 1346 | graceful-fs "^4.1.11" 1347 | micromatch "^3.1.10" 1348 | readable-stream "^2.0.2" 1349 | 1350 | recast@0.10.33: 1351 | version "0.10.33" 1352 | resolved "http://registry.npmjs.org/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" 1353 | dependencies: 1354 | ast-types "0.8.12" 1355 | esprima-fb "~15001.1001.0-dev-harmony-fb" 1356 | private "~0.1.5" 1357 | source-map "~0.5.0" 1358 | 1359 | recast@^0.10.10: 1360 | version "0.10.43" 1361 | resolved "http://registry.npmjs.org/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f" 1362 | dependencies: 1363 | ast-types "0.8.15" 1364 | esprima-fb "~15001.1001.0-dev-harmony-fb" 1365 | private "~0.1.5" 1366 | source-map "~0.5.0" 1367 | 1368 | recast@^0.11.17: 1369 | version "0.11.23" 1370 | resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" 1371 | dependencies: 1372 | ast-types "0.9.6" 1373 | esprima "~3.1.0" 1374 | private "~0.1.5" 1375 | source-map "~0.5.0" 1376 | 1377 | regenerate@^1.2.1: 1378 | version "1.4.0" 1379 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" 1380 | 1381 | regenerator@0.8.40: 1382 | version "0.8.40" 1383 | resolved "https://registry.yarnpkg.com/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8" 1384 | dependencies: 1385 | commoner "~0.10.3" 1386 | defs "~1.1.0" 1387 | esprima-fb "~15001.1001.0-dev-harmony-fb" 1388 | private "~0.1.5" 1389 | recast "0.10.33" 1390 | through "~2.3.8" 1391 | 1392 | regex-cache@^0.4.2: 1393 | version "0.4.4" 1394 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 1395 | dependencies: 1396 | is-equal-shallow "^0.1.3" 1397 | 1398 | regex-not@^1.0.0, regex-not@^1.0.2: 1399 | version "1.0.2" 1400 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 1401 | dependencies: 1402 | extend-shallow "^3.0.2" 1403 | safe-regex "^1.1.0" 1404 | 1405 | regexpu@^1.3.0: 1406 | version "1.3.0" 1407 | resolved "https://registry.yarnpkg.com/regexpu/-/regexpu-1.3.0.tgz#e534dc991a9e5846050c98de6d7dd4a55c9ea16d" 1408 | dependencies: 1409 | esprima "^2.6.0" 1410 | recast "^0.10.10" 1411 | regenerate "^1.2.1" 1412 | regjsgen "^0.2.0" 1413 | regjsparser "^0.1.4" 1414 | 1415 | regjsgen@^0.2.0: 1416 | version "0.2.0" 1417 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 1418 | 1419 | regjsparser@^0.1.4: 1420 | version "0.1.5" 1421 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 1422 | dependencies: 1423 | jsesc "~0.5.0" 1424 | 1425 | remove-trailing-separator@^1.0.1: 1426 | version "1.1.0" 1427 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1428 | 1429 | repeat-element@^1.1.2: 1430 | version "1.1.3" 1431 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 1432 | 1433 | repeat-string@^1.5.2, repeat-string@^1.6.1: 1434 | version "1.6.1" 1435 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1436 | 1437 | repeating@^1.1.0, repeating@^1.1.2: 1438 | version "1.1.3" 1439 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" 1440 | dependencies: 1441 | is-finite "^1.0.0" 1442 | 1443 | resolve-url@^0.2.1: 1444 | version "0.2.1" 1445 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 1446 | 1447 | resolve@^1.1.6: 1448 | version "1.8.1" 1449 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" 1450 | dependencies: 1451 | path-parse "^1.0.5" 1452 | 1453 | ret@~0.1.10: 1454 | version "0.1.15" 1455 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 1456 | 1457 | right-align@^0.1.1: 1458 | version "0.1.3" 1459 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 1460 | dependencies: 1461 | align-text "^0.1.1" 1462 | 1463 | rimraf@^2.6.1: 1464 | version "2.6.2" 1465 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1466 | dependencies: 1467 | glob "^7.0.5" 1468 | 1469 | safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1470 | version "5.1.2" 1471 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1472 | 1473 | safe-regex@^1.1.0: 1474 | version "1.1.0" 1475 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 1476 | dependencies: 1477 | ret "~0.1.10" 1478 | 1479 | "safer-buffer@>= 2.1.2 < 3": 1480 | version "2.1.2" 1481 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1482 | 1483 | sax@^1.2.4: 1484 | version "1.2.4" 1485 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 1486 | 1487 | schedule@^0.4.0: 1488 | version "0.4.0" 1489 | resolved "https://registry.yarnpkg.com/schedule/-/schedule-0.4.0.tgz#fa20cfd0bfbf91c47d02272fd7096780d3170bbb" 1490 | dependencies: 1491 | object-assign "^4.1.1" 1492 | 1493 | semver@^5.3.0: 1494 | version "5.5.1" 1495 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" 1496 | 1497 | set-blocking@~2.0.0: 1498 | version "2.0.0" 1499 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1500 | 1501 | set-value@^0.4.3: 1502 | version "0.4.3" 1503 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 1504 | dependencies: 1505 | extend-shallow "^2.0.1" 1506 | is-extendable "^0.1.1" 1507 | is-plain-object "^2.0.1" 1508 | to-object-path "^0.3.0" 1509 | 1510 | set-value@^2.0.0: 1511 | version "2.0.0" 1512 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 1513 | dependencies: 1514 | extend-shallow "^2.0.1" 1515 | is-extendable "^0.1.1" 1516 | is-plain-object "^2.0.3" 1517 | split-string "^3.0.1" 1518 | 1519 | shebang-regex@^1.0.0: 1520 | version "1.0.0" 1521 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1522 | 1523 | signal-exit@^3.0.0: 1524 | version "3.0.2" 1525 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1526 | 1527 | simple-fmt@~0.1.0: 1528 | version "0.1.0" 1529 | resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b" 1530 | 1531 | simple-is@~0.2.0: 1532 | version "0.2.0" 1533 | resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" 1534 | 1535 | slash@^1.0.0: 1536 | version "1.0.0" 1537 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 1538 | 1539 | snapdragon-node@^2.0.1: 1540 | version "2.1.1" 1541 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 1542 | dependencies: 1543 | define-property "^1.0.0" 1544 | isobject "^3.0.0" 1545 | snapdragon-util "^3.0.1" 1546 | 1547 | snapdragon-util@^3.0.1: 1548 | version "3.0.1" 1549 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 1550 | dependencies: 1551 | kind-of "^3.2.0" 1552 | 1553 | snapdragon@^0.8.1: 1554 | version "0.8.2" 1555 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 1556 | dependencies: 1557 | base "^0.11.1" 1558 | debug "^2.2.0" 1559 | define-property "^0.2.5" 1560 | extend-shallow "^2.0.1" 1561 | map-cache "^0.2.2" 1562 | source-map "^0.5.6" 1563 | source-map-resolve "^0.5.0" 1564 | use "^3.1.0" 1565 | 1566 | source-map-resolve@^0.5.0: 1567 | version "0.5.2" 1568 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 1569 | dependencies: 1570 | atob "^2.1.1" 1571 | decode-uri-component "^0.2.0" 1572 | resolve-url "^0.2.1" 1573 | source-map-url "^0.4.0" 1574 | urix "^0.1.0" 1575 | 1576 | source-map-support@^0.2.10: 1577 | version "0.2.10" 1578 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc" 1579 | dependencies: 1580 | source-map "0.1.32" 1581 | 1582 | source-map-url@^0.4.0: 1583 | version "0.4.0" 1584 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 1585 | 1586 | source-map@0.1.32: 1587 | version "0.1.32" 1588 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" 1589 | dependencies: 1590 | amdefine ">=0.0.4" 1591 | 1592 | source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.0: 1593 | version "0.5.7" 1594 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1595 | 1596 | split-string@^3.0.1, split-string@^3.0.2: 1597 | version "3.1.0" 1598 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 1599 | dependencies: 1600 | extend-shallow "^3.0.0" 1601 | 1602 | stable@~0.1.3: 1603 | version "0.1.8" 1604 | resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" 1605 | 1606 | static-extend@^0.1.1: 1607 | version "0.1.2" 1608 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 1609 | dependencies: 1610 | define-property "^0.2.5" 1611 | object-copy "^0.1.0" 1612 | 1613 | string-width@^1.0.1: 1614 | version "1.0.2" 1615 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1616 | dependencies: 1617 | code-point-at "^1.0.0" 1618 | is-fullwidth-code-point "^1.0.0" 1619 | strip-ansi "^3.0.0" 1620 | 1621 | "string-width@^1.0.2 || 2": 1622 | version "2.1.1" 1623 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1624 | dependencies: 1625 | is-fullwidth-code-point "^2.0.0" 1626 | strip-ansi "^4.0.0" 1627 | 1628 | string_decoder@~1.1.1: 1629 | version "1.1.1" 1630 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1631 | dependencies: 1632 | safe-buffer "~5.1.0" 1633 | 1634 | stringmap@~0.2.2: 1635 | version "0.2.2" 1636 | resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1" 1637 | 1638 | stringset@~0.2.1: 1639 | version "0.2.1" 1640 | resolved "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz#ef259c4e349344377fcd1c913dd2e848c9c042b5" 1641 | 1642 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1643 | version "3.0.1" 1644 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1645 | dependencies: 1646 | ansi-regex "^2.0.0" 1647 | 1648 | strip-ansi@^4.0.0: 1649 | version "4.0.0" 1650 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1651 | dependencies: 1652 | ansi-regex "^3.0.0" 1653 | 1654 | strip-json-comments@~2.0.1: 1655 | version "2.0.1" 1656 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1657 | 1658 | supports-color@^2.0.0: 1659 | version "2.0.0" 1660 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1661 | 1662 | tar@^4: 1663 | version "4.4.6" 1664 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" 1665 | dependencies: 1666 | chownr "^1.0.1" 1667 | fs-minipass "^1.2.5" 1668 | minipass "^2.3.3" 1669 | minizlib "^1.1.0" 1670 | mkdirp "^0.5.0" 1671 | safe-buffer "^5.1.2" 1672 | yallist "^3.0.2" 1673 | 1674 | through@~2.3.8: 1675 | version "2.3.8" 1676 | resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1677 | 1678 | to-fast-properties@^1.0.0: 1679 | version "1.0.3" 1680 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 1681 | 1682 | to-object-path@^0.3.0: 1683 | version "0.3.0" 1684 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 1685 | dependencies: 1686 | kind-of "^3.0.2" 1687 | 1688 | to-regex-range@^2.1.0: 1689 | version "2.1.1" 1690 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 1691 | dependencies: 1692 | is-number "^3.0.0" 1693 | repeat-string "^1.6.1" 1694 | 1695 | to-regex@^3.0.1, to-regex@^3.0.2: 1696 | version "3.0.2" 1697 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 1698 | dependencies: 1699 | define-property "^2.0.2" 1700 | extend-shallow "^3.0.2" 1701 | regex-not "^1.0.2" 1702 | safe-regex "^1.1.0" 1703 | 1704 | trim-right@^1.0.0: 1705 | version "1.0.1" 1706 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 1707 | 1708 | try-resolve@^1.0.0: 1709 | version "1.0.1" 1710 | resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" 1711 | 1712 | tryor@~0.1.2: 1713 | version "0.1.2" 1714 | resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" 1715 | 1716 | union-value@^1.0.0: 1717 | version "1.0.0" 1718 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 1719 | dependencies: 1720 | arr-union "^3.1.0" 1721 | get-value "^2.0.6" 1722 | is-extendable "^0.1.1" 1723 | set-value "^0.4.3" 1724 | 1725 | unset-value@^1.0.0: 1726 | version "1.0.0" 1727 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 1728 | dependencies: 1729 | has-value "^0.3.1" 1730 | isobject "^3.0.0" 1731 | 1732 | urix@^0.1.0: 1733 | version "0.1.0" 1734 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 1735 | 1736 | use@^3.1.0: 1737 | version "3.1.1" 1738 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 1739 | 1740 | user-home@^1.1.1: 1741 | version "1.1.1" 1742 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 1743 | 1744 | util-deprecate@~1.0.1: 1745 | version "1.0.2" 1746 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1747 | 1748 | wide-align@^1.1.0: 1749 | version "1.1.3" 1750 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1751 | dependencies: 1752 | string-width "^1.0.2 || 2" 1753 | 1754 | window-size@^0.1.2: 1755 | version "0.1.4" 1756 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" 1757 | 1758 | wordwrap@0.0.2: 1759 | version "0.0.2" 1760 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 1761 | 1762 | wrappy@1: 1763 | version "1.0.2" 1764 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1765 | 1766 | y18n@^3.2.0: 1767 | version "3.2.1" 1768 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 1769 | 1770 | yallist@^3.0.0, yallist@^3.0.2: 1771 | version "3.0.2" 1772 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" 1773 | 1774 | yargs@~3.27.0: 1775 | version "3.27.0" 1776 | resolved "http://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40" 1777 | dependencies: 1778 | camelcase "^1.2.1" 1779 | cliui "^2.1.0" 1780 | decamelize "^1.0.0" 1781 | os-locale "^1.4.0" 1782 | window-size "^0.1.2" 1783 | y18n "^3.2.0" 1784 | --------------------------------------------------------------------------------