diff --git a/. eslintignore b/. eslintignore index 8702977b5..c98508c3f 100644 --- a/. eslintignore +++ b/. eslintignore @@ -1,3 +1,3 @@ /node_modules/* /lib/* -/dist/* \ No newline at end of file +/dist/* diff --git a/.babelrc b/.babelrc index 8f3524fcd..afd61d7d5 100644 --- a/.babelrc +++ b/.babelrc @@ -4,9 +4,8 @@ "react" ], "plugins": [ - [ - "transform-object-rest-spread", - "add-module-exports" - ] + "date-fns", + "transform-object-rest-spread", + "transform-export-extensions" ] } \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 0a5c146d2..2fad680c8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -24,6 +24,5 @@ module.exports = { "node": true, "browser": true, "jest": true, - }, }; \ No newline at end of file diff --git a/README.md b/README.md index c9d48df02..c5461947a 100644 --- a/README.md +++ b/README.md @@ -5,23 +5,26 @@ [![npm](https://img.shields.io/npm/l/react-date-range.svg?style=flat-square)]() [![npm](https://img.shields.io/npm/dm/localeval.svg?style=flat-square)](https://www.npmjs.com/package/react-date-range) +⚠️ Warning: the current branch represents v2 pre-release version. See [v1 branch](https://github.com/Adphorus/react-date-range/tree/v1). -A React component for choosing dates and date ranges. Uses [Moment.js](http://momentjs.com/) for date operations. +A library agnostic React component for choosing dates and date ranges. Uses [date-fns](http://date-fns.org/) for date operations. +Stateless date operations, highly configurable, multiple range selection support, based on js dates. **Live Demo :** [http://adphorus.github.io/react-date-range](http://adphorus.github.io/react-date-range) -![](https://cdn.pbrd.co/images/1fjQlZzy.png) +![](https://raw.githubusercontent.com/Adphorus/react-date-range/next/demo/assets/src/ss.png) -## React Range Picker v2 is coming!💥 - -** Want to help us testing the next version? Let's go -[next branch](https://github.com/adphorus/react-date-range/tree/next)!** ## Getting Started ### Installation ``` -$ npm install --save react-date-range +yarn add react-date-range@next +``` + +If you don't use yarn +``` +$ npm install --save react-date-range@next ``` ## Usage @@ -29,17 +32,22 @@ $ npm install --save react-date-range ```javascript import React, { Component } from 'react'; import { Calendar } from 'react-date-range'; +// main style file +import 'react-date-range/dist/styles.css'; +// theme css file +import 'react-date-range/dist/theme/default.css'; + class MyComponent extends Component { handleSelect(date){ - console.log(date); // Momentjs object + console.log(date); // native Date object } render(){ return (
@@ -49,17 +57,6 @@ class MyComponent extends Component { ``` -###### Available Options (props) -* **date:** *(String, Moment.js object, Function)* - default: today -* **format:** *(String)* - default: DD/MM/YYY -* **firstDayOfWeek** *(Number)* - default: [moment.localeData().firstDayOfWeek()](http://momentjs.com/docs/#/i18n/locale-data/) -* **theme:** *(Object)* see [Demo's source](https://github.com/Adphorus/react-date-range/blob/master/demo/src/components/Main.js#L130) -* **onInit:** *(Function)* default: none -* **onChange:** *(Function)* default: none -* **minDate:** *(String, Moment.js object, Function)* default: none -* **maxDate:** *(String, Moment.js object, Function)* default: none -* **lang:** *(String, 'cn' - Chinese, 'jp' - Japanese, 'fr' - French, 'it' - Italian, 'de' - German, 'es' - Spanish, 'ru' - Russian, 'tr' - Turkish, 'pt' - Portuguese, 'fi' - Finnish)* default: none - ### Range Picker ```javascript import React, { Component } from 'react'; @@ -85,3 +82,42 @@ class MyComponent extends Component { } ``` +### Options (DateRange, Calendar) +Property | type | Default Value | Desctiption +-------------------------------------|-----------|------------------|----------------------------------------------------------------- +locale | object | enUS from locale | you can view full list from [here](https://github.com/Adphorus/react-date-range/tree/next/src/locale/index.js). Locales directly exported from [`date-fns/locales`](https://date-fns.org/v2.0.0-alpha.7/docs/I18n#supported-languages). +className | String | | wrapper classname +months | Number | 1 | rendered month count +showSelectionPreview | Boolean | true | show preview on focused/hovered dates +previewColor | String | | defines color for selection preview +shownDate | Date | | initial focus date +specialDays | Date[] | [] | defines special days +onPreviewChange | Func | | callback for preview changes. fn() +minDate | Date | | defines minimum date. Disabled earlier dates +maxDate | Date | | defines maximum date. Disabled later dates +showMonthArrow | Boolean | true | +ranges(Calendar) | *Object[] | [] | +onChange(Calendar) | Func | | callback function for date changes. fn(date: Date) +color(Calendar) | String | `#3d91ff` | defines color for selected date in Calendar +date(Calendar) | Date | | date value for Calendar +onChange(DateRange) | Func | | callback function for range changes. fn(changes). changes contains `startDate` and `endDate` under an object key of changed range +moveRangeOnFirstSelection(DateRange) | Boolean | false | move range on startDate selection. Otherwise endDate will replace with startDate. +dateDisplayFormat(DateRange) | String | `MMM D,YYYY` | selected range preview formatter. checkout [format option](https://date-fns.org/v2.0.0-alpha.7/docs/format) +> *shape of range: +> ```js +> { +> startDate: PropTypes.object, +> endDate: PropTypes.object, +> color: PropTypes.string, +> key: PropTypes.string, +> autoFocus: PropTypes.bool, +> disabled: PropTypes.bool, +> } +>``` + +TODOs + +- make mobile friendly (integrate tap and swipe actions) +- add complex booking customization example with exposed renderer props +- drag and drop date selection + diff --git a/demo/assets/ss.png b/demo/assets/ss.png new file mode 100644 index 000000000..d552f8590 Binary files /dev/null and b/demo/assets/ss.png differ diff --git a/demo/src/components/Main.js b/demo/src/components/Main.js index 4d2df0ef3..fd6d500d6 100644 --- a/demo/src/components/Main.js +++ b/demo/src/components/Main.js @@ -1,24 +1,94 @@ import React, { Component } from 'react'; -import moment from 'moment'; -import { defaultRanges, Calendar, DateRange } from '../../../src'; +import { Calendar, DateRange, DateRangePicker } from '../../../src'; +import * as rdrLocales from '../../../src/locale'; +import { format, addDays } from 'date-fns'; import Section from './Section'; +const nameMapper = { + ar: 'Arabic (Modern Standard Arabic - Al-fussha)', + bg: 'Bulgarian', + ca: 'Catalan', + cs: 'Czech', + da: 'Danish', + de: 'German', + el: 'Greek', + enGB: 'English (United Kingdom)', + enUS: 'English (United States)', + eo: 'Esperanto', + es: 'Spanish', + fi: 'Finnish', + fil: 'Filipino', + frCH: 'French', + fr: 'French', + hr: 'Croatian', + id: 'Indonesian', + is: 'Icelandic', + it: 'Italian', + ja: 'Japanese', + ko: 'Korean', + mk: 'Macedonian', + nb: 'Norwegian Bokmål', + nl: 'Dutch', + pl: 'Polish', + pt: 'Portuguese', + ro: 'Romanian', + ru: 'Russian', + sk: 'Slovak', + sv: 'Swedish', + th: 'Thai', + tr: 'Turkish', + ua: 'Ukrainian', + vi: 'Vietnamese', + zhCN: 'Chinese Simplified', + zhTW: 'Chinese Traditional', +}; + +const localeOptions = Object.keys(rdrLocales).map(key => ({ + value: key, + label: `${key} - ${nameMapper[key] || ''}`, +})); + import 'normalize.css'; import '../styles/global.css'; -import styles from '../styles/main.css'; +import '../styles/main.css'; + +import '../../../src/styles.css'; +import '../../../src/theme/default.css'; + +function formatDateDisplay(date, defaultText) { + if (!date) return defaultText; + return format(date, 'MM/DD/YYYY'); +} export default class Main extends Component { constructor(props, context) { super(props, context); this.state = { - rangePicker: {}, - rangePickerMobile: {}, - linked: {}, - datePicker: null, - datePickerInternational: null, - firstDayOfWeek: null, - predefined: {}, + dateRange: { + selection: { + startDate: addDays(new Date(), 1115), + endDate: null, + }, + }, + compareRanges: { + selection: { + startDate: addDays(new Date(), 1), + endDate: null, + }, + compare: { + startDate: addDays(new Date(), 4), + endDate: addDays(new Date(), 8), + }, + }, + datePickerInternational: addDays(new Date(), 1167), + locale: 'ja', + dateRangePicker: { + selection: { + startDate: new Date(), + endDate: addDays(new Date(), 7), + }, + }, }; } @@ -27,251 +97,152 @@ export default class Main extends Component { [which]: payload, }); } + handleRangeChange(which, payload) { + console.log(which, payload); + this.setState({ + [which]: { + ...this.state[which], + ...payload, + }, + }); + } render() { - const { - rangePicker, - rangePickerMobile, - linked, - datePicker, - firstDayOfWeek, - predefined, - datePickerInternational, - } = this.state; - - const format = 'dddd, D MMMM YYYY'; - return ( -
-

React-date-range

+
+

React-date-range

-
+
+ -
- - { - return '11/12/2015'; - }} - onInit={this.handleChange.bind(this, 'rangePicker')} - onChange={this.handleChange.bind(this, 'rangePicker')} +
+ -
+
+ { - return '9/10/2015'; - }} - endDate={() => { - return '13/11/2015'; - }} - linkedCalendars={true} - onInit={this.handleChange.bind(this, 'linked')} - onChange={this.handleChange.bind(this, 'linked')} + onChange={this.handleRangeChange.bind(this, 'dateRange')} + months={2} + moveRangeOnFirstSelection={false} + ranges={[ + { + startDate: this.state.dateRange.selection.startDate, + endDate: this.state.dateRange.selection.endDate, + key: 'selection', + }, + ]} />
-
+
+ -
- { - return now.add(-4, 'days'); - }} - onInit={this.handleChange.bind(this, 'datePicker')} - onChange={this.handleChange.bind(this, 'datePicker')} - /> -
- -
-
+ -
- now} - onInit={this.handleChange.bind(this, 'datePickerInternational')} - onChange={this.handleChange.bind(this, 'datePickerInternational')} - /> -
- -
-
+
+ -
- { - return now.add(-4, 'days'); - }} - onInit={this.handleChange.bind(this, 'firstDayOfWeek')} - onChange={this.handleChange.bind(this, 'firstDayOfWeek')} - /> -
- -
-
+ -
- -
-
-
-
-
+
-
- { - return now.add(1, 'month'); - }} - endDate={now => { - return now.add(1, 'month').add(3, 'days'); - }} - shownDate={moment()} - offsetPositive={true} - disableDaysBeforeToday={true} +
+
diff --git a/demo/src/components/Section.js b/demo/src/components/Section.js index ea1026270..787155294 100644 --- a/demo/src/components/Section.js +++ b/demo/src/components/Section.js @@ -1,16 +1,15 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import styles from '../styles/main.css'; export default class Section extends Component { render() { return ( -
-
+
+

{this.props.title}

-
{this.props.children[0]}
+
{this.props.children[0]}
-
{this.props.children[1]}
+
{this.props.children[1]}
); } diff --git a/demo/src/index.html b/demo/src/index.html index 646c1f3af..4a5624c72 100644 --- a/demo/src/index.html +++ b/demo/src/index.html @@ -5,6 +5,7 @@ React Date Range Demo +
diff --git a/demo/src/styles/global.css b/demo/src/styles/global.css index 09779125c..88d47e9bb 100644 --- a/demo/src/styles/global.css +++ b/demo/src/styles/global.css @@ -2,11 +2,11 @@ body, html { width: 100%; height: 100%; - background: #f0f0f0; + background-color: rgb(249, 250, 253); box-sizing: border-box; - font-family: Helvetica, Arial, 'sans-serif'; - font-size: 62.5%; - font-weight: 400; + font-family: 'Open Sans', Arial, Helvetica, sans-serif; + font-size: 14px; + font-weight: 300; } body * { box-sizing: inherit; diff --git a/demo/src/styles/main.css b/demo/src/styles/main.css index de1b964f4..60c061530 100644 --- a/demo/src/styles/main.css +++ b/demo/src/styles/main.css @@ -1,54 +1,69 @@ -:local(.Main) { +.Main { width: 800px; margin: 40px auto; } -:local(.Title) { +.Title { display: block; - font-size: 2.4rem; font-weight: 200; padding: 0; margin: 0 0 24px; } -:local(.Section) { +.Section { padding: 20px 0; border-top: 1px dashed rgba(0, 0, 0, 0.1); clear: both; } -:local(.Section ~ .Section) { +.Section ~ .Section { margin-top: 24px; } -:local(.Demo-description) { - float : left; - width: 240px; +.Demo-description { } -:local(.Demo-description) h2 { - font-weight: 400; - font-size: 1.4rem; +.label{ + padding-right: 30px; + font-weight: bold; + font-size: 0.8em; } -:local(.Demo) { - width: 560px; - float: left; +.Demo-inputs > div{ + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; } -:local(.Demo-inputs) input { - display: block; - width: 90%; - height: 44px; - padding: 0 10px; - margin: 0 0 6px; +.Demo-inputs > div > *{ + margin: 0 10px 5px; +} + +.newLine{ + flex: 0 1 100%; +} + +.Demo-description input, .Demo-description select { + padding: 10px; outline: 0; border: 1px solid #dadada; border-radius: 2px; - font-size: 1.2rem; + min-width: 100px; + height: 35px; +} + +.Demo-description h2 { + font-weight: 400; + font-size: 1.4rem; +} + +.Demo{ + text-align: center; + padding-top: 30px; } -:local(.Mobile-Container) { +.Mobile-Container { height: 500px; overflow-y: scroll; width: 296px; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..ffe01365d --- /dev/null +++ b/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + verbose: true, + setupFiles: ['/setupTests.js'], + testPathIgnorePatterns: ['/node_modules/', '/dist/', '/demo/dist/'], +}; diff --git a/package.json b/package.json index 7d2b9a226..00c9b5d74 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,15 @@ "name": "react-date-range", "version": "0.9.4", "description": "A React component for choosing dates and date ranges.", - "main": "lib/index.js", + "main": "dist/index.js", "scripts": { "dev": "NODE_ENV=development & webpack-dev-server --hot --inline", - "prebuild": "rm -rf lib/*", - "build": "NODE_ENV=production & babel ./src --out-dir ./lib & webpack -p", - "prepublish": "npm run build", - "lint": "eslint '**/*.js'" + "prebuild": "rm -rf dist/* & rm -rf demo/dist/*", + "build": "NODE_ENV=production & yarn build-library & yarn build-demo", + "build-demo": "webpack -p", + "build-library": "babel ./src --out-dir ./dist --ignore test.js & postcss 'src/styles.css' -d dist & postcss 'src/theme/*.css' -d 'dist/theme'", + "lint": "eslint '**/*.js'", + "test": "jest" }, "keywords": [ "react", @@ -28,7 +30,6 @@ }, "dependencies": { "classnames": "^2.2.1", - "moment": "^2.19.4", "prop-types": "^15.5.10" }, "peerDependencies": { @@ -38,11 +39,17 @@ "autoprefixer": "^7.2.4", "babel-cli": "^6.26.0", "babel-eslint": "^8.1.2", + "babel-jest": "^22.1.0", "babel-loader": "^7.1.2", + "babel-plugin-date-fns": "^0.1.0", + "babel-plugin-transform-export-extensions": "^6.22.0", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-env": "^1.6.1", "babel-preset-react": "^6.24.1", "css-loader": "^0.28.8", + "date-fns": "2.0.0-alpha.7", + "enzyme": "^3.3.0", + "enzyme-adapter-react-16": "^1.1.1", "eslint": "^4.15.0", "eslint-config-prettier": "^2.9.0", "eslint-plugin-import": "^2.8.0", @@ -50,10 +57,10 @@ "eslint-plugin-prettier": "^2.4.0", "eslint-plugin-react": "^7.5.1", "html-webpack-plugin": "^2.30.1", - "node-sass": "^4.7.2", + "jest": "^22.1.4", "normalize.css": "^7.0.0", + "postcss-import": "^11.0.0", "postcss-loader": "^2.0.10", - "postcss-modules": "^1.1.0", "precss": "^2.0.0", "prettier": "^1.9.2", "react": "^16.2.0", diff --git a/postcss.config.js b/postcss.config.js index 08536d73f..0ba8a32c2 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,7 +1,7 @@ const precss = require('precss'); const autoprefixer = require('autoprefixer'); +const cssImport = require('postcss-import'); module.exports = { - modules: true, - plugins: [precss, autoprefixer], + plugins: [cssImport(), precss(), autoprefixer()], }; diff --git a/setupTests.js b/setupTests.js new file mode 100644 index 000000000..82edfc9e5 --- /dev/null +++ b/setupTests.js @@ -0,0 +1,4 @@ +import { configure } from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; + +configure({ adapter: new Adapter() }); diff --git a/src/Calendar.js b/src/Calendar.js index aaaecdcc5..f24e92371 100644 --- a/src/Calendar.js +++ b/src/Calendar.js @@ -1,340 +1,269 @@ -import React, { Component } from 'react'; +import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import moment from 'moment'; -import parseInput from './utils/parseInput.js'; -import DayCell from './DayCell.js'; -import LangDic from './LangDic.js'; -import getTheme, { defaultClasses } from './styles.js'; - -function checkRange(dayMoment, range) { - return ( - dayMoment.isBetween(range['startDate'], range['endDate']) || - dayMoment.isBetween(range['endDate'], range['startDate']) - ); -} - -function checkStartEdge(dayMoment, range) { - const { startDate } = range; - - return dayMoment.startOf('day').isSame(startDate.startOf('day')); -} - -function checkEndEdge(dayMoment, range) { - const { endDate } = range; - - return dayMoment.endOf('day').isSame(endDate.endOf('day')); -} - -function isOusideMinMax(dayMoment, minDate, maxDate, format) { - return ( - (minDate && dayMoment.isBefore(parseInput(minDate, format, 'startOf'))) || - (maxDate && dayMoment.isAfter(parseInput(maxDate, format, 'endOf'))) - ); -} - -class Calendar extends Component { +import DayCell, { rangeShape } from './DayCell.js'; +import { calcFocusDate } from './utils'; +import styles from './styles'; +import classnames from 'classnames'; +import { addMonths, startOfDay, endOfDay, addYears, setYear, setMonth } from 'date-fns'; +import defaultLocale from 'date-fns/locale/en-US'; + +import { + format, + eachDayOfInterval, + startOfWeek, + endOfWeek, + isSameDay, + startOfMonth, + endOfMonth, + isSunday, + isWithinInterval, + isBefore, + isAfter, +} from 'date-fns'; + +class Calendar extends PureComponent { constructor(props, context) { super(props, context); - - const { format, range, theme, offset, firstDayOfWeek, locale, shownDate } = props; - - if (locale) { - moment.locale(locale); - } - - const date = parseInput(props.date, format, 'startOf'); - const state = { - date, - shownDate: (shownDate || (range && range['endDate']) || date).clone().add(offset, 'months'), - firstDayOfWeek: firstDayOfWeek || moment.localeData().firstDayOfWeek(), + this.changeShownDate = this.changeShownDate.bind(this); + this.renderDays = this.renderDays.bind(this); + this.handleRangeFocusChange = this.handleRangeFocusChange.bind(this); + this.state = { + focusedDate: calcFocusDate(null, props), }; - - this.state = state; - this.styles = getTheme(theme); } - - componentDidMount() { - const { onInit } = this.props; - onInit && onInit(this.state.date); + updateShownDate(props) { + const newFocus = calcFocusDate(this.state.focusedDate, props || this.props); + this.setState({ + focusedDate: newFocus, + }); } - componentWillReceiveProps(nextProps) { - const { range, offset } = nextProps; - const oldRange = this.props.oldRange; - - if ( - (range && range['endDate'] && !range['endDate'].isSame(range['startDate'], 'day')) || - (oldRange && !oldRange['startDate'].isSame(range['startDate'])) - ) { - this.setState({ shownDate: range['endDate'].clone().add(offset, 'months') }); - } - } - - getShownDate() { - const { link, offset } = this.props; - - const shownDate = link ? link.clone().add(offset, 'months') : this.state.shownDate; - - return shownDate; - } - - handleSelect(newDate) { - const { link, onChange } = this.props; - - onChange && onChange(newDate, Calendar); - - if (!link) { - this.setState({ date: newDate }); + const propMapper = { + dateRange: 'ranges', + date: 'date', + }; + const targetProp = propMapper[nextProps.displayMode]; + if (nextProps[targetProp] !== this.props[targetProp]) { + this.updateShownDate(nextProps); } } - - changeMonth(direction, event) { - event.preventDefault(); - const { link, linkCB } = this.props; - - if (link && linkCB) { - return linkCB(direction); - } - - const newMonth = this.state.shownDate.clone().add(direction, 'months'); - + changeShownDate(mode, value) { + const focusedDate = this.state.focusedDate; + const modeMapper = { + monthOffset: () => addMonths(focusedDate, value), + setMonth: () => setMonth(focusedDate, value), + setYear: () => setYear(focusedDate, value), + }; this.setState({ - shownDate: newMonth, + focusedDate: modeMapper[mode](), }); } - - renderMonthAndYear(classes) { - const shownDate = this.getShownDate(); - let month = moment.months(shownDate.month()); - const year = shownDate.year(); - const { styles } = this; - const { onlyClasses, lang, showMonthArrow } = this.props; - - const monthLower = month.toLowerCase(); - month = lang && LangDic[lang] && LangDic[lang][monthLower] ? LangDic[lang][monthLower] : month; + handleRangeFocusChange(rangesIndex, rangeItemIndex) { + this.props.onRangeFocusChange && this.props.onRangeFocusChange([rangesIndex, rangeItemIndex]); + } + renderMonthAndYear(classes, focusedDate) { + const { showMonthArrow, locale, minDate, maxDate } = this.props; + const upLimit = maxDate ? maxDate.getFullYear() : addYears(new Date(), 20).getFullYear(); + const downLimit = minDate ? minDate.getFullYear() : addYears(new Date(), -100).getFullYear(); return ( -
+
{showMonthArrow ? ( ) : null} - - {month} - - - {year} + + + + + + + + {showMonthArrow ? ( ) : null}
); } - - renderWeekdays(classes) { - const dow = this.state.firstDayOfWeek; - const weekdays = []; - const { styles } = this; - const { onlyClasses, lang } = this.props; - - for (let i = dow; i < 7 + dow; i++) { - let day = moment.weekdaysMin(i); - const dayLower = day.toLowerCase(); - day = lang && LangDic[lang] && LangDic[lang][dayLower] ? LangDic[lang][dayLower] : day; - weekdays.push( - - {day} - - ); - } - - return weekdays; + renderWeekdays(classes, dateOptions) { + const now = new Date(); + return eachDayOfInterval({ + start: startOfWeek(now, dateOptions), + end: endOfWeek(now, dateOptions), + }).map((day, i) => ( + + {format(day, 'ddd', dateOptions)} + + )); } - renderDays(classes) { - // TODO: Split this logic into smaller chunks - const { styles } = this; - - const { - range, - minDate, - maxDate, - format, - onlyClasses, - disableDaysBeforeToday, - specialDays, - } = this.props; - - const shownDate = this.getShownDate(); - const { date, firstDayOfWeek } = this.state; - const dateUnix = date.unix(); - - const monthNumber = shownDate.month(); - const dayCount = shownDate.daysInMonth(); - const startOfMonth = shownDate - .clone() - .startOf('month') - .isoWeekday(); - - const lastMonth = shownDate.clone().month(monthNumber - 1); - const lastMonthDayCount = lastMonth.daysInMonth(); - - const nextMonth = shownDate.clone().month(monthNumber + 1); - - const days = []; - - // Previous month's days - const diff = Math.abs(firstDayOfWeek - (startOfMonth + 7)) % 7; - for (let i = diff - 1; i >= 0; i--) { - const dayMoment = lastMonth.clone().date(lastMonthDayCount - i); - days.push({ dayMoment, isPassive: true }); - } - - // Current month's days - for (let i = 1; i <= dayCount; i++) { - const dayMoment = shownDate.clone().date(i); - // set days before today to isPassive - const _today = moment(); - if (disableDaysBeforeToday && Number(dayMoment.diff(_today, 'days')) <= -1) { - days.push({ dayMoment, isPassive: true }); - } else { - days.push({ dayMoment }); + renderDays(classes, dateOptions, focusedDate) { + const now = new Date(); + const { specialDays } = this.props; + const minDate = this.props.minDate && startOfDay(this.props.minDate); + const maxDate = this.props.maxDate && endOfDay(this.props.maxDate); + const startDateOfMonth = startOfMonth(focusedDate, dateOptions); + const endDateOfMonth = endOfMonth(focusedDate, dateOptions); + const startDateOfCalendar = startOfWeek(startDateOfMonth, dateOptions); + const endDateOfCalendar = endOfWeek(endDateOfMonth, dateOptions); + + return eachDayOfInterval({ start: startDateOfCalendar, end: endDateOfCalendar }).map( + (day, index) => { + const isStartOfMonth = isSameDay(day, startDateOfMonth); + const isEndOfMonth = isSameDay(day, endDateOfMonth); + const isSpecialDay = specialDays.some(specialDay => isSameDay(day, specialDay)); + const isOutsideMinMax = + (minDate && isBefore(day, minDate)) || (maxDate && isAfter(day, maxDate)); + + return ( + + ); } - } - - // Next month's days - const remainingCells = 42 - days.length; // 42cells = 7days * 6rows - for (let i = 1; i <= remainingCells; i++) { - const dayMoment = nextMonth.clone().date(i); - days.push({ dayMoment, isPassive: true }); - } - - const today = moment().startOf('day'); - return days.map((data, index) => { - const { dayMoment, isPassive } = data; - const isSelected = !range && dayMoment.unix() === dateUnix; - const isInRange = range && checkRange(dayMoment, range); - const isStartEdge = range && checkStartEdge(dayMoment, range); - const isEndEdge = range && checkEndEdge(dayMoment, range); - const isEdge = isStartEdge || isEndEdge; - const isToday = today.isSame(dayMoment); - const isSunday = dayMoment.day() === 0; - const isSpecialDay = - specialDays && - specialDays.some(specialDay => { - return dayMoment.endOf('day').isSame(specialDay.date.endOf('day')); - }); - const isOutsideMinMax = isOusideMinMax(dayMoment, minDate, maxDate, format); - - return ( - - ); - }); + ); } + formatDateDisplay(date, defaultText) { + if (!date) return defaultText; + return format(date, this.props.dateDisplayFormat); + } render() { - const { styles } = this; - const { onlyClasses, classNames } = this.props; - - const classes = { ...defaultClasses, ...classNames }; - + const dateOptions = { locale: this.props.locale }; + const { focusedRange, color } = this.props; return ( -
-
{this.renderMonthAndYear(classes)}
-
{this.renderWeekdays(classes)}
-
{this.renderDays(classes)}
+
+
+ {this.props.ranges.map((range, i) => ( +
+ this.handleRangeFocusChange(i, 0)}> + + + this.handleRangeFocusChange(i, 1)}> + + +
+ ))} +
+ {this.renderMonthAndYear(styles, this.state.focusedDate)} +
{ + this.props.onPreviewChange && this.props.onPreviewChange(); + }}> + {new Array(this.props.months).fill(null).map((_, i) => ( +
+
{this.renderWeekdays(styles, dateOptions)}
+
+ {this.renderDays(styles, dateOptions, addMonths(this.state.focusedDate, i))} +
+
+ ))} +
); } } Calendar.defaultProps = { - format: 'DD/MM/YYYY', - theme: {}, showMonthArrow: true, - disableDaysBeforeToday: false, - onlyClasses: false, classNames: {}, specialDays: [], + locale: defaultLocale, + ranges: [], + focusedRange: [0, 0], + dateDisplayFormat: 'MMM D,YYYY', + showSelectionPreview: true, + displayMode: 'date', + months: 1, + color: '#3d91ff', }; Calendar.propTypes = { showMonthArrow: PropTypes.bool, - disableDaysBeforeToday: PropTypes.bool, - lang: PropTypes.string, - sets: PropTypes.string, - range: PropTypes.shape({ - startDate: PropTypes.object, - endDate: PropTypes.object, - }), - minDate: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]), - maxDate: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]), - date: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]), - format: PropTypes.string.isRequired, - firstDayOfWeek: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + minDate: PropTypes.object, + maxDate: PropTypes.object, + date: PropTypes.object, onChange: PropTypes.func, - onInit: PropTypes.func, - link: PropTypes.oneOfType([ - PropTypes.shape({ - startDate: PropTypes.object, - endDate: PropTypes.object, - }), - PropTypes.bool, - ]), - linkCB: PropTypes.func, - theme: PropTypes.object, - onlyClasses: PropTypes.bool, + onPreviewChange: PropTypes.func, + onRangeFocusChange: PropTypes.func, specialDays: PropTypes.array, classNames: PropTypes.object, - locale: PropTypes.string, + locale: PropTypes.object, shownDate: PropTypes.object, - oldRange: PropTypes.shape({ + ranges: PropTypes.arrayOf(rangeShape), + preview: PropTypes.shape({ startDate: PropTypes.object, endDate: PropTypes.object, }), - style: PropTypes.object, - offset: PropTypes.number, + previewColor: PropTypes.string, + dateDisplayFormat: PropTypes.string, + focusedRange: PropTypes.arrayOf(PropTypes.number), + months: PropTypes.number, + className: PropTypes.string, + showSelectionPreview: PropTypes.bool, + displayMode: PropTypes.oneOf(['dateRange', 'date']), + color: PropTypes.string, }; export default Calendar; diff --git a/src/Calendar.test.js b/src/Calendar.test.js new file mode 100644 index 000000000..f567be45a --- /dev/null +++ b/src/Calendar.test.js @@ -0,0 +1,7 @@ +import Calendar from './Calendar'; + +describe('Calendar', () => { + test('Should resolve', () => { + expect(Calendar).toEqual(expect.anything()); + }); +}); diff --git a/src/DateRange.js b/src/DateRange.js index 128746390..c6efa1f6a 100644 --- a/src/DateRange.js +++ b/src/DateRange.js @@ -1,234 +1,111 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import parseInput from './utils/parseInput.js'; import Calendar from './Calendar.js'; -import PredefinedRanges from './PredefinedRanges.js'; -import getTheme, { defaultClasses } from './styles.js'; +import { findNextRangeIndex } from './utils.js'; +import styles from './styles'; +import { isBefore, differenceInCalendarDays, addDays, min } from 'date-fns'; +import classnames from 'classnames'; class DateRange extends Component { constructor(props, context) { super(props, context); - - const { format, linkedCalendars, theme } = props; - - const startDate = parseInput(props.startDate, format, 'startOf'); - const endDate = parseInput(props.endDate, format, 'endOf'); - + this.setSelection = this.setSelection.bind(this); + this.handleRangeFocusChange = this.handleRangeFocusChange.bind(this); + this.updatePreview = this.updatePreview.bind(this); + this.calcNewSelection = this.calcNewSelection.bind(this); this.state = { - range: { startDate, endDate }, - link: linkedCalendars && endDate, - }; - - this.step = 0; - this.styles = getTheme(theme); - } - - componentDidMount() { - const { onInit } = this.props; - onInit && onInit(this.state.range); - } - - orderRange(range) { - const { startDate, endDate } = range; - const swap = startDate.isAfter(endDate); - - if (!swap) return range; - - return { - startDate: endDate, - endDate: startDate, + focusedRange: [findNextRangeIndex(props.ranges), 0], + preview: null, }; } - - setRange(range, source, triggerChange) { - const { onChange } = this.props; - range = this.orderRange(range); - - this.setState({ range }, () => triggerChange && onChange && onChange(range, source)); - } - - handleSelect(date, source) { - if (date.startDate && date.endDate) { - this.step = 0; - return this.setRange(date, source, true); + calcNewSelection(value) { + const { focusedRange } = this.state; + const { ranges, onChange, maxDate, moveRangeOnFirstSelection } = this.props; + const selectedRangeIndex = focusedRange[0]; + const selectedRange = ranges[selectedRangeIndex]; + if (!selectedRange || !onChange) return; + + let { startDate, endDate } = selectedRange; + if (!endDate) endDate = new Date(startDate); + let nextFocusRange; + if (focusedRange[1] === 0) { + // startDate selection + const dayOffset = differenceInCalendarDays(endDate, startDate); + startDate = value; + endDate = moveRangeOnFirstSelection ? addDays(value, dayOffset) : value; + if (maxDate) endDate = min([endDate, maxDate]); + nextFocusRange = [focusedRange[0], 1]; + } else { + endDate = value; + // reverse dates if startDate before endDate + if (isBefore(value, startDate)) { + [startDate, endDate] = [endDate, startDate]; + } + const nextFocusRangeIndex = findNextRangeIndex(this.props.ranges, focusedRange[0]); + nextFocusRange = [nextFocusRangeIndex, 0]; } - - const { startDate, endDate } = this.state.range; - - const range = { - startDate, - endDate, + return { + range: { startDate, endDate }, + nextFocusRange: nextFocusRange, }; - - switch (this.step) { - case 0: - range.startDate = date; - range.endDate = date; - this.step = 1; - break; - - case 1: - range.endDate = date; - this.step = 0; - break; - } - - const triggerChange = - !this.props.twoStepChange || (this.step === 0 && this.props.twoStepChange); - - this.setRange(range, source, triggerChange); } - - handleLinkChange(direction) { - const { link } = this.state; - + setSelection(value) { + const { onChange, ranges } = this.props; + const { focusedRange } = this.state; + const selectedRangeIndex = focusedRange[0]; + const selectedRange = ranges[selectedRangeIndex]; + + const newSelection = this.calcNewSelection(value); + onChange({ + [selectedRange.key || `range${selectedRangeIndex + 1}`]: newSelection.range, + }); this.setState({ - link: link.clone().add(direction, 'months'), + focusedRange: newSelection.nextFocusRange, + preview: newSelection.range, }); } - - componentWillReceiveProps(newProps) { - // Whenever date props changes, update state with parsed variant - if (newProps.startDate || newProps.endDate) { - const format = newProps.format || this.props.format; - const startDate = newProps.startDate && parseInput(newProps.startDate, format, 'startOf'); - const endDate = newProps.endDate && parseInput(newProps.endDate, format, 'endOf'); - const oldStartDate = - this.props.startDate && parseInput(this.props.startDate, format, 'startOf'); - const oldEndDate = this.props.endDate && parseInput(this.props.endDate, format, 'endOf'); - - if (!startDate.isSame(oldStartDate) || !endDate.isSame(oldEndDate)) { - this.setRange({ - startDate: startDate || oldStartDate, - endDate: endDate || oldEndDate, - }); - } - } + handleRangeFocusChange(focusedRange) { + this.setState({ focusedRange }); + this.props.onRangeFocusChange && this.props.onRangeFocusChange(focusedRange); + } + updatePreview(val) { + this.setState({ preview: val }); } - render() { - const { - ranges, - format, - linkedCalendars, - style, - calendars, - firstDayOfWeek, - minDate, - maxDate, - classNames, - onlyClasses, - specialDays, - lang, - disableDaysBeforeToday, - offsetPositive, - shownDate, - showMonthArrow, - rangedCalendars, - } = this.props; - const { range, link } = this.state; - const { styles } = this; - - const classes = { ...defaultClasses, ...classNames }; - const yearsDiff = range.endDate.year() - range.startDate.year(); - const monthsDiff = range.endDate.month() - range.startDate.month(); - const diff = yearsDiff * 12 + monthsDiff; - const calendarsCount = Number(calendars) - 1; - return ( -
- {ranges && ( - - )} - - {(() => { - const _calendars = []; - const _method = offsetPositive ? 'unshift' : 'push'; - for (let i = calendarsCount; i >= 0; i--) { - const offset = offsetPositive ? i : -i; - const realDiff = offsetPositive ? diff : -diff; - const realOffset = - rangedCalendars && i == calendarsCount && diff != 0 ? realDiff : offset; - - _calendars[_method]( - - ); - } - return _calendars; - })()} -
+ { + this.updatePreview(value ? this.calcNewSelection(value).range : null); + }} + ref={target => { + this.calendar = target; + }} + /> ); } } DateRange.defaultProps = { - linkedCalendars: true, - theme: {}, - format: 'DD/MM/YYYY', - calendars: 2, - onlyClasses: false, - offsetPositive: false, classNames: {}, - specialDays: [], - rangedCalendars: false, - twoStepChange: false, + ranges: [], + moveRangeOnFirstSelection: false, }; DateRange.propTypes = { - format: PropTypes.string, - firstDayOfWeek: PropTypes.number, - calendars: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - startDate: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]), - endDate: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]), - minDate: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]), - maxDate: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]), - dateLimit: PropTypes.func, - ranges: PropTypes.object, - linkedCalendars: PropTypes.bool, - twoStepChange: PropTypes.bool, - theme: PropTypes.object, - onInit: PropTypes.func, + ...Calendar.propTypes, onChange: PropTypes.func, - onlyClasses: PropTypes.bool, - specialDays: PropTypes.array, - offsetPositive: PropTypes.bool, - classNames: PropTypes.object, - rangedCalendars: PropTypes.bool, - style: PropTypes.object, - offset: PropTypes.number, - disableDaysBeforeToday: PropTypes.bool, - shownDate: PropTypes.object, - showMonthArrow: PropTypes.bool, - lang: PropTypes.string, + onRangeFocusChange: PropTypes.func, + className: PropTypes.string, + ranges: Calendar.propTypes.ranges, + moveRangeOnFirstSelection: PropTypes.bool, }; export default DateRange; diff --git a/src/DateRange.test.js b/src/DateRange.test.js new file mode 100644 index 000000000..9b0687bf8 --- /dev/null +++ b/src/DateRange.test.js @@ -0,0 +1,7 @@ +import DateRange from './DateRange'; + +describe('DateRange', () => { + test('Should resolve', () => { + expect(DateRange).toEqual(expect.anything()); + }); +}); diff --git a/src/DateRangePicker.js b/src/DateRangePicker.js new file mode 100644 index 000000000..19b0ae4f1 --- /dev/null +++ b/src/DateRangePicker.js @@ -0,0 +1,58 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import DateRange from './DateRange'; +import DefinedRanges from './DefinedRanges'; +import { findNextRangeIndex } from './utils.js'; +import classnames from 'classnames'; +import styles from './styles'; + +class DateRangePicker extends Component { + constructor(props) { + super(props); + this.handleChange = this.handleChange.bind(this); + this.state = { + focusedRange: [findNextRangeIndex(props.ranges), 0], + }; + } + handleChange(range) { + const { focusedRange } = this.state; + const { ranges, onChange } = this.props; + const selectedRangeIndex = focusedRange[0]; + const selectedRange = ranges[selectedRangeIndex]; + if (!selectedRange || !onChange) return; + onChange({ + [selectedRange.key || `range${selectedRangeIndex + 1}`]: range, + }); + } + render() { + const focusedRangeIndex = this.state.focusedRange[0]; + return ( +
+ { + this.dateRange.updatePreview(value); + }} + /> + { + this.dateRange = t; + }} + {...this.props} + /> +
+ ); + } +} + +DateRangePicker.defaultProps = {}; + +DateRangePicker.propTypes = { + ...DateRange.propTypes, + ...DefinedRanges.propTypes, + className: PropTypes.string, +}; + +export default DateRangePicker; diff --git a/src/DayCell.js b/src/DayCell.js index 5bdb1b14d..b98b37c79 100644 --- a/src/DayCell.js +++ b/src/DayCell.js @@ -1,6 +1,8 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; +import styles from './styles'; +import { startOfDay, format, isSameDay, isAfter, isBefore, endOfDay } from 'date-fns'; class DayCell extends Component { constructor(props, context) { @@ -10,159 +12,198 @@ class DayCell extends Component { hover: false, active: false, }; - - this.styles = this.props.theme; + this.getClassNames = this.getClassNames.bind(this); + this.handleSelect = this.handleSelect.bind(this); + this.handleMouseEvent = this.handleMouseEvent.bind(this); + this.renderSelectionPlaceholders = this.renderSelectionPlaceholders.bind(this); + this.renderPreviewPlaceholder = this.renderPreviewPlaceholder.bind(this); } handleMouseEvent(event) { - event.preventDefault(); - - if (this.props.isPassive) return null; - - const newState = {}; - + const { day, disabled, onSelect, onPreviewChange } = this.props; + if (disabled) return null; + const stateChanges = {}; switch (event.type) { - case 'mouseenter': - newState['hover'] = true; + case 'click': + onSelect && onSelect(day, 'selection'); break; - - case 'mouseup': + case 'blur': case 'mouseleave': - newState['hover'] = false; - newState['active'] = false; + stateChanges.hover = false; break; - case 'mousedown': - newState['active'] = true; + stateChanges.active = true; + break; + case 'mouseup': + stateChanges.active = false; + break; + case 'mouseenter': + case 'focus': + stateChanges.hover = true; + onPreviewChange && onPreviewChange(day); break; } - - this.setState(newState); + if (Object.keys(stateChanges).length) { + this.setState(stateChanges); + } } - handleSelect(event) { - event.preventDefault(); - - if (this.props.isPassive) return null; - - this.props.onSelect(this.props.dayMoment); + handleSelect() { + if (this.props.disabled) return null; + this.props.onSelect(this.props.day); } - getStateStyles() { - const { hover, active } = this.state; + getClassNames() { const { - isSelected, - isInRange, isPassive, - isStartEdge, - isEndEdge, isToday, isSunday, isSpecialDay, + isStartOfWeek, + isEndOfWeek, + isStartOfMonth, + isEndOfMonth, + disabled, } = this.props; - const { styles } = this; - const hoverStyle = hover ? styles['DayHover'] : {}; - const activeStyle = active ? styles['DayActive'] : {}; - const passiveStyle = isPassive ? styles['DayPassive'] : {}; - const startEdgeStyle = isStartEdge ? styles['DayStartEdge'] : {}; - const endEdgeStyle = isEndEdge ? styles['DayEndEdge'] : {}; - const selectedStyle = isSelected ? styles['DaySelected'] : {}; - const inRangeStyle = isInRange ? styles['DayInRange'] : {}; - const todayStyle = isToday ? styles['DayToday'] : {}; - const sundayStyle = isSunday ? styles['DaySunday'] : {}; - const specialDayStyle = isSpecialDay ? styles['DaySpecialDay'] : {}; - - return { - ...todayStyle, - ...sundayStyle, - ...specialDayStyle, - ...inRangeStyle, - ...hoverStyle, - ...passiveStyle, - ...activeStyle, - ...selectedStyle, - ...startEdgeStyle, - ...endEdgeStyle, - }; - } - - getClassNames(classes) { - const { - isSelected, - isInRange, - isPassive, - isStartEdge, - isEndEdge, - isToday, - isSunday, - isSpecialDay, - } = this.props; - - return classnames({ - [classes.day]: true, - [classes.dayActive]: isSelected, - [classes.dayPassive]: isPassive, - [classes.dayInRange]: isInRange, - [classes.dayStartEdge]: isStartEdge, - [classes.dayEndEdge]: isEndEdge, - [classes.dayToday]: isToday, - [classes.daySunday]: isSunday, - [classes.daySpecialDay]: isSpecialDay, + return classnames(styles.day, { + [styles.dayPassive]: isPassive, + [styles.dayDisabled]: disabled, + [styles.dayToday]: isToday, + [styles.daySunday]: isSunday, + [styles.daySpecialDay]: isSpecialDay, + [styles.dayStartOfWeek]: isStartOfWeek, + [styles.dayEndOfWeek]: isEndOfWeek, + [styles.dayStartOfMonth]: isStartOfMonth, + [styles.dayEndOfMonth]: isEndOfMonth, + [styles.dayHovered]: this.state.hover, + [styles.dayActive]: this.state.active, }); } - - render() { - const { dayMoment, onlyClasses, classNames } = this.props; - - const { styles } = this; - const stateStyle = this.getStateStyles(); - const classes = this.getClassNames(classNames); - const dayWrapperStyles = { - width: styles['Day'].width, - height: styles['Day'].height, - display: styles['Day'].display, - }; - + renderPreviewPlaceholder() { + const { preview, day, previewColor, color } = this.props; + if (!preview) return null; + const startDate = preview.startDate ? endOfDay(preview.startDate) : null; + const endDate = preview.endDate ? startOfDay(preview.endDate) : null; + const isInRange = + (!startDate || isAfter(day, startDate)) && (!endDate || isBefore(day, endDate)); + const isStartEdge = !isInRange && isSameDay(day, startDate); + const isEndEdge = !isInRange && isSameDay(day, endDate); return ( - - {dayMoment.date()} + className={classnames({ + [styles.dayStartPreview]: isStartEdge, + [styles.dayInPreview]: isInRange, + [styles.dayEndPreview]: isEndEdge, + })} + style={{ color: previewColor || color }} + /> + ); + } + renderSelectionPlaceholders() { + if (this.props.displayMode === 'date') { + let isSelected = isSameDay(this.props.day, this.props.date); + return isSelected ? ( + + ) : null; + } + const { ranges, day } = this.props; + + const inRanges = ranges.reduce((result, range) => { + const startDate = range.startDate ? endOfDay(range.startDate) : null; + const endDate = range.endDate ? startOfDay(range.endDate) : null; + const isInRange = + (!startDate || isAfter(day, startDate)) && (!endDate || isBefore(day, endDate)); + const isStartEdge = !isInRange && isSameDay(day, startDate); + const isEndEdge = !isInRange && isSameDay(day, endDate); + if (isInRange || isStartEdge || isEndEdge) { + return [ + ...result, + { + isStartEdge, + isEndEdge: isEndEdge, + isInRange, + ...range, + }, + ]; + } + return result; + }, []); + + return inRanges.map((range, i) => ( + + )); + } + render() { + return ( + ); } } -DayCell.defaultProps = { - theme: { Day: {} }, - onlyClasses: false, -}; +DayCell.defaultProps = {}; + +export const rangeShape = PropTypes.shape({ + startDate: PropTypes.object, + endDate: PropTypes.object, + color: PropTypes.string, + key: PropTypes.string, + autoFocus: PropTypes.bool, + disabled: PropTypes.bool, +}); DayCell.propTypes = { - dayMoment: PropTypes.object.isRequired, + day: PropTypes.object.isRequired, + date: PropTypes.object, + ranges: PropTypes.arrayOf(rangeShape), + preview: PropTypes.shape({ + startDate: PropTypes.object, + endDate: PropTypes.object, + }), onSelect: PropTypes.func, - isSelected: PropTypes.bool, - isInRange: PropTypes.bool, + onPreviewChange: PropTypes.func, + previewColor: PropTypes.string, + disabled: PropTypes.bool, isPassive: PropTypes.bool, - theme: PropTypes.shape({ - Day: PropTypes.object.isRequired, - }).isRequired, - onlyClasses: PropTypes.bool, isSpecialDay: PropTypes.bool, - classNames: PropTypes.object, - isStartEdge: PropTypes.bool, - isEndEdge: PropTypes.bool, isToday: PropTypes.bool, isSunday: PropTypes.bool, + isStartOfWeek: PropTypes.bool, + isEndOfWeek: PropTypes.bool, + isStartOfMonth: PropTypes.bool, + isEndOfMonth: PropTypes.bool, + onMouseOver: PropTypes.func, + color: PropTypes.string, + displayMode: PropTypes.oneOf(['dateRange', 'date']), }; export default DayCell; diff --git a/src/DefinedRanges.js b/src/DefinedRanges.js new file mode 100644 index 000000000..e7e566431 --- /dev/null +++ b/src/DefinedRanges.js @@ -0,0 +1,76 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import styles from './styles'; +import { defaultInputRanges, defaultStaticRanges } from './defaultRanges'; +import { rangeShape } from './DayCell'; + +class DefinedRanges extends Component { + constructor(props) { + super(props); + this.state = { + rangeOffset: 0, + focusedInput: -1, + }; + this.handleRangeChange = this.handleRangeChange.bind(this); + } + handleRangeChange(range) { + const { onChange } = this.props; + onChange && onChange(range); + } + render() { + const { onPreviewChange } = this.props; + return ( +
+
+ {this.props.staticRanges.map((rangeOption, i) => ( + + ))} +
+
+ {this.props.inputRanges.map((rangeOption, i) => ( +
+ this.setState({ focusedInput: i, rangeOffset: 0 })} + onChange={e => { + let value = parseInt(e.target.value, 10); + value = isNaN(value) ? 0 : Math.max(Math.min(99999, value), 0); + this.setState({ rangeOffset: value }); + this.handleRangeChange(rangeOption.range(value, this.props)); + }} + min={0} + max={99999} + value={this.state.focusedInput === i ? this.state.rangeOffset : 0} + />{' '} + {rangeOption.label} +
+ ))} +
+
+ ); + } +} + +DefinedRanges.propTypes = { + inputRanges: PropTypes.array, + staticRanges: PropTypes.array, + range: rangeShape, + onPreviewChange: PropTypes.func, + onChange: PropTypes.func, +}; + +DefinedRanges.defaultProps = { + inputRanges: defaultInputRanges, + staticRanges: defaultStaticRanges, +}; + +export default DefinedRanges; diff --git a/src/LangDic.js b/src/LangDic.js deleted file mode 100644 index 5cab90226..000000000 --- a/src/LangDic.js +++ /dev/null @@ -1,266 +0,0 @@ -export default { - cn: { - // Chinese - january: '一月', - february: '二月', - march: '三月', - april: '四月', - may: '五月', - june: '六月', - july: '七月', - august: '八月', - september: '九月', - october: '十月', - november: '十一月', - december: '十二月', - su: '日', - mo: '一', - tu: '二', - we: '三', - th: '四', - fr: '五', - sa: '六', - }, - jp: { - // Japanese - january: '1月', - february: '2月', - march: '3月', - april: '4月', - may: '5月', - june: '6月', - july: '7月', - august: '8月', - september: '9月', - october: '10月', - november: '11月', - december: '12月', - su: '日', - mo: '月', - tu: '火', - we: '水', - th: '木', - fr: '金', - sa: '土', - }, - fr: { - // French - january: 'janvier', - february: 'février', - march: 'mars', - april: 'avril', - may: 'mai', - june: 'juin', - july: 'juillet', - august: 'août', - september: 'septembre', - october: 'octobre', - november: 'novembre', - december: 'décembre', - su: 'Dimanche', - mo: 'Lundi', - tu: 'Mardi', - we: 'Mercredi', - th: 'Jeudi', - fr: 'Vendredi', - sa: 'Samedi', - }, - it: { - // Italian - january: 'gennaio', - february: 'febbraio', - march: 'marzo', - april: 'aprile', - may: 'maggio', - june: 'giugno', - july: 'luglio', - august: 'agosto', - september: 'settembre', - october: 'ottobre', - november: 'novembre', - december: 'dicembre', - su: 'Domenica', - mo: 'Lunedì', - tu: 'Martedì', - we: 'Mercoledì', - th: 'Giovedì', - fr: 'Venerdì', - sa: 'Sabato', - }, - de: { - // German - january: 'Januar', - february: 'Februar', - march: 'März', - april: 'April', - may: 'Mai', - june: 'Juni', - july: 'Juli', - august: 'August', - september: 'September', - october: 'Oktober', - november: 'November', - december: 'Dezember', - su: 'Sonntag', - mo: 'Montag', - tu: 'Dienstag', - we: 'Mittwoch', - th: 'Donnerstag', - fr: 'Freitag', - sa: 'Samstag', - }, - ko: { - // Korean - january: '1월', - february: '2월', - march: '3월', - april: '4월', - may: '5월', - june: '6월', - july: '7월', - august: '8월', - september: '9월', - october: '10월', - november: '11월', - december: '12월', - su: '일', - mo: '월', - tu: '화', - we: '수', - th: '목', - fr: '금', - sa: '토', - }, - es: { - // Spanish - january: 'Enero', - february: 'Febrero', - march: 'Marzo', - april: 'Abril', - may: 'Mayo', - june: 'Junio', - july: 'Julio', - august: 'Agosto', - september: 'Septiembre', - october: 'Octubre', - november: 'Noviembre', - december: 'Diciembre', - su: 'Do', - mo: 'Lu', - tu: 'Ma', - we: 'Mi', - th: 'Ju', - fr: 'Vi', - sa: 'Sa', - }, - ru: { - // Russian - january: 'Январь', - february: 'Февраль', - march: 'Март', - april: 'Апрель', - may: 'Май', - june: 'Июнь', - july: 'Июль', - august: 'Август', - september: 'Сентябрь', - october: 'Октябрь', - november: 'Ноябрь', - december: 'Декабрь', - su: 'Вс', - mo: 'Пн', - tu: 'Вт', - we: 'Ср', - th: 'Чт', - fr: 'Пт', - sa: 'Сб', - }, - tr: { - // Turkish - january: 'Ocak', - february: 'Şubat', - march: 'Mart', - april: 'Nisan', - may: 'Mayıs', - june: 'Haziran', - july: 'Temmuz', - august: 'Ağustos', - september: 'Eylül', - october: 'Ekim', - november: 'Kasım', - december: 'Aralık', - su: 'Pz', - mo: 'Pts', - tu: 'Sa', - we: 'Ça', - th: 'Pe', - fr: 'Cu', - sa: 'Cts', - }, - pt: { - // Portuguese - january: 'Janeiro', - february: 'Fevereiro', - march: 'Março', - april: 'Abril', - may: 'Maio', - june: 'Junho', - july: 'Julho', - august: 'Agosto', - september: 'Setembro', - october: 'Outubro', - november: 'Novembro', - december: 'Dezembro', - su: 'Dom', - mo: 'Seg', - tu: 'Ter', - we: 'Qua', - th: 'Qui', - fr: 'Sex', - sa: 'Sáb', - }, - 'pt-br': { - // Português Brazil - january: 'Janeiro', - february: 'Fevereiro', - march: 'Março', - april: 'Abril', - may: 'Maio', - june: 'Junho', - july: 'Julho', - august: 'Agosto', - september: 'Setembro', - october: 'Outubro', - november: 'Novembro', - december: 'Dezembro', - su: 'Dom', - mo: 'Seg', - tu: 'Ter', - we: 'Qua', - th: 'Qui', - fr: 'Sex', - sa: 'Sab', - }, - fi: { - // Finnish - january: 'Tammikuu', - february: 'Helmikuu', - march: 'Maaliskuu', - april: 'Huhtikuu', - may: 'Toukokuu', - june: 'Kesäkuu', - july: 'Heinäkuu', - august: 'Elokuu', - september: 'Syyskuu', - october: 'Lokakuu', - november: 'Marraskuu', - december: 'Joulukuu', - su: 'Su', - mo: 'Ma', - tu: 'Ti', - we: 'Ke', - th: 'To', - fr: 'Pe', - sa: 'La', - }, -}; diff --git a/src/PredefinedRanges.js b/src/PredefinedRanges.js deleted file mode 100644 index 63fb69f5e..000000000 --- a/src/PredefinedRanges.js +++ /dev/null @@ -1,91 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import classnames from 'classnames'; -import parseInput from './utils/parseInput.js'; -import { defaultClasses } from './styles.js'; - -class PredefinedRanges extends Component { - constructor(props, context) { - super(props, context); - - this.styles = this.props.theme; - } - - handleSelect(name, event) { - event.preventDefault(); - - const range = this.props.ranges[name]; - - this.props.onSelect( - { - startDate: parseInput(range.startDate, null, 'startOf'), - endDate: parseInput(range.endDate, null, 'endOf'), - }, - PredefinedRanges - ); - } - - renderRangeList(classes) { - const { ranges, range, onlyClasses } = this.props; - const { styles } = this; - - return Object.keys(ranges).map(name => { - const active = - parseInput(ranges[name].startDate, null, 'startOf').isSame(range.startDate) && - parseInput(ranges[name].endDate, null, 'endOf').isSame(range.endDate); - - const style = { - ...styles.PredefinedRangesItem, - ...(active ? styles.PredefinedRangesItemActive : {}), - }; - - const predefinedRangeClass = classnames({ - [classes.predefinedRangesItem]: true, - [classes.predefinedRangesItemActive]: active, - }); - - return ( - - {name} - - ); - }); - } - - render() { - const { style, onlyClasses, classNames } = this.props; - const { styles } = this; - - const classes = { ...defaultClasses, ...classNames }; - - return ( -
- {this.renderRangeList(classes)} -
- ); - } -} - -PredefinedRanges.defaultProps = { - onlyClasses: false, - classNames: {}, -}; - -PredefinedRanges.propTypes = { - ranges: PropTypes.object.isRequired, - onlyClasses: PropTypes.bool, - classNames: PropTypes.object, - theme: PropTypes.object, - onSelect: PropTypes.func, - range: PropTypes.object, - style: PropTypes.object, -}; - -export default PredefinedRanges; diff --git a/src/calendar.css b/src/calendar.css new file mode 100644 index 000000000..955934b62 --- /dev/null +++ b/src/calendar.css @@ -0,0 +1,81 @@ +.rdrCalendarWrapper { + box-sizing: border-box; + background: #ffffff; + display: inline-flex; + flex-direction: column; +} + +.rdrDateDisplay{ + display: flex; + justify-content: space-between; +} + +.rdrDateDisplayItem{ + flex: 1 1; + width: 0; + text-align: center; + color: inherit; + & + &{ + margin-left: 0.833em; + } + input{ + text-align: inherit; + &:disabled{ + cursor: default; + } + } +} + +.rdrDateDisplayItemActive{} + +.rdrMonthAndYearWrapper { + box-sizing: inherit; + display: flex; + justify-content: space-between; +} + +.rdrMonthAndYearPickers{ + flex: 1 1 auto; + display: flex; + justify-content: center; + align-items: center; +} + +.rdrMonthPicker{} + +.rdrYearPicker{} + +.rdrNextPrevButton { + box-sizing: inherit; + cursor: pointer; + outline: none; +} + +.rdrPprevButton {} + +.rdrNextButton {} + +.rdrMonths{ + display: flex; +} + +.rdrMonth{ + width: 27.667em; +} + +.rdrWeekDays{ + display: flex; +} + +.rdrWeekDay { + flex-basis: calc(100% / 7); + box-sizing: inherit; + text-align: center; +} + +.rdrDays{ + display: flex; + flex-wrap: wrap; +} + +.rdrDateDisplayWrapper{} diff --git a/src/dateRange.css b/src/dateRange.css new file mode 100644 index 000000000..cb13ff63d --- /dev/null +++ b/src/dateRange.css @@ -0,0 +1 @@ +.rdrDateRangeWrapper{} diff --git a/src/dateRangePicker.css b/src/dateRangePicker.css new file mode 100644 index 000000000..1f9b60142 --- /dev/null +++ b/src/dateRangePicker.css @@ -0,0 +1,3 @@ +.rdrDateRangePickerWrapper{ + display: flex; +} \ No newline at end of file diff --git a/src/dayCell.css b/src/dayCell.css new file mode 100644 index 000000000..2ebc58cf3 --- /dev/null +++ b/src/dayCell.css @@ -0,0 +1,42 @@ +.rdrDay { + box-sizing: inherit; + width: calc(100% / 7); + position: relative; + font: inherit; +} + +.rdrDayNumber { + display: block; + position: relative; + span{ + color: #1d2429; + } +} + +.rdrDayPassive { + cursor: default; + pointer-events: none; + .rdrInRange, .rdrStartEdge, .rdrEndEdge, .rdrSelected, .rdrDayStartPreview, .rdrDayInPreview, .rdrDayEndPreview{ + display: none; + } +} + +.rdrDayDisabled { + cursor: default; + pointer-events: none; +} + + +.rdrSelected, .rdrInRange, .rdrStartEdge, .rdrEndEdge{ + pointer-events: none; +} + +.rdrInRange{} + +.rdrDayStartPreview, .rdrDayInPreview, .rdrDayEndPreview{ + pointer-events: none; +} + +.rdrDayHovered{} + +.rdrDayActive{} diff --git a/src/defaultRanges.js b/src/defaultRanges.js index d9901aef7..7c3e302cd 100644 --- a/src/defaultRanges.js +++ b/src/defaultRanges.js @@ -1,37 +1,94 @@ -export default { - Today: { - startDate: now => { - return now; +import { + addDays, + endOfDay, + startOfDay, + startOfMonth, + endOfMonth, + addMonths, + startOfWeek, + endOfWeek, +} from 'date-fns'; + +export const defaultStaticRanges = [ + { + label: 'Today', + range() { + return { + startDate: startOfDay(new Date()), + endDate: endOfDay(new Date()), + }; }, - endDate: now => { - return now; + }, + { + label: 'Yesterday', + range() { + const yesterday = addDays(new Date(), -1); + return { + startDate: startOfDay(yesterday), + endDate: endOfDay(yesterday), + }; }, }, - Yesterday: { - startDate: now => { - return now.add(-1, 'days'); + { + label: 'This Week', + range() { + return { + startDate: startOfWeek(new Date()), + endDate: endOfWeek(new Date()), + }; }, - endDate: now => { - return now.add(-1, 'days'); + }, + { + label: 'Last Week', + range() { + const lastWeek = addDays(new Date(), -7); + return { + startDate: startOfWeek(lastWeek), + endDate: endOfWeek(lastWeek), + }; }, }, - - 'Last 7 Days': { - startDate: now => { - return now.add(-7, 'days'); + { + label: 'This Month', + range() { + return { + startDate: startOfMonth(new Date()), + endDate: endOfMonth(new Date()), + }; }, - endDate: now => { - return now; + }, + { + label: 'Last Month', + range() { + const lastMonth = addMonths(new Date(), -1); + return { + startDate: startOfMonth(lastMonth), + endDate: endOfMonth(lastMonth), + }; }, }, +]; - 'Last 30 Days': { - startDate: now => { - return now.add(-30, 'days'); +export const defaultInputRanges = [ + { + label: 'days up today', + range(value) { + const today = new Date(); + return { + startDate: addDays(today, Number(value) * -1), + endDate: today, + }; }, - endDate: now => { - return now; + }, + { + label: 'days up yesterday', + range(value) { + const today = new Date(); + return { + startDate: today, + endDate: addDays(today, Number(value)), + }; }, }, -}; +]; diff --git a/src/definedRanges.css b/src/definedRanges.css new file mode 100644 index 000000000..9f05efa0c --- /dev/null +++ b/src/definedRanges.css @@ -0,0 +1,20 @@ +.rdrDefinedRangesWrapper{} + +.rdrStaticRanges{ + display: flex; + flex-direction: column; +} + +.rdrStaticRange{ + font-size: inherit; +} + +.rdrStaticRangeLabel{} + +.rdrInputRanges{} + +.rdrInputRange{ + display: flex; +} + +.rdrInputRangeInput{} diff --git a/src/index.js b/src/index.js index d847f272d..c345c9ca1 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,5 @@ -import DateRangeComp from './DateRange.js'; -import CalendarComp from './Calendar.js'; -import defaultRangesComp from './defaultRanges.js'; - -export const DateRange = DateRangeComp; -export const Calendar = CalendarComp; -export const defaultRanges = defaultRangesComp; +export { default as DateRange } from './DateRange'; +export { default as Calendar } from './Calendar'; +export { default as DateRangePicker } from './DateRangePicker'; +export { default as DefinedRanges } from './DefinedRanges'; +export { inputRanges, staticRanges } from './defaultRanges'; diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 000000000..c834d4911 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,5 @@ +@import 'calendar.css'; +@import 'dateRange.css'; +@import 'dayCell.css'; +@import 'dateRangePicker.css'; +@import 'definedRanges.css'; diff --git a/src/styles.js b/src/styles.js index b6bffac77..95e96c5af 100644 --- a/src/styles.js +++ b/src/styles.js @@ -1,247 +1,47 @@ -export const defaultClasses = { - calendar: 'rdr-Calendar', - dateRange: 'rdr-DateRange', - predefinedRanges: 'rdr-PredefinedRanges', - predefinedRangesItem: 'rdr-PredefinedRangesItem', - predefinedRangesItemActive: 'rdr-PredefinedRangesItemActive', - monthAndYear: 'rdr-MonthAndYear', - weekDays: 'rdr-WeekDays', - weekDay: 'rdr-WeekDay', - days: 'rdr-Days', - day: 'rdr-Day', - dayActive: 'is-selected', - dayPassive: 'is-passive', - dayInRange: 'is-inRange', - monthAndYearWrapper: 'rdr-MonthAndYear-innerWrapper', - prevButton: 'rdr-MonthAndYear-button prev', - nextButton: 'rdr-MonthAndYear-button next', - month: 'rdr-MonthAndYear-month', - monthAndYearDivider: 'rdr-MonthAndYear-divider', - year: 'rdr-MonthAndYear-year', - daySunday: 'rdr-Sunday', - daySpecialDay: 'rdr-SpecialDay', -}; - -const defaultTheme = { - DateRange: { - display: 'block', - boxSizing: 'border-box', - background: '#ffffff', - borderRadius: '2px', - }, - - Calendar: { - width: 280, - padding: 10, - background: '#ffffff', - borderRadius: '2px', - display: 'inline-block', - boxSizing: 'border-box', - letterSpacing: 0, - color: '#000000', - }, - - Day: { - boxSizing: 'border-box', - display: 'inline-block', - letterSpacing: 'initial', - textAlign: 'center', - fontSize: 12, - cursor: 'pointer', - transition: 'transform .1s ease', - }, - - DayPassive: { - opacity: 0.4, - cursor: 'normal', - }, - - DayHover: { - background: '#bdc3c7', - }, - - DayToday: {}, - - DaySunday: {}, - - DaySpecialDay: {}, - - DayActive: { - background: '#95a5a6', - color: '#ffffff', - transform: 'scale(0.9)', - }, - - DaySelected: { - background: '#e74c3c', - color: '#ffffff', - }, - - DayStartEdge: {}, - - DayEndEdge: {}, - - DayInRange: { - background: '#34495e', - color: '#95a5a6', - }, - - Weekday: { - boxSizing: 'border-box', - display: 'inline-block', - letterSpacing: 'initial', - textAlign: 'center', - fontSize: 12, - fontWeight: '600', - marginBottom: 1, - }, - - MonthAndYear: { - textAlign: 'center', - boxSizing: 'border-box', - fontSize: 12, - padding: '10px 0', - height: 38, - lineHeight: '18px', - }, - - MonthButton: { - display: 'block', - boxSizing: 'border-box', - height: 18, - width: 18, - padding: 0, - margin: '0 10px', - border: 'none', - background: '#bdc3c7', - boxShadow: 'none', - outline: 'none', - borderRadius: '50%', - }, - - MonthArrow: { - display: 'block', - width: 0, - height: 0, - padding: 0, - margin: 0, - border: '4px solid transparent', - textAlign: 'center', - }, - - MonthArrowPrev: { - borderRightWidth: '6px', - borderRightColor: '#34495e', - marginLeft: 1, - }, - - MonthArrowNext: { - borderLeftWidth: '6px', - borderLeftColor: '#34495e', - marginLeft: 7, - }, - - PredefinedRanges: { - width: 140, - display: 'inline-block', - verticalAlign: 'top', - }, - - PredefinedRangesItem: { - display: 'block', - fontSize: 12, - color: '#2c3e50', - padding: '10px 14px', - borderRadius: '2px', - background: '#ecf0f1', - textDecoration: 'none', - marginBottom: 6, - }, - - PredefinedRangesItemActive: { - color: '#E74C3C', - }, -}; - -export default (customTheme = {}) => { - let calendarWidth = defaultTheme.Calendar.width; - let calendarPadding = defaultTheme.Calendar.padding; - let cellMargin = defaultTheme.Day.margin || 0; - - if (customTheme.Calendar && customTheme.Calendar.hasOwnProperty('width')) { - calendarWidth = customTheme.Calendar.width; - } - - if (customTheme.Calendar && customTheme.Calendar.hasOwnProperty('padding')) { - calendarPadding = customTheme.Calendar.padding; - } - - if (customTheme.Day && customTheme.Day.hasOwnProperty('margin')) { - cellMargin = customTheme.Day.margin; - } - - const cellSize = - (parseInt(calendarWidth) - parseInt(calendarPadding) * 2) / 7 - parseInt(cellMargin) * 2; - - return { - DateRange: { ...defaultTheme.DateRange, ...customTheme.DateRange }, - - Calendar: { ...defaultTheme.Calendar, ...customTheme.Calendar }, - - Day: { - width: cellSize, - height: cellSize, - lineHeight: cellSize + 'px', - ...defaultTheme.Day, - ...customTheme.Day, - }, - - DayPassive: { ...defaultTheme.DayPassive, ...customTheme.DayPassive }, - - DayHover: { ...defaultTheme.DayHover, ...customTheme.DayHover }, - - DayToday: { ...defaultTheme.DayToday, ...customTheme.DayToday }, - DaySunday: { ...defaultTheme.DaySunday, ...customTheme.DaySunday }, - DaySpecialDay: { ...defaultTheme.DaySpecialDay, ...customTheme.DaySpecialDay }, - - DayActive: { ...defaultTheme.DayActive, ...customTheme.DayActive }, - - DaySelected: { ...defaultTheme.DaySelected, ...customTheme.DaySelected }, - - DayStartEdge: { ...defaultTheme.DayStartEdge, ...customTheme.DayStartEdge }, - - DayEndEdge: { ...defaultTheme.DayEndEdge, ...customTheme.DayEndEdge }, - - DayInRange: { ...defaultTheme.DayInRange, ...customTheme.DayInRange }, - - Weekday: { - width: cellSize, - height: cellSize / 2, - lineHeight: cellSize / 2 + 'px', - ...defaultTheme.Weekday, - ...customTheme.Weekday, - }, - - MonthAndYear: { ...defaultTheme.MonthAndYear, ...customTheme.MonthAndYear }, - - MonthButton: { ...defaultTheme.MonthButton, ...customTheme.MonthButton }, - - MonthArrow: { ...defaultTheme.MonthArrow, ...customTheme.MonthArrow }, - - MonthArrowPrev: { ...defaultTheme.MonthArrowPrev, ...customTheme.MonthArrowPrev }, - - MonthArrowNext: { ...defaultTheme.MonthArrowNext, ...customTheme.MonthArrowNext }, - - PredefinedRanges: { ...defaultTheme.PredefinedRanges, ...customTheme.PredefinedRanges }, - - PredefinedRangesItem: { - ...defaultTheme.PredefinedRangesItem, - ...customTheme.PredefinedRangesItem, - }, - - PredefinedRangesItemActive: { - ...defaultTheme.PredefinedRangesItemActive, - ...customTheme.PredefinedRangesItemActive, - }, - }; +export default { + dateRangeWrapper: 'rdrDateRangeWrapper', + calendarWrapper: 'rdrCalendarWrapper', + dateDisplay: 'rdrDateDisplay', + dateDisplayItem: 'rdrDateDisplayItem', + dateDisplayItemActive: 'rdrDateDisplayItemActive', + monthAndYearWrapper: 'rdrMonthAndYearWrapper', + monthAndYearPickers: 'rdrMonthAndYearPickers', + nextPrevButton: 'rdrNextPrevButton', + month: 'rdrMonth', + weekDays: 'rdrWeekDays', + weekDay: 'rdrWeekDay', + days: 'rdrDays', + day: 'rdrDay', + dayNumber: 'rdrDayNumber', + dayPassive: 'rdrDayPassive', + dayToday: 'rdrDayToday', + dayStartOfWeek: 'rdrDayStartOfWeek', + inRange: 'rdrInRange', + endEdge: 'rdrEndEdge', + dayEndOfWeek: 'rdrDayEndOfWeek', + startEdge: 'rdrStartEdge', + prevButton: 'rdrPprevButton', + nextButton: 'rdrNextButton', + daySelected: 'rdrDaySelected', + selected: 'rdrSelected', + dayDisabled: 'rdrDayDisabled', + months: 'rdrMonths', + monthPicker: 'rdrMonthPicker', + yearPicker: 'rdrYearPicker', + dateDisplayWrapper: 'rdrDateDisplayWrapper', + dayStartOfMonth: 'rdrDayStartOfMonth', + dayEndOfMonth: 'rdrDayEndOfMonth', + definedRangesWrapper: 'rdrDefinedRangesWrapper', + staticRanges: 'rdrStaticRanges', + staticRange: 'rdrStaticRange', + inputRanges: 'rdrInputRanges', + inputRange: 'rdrInputRange', + inputRangeInput: 'rdrInputRangeInput', + dateRangePickerWrapper: 'rdrDateRangePickerWrapper', + dayStartPreview: 'rdrDayStartPreview', + dayInPreview: 'rdrDayInPreview', + dayEndPreview: 'rdrDayEndPreview', + staticRangeLabel: 'rdrStaticRangeLabel', + dayHovered: 'rdrDayHovered', + dayActive: 'rdrDayActive', }; diff --git a/src/styles.scss b/src/styles.scss deleted file mode 100644 index a1a77b858..000000000 --- a/src/styles.scss +++ /dev/null @@ -1,135 +0,0 @@ -$calendar-color: #000000 !default; -$calendar-background: #ffffff !default; -$calendar-month-button-background: #bdc3c7 !default; -$calendar-month-button-icon-color: rgb(52, 73, 94) !default; -$calendar-day-selected-background: #e74c3c !default; -$calendar-day-hover-background: #bdc3c7 !default; -$calendar-day-in-range-background: #34495e !default; -$calendar-width: 280px !default; -$calendar-padding: 10px !default; -$cell-margin: 0 !default; -$cell-size: (($calendar-width - $calendar-padding * 2) / 7) - ($cell-margin * 2) - 1 !default; -$calendar-shadow: rgba($calendar-color, 0.25) 0 0 1em !default; - -.rdr-DateRange { - display: block; - box-sizing: border-box; - white-space: nowrap; - border-radius: 2px; - background: $calendar-background; - box-shadow: $calendar-shadow; - - .rdr-Calendar { - box-shadow: none; - } -} - -.rdr-Calendar { - display: inline-block; - box-sizing: border-box; - width: $calendar-width; - padding: $calendar-padding; - white-space: normal; - letter-spacing: 0; - color: $calendar-color; - border-radius: 2px; - background: $calendar-background; - box-shadow: $calendar-shadow; -} - -.rdr-MonthAndYear-innerWrapper { - font-size: 12px; - line-height: 18px; - box-sizing: border-box; - height: 38px; - padding: 10px 0; - text-align: center; -} - -.rdr-MonthAndYear-button { - display: block; - box-sizing: border-box; - width: 18px; - height: 18px; - margin: 0 10px; - padding: 0; - border: 0; - border-radius: 50%; - outline: none; - background: $calendar-month-button-background; - box-shadow: none; - - i { - display: block; - width: 0; - height: 0; - padding: 0; - text-align: center; - border-style: solid; - } - - &.prev { - float: left; - - i { - margin: 0 0 0 1px; - border-width: 4px 6px 4px 4px; - border-color: transparent $calendar-month-button-icon-color transparent transparent; - } - } - - &.next { - float: right; - - i { - margin: 0 0 0 7px; - border-width: 4px 4px 4px 6px; - border-color: transparent transparent transparent $calendar-month-button-icon-color; - } - } -} - -.rdr-WeekDay { - font-size: 12px; - font-weight: 600; - line-height: $cell-size / 2; - display: inline-block; - box-sizing: border-box; - width: $cell-size; - height: $cell-size / 2; - margin-bottom: 1px; - text-align: center; - letter-spacing: initial; -} - -.rdr-Day { - font-size: 12px; - line-height: $cell-size; - display: inline-block; - box-sizing: border-box; - width: $cell-size; - height: $cell-size; - cursor: pointer; - transition: transform 0.1s ease; - text-align: center; - letter-spacing: initial; - - &.is-passive { - cursor: normal; - opacity: 0.4; - } - - &.is-selected { - color: $calendar-background; - background: $calendar-day-selected-background; - } - - &.is-inRange { - color: $calendar-background; - background: $calendar-day-in-range-background; - } - - &:hover:not(.is-selected) { - background: $calendar-day-hover-background; - } -} diff --git a/src/theme/default.css b/src/theme/default.css new file mode 100644 index 000000000..001db1f2f --- /dev/null +++ b/src/theme/default.css @@ -0,0 +1,344 @@ +.rdrCalendarWrapper{ + color: #000000; + font-size: 12px; +} + +.rdrDateDisplay{ + background-color: rgb(239, 242, 247); + padding: 0.833em; +} + +.rdrDateDisplayItem{ + border-radius: 4px; + background-color: rgb(255, 255, 255); + box-shadow: 0 1px 2px 0 rgba(35, 57, 66, 0.21); + border: 1px solid transparent; + input{ + cursor: pointer; + height: 2.5em; + line-height: 2.5em; + border: 0px; + background: transparent; + width: 100%; + color: #849095; + } +} + +.rdrDateDisplayItemActive{ + border-color: currentColor; +} + +.rdrDateDisplayItemActive{ + input{ + color: #7d888d + } +} + +.rdrMonthAndYearWrapper { + align-items: center; + height: 60px; + padding-top: 10px; +} + +.rdrMonthAndYearPickers{ + font-weight: 600; + select{ + appearance: none; + border: 0; + background: transparent; + padding: 10px 30px 10px 10px; + border-radius: 4px; + outline: 0; + color: #3e484f; + background: url("data:image/svg+xml;utf8,") no-repeat; + background-position: right 8px center; + cursor: pointer; + text-align: center; + &:hover{ + background-color: rgba(0,0,0,0.07); + } + } +} + +.rdrMonthPicker, .rdrYearPicker{ + margin: 0 5px +} + +.rdrNextPrevButton { + display: block; + width: 24px; + height: 24px; + margin: 0 0.833em; + padding: 0; + border: 0; + border-radius: 5px; + background: #EFF2F7; + &:hover{ + background: #E1E7F0; + } + i { + display: block; + width: 0; + height: 0; + padding: 0; + text-align: center; + border-style: solid; + margin: auto; + transform: translate(-3px, 0px); + } +} + +.rdrPprevButton { + i { + border-width: 4px 6px 4px 4px; + border-color: transparent rgb(52, 73, 94) transparent transparent; + transform: translate(-3px, 0px); + } +} + +.rdrNextButton { + i { + margin: 0 0 0 7px; + border-width: 4px 4px 4px 6px; + border-color: transparent transparent transparent rgb(52, 73, 94); + transform: translate(3px, 0px); + } +} + +.rdrMonth{ + padding: 0 0.833em 1.666em 0.833em; +} + +.rdrWeekDay { + font-weight: 400; + line-height: 2.667em; + color: rgb(132, 144, 149); +} + +.rdrDay { + background: transparent; + user-select: none; + border: 0; + padding: 0; + line-height: 3.000em; + height: 3.000em; + cursor: pointer; + text-align: center; + color: #1d2429; + &:focus { + outline: 0; + } +} + +.rdrDayNumber { + // height: 32px; + // line-height: 32px; + outline: 0; + font-weight: 300; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + top: 5px; + bottom: 5px; + display: flex; + align-items: center; + justify-content: center; +} + +.rdrDayToday .rdrDayNumber span{ + font-weight: 500; + &:after{ + content: ''; + position: absolute; + bottom: 4px; + left: 50%; + transform: translate(-50%, 0); + width: 18px; + height: 2px; + border-radius: 2px; + background: #3d91ff; + } +} + +.rdrDay:not(.rdrDayPassive){ + .rdrInRange, .rdrStartEdge, .rdrEndEdge, .rdrSelected{ + & ~ .rdrDayNumber{ + span{ + color: rgba(255, 255, 255, 0.85); + &:after{ + background: rgba(255, 255, 255, 0.85); + } + } + } + } +} + +.rdrDayPassive { + opacity: 0.5; +} + +.rdrDayDisabled .rdrDayNumber{ + opacity: 0.5; +} + + +.rdrSelected, .rdrInRange, .rdrStartEdge, .rdrEndEdge{ + background: currentColor; + position: absolute; + top: 5px; + left: 0; + right: 0; + bottom: 5px; +} + +.rdrInRange{} + +.rdrStartEdge{ + border-top-left-radius: 1.042em; + border-bottom-left-radius: 1.042em; +} + +.rdrEndEdge{ + border-top-right-radius: 1.042em; + border-bottom-right-radius: 1.042em; +} + +.rdrSelected{ + border-radius: 1.042em; +} + +.rdrDayStartOfMonth, .rdrDayStartOfWeek{ + .rdrInRange, .rdrEndEdge{ + border-top-left-radius: 1.042em; + border-bottom-left-radius: 1.042em; + } +} + +.rdrDayEndOfMonth, .rdrDayEndOfWeek{ + .rdrInRange, .rdrStartEdge{ + border-top-right-radius: 1.042em; + border-bottom-right-radius: 1.042em; + } +} + +.rdrDayStartOfMonth, .rdrDayStartOfWeek{ + .rdrDayInPreview, .rdrDayEndPreview{ + border-top-left-radius: 1.333em; + border-bottom-left-radius: 1.333em; + border-left-width: 1px; + left: -2px; + } +} + +.rdrDayEndOfMonth, .rdrDayEndOfWeek{ + .rdrDayInPreview, .rdrDayStartPreview{ + border-top-right-radius: 1.333em; + border-bottom-right-radius: 1.333em; + border-right-width: 1px; + right: -2px; + } +} + + +.rdrDayStartPreview, .rdrDayInPreview, .rdrDayEndPreview{ + background: rgba(255, 255, 255, 0.09); + position: absolute; + top: 3px; + left: 0px; + right: 0px; + bottom: 3px; + pointer-events: none; + border: 0px solid currentColor; + z-index: 1; +} + + +.rdrDayStartPreview{ + border-top-width: 1px; + border-left-width: 1px; + border-bottom-width: 1px; + border-top-left-radius: 1.333em; + border-bottom-left-radius: 1.333em; + left: -2px; +} + +.rdrDayInPreview{ + border-top-width: 1px; + border-bottom-width: 1px; +} + +.rdrDayEndPreview{ + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-top-right-radius: 1.333em; + border-bottom-right-radius: 1.333em; + right: -2px; +} + +.rdrDefinedRangesWrapper{ + font-size: 12px; + width: 226px; + border-right: solid 1px #eff2f7; + background: #fff; +} + +.rdrStaticRange{ + border: 0; + cursor: pointer; + display: block; + outline: 0; + border-bottom: 1px solid #eff2f7; + padding: 0; + background: #fff; + &:hover, &:focus{ + .rdrStaticRangeLabel{ + background: #eff2f7; + } + } +} + +.rdrStaticRangeLabel{ + display: block; + outline: 0; + line-height: 18px; + padding: 10px 20px; + text-align: left; +} + +.rdrInputRanges{ + padding: 10px 0; +} + +.rdrInputRange{ + align-items: center; + padding: 5px 20px; +} + +.rdrInputRangeInput{ + width: 30px; + height: 30px; + line-height: 30px; + border-radius: 4px; + text-align: center; + border: solid 1px rgb(222, 231, 235); + margin-right: 10px; + &:focus, &:hover{ + border-color: rgb(180, 191, 196); + outline: 0; + } +} + +.rdrCalendarWrapper:not(.rdrDateRangeWrapper) .rdrDayHovered .rdrDayNumber:after{ + content: ''; + border: 1px solid currentColor; + border-radius: 1.333em; + position: absolute; + top: -2px; + bottom: -2px; + left: -2px; + right: -2px; + background: transparent; +} \ No newline at end of file diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 000000000..ebe962e12 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,43 @@ +import { addMonths, areIntervalsOverlapping, startOfMonth, endOfMonth } from 'date-fns'; + +export function calcFocusDate(currentFocusedDate, props) { + const { shownDate, date, months, ranges, focusedRange, displayMode } = props; + // find primary date according the props + let targetInterval; + if (displayMode === 'dateRange') { + const range = ranges[focusedRange[0]] || {}; + targetInterval = { + start: range.startDate, + end: range.endDate, + }; + } else { + targetInterval = { + start: date, + end: date, + }; + } + targetInterval.start = startOfMonth(targetInterval.start || new Date()); + targetInterval.end = endOfMonth(targetInterval.end || targetInterval.start); + + const targetDate = targetInterval.start || targetInterval.end || shownDate || new Date(); + // initial focus + if (!currentFocusedDate) + return shownDate || targetInterval.start || targetInterval.end || new Date(); + const currentFocusInterval = { + start: startOfMonth(currentFocusedDate), + end: endOfMonth(addMonths(currentFocusedDate, months - 1)), + }; + // don't change focused if new selection in view area + if (areIntervalsOverlapping(targetInterval, currentFocusInterval)) { + return currentFocusedDate; + } + return targetDate; +} + +export function findNextRangeIndex(ranges, currentRangeIndex = -1) { + const nextIndex = ranges.findIndex( + (range, i) => i > currentRangeIndex && range.autoFocus !== false && !range.disabled + ); + if (currentRangeIndex === -1) return nextIndex; + return ranges.findIndex(range => range.autoFocus !== false && !range.disabled); +} diff --git a/src/utils/parseInput.js b/src/utils/parseInput.js deleted file mode 100644 index a18259da2..000000000 --- a/src/utils/parseInput.js +++ /dev/null @@ -1,17 +0,0 @@ -import moment from 'moment'; - -export default function parseInput(input, format, timeOfDay) { - let output = null; - - if (typeof input === 'undefined' || input === null || !input || input === '') { - output = moment()[timeOfDay]('day'); - } else if (typeof input === 'string') { - output = moment(input, format)[timeOfDay]('day'); - } else if (typeof input === 'function') { - output = parseInput(input(moment()[timeOfDay]('day')), format, timeOfDay); - } else if (input._isAMomentObject) { - output = input[timeOfDay]('day').clone(); - } - - return output; -} diff --git a/webpack.config.js b/webpack.config.js index 5ed9ab830..02571ffb3 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -30,7 +30,7 @@ module.exports = { }, { test: /\.s?css$/, - use: ['style-loader', 'css-loader?module&importLoaders=1', 'postcss-loader'], + use: ['style-loader', 'css-loader', 'postcss-loader'], }, ], }, diff --git a/yarn.lock b/yarn.lock index e8637e285..b75ee2ac0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,14 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.38" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.38.tgz#c0af5930617e55e050336838e3a3670983b0b2b2" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + "@babel/helper-function-name@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" @@ -55,6 +63,14 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" +"@types/node@*": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5" + +abab@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -72,6 +88,12 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +acorn-globals@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -86,7 +108,7 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.2.1: +acorn@^5.0.0, acorn@^5.1.2, acorn@^5.2.1: version "5.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" @@ -146,7 +168,7 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.1.0: +ansi-styles@^3.1.0, ansi-styles@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: @@ -159,6 +181,12 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -192,6 +220,10 @@ arr-flatten@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -225,7 +257,7 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -arrify@^1.0.0: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -263,19 +295,19 @@ ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - -async@^1.5.2: +async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.2: +async@^2.1.2, async@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: @@ -354,7 +386,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.26.0: +babel-core@^6.0.0, babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: @@ -389,7 +421,7 @@ babel-eslint@^8.1.2: eslint-scope "~3.7.1" eslint-visitor-keys "^1.0.0" -babel-generator@^6.26.0: +babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: @@ -511,6 +543,13 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.1.0.tgz#7fae6f655fffe77e818a8c2868c754a42463fdfd" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.1.0" + babel-loader@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" @@ -531,6 +570,22 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-date-fns@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-date-fns/-/babel-plugin-date-fns-0.1.0.tgz#6ad4e66129bc051bec9300a0a256e73a983c04a6" + +babel-plugin-istanbul@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.5" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.1.0.tgz#c1281dd7887d77a1711dc760468c3b8285dde9ee" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -539,6 +594,10 @@ babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + babel-plugin-syntax-flow@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" @@ -547,7 +606,7 @@ babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" -babel-plugin-syntax-object-rest-spread@^6.8.0: +babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" @@ -739,6 +798,13 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + babel-plugin-transform-flow-strip-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" @@ -843,6 +909,13 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.1.0.tgz#ff4e704102f9642765e2254226050561d8942ec9" + dependencies: + babel-plugin-jest-hoist "^22.1.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" @@ -873,7 +946,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.24.1, babel-template@^6.26.0: +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: @@ -883,7 +956,7 @@ babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -897,7 +970,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -1029,6 +1102,16 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" @@ -1095,6 +1178,12 @@ browserslist@^2.1.2, browserslist@^2.10.2: caniuse-lite "^1.0.30000784" electron-to-chromium "^1.3.30" +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" @@ -1133,6 +1222,10 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -1184,10 +1277,6 @@ caniuse-lite@^1.0.30000784: version "1.0.30000787" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000787.tgz#a76c4fa1d6ac00640447ec83c1e7c6b33dd615c5" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1199,7 +1288,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1209,7 +1298,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: @@ -1221,6 +1310,17 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + chokidar@^1.6.0, chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -1236,6 +1336,10 @@ chokidar@^1.6.0, chokidar@^1.6.1, chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" +ci-info@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1289,6 +1393,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + clone@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" @@ -1339,6 +1451,10 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1349,7 +1465,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.12.x, commander@^2.11.0, commander@^2.9.0, commander@~2.12.1: +commander@2.12.x, commander@^2.11.0, commander@~2.12.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" @@ -1413,11 +1529,15 @@ content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" +content-type-parser@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -convert-source-map@^1.5.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" @@ -1480,13 +1600,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -1555,18 +1668,7 @@ css-loader@^0.28.8: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" -css-modules-loader-core@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" - dependencies: - icss-replace-symbols "1.1.0" - postcss "6.0.1" - postcss-modules-extract-imports "1.1.0" - postcss-modules-local-by-default "1.2.0" - postcss-modules-scope "1.1.0" - postcss-modules-values "1.3.0" - -css-select@^1.1.0: +css-select@^1.1.0, css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" dependencies: @@ -1635,6 +1737,16 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -1657,6 +1769,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@2.0.0-alpha.7: + version "2.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-alpha.7.tgz#245ad16f95764eababfb2c0a41fd5d033c20e57a" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -1689,6 +1805,12 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -1756,10 +1878,18 @@ detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" +diff@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -1768,6 +1898,10 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -1804,7 +1938,7 @@ dom-converter@~0.1: dependencies: utila "~0.3" -dom-serializer@0: +dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" dependencies: @@ -1819,7 +1953,7 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@1: +domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -1827,12 +1961,22 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" +domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.0.tgz#81fe5df81b3f057052cde3a9fa9bf536a85b9ab0" + domhandler@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" dependencies: domelementtype "1" +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" @@ -1846,6 +1990,13 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1905,10 +2056,51 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -entities@~1.1.1: +entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +enzyme-adapter-react-16@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4" + dependencies: + enzyme-adapter-utils "^1.3.0" + lodash "^4.17.4" + object.assign "^4.0.4" + object.values "^1.0.4" + prop-types "^15.6.0" + react-reconciler "^0.7.0" + react-test-renderer "^16.0.0-0" + +enzyme-adapter-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7" + dependencies: + lodash "^4.17.4" + object.assign "^4.0.4" + prop-types "^15.6.0" + +enzyme@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479" + dependencies: + cheerio "^1.0.0-rc.2" + function.prototype.name "^1.0.3" + has "^1.0.1" + is-boolean-object "^1.0.0" + is-callable "^1.1.3" + is-number-object "^1.0.3" + is-string "^1.0.4" + is-subset "^0.1.1" + lodash "^4.17.4" + object-inspect "^1.5.0" + object-is "^1.0.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + object.values "^1.0.4" + raf "^3.4.0" + rst-selector-parser "^2.2.3" + errno@^0.1.3: version "0.1.6" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026" @@ -1927,7 +2119,7 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" -es-abstract@^1.7.0: +es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: @@ -2005,6 +2197,17 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +escodegen@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.5.6" + escope@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" @@ -2141,6 +2344,10 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -2158,7 +2365,7 @@ esrecurse@^4.1.0: estraverse "^4.1.0" object-assign "^4.0.1" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -2198,6 +2405,12 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exec-sh@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + dependencies: + merge "^1.1.3" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -2210,6 +2423,10 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -2222,6 +2439,17 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expect@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.1.0.tgz#f8f9b019ab275d859cbefed531fbaefe8972431d" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.1.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^22.1.0" + jest-message-util "^22.1.0" + jest-regex-util "^22.1.0" + express@^4.16.2: version "4.16.2" resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" @@ -2315,6 +2543,12 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + fbjs@^0.8.16: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" @@ -2344,6 +2578,13 @@ filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -2450,7 +2691,7 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0: +fsevents@^1.0.0, fsevents@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" dependencies: @@ -2474,10 +2715,18 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +function.prototype.name@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + is-callable "^1.1.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -2495,28 +2744,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" - dependencies: - globule "^1.0.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -generic-names@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - dependencies: - loader-utils "^0.2.16" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -2552,17 +2779,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2613,22 +2830,28 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globule@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" - dependencies: - glob "~7.1.1" - lodash "~4.17.4" - minimatch "~3.0.2" - -graceful-fs@^4.1.2, graceful-fs@^4.1.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + handle-thing@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" +handlebars@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" @@ -2637,15 +2860,6 @@ har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -2674,6 +2888,10 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2766,6 +2984,12 @@ html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" +html-encoding-sniffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" @@ -2794,6 +3018,17 @@ html-webpack-plugin@^2.30.1: pretty-error "^2.0.2" toposort "^1.0.0" +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" @@ -2860,7 +3095,7 @@ iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: +icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -2885,14 +3120,17 @@ import-local@^0.1.1: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -2987,6 +3225,10 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3001,6 +3243,12 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-ci@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + dependencies: + ci-info "^1.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" @@ -3047,6 +3295,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -3059,14 +3311,9 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-my-json-valid@^2.12.4: - version "2.17.1" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" +is-number-object@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" is-number@^2.1.0: version "2.1.0" @@ -3112,10 +3359,6 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -3130,6 +3373,14 @@ is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-string@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -3181,49 +3432,391 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" +istanbul-api@^1.1.14: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.1" + istanbul-lib-report "^1.1.2" + istanbul-lib-source-maps "^1.2.2" + istanbul-reports "^1.1.3" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" -js-base64@^2.1.8, js-base64@^2.1.9: - version "2.4.0" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa" +istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" + dependencies: + append-transform "^0.4.0" -js-yaml@^3.4.3, js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" +istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" +istanbul-lib-report@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" dependencies: - argparse "^1.0.7" - esprima "^2.6.0" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +istanbul-reports@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" + dependencies: + handlebars "^4.0.3" -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +jest-changed-files@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.1.4.tgz#1f7844bcb739dec07e5899a633c0cb6d5069834e" + dependencies: + throat "^4.0.0" -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" +jest-cli@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.1.4.tgz#0fe9f3ac881b0cdc00227114c58583a2ebefcc04" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.1.4" + jest-config "^22.1.4" + jest-environment-jsdom "^22.1.4" + jest-get-type "^22.1.0" + jest-haste-map "^22.1.0" + jest-message-util "^22.1.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.1.4" + jest-runtime "^22.1.4" + jest-snapshot "^22.1.2" + jest-util "^22.1.4" + jest-worker "^22.1.0" + micromatch "^2.3.11" + node-notifier "^5.1.2" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" -json-schema-traverse@^0.3.0: +jest-config@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.1.4.tgz#075ffacce83c3e38cf85b1b9ba0d21bd3ee27ad0" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.1.4" + jest-environment-node "^22.1.4" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.1.4" + jest-regex-util "^22.1.0" + jest-resolve "^22.1.4" + jest-util "^22.1.4" + jest-validate "^22.1.2" + pretty-format "^22.1.0" + +jest-diff@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.1.0.tgz#0fad9d96c87b453896bf939df3dc8aac6919ac38" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^22.1.0" + +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + +jest-docblock@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.1.0.tgz#3fe5986d5444cbcb149746eb4b07c57c5a464dfd" + dependencies: + detect-newline "^2.1.0" + +jest-environment-jsdom@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.1.4.tgz#704518ce8375f7ec5de048d1e9c4268b08a03e00" + dependencies: + jest-mock "^22.1.0" + jest-util "^22.1.4" + jsdom "^11.5.1" + +jest-environment-node@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.1.4.tgz#0f2946e8f8686ce6c5d8fa280ce1cd8d58e869eb" + dependencies: + jest-mock "^22.1.0" + jest-util "^22.1.4" + +jest-get-type@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" + +jest-haste-map@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.1.0.tgz#1174c6ff393f9818ebf1163710d8868b5370da2a" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.1.0" + jest-worker "^22.1.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.1.4.tgz#cada0baf50a220c616a9575728b80d4ddedebe8b" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^22.1.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.1.0" + jest-matcher-utils "^22.1.0" + jest-message-util "^22.1.0" + jest-snapshot "^22.1.2" + source-map-support "^0.5.0" + +jest-leak-detector@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz#08376644cee07103da069baac19adb0299b772c2" + dependencies: + pretty-format "^22.1.0" + +jest-matcher-utils@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.1.0.tgz#e164665b5d313636ac29f7f6fe9ef0a6ce04febc" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^22.1.0" + +jest-message-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.1.0.tgz#51ba0794cb6e579bfc4e9adfac452f9f1a0293fc" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.1.0.tgz#87ec21c0599325671c9a23ad0e05c86fb5879b61" + +jest-regex-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" + +jest-resolve-dependencies@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31" + dependencies: + jest-regex-util "^22.1.0" + +jest-resolve@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.1.4.tgz#72b9b371eaac48f84aad4ad732222ffe37692602" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + +jest-runner@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.1.4.tgz#e039039110cb1b31febc0f99e349bf7c94304a2f" + dependencies: + exit "^0.1.2" + jest-config "^22.1.4" + jest-docblock "^22.1.0" + jest-haste-map "^22.1.0" + jest-jasmine2 "^22.1.4" + jest-leak-detector "^22.1.0" + jest-message-util "^22.1.0" + jest-runtime "^22.1.4" + jest-util "^22.1.4" + jest-worker "^22.1.0" + throat "^4.0.0" + +jest-runtime@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.1.4.tgz#1474d9f5cda518b702e0b25a17d4ef3fc563a20c" + dependencies: + babel-core "^6.0.0" + babel-jest "^22.1.0" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.1.4" + jest-haste-map "^22.1.0" + jest-regex-util "^22.1.0" + jest-resolve "^22.1.4" + jest-util "^22.1.4" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^10.0.3" + +jest-snapshot@^22.1.2: + version "22.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.1.2.tgz#b270cf6e3098f33aceeafda02b13eb0933dc6139" + dependencies: + chalk "^2.0.1" + jest-diff "^22.1.0" + jest-matcher-utils "^22.1.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.1.0" + +jest-util@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.1.4.tgz#ac8cbd43ee654102f1941f3f0e9d1d789a8b6a9b" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.1.0" + jest-validate "^22.1.2" + mkdirp "^0.5.1" + +jest-validate@^22.1.2: + version "22.1.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.1.2.tgz#c3b06bcba7bd9a850919fe336b5f2a8c3a239404" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.1.0" + +jest-worker@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.1.0.tgz#0987832fe58fbdc205357f4c19b992446368cafb" + dependencies: + merge-stream "^1.0.1" + +jest@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.1.4.tgz#9ec71373a38f40ff92a3e5e96ae85687c181bb72" + dependencies: + jest-cli "^22.1.4" + +js-base64@^2.1.9: + version "2.4.0" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^11.5.1: + version "11.5.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.5.1.tgz#5df753b8d0bca20142ce21f4f6c039f99a992929" + dependencies: + abab "^1.0.3" + acorn "^5.1.2" + acorn-globals "^4.0.0" + array-equal "^1.0.0" + browser-process-hrtime "^0.1.2" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.1" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "^3.0.2" + pn "^1.0.0" + request "^2.83.0" + request-promise-native "^1.0.3" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.3" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.1" + whatwg-url "^6.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + +json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" @@ -3257,10 +3850,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3302,6 +3891,14 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -3356,35 +3953,31 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.mergewith@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.4: +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -3430,6 +4023,12 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -3462,7 +4061,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0, meow@^3.7.0: +meow@^3.3.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -3481,6 +4080,16 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -3550,7 +4159,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3560,20 +4169,20 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -moment@^2.19.4: - version "2.20.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3593,7 +4202,7 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.3.0, nan@^2.3.2: +nan@^2.3.0: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" @@ -3607,6 +4216,14 @@ ncname@1.0.x: dependencies: xml-char-classes "^1.0.0" +nearley@^2.7.10: + version "2.11.0" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae" + dependencies: + nomnom "~1.6.2" + railroad-diagrams "^1.0.0" + randexp "^0.4.2" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -3628,23 +4245,9 @@ node-forge@0.6.33: version "0.6.33" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" -node-gyp@^3.3.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" node-libs-browser@^2.0.0: version "2.1.0" @@ -3674,6 +4277,15 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + node-pre-gyp@^0.6.39: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" @@ -3690,35 +4302,12 @@ node-pre-gyp@^0.6.39: tar "^2.2.1" tar-pack "^3.4.0" -node-sass@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e" - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.3.2" - node-gyp "^3.3.1" - npmlog "^4.0.0" - request "~2.79.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" +nomnom@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" dependencies: - abbrev "1" + colors "0.5.x" + underscore "~1.4.4" nopt@^4.0.1: version "4.0.1" @@ -3765,7 +4354,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -3788,6 +4377,10 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +nwmatcher@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -3796,10 +4389,43 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.8: +object-inspect@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3" + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + +object-keys@^1.0.11, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object.assign@^4.0.4, object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -3807,6 +4433,15 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" +object.values@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + obuf@^1.0.0, obuf@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" @@ -3821,7 +4456,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.3: +once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -3839,7 +4474,14 @@ opn@^5.1.0: dependencies: is-wsl "^1.1.0" -optionator@^0.8.2: +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -3882,7 +4524,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@0, osenv@^0.1.4: +osenv@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: @@ -3956,6 +4598,12 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse5@^3.0.1, parse5@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + dependencies: + "@types/node" "*" + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -4060,6 +4708,10 @@ pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +pn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + portfinder@^1.0.9: version "1.0.13" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" @@ -4186,6 +4838,15 @@ postcss-import@^10.0.0: read-cache "^1.0.0" resolve "^1.1.7" +postcss-import@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-11.0.0.tgz#a962e2df82d3bc5a6da6a386841747204f41ef5b" + dependencies: + postcss "^6.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + postcss-js@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-1.0.1.tgz#ffaf29226e399ea74b5dce02cab1729d7addbc7b" @@ -4302,42 +4963,33 @@ postcss-mixins@^6.0.1: postcss-simple-vars "^4.1.0" sugarss "^1.0.0" -postcss-modules-extract-imports@1.1.0, postcss-modules-extract-imports@^1.1.0: +postcss-modules-extract-imports@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" dependencies: postcss "^6.0.1" -postcss-modules-local-by-default@1.2.0, postcss-modules-local-by-default@^1.2.0: +postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@1.1.0, postcss-modules-scope@^1.1.0: +postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-values@1.3.0, postcss-modules-values@^1.3.0: +postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" dependencies: icss-replace-symbols "^1.1.0" postcss "^6.0.1" -postcss-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.1.0.tgz#c9f94f76ff6addf7c35b842e69ed442118156bb0" - dependencies: - css-modules-loader-core "^1.1.0" - generic-names "^1.0.2" - postcss "^6.0.1" - string-hash "^1.1.1" - postcss-nested@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-2.1.2.tgz#04057281f9631fef684857fb0119bae04ede03c6" @@ -4466,14 +5118,6 @@ postcss-zindex@^2.0.1: postcss "^5.0.4" uniqs "^2.0.0" -postcss@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^3.2.3" - postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -4543,6 +5187,13 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" +pretty-format@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.1.0.tgz#2277605b40ed4529ae4db51ff62f4be817647914" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -4610,6 +5261,10 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -4618,10 +5273,6 @@ qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -4649,6 +5300,23 @@ querystringify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" +raf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + +randexp@^0.4.2: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -4720,6 +5388,23 @@ react-proxy@^3.0.0-alpha.0: dependencies: lodash "^4.6.1" +react-reconciler@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +react-test-renderer@^16.0.0-0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" + dependencies: + fbjs "^0.8.16" + object-assign "^4.1.1" + prop-types "^15.6.0" + react@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" @@ -4795,6 +5480,12 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" +realpath-native@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + dependencies: + util.promisify "^1.0.0" + redbox-react@^1.3.6: version "1.5.0" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.5.0.tgz#04dab11557d26651bf3562a67c22ace56c5d3967" @@ -4909,32 +5600,19 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" + lodash "^4.13.1" + +request-promise-native@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" request@2.81.0: version "2.81.0" @@ -4963,30 +5641,32 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" combined-stream "~1.0.5" - extend "~3.0.0" + extend "~3.0.1" forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" require-directory@^2.1.1: version "2.1.1" @@ -5025,6 +5705,10 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolve@^1.1.7, resolve@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" @@ -5038,6 +5722,10 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + rgb@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5" @@ -5048,7 +5736,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -5061,6 +5749,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -5081,16 +5776,21 @@ safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" +sane@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56" dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.1.1" -sax@~1.2.1: +sax@^1.2.1, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -5100,13 +5800,6 @@ schema-utils@^0.3.0: dependencies: ajv "^5.0.0" -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -5121,9 +5814,9 @@ selfsigned@^1.9.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" send@0.16.1: version "0.16.1" @@ -5201,6 +5894,10 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -5261,21 +5958,27 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-support@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.2.tgz#1a6297fd5b2e762b39688c7fc91233b60984f0a5" + dependencies: + source-map "^0.6.0" + source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.4.2: +source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" -source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -5340,6 +6043,10 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + stackframe@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" @@ -5352,11 +6059,9 @@ statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" -stdout-stream@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" - dependencies: - readable-stream "^2.0.1" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" stream-browserify@^2.0.1: version "2.0.1" @@ -5379,9 +6084,12 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" @@ -5424,16 +6132,16 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -5465,7 +6173,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.2.3: +supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -5495,6 +6203,10 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + table@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" @@ -5523,7 +6235,7 @@ tar-pack@^3.4.0: tar "^2.2.1" uid-number "^0.0.6" -tar@^2.0.0, tar@^2.2.1: +tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -5535,10 +6247,24 @@ tcomb@^2.5.1: version "2.7.0" resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-2.7.0.tgz#10d62958041669a5d53567b9a4ee8cde22b1c2b0" +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -5563,6 +6289,10 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -5579,12 +6309,18 @@ toposort@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" -tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -5593,12 +6329,6 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -"true-case-path@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" - dependencies: - glob "^6.0.4" - tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -5609,10 +6339,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -5645,7 +6371,7 @@ uglify-js@3.3.x: commander "~2.12.1" source-map "~0.6.1" -uglify-js@^2.8.29: +uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: @@ -5670,6 +6396,10 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" @@ -5721,6 +6451,13 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + util@0.10.3, util@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -5743,10 +6480,14 @@ uuid@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.0.0, uuid@^3.1.0: +uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" +uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + v8flags@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" @@ -5782,6 +6523,19 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + watchpack@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" @@ -5796,6 +6550,10 @@ wbuf@^1.1.0, wbuf@^1.7.2: dependencies: minimalistic-assert "^1.0.0" +webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + webpack-dev-middleware@^1.11.0: version "1.12.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" @@ -5892,10 +6650,24 @@ websocket-extensions@>=0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" +whatwg-encoding@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-url@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -5908,7 +6680,7 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@1, which@^1.2.9: +which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -5928,6 +6700,10 @@ wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -5943,6 +6719,14 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" @@ -5953,6 +6737,10 @@ xml-char-classes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + xtend@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -5971,39 +6759,38 @@ yargs-parser@^4.2.0: dependencies: camelcase "^3.0.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" dependencies: camelcase "^4.1.0" -yargs@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" + camelcase "^4.1.0" + +yargs@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.1.tgz#5fe1ea306985a099b33492001fa19a1e61efe285" + dependencies: + cliui "^4.0.0" decamelize "^1.1.1" + find-up "^2.1.0" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^4.2.0" + yargs-parser "^8.1.0" -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" +yargs@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: camelcase "^3.0.0" cliui "^3.2.0" @@ -6017,7 +6804,7 @@ yargs@^7.0.0: string-width "^1.0.2" which-module "^1.0.0" y18n "^3.2.1" - yargs-parser "^5.0.0" + yargs-parser "^4.2.0" yargs@^8.0.2: version "8.0.2"