diff options
-rw-r--r-- | .eslintrc.json | 4 | ||||
-rw-r--r-- | .stylelintrc.json | 21 | ||||
-rw-r--r-- | bundles.json | 11 | ||||
-rw-r--r-- | changelog.md | 650 | ||||
-rw-r--r-- | demo/dist/demo.css | 2 | ||||
-rw-r--r-- | demo/dist/demo.js | 2 | ||||
-rw-r--r-- | demo/dist/demo.js.map | 2 | ||||
-rw-r--r-- | demo/dist/error.css | 1 | ||||
-rw-r--r-- | demo/src/less/settings/breakpoints.less | 9 | ||||
-rw-r--r-- | demo/src/less/settings/colors.less | 27 | ||||
-rw-r--r-- | demo/src/less/settings/plyr.less | 18 | ||||
-rw-r--r-- | demo/src/less/settings/type.less | 20 | ||||
-rw-r--r-- | demo/src/sass/bundles/demo.scss (renamed from demo/src/less/bundles/demo.less) | 14 | ||||
-rw-r--r-- | demo/src/sass/bundles/error.scss (renamed from demo/src/less/bundles/error.less) | 0 | ||||
-rw-r--r-- | demo/src/sass/components/buttons.scss (renamed from demo/src/less/components/buttons.less) | 40 | ||||
-rw-r--r-- | demo/src/sass/components/header.scss (renamed from demo/src/less/components/header.less) | 10 | ||||
-rw-r--r-- | demo/src/sass/components/icons.scss (renamed from demo/src/less/components/icons.less) | 6 | ||||
-rw-r--r-- | demo/src/sass/components/links.scss (renamed from demo/src/less/components/links.less) | 23 | ||||
-rw-r--r-- | demo/src/sass/components/lists.scss (renamed from demo/src/less/components/lists.less) | 0 | ||||
-rw-r--r-- | demo/src/sass/components/navigation.scss (renamed from demo/src/less/components/navigation.less) | 2 | ||||
-rw-r--r-- | demo/src/sass/components/players.scss (renamed from demo/src/less/components/players.less) | 20 | ||||
-rw-r--r-- | demo/src/sass/layout/core.scss (renamed from demo/src/less/layout/core.less) | 32 | ||||
-rw-r--r-- | demo/src/sass/layout/error.scss (renamed from demo/src/less/layout/error.less) | 12 | ||||
-rw-r--r-- | demo/src/sass/layout/grid.scss (renamed from demo/src/less/layout/grid.less) | 8 | ||||
-rw-r--r-- | demo/src/sass/lib/animation.scss (renamed from demo/src/less/lib/animation.less) | 1 | ||||
-rw-r--r-- | demo/src/sass/lib/decimal.scss | 79 | ||||
-rw-r--r-- | demo/src/sass/lib/fontface.scss (renamed from demo/src/less/lib/fontface.less) | 30 | ||||
-rw-r--r-- | demo/src/sass/lib/mixins.scss (renamed from demo/src/less/lib/mixins.less) | 49 | ||||
-rw-r--r-- | demo/src/sass/lib/normalize.scss (renamed from demo/src/less/lib/normalize.less) | 0 | ||||
-rw-r--r-- | demo/src/sass/lib/reset.scss (renamed from demo/src/less/lib/reset.less) | 0 | ||||
-rw-r--r-- | demo/src/sass/settings/breakpoints.scss | 6 | ||||
-rw-r--r-- | demo/src/sass/settings/colors.scss | 27 | ||||
-rw-r--r-- | demo/src/sass/settings/cosmetic.scss (renamed from demo/src/less/settings/cosmetic.less) | 6 | ||||
-rw-r--r-- | demo/src/sass/settings/icons.scss (renamed from demo/src/less/settings/icons.less) | 2 | ||||
-rw-r--r-- | demo/src/sass/settings/layout.scss (renamed from demo/src/less/settings/layout.less) | 2 | ||||
-rw-r--r-- | demo/src/sass/settings/plyr.scss | 18 | ||||
-rw-r--r-- | demo/src/sass/settings/spacing.scss (renamed from demo/src/less/settings/spacing.less) | 2 | ||||
-rw-r--r-- | demo/src/sass/settings/type.scss | 20 | ||||
-rw-r--r-- | demo/src/sass/type/base.scss (renamed from demo/src/less/type/base.less) | 18 | ||||
-rw-r--r-- | demo/src/sass/type/headings.scss (renamed from demo/src/less/type/headings.less) | 8 | ||||
-rw-r--r-- | demo/src/sass/utilities/color.scss (renamed from demo/src/less/utilities/color.less) | 4 | ||||
-rw-r--r-- | demo/src/sass/utilities/hidden.scss (renamed from demo/src/less/utilities/hidden.less) | 0 | ||||
-rw-r--r-- | dist/plyr.css | 1 | ||||
-rw-r--r-- | dist/plyr.js.map | 2 | ||||
-rw-r--r-- | gulpfile.js | 86 | ||||
-rw-r--r-- | package-lock.json | 8112 | ||||
-rw-r--r-- | package.json | 7 | ||||
-rw-r--r-- | src/js/captions.js | 5 | ||||
-rw-r--r-- | src/js/controls.js | 33 | ||||
-rw-r--r-- | src/js/defaults.js | 43 | ||||
-rw-r--r-- | src/js/fullscreen.js | 8 | ||||
-rw-r--r-- | src/js/listeners.js | 34 | ||||
-rw-r--r-- | src/js/plyr.js | 14 | ||||
-rw-r--r-- | src/js/ui.js | 5 | ||||
-rw-r--r-- | src/less/settings.less | 112 | ||||
-rw-r--r-- | src/sass/base.scss (renamed from src/less/base.less) | 37 | ||||
-rw-r--r-- | src/sass/bundle.scss (renamed from src/less/bundle.less) | 0 | ||||
-rw-r--r-- | src/sass/components/badges.scss (renamed from src/less/components/badges.less) | 8 | ||||
-rw-r--r-- | src/sass/components/captions.scss (renamed from src/less/components/captions.less) | 34 | ||||
-rw-r--r-- | src/sass/components/control.scss (renamed from src/less/components/control.less) | 54 | ||||
-rw-r--r-- | src/sass/components/controls.scss (renamed from src/less/components/controls.less) | 54 | ||||
-rw-r--r-- | src/sass/components/embed.scss (renamed from src/less/components/embed.less) | 20 | ||||
-rw-r--r-- | src/sass/components/menus.scss (renamed from src/less/components/menus.less) | 116 | ||||
-rw-r--r-- | src/sass/components/progress.scss (renamed from src/less/components/progress.less) | 46 | ||||
-rw-r--r-- | src/sass/components/sliders.scss (renamed from src/less/components/sliders.less) | 71 | ||||
-rw-r--r-- | src/sass/components/times.scss (renamed from src/less/components/times.less) | 8 | ||||
-rw-r--r-- | src/sass/components/tooltips.scss (renamed from src/less/components/tooltips.less) | 44 | ||||
-rw-r--r-- | src/sass/components/video.scss (renamed from src/less/components/video.less) | 4 | ||||
-rw-r--r-- | src/sass/components/volume.scss (renamed from src/less/components/volume.less) | 4 | ||||
-rw-r--r-- | src/sass/lib/animation.scss (renamed from src/less/lib/animation.less) | 8 | ||||
-rw-r--r-- | src/sass/lib/mixins.scss (renamed from src/less/lib/mixins.less) | 63 | ||||
-rw-r--r-- | src/sass/settings.scss | 102 | ||||
-rw-r--r-- | src/sass/states/fullscreen.scss (renamed from src/less/states/fullscreen.less) | 12 | ||||
-rw-r--r-- | src/sass/utils/animation.scss (renamed from src/less/utils/animation.less) | 0 | ||||
-rw-r--r-- | src/sass/utils/hidden.scss (renamed from src/less/utils/hidden.less) | 14 | ||||
-rw-r--r-- | src/scss/mixins.scss | 29 | ||||
-rw-r--r-- | src/scss/plyr.scss | 764 | ||||
-rw-r--r-- | src/scss/variables.scss | 73 | ||||
-rw-r--r-- | yarn.lock | 5731 |
79 files changed, 6998 insertions, 9966 deletions
diff --git a/.eslintrc.json b/.eslintrc.json index c0ea7ff9..89426cd5 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -30,7 +30,9 @@ "name": "error", "message": "Use local parameter instead." } - ] + ], + "array-bracket-newline": [2, { "minItems": 2 }], + "array-element-newline": [2, { "minItems": 2 }] }, "parserOptions": { "sourceType": "module" diff --git a/.stylelintrc.json b/.stylelintrc.json index dc24e607..728265e3 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,7 +1,24 @@ { - "extends": ["stylelint-config-standard", "stylelint-config-prettier"], + "plugins": ["stylelint-selector-bem-pattern", "stylelint-scss"], + "extends": ["stylelint-config-sass-guidelines", "stylelint-config-prettier"], "rules": { + "selector-class-pattern": null, + "selector-no-qualifying-type": [ + true, + { + "ignore": ["attribute", "class"] + } + ], "indentation": 4, - "string-quotes": "single" + "string-quotes": "single", + "max-nesting-depth": 2, + "plugin/selector-bem-pattern": { + "preset": "bem", + "componentName": "(([a-z0-9]+(?!-$)-?)+)", + "componentSelectors": { + "initial": "\\.{componentName}(((__|--)(([a-z0-9\\[\\]'=]+(?!-$)-?)+))+)?$" + }, + "ignoreSelectors": [".*\\.has-.*", ".*\\.is-.*"] + } } } diff --git a/bundles.json b/bundles.json index 726ecbbd..bdfa2c8d 100644 --- a/bundles.json +++ b/bundles.json @@ -1,19 +1,16 @@ { "plyr": { - "less": { - "plyr.css": "src/less/bundle.less" - }, "sass": { - "plyr.css": "src/scss/plyr.scss" + "plyr.css": "src/sass/plyr.scss" }, "js": { "plyr.js": "src/js/plyr.js" } }, "demo": { - "less": { - "demo.css": "demo/src/less/bundles/demo.less", - "error.css": "demo/src/less/bundles/error.less" + "sass": { + "demo.css": "demo/src/sass/bundles/demo.scss", + "error.css": "demo/src/sass/bundles/error.csss" }, "js": { "demo.js": "demo/src/js/demo.js" diff --git a/changelog.md b/changelog.md index 46547433..bef48386 100644 --- a/changelog.md +++ b/changelog.md @@ -1,530 +1,646 @@ # Changelog ## v2.0.12 -- Ability to set custom `blankUrl` for source changes (https://github.com/sampotts/plyr/pull/504) -- Ability to set caption button listener (https://github.com/sampotts/plyr/pull/468) + +* Ability to set custom `blankUrl` for source changes (https://github.com/sampotts/plyr/pull/504) +* Ability to set caption button listener (https://github.com/sampotts/plyr/pull/468) ## v2.0.11 -- Fix for `cleanUp` being called twice (thanks to @sebastiancarlsson) -- Fix for YouTube controls on iPad (fixes #391) + +* Fix for `cleanUp` being called twice (thanks to @sebastiancarlsson) +* Fix for YouTube controls on iPad (fixes #391) ## v2.0.10 -- Added seek event fixes for Vimeo and YouTube (fixes #409) -- Added support for embed URLs rather than ID only (fixes #345) + +* Added seek event fixes for Vimeo and YouTube (fixes #409) +* Added support for embed URLs rather than ID only (fixes #345) ## v2.0.9 -- Temporary patch for the YouTube API issues with `getDuration()` (relates to #374) + +* Temporary patch for the YouTube API issues with `getDuration()` (relates to #374) ## v2.0.8 -- Added `isPaused()` API method (thanks to @darrena092) -- Allowed `.on()` API method to be chainable (thanks to @gurupras) (fixes #357) -- Improved the "awful" rendering of captions on small screens in fullscreen mode (fixes #390) -- Fix for Firefox VTT compatibility (thanks to @magourex) -- Fix for Firefox Developer Edition blank video due to `-webkit-mask-image` issue (fixes #392) -- Added Issue and PR templates with the aim of reducing duplicate or duff issues + +* Added `isPaused()` API method (thanks to @darrena092) +* Allowed `.on()` API method to be chainable (thanks to @gurupras) (fixes #357) +* Improved the "awful" rendering of captions on small screens in fullscreen mode (fixes #390) +* Fix for Firefox VTT compatibility (thanks to @magourex) +* Fix for Firefox Developer Edition blank video due to `-webkit-mask-image` issue (fixes #392) +* Added Issue and PR templates with the aim of reducing duplicate or duff issues ## v2.0.7 -- Fixed `getCurrentTime()` method (fixes #351) -- Added `getVolume()` , `isMuted()` and `getDuration()` API methods (fixes #346) + +* Fixed `getCurrentTime()` method (fixes #351) +* Added `getVolume()` , `isMuted()` and `getDuration()` API methods (fixes #346) ## v2.0.6 -- Fixed merge issue with `Updated define to work with AMD imports #326` PR -- Code formatting + +* Fixed merge issue with `Updated define to work with AMD imports #326` PR +* Code formatting ## v2.0.5 -- Fix for Vimeo in IE9 & IE10 -- Fix for HTML5 elements not firing `ready` event + +* Fix for Vimeo in IE9 & IE10 +* Fix for HTML5 elements not firing `ready` event ## v2.0.4 -- Fix for Firefox full screen (fixes #343) + +* Fix for Firefox full screen (fixes #343) ## v2.0.3 -- Set 'global' keyboard shortcut option to false as default, added `<textarea>` to editable elements to be ignored + +* Set 'global' keyboard shortcut option to false as default, added `<textarea>` to editable elements to be ignored ## v2.0.2 -- Added 'global' keyboard shortcut option + +* Added 'global' keyboard shortcut option ## v2.0.1 -- Version bump for NPM (sorry for folks who upgraded to the now deleted v1.9.0 through NPM) + +* Version bump for NPM (sorry for folks who upgraded to the now deleted v1.9.0 through NPM) # v2.0.0 -This version contains several potential ***breaking changes***: -- `setup()` has been reverted to pre v1.8.0 behaviour; meaning it will return the *instance* rather than the *element*. This is because the reference to the instance is no longer added to the original element (see below). -- The reference to the `plyr` instance is now added to the media element rather than original container. This is because if a container with multiple children was passed to `setup()` the references to all instances would have been added to the container, creating issues. I would recommend using the return value from `setup()` or the new `get()` method to access the instance. -- Players will always be wrapped in their own div now - this makes `setup()` and `destroy()` cleaner. This *may* break any custom styling based on DOM position. -- Players no longer seek to 0 on 'ended' - this is to fix a bug with Microsoft Edge as it triggers 'ended' on media change for whatever reason. They'll never change ;-) +This version contains several potential **_breaking changes_**: + +* `setup()` has been reverted to pre v1.8.0 behaviour; meaning it will return the _instance_ rather than the _element_. This is because the reference to the instance is no longer added to the original element (see below). +* The reference to the `plyr` instance is now added to the media element rather than original container. This is because if a container with multiple children was passed to `setup()` the references to all instances would have been added to the container, creating issues. I would recommend using the return value from `setup()` or the new `get()` method to access the instance. +* Players will always be wrapped in their own div now - this makes `setup()` and `destroy()` cleaner. This _may_ break any custom styling based on DOM position. +* Players no longer seek to 0 on 'ended' - this is to fix a bug with Microsoft Edge as it triggers 'ended' on media change for whatever reason. They'll never change ;-) And some other changes and bug fixes: -- New `get()` method on the global plyr object to get all instances inside a container -- New API methods: - - `getOriginal()` to get the original, *unmodified* element plyr was setup on (`<video>`, `<audio>` or empty `<div>` for YouTube and Vimeo) - - `getContainer()` to get the players outer wrapper element - - `getMedia()` to get the players media element (`<video>`, `<audio>` or empty `<div>` for YouTube and Vimeo) - - `getEmbed()` to access the YouTube or Vimeo API directly - - `getType()` to get the type of the player - - `isReady()` to determine if an instance has completed setup and necessary APIs are loaded (for YouTube / Vimeo) - - `on()` to provide an easy way to listen to events - - `stop()` to, you guessed it, stop the player -- `destroy()` now works correctly for YouTube and Vimeo (fixes #272) -- New `destroyed` event when `destroy()` has completed (original element is passed as event.target) -- Default volume is now 10 (max) rather than 5 -- Sprite is only loaded once (fixes #259) -- Fixes for Vimeo post message bugs on source change or destroy (fixes #318) -- Save caption state in storage (fixes #311) -- Added keyboard shortcuts to the current focused player (with `keyboardShortcuts` boolean option to disable) (fixes #309) -- Fix for captions bug (fixes #332) -- Change to AMD (fixes #298) +* New `get()` method on the global plyr object to get all instances inside a container +* New API methods: - `getOriginal()` to get the original, _unmodified_ element plyr was setup on (`<video>`, `<audio>` or empty `<div>` for YouTube and Vimeo) - `getContainer()` to get the players outer wrapper element - `getMedia()` to get the players media element (`<video>`, `<audio>` or empty `<div>` for YouTube and Vimeo) - `getEmbed()` to access the YouTube or Vimeo API directly - `getType()` to get the type of the player - `isReady()` to determine if an instance has completed setup and necessary APIs are loaded (for YouTube / Vimeo) - `on()` to provide an easy way to listen to events - `stop()` to, you guessed it, stop the player +* `destroy()` now works correctly for YouTube and Vimeo (fixes #272) +* New `destroyed` event when `destroy()` has completed (original element is passed as event.target) +* Default volume is now 10 (max) rather than 5 +* Sprite is only loaded once (fixes #259) +* Fixes for Vimeo post message bugs on source change or destroy (fixes #318) +* Save caption state in storage (fixes #311) +* Added keyboard shortcuts to the current focused player (with `keyboardShortcuts` boolean option to disable) (fixes #309) +* Fix for captions bug (fixes #332) +* Change to AMD (fixes #298) ## v1.8.12 -- Vimeo keyboard focus fix (Fixes #317) -- Fix for Vimeo on basic support devices + +* Vimeo keyboard focus fix (Fixes #317) +* Fix for Vimeo on basic support devices ## v1.8.11 -- Fix for keyboard navigation on Vimeo (Fixes #317) -- Fix for bug introduced in v1.8.9 related to additional controls -- Vimeo API upgrade -- Fix for YouTube bug introduced in v1.8.9 -- Added support for passing array to .setup() (Fixes #319) + +* Fix for keyboard navigation on Vimeo (Fixes #317) +* Fix for bug introduced in v1.8.9 related to additional controls +* Vimeo API upgrade +* Fix for YouTube bug introduced in v1.8.9 +* Added support for passing array to .setup() (Fixes #319) ## v1.8.10 -- Fix for seek issues introduced in v1.8.9 + +* Fix for seek issues introduced in v1.8.9 ## v1.8.9 -- Fix for fullscreen not being defined (Fixes #295) -- Fix for multiline captions (Fixes #314) -- Clean up of type checks and fix for `restart()` (Fixes #315) -- Fix for `MEDIA_ERR_SRC_NOT_SUPPORTED` when calling `.source()` API method + +* Fix for fullscreen not being defined (Fixes #295) +* Fix for multiline captions (Fixes #314) +* Clean up of type checks and fix for `restart()` (Fixes #315) +* Fix for `MEDIA_ERR_SRC_NOT_SUPPORTED` when calling `.source()` API method ## v1.8.8 -- Added getCurrentTime API method (fixes #292) -- Fix for !hideControls on touch devices (fixes #303) + +* Added getCurrentTime API method (fixes #292) +* Fix for !hideControls on touch devices (fixes #303) ## v1.8.7 -- Line height fix + +* Line height fix ## v1.8.6 -- Reverted font size change + +* Reverted font size change ## v1.8.5 -- Fixed overflow issues (fixes #286) + +* Fixed overflow issues (fixes #286) ## v1.8.4 -- Fix for large play button on small videos + +* Fix for large play button on small videos ## v1.8.3 -- Disabled iPad support for YouTube and Vimeo due to iOS limitations with iFrame playback -- Fixed IE11 icon loading (fixes #269) -- Updated screenshot (fixes #281) -- Added WordPress plugin (fixes #239) -- Added Neos plugin -- Added HLS, Shaka and dash.js examples (see #235 for more) -- Improvements for controls hiding and showing on touch devices + +* Disabled iPad support for YouTube and Vimeo due to iOS limitations with iFrame playback +* Fixed IE11 icon loading (fixes #269) +* Updated screenshot (fixes #281) +* Added WordPress plugin (fixes #239) +* Added Neos plugin +* Added HLS, Shaka and dash.js examples (see #235 for more) +* Improvements for controls hiding and showing on touch devices ## v1.8.2 -- Fixed event bubbling + +* Fixed event bubbling ## v1.8.1 -- Fixed inaccurate log message + +* Fixed inaccurate log message # v1.8.0 -- ***(Important)*** `setup()` now returns the element Plyr was setup on rather than the `plyr` object. This means `var player = plyr.setup()[0];` would now be `var player = plyr.setup()[0].plyr;`. This improves support for React and other virtual dom frameworks as mentioned in #254 -- Fixed using a relative URL for `iconUrl` in IE (fixes #269) + +* **_(Important)_** `setup()` now returns the element Plyr was setup on rather than the `plyr` object. This means `var player = plyr.setup()[0];` would now be `var player = plyr.setup()[0].plyr;`. This improves support for React and other virtual dom frameworks as mentioned in #254 +* Fixed using a relative URL for `iconUrl` in IE (fixes #269) # v1.7.0 -- SASS cleanup (fixes #265) -- Docs tidy up to help quick start (fixes #253) -- Fix for issues with data attribute options passing (fixes #257) -- ***(Important)*** Removed the requirement for a wrapper div to setup Plyr and removed the dependency on the `plyr` classname as a JS hook. By default it will now look for `<video>`, `<audio>` and `[data-type]` elements. If you are just calling `setup()` with a `<div class="plyr">` you may want to give it a good test after upgrading. You can probably remove the wrapper div. The reason behind this is to make setup easier for newcomers and prevent the styling being used on unsupported players (because the plyr classname was used as a CSS and JS hook - which isn't ideal) -- Renamed the 'docs' folder to `demo` to avoid confusion - the readme is the docs after all + +* SASS cleanup (fixes #265) +* Docs tidy up to help quick start (fixes #253) +* Fix for issues with data attribute options passing (fixes #257) +* **_(Important)_** Removed the requirement for a wrapper div to setup Plyr and removed the dependency on the `plyr` classname as a JS hook. By default it will now look for `<video>`, `<audio>` and `[data-type]` elements. If you are just calling `setup()` with a `<div class="plyr">` you may want to give it a good test after upgrading. You can probably remove the wrapper div. The reason behind this is to make setup easier for newcomers and prevent the styling being used on unsupported players (because the plyr classname was used as a CSS and JS hook - which isn't ideal) +* Renamed the 'docs' folder to `demo` to avoid confusion - the readme is the docs after all ## v1.6.20 -- Fix for multiple sprites being requested (fixes #259) + +* Fix for multiple sprites being requested (fixes #259) ## v1.6.19 -- Fix for scroll direction issues on volume control (fixes #258) + +* Fix for scroll direction issues on volume control (fixes #258) ## v1.6.18 -- Reduced rounding of seek value from 1 decimal point to 4 (fixes #242) + +* Reduced rounding of seek value from 1 decimal point to 4 (fixes #242) ## v1.6.17 -- Added `disableContextMenu` option to hide the right click context menu (fixes #248 and #225) + +* Added `disableContextMenu` option to hide the right click context menu (fixes #248 and #225) ## v1.6.16 -- Always hide standard controls (fixes #225) -- Fix for Tooltips overflowing (fixes #230) + +* Always hide standard controls (fixes #225) +* Fix for Tooltips overflowing (fixes #230) ## v1.6.15 -- Restore scroll position when exiting full screen (fixes #236) + +* Restore scroll position when exiting full screen (fixes #236) ## v1.6.14 -- SVG sprite loading automatically for an easier setup -- Touch devices now show controls on touch rather than pausing playback + +* SVG sprite loading automatically for an easier setup +* Touch devices now show controls on touch rather than pausing playback ## v1.6.13 -- Decreased sensitivity and inverted scroll on volume slider (scroll up to increase, down to decrease) + +* Decreased sensitivity and inverted scroll on volume slider (scroll up to increase, down to decrease) ## v1.6.12 -- Fix for undefined buffer error -- Add scroll listener on volume slider (PR #227 bty @igoradamenko) + +* Fix for undefined buffer error +* Add scroll listener on volume slider (PR #227 bty @igoradamenko) ## v1.6.11 -- Fix for Vimeo fullscreen (fixes #214) + +* Fix for Vimeo fullscreen (fixes #214) ## v1.6.10 -- Changed default icon prefix from 'icon' to 'plyr' to avoid clashes + +* Changed default icon prefix from 'icon' to 'plyr' to avoid clashes ## v1.6.9 -- Added 'latest' CDN option -- Renamed `sprite.svg` to `plyr.svg` to be inline with the other package files + +* Added 'latest' CDN option +* Renamed `sprite.svg` to `plyr.svg` to be inline with the other package files ## v1.6.8 -- Fix for bug introduced in v1.6.7 + +* Fix for bug introduced in v1.6.7 ## v1.6.7 -- Fixes for using `source` API method on iOS + +* Fixes for using `source` API method on iOS ## v1.6.6 -- Icons cleaned up -- IE11 button fix for tooltips (fixes #210) + +* Icons cleaned up +* IE11 button fix for tooltips (fixes #210) ## v1.6.5 -- IE UI bug fixes + +* IE UI bug fixes ## v1.6.4 -- Bug fix for undefined progress bar + +* Bug fix for undefined progress bar ## v1.6.3 -- Seek back to 0 for all media on ended -- Check for HTML5 video on ended reload -- Update to docs for `showPosterOnEnd` option + +* Seek back to 0 for all media on ended +* Check for HTML5 video on ended reload +* Update to docs for `showPosterOnEnd` option ## v1.6.2 -- Fix for tooltip displaying when duration is not set (fixes #177) -- `showPosterOnEnd` option to show poster when HTML5 video ended (fixes #59) -- Error handler for YouTube (fixes #189) -- Initial SoundCloud support (fixes #194) -- Other minor bug fixes + +* Fix for tooltip displaying when duration is not set (fixes #177) +* `showPosterOnEnd` option to show poster when HTML5 video ended (fixes #59) +* Error handler for YouTube (fixes #189) +* Initial SoundCloud support (fixes #194) +* Other minor bug fixes ## v1.6.1 -- Tooltip changes for accessibility + +* Tooltip changes for accessibility ## v1.6.0 -- New, cleaner, UI: - - Controls are now overlaid, maintaining the video's ratio and making sizing easier - - A large play button can now be overlaid over videos - - Default number of control buttons reduced - - New play, pause, rewind and fast forward icons - - Flexbox all the things! -- Tidied up the LESS (and SCSS) as part of the above, variables and mixins in seprate files amking customization and upgrades easier -- Toggle mute bug fix; if a player was muted previously and the user refreshed, unmuting would have meant volume was still zero (effectively muted), now the config default value is used. Not ideal but good for now -- New `iconUrl` option allowing specifying a same origin SVG sprite location. Loading this way means you don't need the AJAX sprite loading JavaScript -- `click` option renamed to `clickToPlay` to make it a bit more self explanatory. Unfortunately cross origin SVG sprites is not supported in any browser yet :-( -- `hideControls` is now a global option, rather than being exclusive to fullscreen. Controls are now hidden after 2 seconds of no mouse movement. Controls are always shown when media is paused or stopped. This is defaulted to true. -- `sass` folder in `src` renamed from to `scss` + +* New, cleaner, UI: - Controls are now overlaid, maintaining the video's ratio and making sizing easier - A large play button can now be overlaid over videos - Default number of control buttons reduced - New play, pause, rewind and fast forward icons - Flexbox all the things! +* Tidied up the LESS (and SCSS) as part of the above, variables and mixins in seprate files amking customization and upgrades easier +* Toggle mute bug fix; if a player was muted previously and the user refreshed, unmuting would have meant volume was still zero (effectively muted), now the config default value is used. Not ideal but good for now +* New `iconUrl` option allowing specifying a same origin SVG sprite location. Loading this way means you don't need the AJAX sprite loading JavaScript +* `click` option renamed to `clickToPlay` to make it a bit more self explanatory. Unfortunately cross origin SVG sprites is not supported in any browser yet :-( +* `hideControls` is now a global option, rather than being exclusive to fullscreen. Controls are now hidden after 2 seconds of no mouse movement. Controls are always shown when media is paused or stopped. This is defaulted to true. +* `sass` folder in `src` renamed from to `scss` ## v1.5.21 -- Bug fix for embeds: `play` not being defined (fixes #185 and #186) + +* Bug fix for embeds: `play` not being defined (fixes #185 and #186) ## v1.5.20 -- Bug fix for autoplay option + +* Bug fix for autoplay option ## v1.5.19 -- Fix for accessing `embed` property after `ready` event fired + +* Fix for accessing `embed` property after `ready` event fired ## v1.5.18 -- Added 'ready' event for initial setup complete or source change occurs -- Fixed SASS stylesheet references to transparentize -- Added default font stack to controls -- Docs fixes inc controls HTML (fixes #180) + +* Added 'ready' event for initial setup complete or source change occurs +* Fixed SASS stylesheet references to transparentize +* Added default font stack to controls +* Docs fixes inc controls HTML (fixes #180) ## v1.5.17 -- Expose YouTube and Vimeo API (docs update required) (fixes #176) -- Auto set title based on YouTube getVideoData() title property -- Bug fix for Vimeo API change (Uncaught TypeError: Cannot read property 'value' of undefined) due to a change their end + +* Expose YouTube and Vimeo API (docs update required) (fixes #176) +* Auto set title based on YouTube getVideoData() title property +* Bug fix for Vimeo API change (Uncaught TypeError: Cannot read property 'value' of undefined) due to a change their end ## v1.5.16 -- Cancel requests on source change (fixes #174) + +* Cancel requests on source change (fixes #174) ## v1.5.15 -- Fix for CustomEvent polyfill and related bug (see #172) + +* Fix for CustomEvent polyfill and related bug (see #172) ## v1.5.14 -- Volume storage fix (fixes #171) + +* Volume storage fix (fixes #171) ## v1.5.13 -- Fix for manual caption rendering + +* Fix for manual caption rendering ## v1.5.12 -- Added a duration option to pass the duration of the file -- Added the ability to set options per element by setting a data-plyr attribute on the target elements (this might be useful for the duration option for example) -- Fixes for Chrome and Safari caption rendering, they now use the default texttrack and cuechange events -- Firefox bug fix for event not defined + +* Added a duration option to pass the duration of the file +* Added the ability to set options per element by setting a data-plyr attribute on the target elements (this might be useful for the duration option for example) +* Fixes for Chrome and Safari caption rendering, they now use the default texttrack and cuechange events +* Firefox bug fix for event not defined ## v1.5.11 -- iOS embed bug fixes (fixes #166) -- Hide IE/Edge <input type='range'> tooltip (since we have a styled one) (fixes #160) -- SASS bug fix for default values (fixes #158) + +* iOS embed bug fixes (fixes #166) +* Hide IE/Edge <input type='range'> tooltip (since we have a styled one) (fixes #160) +* SASS bug fix for default values (fixes #158) ## v1.5.9 + v1.5.10 -- NPM bug fixes + +* NPM bug fixes ## v1.5.8 -- Fix for touch device seek tooltip -- Seek improvements + +* Fix for touch device seek tooltip +* Seek improvements ## v1.5.7 -- Fix for control tooltips always showing + +* Fix for control tooltips always showing ## v1.5.6 -- Seek tooltip (option for tooltips changed, please check docs) -- SASS compile error fixes (fixes #148) -- Fullscreen fixes for controls not always hiding/showing (fixes #149) -- Screen reader icon fixes (title was being read twice due to the tooltip/hidden label) + +* Seek tooltip (option for tooltips changed, please check docs) +* SASS compile error fixes (fixes #148) +* Fullscreen fixes for controls not always hiding/showing (fixes #149) +* Screen reader icon fixes (title was being read twice due to the tooltip/hidden label) ## v1.5.5 -- Fixed controls.md example -- Bug fix for docs error page -- Bug fix for controls tooltips + +* Fixed controls.md example +* Bug fix for docs error page +* Bug fix for controls tooltips ## v1.5.4 -- Minor bug fix for clicking video to play/pause after source change + +* Minor bug fix for clicking video to play/pause after source change ## v1.5.3 -- Minor bug fix for occasional display of 0:00 as the media duration + +* Minor bug fix for occasional display of 0:00 as the media duration ## v1.5.2 -- `handlers` option renamed to `listeners` -- Added event listeners for all types to the plyr container (playback, fullscreen, captions etc - see docs) -- Removed onSetup config option (use the 'setup' event instead, plyr element is event.plyr) -- Style bug fixes -- Vimeo seek bug fix (requires whole seconds when seeking) -- Fix for fullscreen player (using class hook, not browser fullscreen) + +* `handlers` option renamed to `listeners` +* Added event listeners for all types to the plyr container (playback, fullscreen, captions etc - see docs) +* Removed onSetup config option (use the 'setup' event instead, plyr element is event.plyr) +* Style bug fixes +* Vimeo seek bug fix (requires whole seconds when seeking) +* Fix for fullscreen player (using class hook, not browser fullscreen) ## v1.5.1 -- Fix for event listeners being duplicated on source change + +* Fix for event listeners being duplicated on source change # v1.5.0 -- Vimeo support (fixes #8) -- New options for initialization (you can now pass a selector, HTMLElement or NodeList) (fixes #118) -- Switched to BEM methodology (you will need to change CSS and probably HTML) -- Decoupled CSS and JS hooks (fixes #129) -- Custom controls container (fixes #98) -- Fix for private/incognito mode local storage bug (fixes #131) -- UMD module setup (fixes #121) -- Specify iframe title for Vimeo and YouTube (fixes #124) -- Better handling of mission controls (fixes #132) -- Retain classname on source change (fixes #120) -- Increased thumb size on seek (partially fixes #130) -- Passing no argument to `source` api method, now returns current source (by @gurupras) -- Ability to add custom handlers to controls prior to Plyr bindings (by @gurupras) -- Keyboard navigation improvements (focus on seek, focus trap in fullscreen) (fixes #135) + +* Vimeo support (fixes #8) +* New options for initialization (you can now pass a selector, HTMLElement or NodeList) (fixes #118) +* Switched to BEM methodology (you will need to change CSS and probably HTML) +* Decoupled CSS and JS hooks (fixes #129) +* Custom controls container (fixes #98) +* Fix for private/incognito mode local storage bug (fixes #131) +* UMD module setup (fixes #121) +* Specify iframe title for Vimeo and YouTube (fixes #124) +* Better handling of mission controls (fixes #132) +* Retain classname on source change (fixes #120) +* Increased thumb size on seek (partially fixes #130) +* Passing no argument to `source` api method, now returns current source (by @gurupras) +* Ability to add custom handlers to controls prior to Plyr bindings (by @gurupras) +* Keyboard navigation improvements (focus on seek, focus trap in fullscreen) (fixes #135) ## v1.3.5 -- Fixed bug with API use on basic supported browsers + +* Fixed bug with API use on basic supported browsers ## v1.3.4 -- Code cleanup by @calvintam236 + +* Code cleanup by @calvintam236 ## v1.3.3 -- Removed captions being read by screen readers + +* Removed captions being read by screen readers ## v1.3.2 -- Voiceover fix for captions + +* Voiceover fix for captions ## v1.3.1 -- ARIA improvements for captions being read + +* ARIA improvements for captions being read ## v1.3.0 -- Internationalization support (i18n) using default controls (required markup changes to controls) -- ARIA enhancements for controls (required markup changes to controls) -- Captions legibility improvements -- YouTube bug fixes + +* Internationalization support (i18n) using default controls (required markup changes to controls) +* ARIA enhancements for controls (required markup changes to controls) +* Captions legibility improvements +* YouTube bug fixes ## v1.2.6 -- SASS updates and fixes (cheers @ChristianPV) + +* SASS updates and fixes (cheers @ChristianPV) ## v1.2.5 -- Fix for YouTube quality (let them decide quality) + +* Fix for YouTube quality (let them decide quality) ## v1.2.4 -- Fix for omitted kind attribute on <track> (fixes #88) + +* Fix for omitted kind attribute on <track> (fixes #88) ## v1.2.3 -- Fix for YouTube on iPhone or unsupported browsers (fallback to YouTube native) -- Docs tidy up -- Fullscreen for Safari fix (fixes #96) + +* Fix for YouTube on iPhone or unsupported browsers (fallback to YouTube native) +* Docs tidy up +* Fullscreen for Safari fix (fixes #96) ## v1.2.2 -- Fix for :focus keyboard vs mouse (fixes #61) -- Fix for caption positioning in full screen (fixes #92) + +* Fix for :focus keyboard vs mouse (fixes #61) +* Fix for caption positioning in full screen (fixes #92) ## v1.2.1 -- Tooltip bug fix + +* Tooltip bug fix # v1.2.0 -- Added YouTube support + +* Added YouTube support ## v1.1.13 -- Added icon prefix option for when using default controls + +* Added icon prefix option for when using default controls ## v1.1.13 -- Logic tweaks for hiding controls in fullscreen + +* Logic tweaks for hiding controls in fullscreen ## v1.1.12 -- Bug fix for Chrome Canary + +* Bug fix for Chrome Canary ## v1.1.11 -- Bug fix + +* Bug fix ## v1.1.10 -- Bug fix + +* Bug fix ## v1.1.9 -- Bug fix for 1.1.8 + +* Bug fix for 1.1.8 ## v1.1.8 -- setVolume API method improvements (fixes #83) + +* setVolume API method improvements (fixes #83) ## v1.1.7 -- Restore classname on destroy() + +* Restore classname on destroy() ## v1.1.6 -- New API methods (fixes #77), Fix for non strict mode (fixes #78) + +* New API methods (fixes #77), Fix for non strict mode (fixes #78) ## v1.1.5 -- Fix for incorrect `isFullscreen()` return value in Mozilla (fixes #38) + +* Fix for incorrect `isFullscreen()` return value in Mozilla (fixes #38) ## v1.1.4 -- Minor bug fixes + +* Minor bug fixes ## v1.1.3 -- Fixes for random id used in controls with multiple instances and one call to setup -- Audio player UI improvements + +* Fixes for random id used in controls with multiple instances and one call to setup +* Audio player UI improvements ## v1.1.2 -- Added an onSetup callback option -- Added fullscreen API methods `toggleFullscreen()` (must be user iniated), and `isFullscreen()` + +* Added an onSetup callback option +* Added fullscreen API methods `toggleFullscreen()` (must be user iniated), and `isFullscreen()` ## v1.1.1 -- Fix for unsupported browser handling -- Fix for config.controls having no effect + +* Fix for unsupported browser handling +* Fix for config.controls having no effect ## v1.1.0 -- Added config option to set which controls are shown (if using the default controls html) and better handling of missing controls + +* Added config option to set which controls are shown (if using the default controls html) and better handling of missing controls ## v1.0.31 -- Display duration on `metadataloaded` + +* Display duration on `metadataloaded` ## v1.0.30 -- Fixed bug with media longer than 60 minutes (fixes #69) + +* Fixed bug with media longer than 60 minutes (fixes #69) ## v1.0.29 -- Added option to hide controls on fullscreen (default `true`) while palying, after 1s. Pause, mouse hover on progress, or focus on a child control re-shows the controls. On touch a tap of the video (which plays/pauses the video by default) is required. (fixes #47) -- Fixed a bug with caption toggle in 1.0.28 + +* Added option to hide controls on fullscreen (default `true`) while palying, after 1s. Pause, mouse hover on progress, or focus on a child control re-shows the controls. On touch a tap of the video (which plays/pauses the video by default) is required. (fixes #47) +* Fixed a bug with caption toggle in 1.0.28 ## v1.0.28 -- Added API support for browsers that don't have full plyr support (pretty much <=IE9 and `<video>` on iPhone/iPod) + +* Added API support for browsers that don't have full plyr support (pretty much <=IE9 and `<video>` on iPhone/iPod) ## v1.0.27 -- Keyboard accessibility improvements (fixes #66) + +* Keyboard accessibility improvements (fixes #66) ## v1.0.26 -- Fixes for SASS (cheers @brunowego) -- Indentation reset to 4 spaces + +* Fixes for SASS (cheers @brunowego) +* Indentation reset to 4 spaces ## v1.0.25 -- Fixes for iOS volume controls (hidden) -- Classnames for left/right controls changed + +* Fixes for iOS volume controls (hidden) +* Classnames for left/right controls changed ## v1.0.24 -- Added tooltip option to display labels as tooltips (fixes #50) + +* Added tooltip option to display labels as tooltips (fixes #50) ## v1.0.23 -- Handling loading states in the UI (fixes #36) + +* Handling loading states in the UI (fixes #36) ## v1.0.22 -- Added support() API method for checking mimetype support -- Added source() API method for setting media source(s) (fixes #44) -- Added poster() API method for setting poster source -- Refactored captions logic for manual captions + +* Added support() API method for checking mimetype support +* Added source() API method for setting media source(s) (fixes #44) +* Added poster() API method for setting poster source +* Refactored captions logic for manual captions ## v1.0.21 -- Added an <input type="range"> for seeking to improve experience (and support dragging) (fixes #40, #42) -- Icons for restart and captions improved (and some IDs changed) (fixes #49) + +* Added an <input type="range"> for seeking to improve experience (and support dragging) (fixes #40, #42) +* Icons for restart and captions improved (and some IDs changed) (fixes #49) ## v1.0.20 -- Default controls included (Fixes #45) -- Volume changes on `input` as well as `change` (fixes #43) -- Fix for undefined Play text -- License changed to MIT + +* Default controls included (Fixes #45) +* Volume changes on `input` as well as `change` (fixes #43) +* Fix for undefined Play text +* License changed to MIT ## v1.0.19 -- Fixed firefox fullscreen issue (fixes #38) + +* Fixed firefox fullscreen issue (fixes #38) ## v1.0.18 -- Added CDN references + +* Added CDN references ## v1.0.17 -- SASS support added (thanks to @brunowego) -- Docs completely separated to avoid any confusion -- New gulp tasks (will add more documentation for this) + +* SASS support added (thanks to @brunowego) +* Docs completely separated to avoid any confusion +* New gulp tasks (will add more documentation for this) ## v1.0.16 -- Aria label is now dynamic + +* Aria label is now dynamic ## v1.0.15 -- Fix for seek time display in controls -- More documentation for controls html + +* Fix for seek time display in controls +* More documentation for controls html ## v1.0.14 -- Minor change for bootstrap compatibility + +* Minor change for bootstrap compatibility ## v1.0.13 -- Minor tweaks + +* Minor tweaks ## v1.0.12 -- Handle native events (issue #34) + +* Handle native events (issue #34) ## v1.0.11 -- Bug fixes for fullscreen mode + +* Bug fixes for fullscreen mode ## v1.0.10 -- Bower includes src files now -- Folder re-arrangement + +* Bower includes src files now +* Folder re-arrangement ## v1.0.9 -- Added buffer progress bar -- Fixed Safari 8 caption track (it needs to be removed from the DOM like in Safari 7) -- Added validation (it works or it doesn't basically) of the `html` option passed + +* Added buffer progress bar +* Fixed Safari 8 caption track (it needs to be removed from the DOM like in Safari 7) +* Added validation (it works or it doesn't basically) of the `html` option passed ## v1.0.8 -- Bug fix + +* Bug fix ## v1.0.7 -- Storing user selected volume in local storage + +* Storing user selected volume in local storage ## v1.0.6 -- Fullscreen fallback for older browsers to use "full window" + +* Fullscreen fallback for older browsers to use "full window" ## v1.0.5 -- More minor bug fixes and improvements + +* More minor bug fixes and improvements ## v1.0.4 -- Fixed caption legibility issues + +* Fixed caption legibility issues ## v1.0.3 -- Minor bug fixes + +* Minor bug fixes ## v1.0.2 -- Added OGG to <audio> example for Firefox -- Fixed IE11 fullscreen issues + +* Added OGG to <audio> example for Firefox +* Fixed IE11 fullscreen issues ## v1.0.1 -- Bug fixes for IE (as per usual) -- Added CSS hooks for media type -- Return instances of Plyr to the element + +* Bug fixes for IE (as per usual) +* Added CSS hooks for media type +* Return instances of Plyr to the element ## v1.0.0 -- Initial release + +* Initial release diff --git a/demo/dist/demo.css b/demo/dist/demo.css index e9bae18f..1f4a2cbc 100644 --- a/demo/dist/demo.css +++ b/demo/dist/demo.css @@ -1 +1 @@ -@charset 'UTF-8';@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format('woff');font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format('woff');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format('woff');font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format('woff');font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format('woff');font-weight:900;font-style:normal;font-display:swap}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a,button.faux-link{background:0 0}a:focus,button.faux-link:focus{outline:thin dotted}a:active,a:hover,button.faux-link:active,button.faux-link:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:'\201C' '\201D' '\2018' '\2019'}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}*,::after,::before{box-sizing:border-box}body,html{display:-webkit-box;display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{display:-webkit-box;display:flex;min-height:100%;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.grid{-webkit-box-flex:1;flex:1;overflow:auto}main{margin:auto;text-align:center}aside{position:relative;display:-webkit-box;display:flex;flex-shrink:0;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;width:100%;padding:15px;background:#fff;text-align:center;color:#55646b;text-shadow:none}aside .icon{margin-right:10px;fill:#4baaf4}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.faux-link.tab-focus{outline:0;box-shadow:0 0 0 3px rgba(75,170,244,.35)}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;width:100%;max-width:1280px}.grid>*{-webkit-box-flex:1;flex:1}}html{font-size:100%}body{font-family:Gordita,Avenir,'Helvetica Neue',sans-serif;line-height:1.75;color:#fff;font-weight:500;text-shadow:0 1px 1px rgba(0,0,0,.15);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.938rem}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{display:block;font-size:13px;font-size:.813rem}h1{margin:0 0 10px;font-weight:600;letter-spacing:-.025em;font-size:64px;font-size:4rem}.button,.button__count{position:relative;display:-webkit-inline-box;display:inline-flex;vertical-align:middle;-webkit-box-align:center;align-items:center;padding:15px;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);background:#fff;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-shadow:none;color:#55646b}.button{padding-left:20px;padding-right:20px;transition:all .2s ease;font-weight:600}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{-webkit-transform:translateY(-1px);transform:translateY(-1px);box-shadow:0 2px 2px rgba(0,0,0,.1)}.button:focus{outline:0}.button.tab-focus{outline:0;box-shadow:0 0 0 3px rgba(255,255,255,.35)}.button:active{-webkit-transform:translateY(1px);transform:translateY(1px)}.button--with-count{display:-webkit-inline-box;display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{margin-left:10px;-webkit-animation:fadein .2s ease;animation:fadein .2s ease}.button__count::before{content:'';position:absolute;width:0;height:0;right:100%;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:5px solid transparent;border-right-color:#fff;border-left-width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{max-width:360px;margin-right:60px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;width:16px;height:16px;vertical-align:-3px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{position:relative;margin:0;padding:0;width:auto;border:0;background:0 0;vertical-align:baseline;text-align:inherit;font:inherit;line-height:1.75;cursor:pointer;-moz-user-select:text;text-shadow:inherit;border-radius:0}a,button.faux-link{position:relative;border-bottom:1px dotted currentColor;transition:all .2s ease;text-decoration:none;color:#fff;font-weight:600}a::after,button.faux-link::after{content:'';position:absolute;top:100%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:0;height:1px;transition:width .2s ease;background:currentColor}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.faux-link.tab-focus{outline:0;box-shadow:0 0 0 3px rgba(255,255,255,.35)}li,ul{list-style:none;margin:0;padding:0}nav{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{margin:20px auto;border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2)}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{content:'';pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:inherit;font-weight:500;line-height:1.7;direction:ltr;text-shadow:none;transition:box-shadow .3s ease;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr:focus{outline:0}.plyr--full-ui,.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:border-box}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{padding:3px 4px;border-radius:2px;background:#4f5b5f;color:rgba(255,255,255,.9);font-size:10px;line-height:1}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:10px;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;-webkit-animation:plyr-fade-in .3s ease;animation:plyr-fade-in .3s ease;color:#fff;font-size:12px;text-align:center}.plyr__captions span{border-radius:2px;padding:.2em .5em;background:rgba(0,0,0,.8);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media only screen and (min-width:480px){.plyr__captions{padding:20px;font-size:13px}}@media only screen and (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr__control{position:relative;flex-shrink:0;overflow:visible;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:all .3s ease;color:inherit}.plyr__control svg{width:18px;height:18px;display:block;fill:currentColor;pointer-events:none}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{display:none;position:absolute;z-index:2;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);padding:15px;background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff}.plyr__control--overlaid svg{position:relative;left:2px;width:20px;height:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media only screen and (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:35px 10px 10px;background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .4s ease-in-out,-webkit-transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;color:#4f5b5f}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%);pointer-events:none}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{padding-bottom:56.25%;height:0}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;-webkit-transform:translateY(-35.9375%);transform:translateY(-35.9375%)}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr__menu{display:-webkit-box;display:flex;position:relative}.plyr__menu .plyr__control svg{transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;z-index:1;bottom:100%;right:-3px;margin-bottom:10px;-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.15);white-space:nowrap;text-align:left;color:#4f5b5f;font-size:13px}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{content:'';position:absolute;top:100%;right:15px;height:0;width:0;border:4px solid transparent;border-top-color:rgba(255,255,255,.9)}.plyr__menu__container ul{margin:0;padding:7px;list-style:none;overflow:hidden}.plyr__menu__container .plyr__control{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;width:100%;padding:4px 14px;color:#4f5b5f;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__menu__container .plyr__control::after{content:'';position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:4px solid transparent;transition:border-color .2s ease}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{right:5px;border-left-color:rgba(79,91,95,.8)}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{position:relative;width:calc(100% - 14px);margin:7px;margin-bottom:3px;padding-left:28px;font-weight:500}.plyr__menu__container .plyr__control--back::after{left:7px;border-right-color:rgba(79,91,95,.8)}.plyr__menu__container .plyr__control--back::before{content:'';position:absolute;top:100%;left:0;right:0;height:1px;overflow:hidden;margin-top:4px;background:#b7c5cd;box-shadow:0 1px 0 #fff}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{position:relative;display:block;flex-shrink:0;height:16px;width:16px;border-radius:100%;background:rgba(0,0,0,.1);margin-right:10px;transition:all .3s ease}.plyr__menu__container label.plyr__control input[type=radio]+span::after{content:'';position:absolute;height:6px;width:6px;top:5px;left:5px;-webkit-transform:scale(0);transform:scale(0);opacity:0;background:#fff;border-radius:100%;transition:opacity .3s ease,-webkit-transform .3s ease;transition:transform .3s ease,opacity .3s ease;transition:transform .3s ease,opacity .3s ease,-webkit-transform .3s ease}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{-webkit-transform:scale(1);transform:scale(1);opacity:1}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;margin-left:auto;margin-right:-7px;padding-left:25px;pointer-events:none;overflow:hidden}.plyr__progress{position:relative;display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{left:0;font-size:11px}.plyr__progress--buffer{position:absolute;left:0;top:50%;width:100%;height:6px;margin:-3px 0 0;padding:0;background:0 0;border:none;border-radius:100px;-webkit-appearance:none}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(47,52,61,.2) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.2) 50%,rgba(47,52,61,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;cursor:pointer;border:none;background:0 0;transition:box-shadow .3s ease;border-radius:28px;color:#1aafff;-webkit-appearance:none}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{height:6px;background:0 0;border:0;border-radius:3px;-webkit-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:14px;width:14px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box}.plyr--full-ui input[type=range]::-moz-range-track{height:6px;background:0 0;border:0;border-radius:3px;-moz-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-moz-range-thumb{position:relative;height:14px;width:14px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box}.plyr--full-ui input[type=range]::-moz-range-progress{height:6px;background:currentColor;border-radius:3px}.plyr--full-ui input[type=range]::-ms-track{color:transparent;height:6px;background:0 0;border:0;border-radius:3px;-ms-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-ms-fill-upper{height:6px;background:0 0;border:0;border-radius:3px;-ms-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-ms-fill-lower{height:6px;background:0 0;border:0;border-radius:3px;-ms-user-select:none;user-select:none;transition:all .3s ease;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{position:relative;height:14px;width:14px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr--full-ui input[type=range]:active::-webkit-slider-thumb{background:#1aafff;border-color:#fff;-webkit-transform:scale(1.42857143);transform:scale(1.42857143)}.plyr--full-ui input[type=range]:active::-moz-range-thumb{background:#1aafff;border-color:#fff;transform:scale(1.42857143)}.plyr--full-ui input[type=range]:active::-ms-thumb{background:#1aafff;border-color:#fff;transform:scale(1.42857143)}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background:rgba(183,197,205,.66)}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media only screen and (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;pointer-events:none;opacity:0;background:rgba(255,255,255,.9);border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);border-left:4px solid transparent;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;z-index:0;overflow:hidden}.plyr__volume{-webkit-box-flex:1;flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media only screen and (min-width:480px){.plyr__volume{max-width:50px}}@media only screen and (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-moz-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-ms-fullscreen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:fullscreen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{height:100%;width:100%;margin:0;background:#000;border-radius:0!important;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr--no-transition{transition:none!important}.plyr--full-ui [hidden]{display:none}.plyr--full-ui [aria-hidden=true]{display:none}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}
\ No newline at end of file +@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a,button.faux-link{background:0 0}a:focus,button.faux-link:focus{outline:thin dotted}a:active,a:hover,button.faux-link:active,button.faux-link:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:'\201C' '\201D' '\2018' '\2019'}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}body,html{display:-webkit-box;display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-height:100%}.grid{-webkit-box-flex:1;flex:1;overflow:auto}main{margin:auto;text-align:center}aside{-webkit-box-align:center;align-items:center;background:#fff;color:#55646b;display:-webkit-box;display:flex;flex-shrink:0;-webkit-box-pack:center;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;max-width:1280px;width:100%}.grid>*{-webkit-box-flex:1;flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:"decimal-round(0.9375, 3)rem";color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:"decimal-round(0.8125, 3)rem";display:block}h1{font-size:64px;font-size:"decimal-round(4, 3)rem";font-weight:600;letter-spacing:-.025em;margin:0 0 10px}.button,.button__count{-webkit-box-align:center;align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:-webkit-inline-box;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{-webkit-transform:translateY(1px);transform:translateY(1px)}.button--with-count{display:-webkit-inline-box;display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{-webkit-animation:fadein .2s ease;animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}li,ul{list-style:none;margin:0;padding:0}nav{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{0%{opacity:.5;-webkit-transform:translateY(10px);transform:translateY(10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes plyr-popup{0%{opacity:.5;-webkit-transform:translateY(10px);transform:translateY(10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:rgba(255,255,255,.9);font-size:10px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{-webkit-animation:plyr-fade-in .3s ease;animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,-webkit-transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out,-webkit-transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;-webkit-transform:translateY(100%);transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:5625%}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__video-embed>div{padding-bottom:20000%;position:relative;-webkit-transform:translateY(-3593.75%);transform:translateY(-3593.75%)}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr__menu{display:-webkit-box;display:flex;position:relative}.plyr__menu .plyr__control svg{transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:1}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container .plyr__control{-webkit-box-align:center;align-items:center;color:#4f5b5f;display:-webkit-box;display:flex;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:border-color .2s ease}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;-webkit-transform:scale(0);transform:scale(0);transition:opacity .3s ease,-webkit-transform .3s ease;transition:transform .3s ease,opacity .3s ease;transition:transform .3s ease,opacity .3s ease,-webkit-transform .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.2) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.2) 50%,rgba(47,52,61,.2) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;cursor:pointer;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:2px solid transparent;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:2px solid transparent;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:2px solid transparent;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range]:active::-webkit-slider-thumb{background:#1aafff;border-color:#fff;-webkit-transform:scale("");transform:scale("")}.plyr--full-ui input[type=range]:active::-moz-range-thumb{background:#1aafff;border-color:#fff;transform:scale("")}.plyr--full-ui input[type=range]:active::-ms-thumb{background:#1aafff;border-color:#fff;transform:scale("")}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background:rgba(183,197,205,.66)}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{-webkit-box-flex:1;flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;position:fixed;top:0;bottom:0;left:0;right:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr--no-transition{transition:none!important}.plyr--full-ui [hidden]{display:none}.plyr--full-ui [aria-hidden=true]{display:none}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}
\ No newline at end of file diff --git a/demo/dist/demo.js b/demo/dist/demo.js index f73613bd..07a5e9b8 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -1,3 +1,3 @@ -document.addEventListener("DOMContentLoaded",function(){function e(e,t,o){e&&e.classList[o?"add":"remove"](t)}function t(t,n){if(t in r&&(n||t!==a)&&(a.length||t!==r.video)){switch(t){case r.video:o.source={type:"video",title:"View From A Blue Moon",sources:[{src:"media/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],poster:"media/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"media/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"media/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case r.audio:o.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case r.youtube:o.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:o.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}a=t,Array.from(i).forEach(function(t){return e(t.parentElement,"active",!1)}),e(document.querySelector('[data-source="'+t+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+t).removeAttribute("hidden")}}window.shr&&window.shr.setup({count:{classname:"button__count"}});document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&window.setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var o=new window.Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","fullscreen","pip","airplay"],keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"}});window.player=o;var i=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},a=window.location.hash.replace("#",""),n=window.history&&window.history.pushState;if(Array.from(i).forEach(function(e){e.addEventListener("click",function(){var o=e.getAttribute("data-source");t(o),n&&window.history.pushState({type:o},"","#"+o)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),n){var s=!a.length;s&&(a=r.video),a in r&&window.history.replaceState({type:a},"",s?"":"#"+a),a!==r.video&&t(a,!0)}}),"plyr.io"===window.location.host&&(!function(e,t,o,i,r,a,n){e.GoogleAnalyticsObject="ga",e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,a=t.createElement("script"),n=t.getElementsByTagName("script")[0],a.async=1,a.src="//www.google-analytics.com/analytics.js",n.parentNode.insertBefore(a,n)}(window,document),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview")); +document.addEventListener("DOMContentLoaded",function(){function e(e,t,o){e&&e.classList[o?"add":"remove"](t)}function t(t,o){if(t in a&&(o||t!==n)&&(n.length||t!==a.video)){switch(t){case a.video:i.source={type:"video",title:"View From A Blue Moon",sources:[{src:"media/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],poster:"media/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"media/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"media/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case a.audio:i.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case a.youtube:i.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case a.vimeo:i.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}n=t,Array.from(r).forEach(function(t){return e(t.parentElement,"active",!1)}),e(document.querySelector('[data-source="'+t+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+t).removeAttribute("hidden")}}window.shr&&window.shr.setup({count:{classname:"button__count"}});var o="tab-focus";document.addEventListener("focusout",function(e){e.target.classList.remove(o)}),document.addEventListener("keydown",function(e){9===e.keyCode&&window.setTimeout(function(){document.activeElement.classList.add(o)},0)});var i=new window.Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","fullscreen","pip","airplay"],keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"}});window.player=i;var r=document.querySelectorAll("[data-source]"),a={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},n=window.location.hash.replace("#",""),s=window.history&&window.history.pushState;if(Array.from(r).forEach(function(e){e.addEventListener("click",function(){var o=e.getAttribute("data-source");t(o),s&&window.history.pushState({type:o},"","#"+o)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),s){var c=!n.length;c&&(n=a.video),n in a&&window.history.replaceState({type:n},"",c?"":"#"+n),n!==a.video&&t(n,!0)}}),"plyr.io"===window.location.host&&(!function(e,t,o,i,r,a,n){e.GoogleAnalyticsObject="ga",e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,a=t.createElement("script"),n=t.getElementsByTagName("script")[0],a.async=1,a.src="//www.google-analytics.com/analytics.js",n.parentNode.insertBefore(a,n)}(window,document),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview")); //# sourceMappingURL=demo.js.map diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map index 604de15f..ad95dca8 100644 --- a/demo/dist/demo.js.map +++ b/demo/dist/demo.js.map @@ -1 +1 @@ -{"version":3,"file":"demo.js","sources":["demo/src/js/demo.js"],"sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new window.Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen', 'pip', 'airplay'],\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n });\n\n // Expose for testing\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'media/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n },\n ],\n poster: 'media/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'media/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'media/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"],"names":["document","addEventListener","toggleClass","element","className","state","classList","newSource","type","init","types","currentType","length","video","source","audio","youtube","vimeo","from","buttons","forEach","button","parentElement","querySelector","querySelectorAll","setAttribute","removeAttribute","window","shr","setup","target","remove","event","keyCode","setTimeout","activeElement","add","player","Plyr","location","hash","replace","historySupport","history","pushState","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"AAMAA,SAASC,iBAAiB,mBAAoB,oBAiEjCC,EAAYC,EAASC,EAAWC,GACjCF,KACQG,UAAUD,EAAQ,MAAQ,UAAUD,YAK3CG,EAAUC,EAAMC,MAEfD,KAAQE,IAAYD,GAAQD,IAASG,KAAkBA,EAAYC,QAAUJ,IAASE,EAAMG,eAI1FL,QACCE,EAAMG,QACAC,aACG,cACC,sCAGM,kDACC,qBAGN,2DAGM,iBACC,kBACE,SACJ,yDACI,SAGH,iBACC,iBACE,SACJ,8DAOhBJ,EAAMK,QACAD,aACG,cACC,4EAGM,mFACC,kBAGD,mFACC,0BAOjBJ,EAAMM,UACAF,aACG,cACC,sCAGM,mDACK,wBAOrBJ,EAAMO,QACAH,aACG,sBAGO,sCACK,aAYhBN,QAGRU,KAAKC,GAASC,QAAQ,mBAAUlB,EAAYmB,EAAOC,cAAe,UAAU,OAGtEtB,SAASuB,+BAA+Bf,QAAW,UAAU,SAGnEU,KAAKlB,SAASwB,iBAAiB,gBAAgBJ,QAAQ,cACpDK,aAAa,SAAU,eAEvBF,8BAA8Bf,GAAQkB,gBAAgB,WA1K/DC,OAAOC,YACAA,IAAIC,wBAEQ,4BASd5B,iBAAiB,WAAY,cAC5B6B,OAAOxB,UAAUyB,OAJN,wBAQZ9B,iBAAiB,UAAW,YACX,IAAlB+B,EAAMC,gBAMHC,WAAW,oBACLC,cAAc7B,UAAU8B,IAhBpB,cAiBd,SAIDC,EAAS,IAAIV,OAAOW,KAAK,kBACpB,QACA,gCACE,qCAEG,uBAGE,qBAGF,aAED,aAAc,OAAQ,WAAY,eAAgB,OAAQ,SAAU,WAAY,WAAY,aAAc,MAAO,wBAEhH,oDAKTD,OAASA,MAGVlB,EAAUnB,SAASwB,iBAAiB,iBACpCd,SACK,cACA,gBACE,gBACF,SAEPC,EAAcgB,OAAOY,SAASC,KAAKC,QAAQ,IAAK,IAC9CC,EAAiBf,OAAOgB,SAAWhB,OAAOgB,QAAQC,mBAiHlD1B,KAAKC,GAASC,QAAQ,cACjBnB,iBAAiB,QAAS,eACvBO,EAAOa,EAAOwB,aAAa,iBAEvBrC,GAENkC,UACOC,QAAQC,WAAYpC,QAAQ,OAAQA,cAMhDP,iBAAiB,WAAY,YAC5B+B,EAAM3B,OAAS,SAAU2B,EAAM3B,SACrB2B,EAAM3B,MAAMG,QAK1BkC,EAAgB,KACV7B,GAASF,EAAYC,OAGvBC,MACcH,EAAMG,OAIpBF,KAAeD,UACRiC,QAAQG,mBAEDnC,GAEV,GACAE,EAAQ,OAASF,GAKrBA,IAAgBD,EAAMG,SACZF,GAAa,MAQN,YAAzBgB,OAAOY,SAASQ,iBACNC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,KACtBC,sBAYoE,OAXtE,GACIP,EAAA,IACA,YACKA,EAAA,GAAKQ,EAAIR,EAAA,GAAKQ,OAASC,KAAKC,cAErC,GAAKC,EAAI,EAAI,IAAIC,OACbX,EAAEY,cAKW,YAJbZ,EAAEa,qBAIW,UAJa,KAC5BC,MAAQ,IACRC,IAEyB,4CADzBC,WAAWC,aAAab,EAAGC,IAC9B3B,OAAQ3B,iBACJmE,GAAG,SAAU,iBAAkB,eAC/BA,GAAG,OAAQ"}
\ No newline at end of file +{"version":3,"file":"demo.js","sources":["demo/src/js/demo.js"],"sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new window.Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen', 'pip', 'airplay'],\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n });\n\n // Expose for testing\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'media/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n },\n ],\n poster: 'media/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'media/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'media/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"],"names":["document","addEventListener","toggleClass","element","className","state","classList","newSource","type","init","types","currentType","length","video","source","audio","youtube","vimeo","from","buttons","forEach","button","parentElement","querySelector","querySelectorAll","setAttribute","removeAttribute","window","shr","setup","tabClassName","target","remove","event","keyCode","setTimeout","activeElement","add","player","Plyr","location","hash","replace","historySupport","history","pushState","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"AAMAA,SAASC,iBAAiB,mBAAoB,oBAiEjCC,EAAYC,EAASC,EAAWC,GACjCF,KACQG,UAAUD,EAAQ,MAAQ,UAAUD,YAK3CG,EAAUC,EAAMC,MAEfD,KAAQE,IAAYD,GAAQD,IAASG,KAAkBA,EAAYC,QAAUJ,IAASE,EAAMG,eAI1FL,QACCE,EAAMG,QACAC,aACG,cACC,sCAGM,kDACC,qBAGN,2DAGM,iBACC,kBACE,SACJ,yDACI,SAGH,iBACC,iBACE,SACJ,8DAOhBJ,EAAMK,QACAD,aACG,cACC,4EAGM,mFACC,kBAGD,mFACC,0BAOjBJ,EAAMM,UACAF,aACG,cACC,sCAGM,mDACK,wBAOrBJ,EAAMO,QACAH,aACG,sBAGO,sCACK,aAYhBN,QAGRU,KAAKC,GAASC,QAAQ,mBAAUlB,EAAYmB,EAAOC,cAAe,UAAU,OAGtEtB,SAASuB,+BAA+Bf,QAAW,UAAU,SAGnEU,KAAKlB,SAASwB,iBAAiB,gBAAgBJ,QAAQ,cACpDK,aAAa,SAAU,eAEvBF,8BAA8Bf,GAAQkB,gBAAgB,WA1K/DC,OAAOC,YACAA,IAAIC,wBAEQ,uBAMjBC,EAAe,qBAGZ7B,iBAAiB,WAAY,cAC5B8B,OAAOzB,UAAU0B,OAAOF,cAIzB7B,iBAAiB,UAAW,YACX,IAAlBgC,EAAMC,gBAMHC,WAAW,oBACLC,cAAc9B,UAAU+B,IAAIP,IACtC,SAIDQ,EAAS,IAAIX,OAAOY,KAAK,kBACpB,QACA,gCACE,qCAEG,uBAGE,qBAGF,aAED,aAAc,OAAQ,WAAY,eAAgB,OAAQ,SAAU,WAAY,WAAY,aAAc,MAAO,wBAEhH,oDAKTD,OAASA,MAGVnB,EAAUnB,SAASwB,iBAAiB,iBACpCd,SACK,cACA,gBACE,gBACF,SAEPC,EAAcgB,OAAOa,SAASC,KAAKC,QAAQ,IAAK,IAC9CC,EAAiBhB,OAAOiB,SAAWjB,OAAOiB,QAAQC,mBAiHlD3B,KAAKC,GAASC,QAAQ,cACjBnB,iBAAiB,QAAS,eACvBO,EAAOa,EAAOyB,aAAa,iBAEvBtC,GAENmC,UACOC,QAAQC,WAAYrC,QAAQ,OAAQA,cAMhDP,iBAAiB,WAAY,YAC5BgC,EAAM5B,OAAS,SAAU4B,EAAM5B,SACrB4B,EAAM5B,MAAMG,QAK1BmC,EAAgB,KACV9B,GAASF,EAAYC,OAGvBC,MACcH,EAAMG,OAIpBF,KAAeD,UACRkC,QAAQG,mBAEDpC,GAEV,GACAE,EAAQ,OAASF,GAKrBA,IAAgBD,EAAMG,SACZF,GAAa,MAQN,YAAzBgB,OAAOa,SAASQ,iBACNC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,KACtBC,sBAYoE,OAXtE,GACIP,EAAA,IACA,YACKA,EAAA,GAAKQ,EAAIR,EAAA,GAAKQ,OAASC,KAAKC,cAErC,GAAKC,EAAI,EAAI,IAAIC,OACbX,EAAEY,cAKW,YAJbZ,EAAEa,qBAIW,UAJa,KAC5BC,MAAQ,IACRC,IAEyB,4CADzBC,WAAWC,aAAab,EAAGC,IAC9B5B,OAAQ3B,iBACJoE,GAAG,SAAU,iBAAkB,eAC/BA,GAAG,OAAQ"}
\ No newline at end of file diff --git a/demo/dist/error.css b/demo/dist/error.css deleted file mode 100644 index 529c9842..00000000 --- a/demo/dist/error.css +++ /dev/null @@ -1 +0,0 @@ -@charset 'UTF-8';@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format('woff');font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format('woff');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format('woff');font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format('woff');font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Gordita;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format('woff2'),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format('woff');font-weight:900;font-style:normal;font-display:swap}/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a,button.faux-link{background:0 0}a:focus,button.faux-link:focus{outline:thin dotted}a:active,a:hover,button.faux-link:active,button.faux-link:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:'\201C' '\201D' '\2018' '\2019'}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.error body,html.error{height:100%}html.error{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed}.error body{width:100%;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.error main{width:100%;padding:20px;text-align:center}.error main p{font-size:18px;font-size:1.125rem}html{font-size:100%}body{font-family:Gordita,Avenir,'Helvetica Neue',sans-serif;line-height:1.75;color:#fff;font-weight:500;text-shadow:0 1px 1px rgba(0,0,0,.15);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.938rem}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{display:block;font-size:13px;font-size:.813rem}h1{margin:0 0 10px;font-weight:600;letter-spacing:-.025em;font-size:64px;font-size:4rem}.button,.button__count{position:relative;display:-webkit-inline-box;display:inline-flex;vertical-align:middle;-webkit-box-align:center;align-items:center;padding:15px;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);background:#fff;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-shadow:none;color:#55646b}.button{padding-left:20px;padding-right:20px;transition:all .2s ease;font-weight:600}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{-webkit-transform:translateY(-1px);transform:translateY(-1px);box-shadow:0 2px 2px rgba(0,0,0,.1)}.button:focus{outline:0}.button.tab-focus{outline:0;box-shadow:0 0 0 3px rgba(255,255,255,.35)}.button:active{-webkit-transform:translateY(1px);transform:translateY(1px)}.button--with-count{display:-webkit-inline-box;display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{margin-left:10px;-webkit-animation:fadein .2s ease;animation:fadein .2s ease}.button__count::before{content:'';position:absolute;width:0;height:0;right:100%;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:5px solid transparent;border-right-color:#fff;border-left-width:0}button.faux-link{position:relative;margin:0;padding:0;width:auto;border:0;background:0 0;vertical-align:baseline;text-align:inherit;font:inherit;line-height:1.75;cursor:pointer;-moz-user-select:text;text-shadow:inherit;border-radius:0}a,button.faux-link{position:relative;border-bottom:1px dotted currentColor;transition:all .2s ease;text-decoration:none;color:#fff;font-weight:600}a::after,button.faux-link::after{content:'';position:absolute;top:100%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:0;height:1px;transition:width .2s ease;background:currentColor}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.faux-link.tab-focus{outline:0;box-shadow:0 0 0 3px rgba(255,255,255,.35)}
\ No newline at end of file diff --git a/demo/src/less/settings/breakpoints.less b/demo/src/less/settings/breakpoints.less deleted file mode 100644 index ed078e21..00000000 --- a/demo/src/less/settings/breakpoints.less +++ /dev/null @@ -1,9 +0,0 @@ -// ========================================================================== -// Breakpoints -// ========================================================================== - -@screen-sm: 480px; -@screen-md: 768px; - -@mq-sm: ~'only screen and (min-width: @{screen-sm}) '; -@mq-md: ~'only screen and (min-width: @{screen-md}) '; diff --git a/demo/src/less/settings/colors.less b/demo/src/less/settings/colors.less deleted file mode 100644 index 2f77fb14..00000000 --- a/demo/src/less/settings/colors.less +++ /dev/null @@ -1,27 +0,0 @@ -// ========================================================================== -// Colors -// ========================================================================== - -// Greyscale -@gray-dark: #343f4a; -@gray: #55646b; -@gray-light: #cbd0d3; -@gray-lighter: #dbe3e8; -@off-white: #f2f5f7; - -// Text -@color-text: #fff; - -// Plyr -@color-brand-primary: #1aafff; - -// Brands -@color-twitter: #4baaf4; -@color-youtube: #cc181e; -@color-vimeo: #19b7ed; - -// Elements -@color-link: #fff; - -// Focus -@tab-focus-default-color: #fff; diff --git a/demo/src/less/settings/plyr.less b/demo/src/less/settings/plyr.less deleted file mode 100644 index c39fd44b..00000000 --- a/demo/src/less/settings/plyr.less +++ /dev/null @@ -1,18 +0,0 @@ -// ========================================================================== -// Plyr Settings -// ========================================================================== - -// Font -@plyr-font-family: inherit; - -// Sizes -@plyr-font-size-base: 13px; -@plyr-font-size-small: 12px; -@plyr-font-size-time: 11px; -@plyr-font-size-badges: 9px; - -// Captions -@plyr-font-size-captions-base: @plyr-font-size-base; -@plyr-font-size-captions-small: @plyr-font-size-small; -@plyr-font-size-captions-medium: 18px; -@plyr-font-size-captions-large: 21px; diff --git a/demo/src/less/settings/type.less b/demo/src/less/settings/type.less deleted file mode 100644 index dc6dbce1..00000000 --- a/demo/src/less/settings/type.less +++ /dev/null @@ -1,20 +0,0 @@ -// ========================================================================== -// Typography -// ========================================================================== - -@font-sans-serif: 'Gordita', 'Avenir', 'Helvetica Neue', sans-serif; - -@font-size-base: 15; -@font-size-small: 13; -@font-size-large: 18; -@font-size-h1: 64; - -@font-weight-light: 300; -@font-weight-regular: 400; -@font-weight-medium: 500; -@font-weight-bold: 600; -@font-weight-black: 900; - -@line-height-base: 1.75; - -@letter-spacing-headings: -0.025em; diff --git a/demo/src/less/bundles/demo.less b/demo/src/sass/bundles/demo.scss index 61bb3cd9..dcddfe2a 100644 --- a/demo/src/less/bundles/demo.less +++ b/demo/src/sass/bundles/demo.scss @@ -3,12 +3,6 @@ // ========================================================================== @charset 'UTF-8'; -// Libs -@import '../lib/fontface'; -@import '../lib/animation'; -@import '../lib/mixins'; -@import '../lib/normalize'; - // Settings @import '../settings/breakpoints'; @import '../settings/colors'; @@ -19,6 +13,12 @@ @import '../settings/spacing'; @import '../settings/type'; +// Libs +@import '../lib/fontface'; +@import '../lib/animation'; +@import '../lib/mixins'; +@import '../lib/normalize'; + // Layout @import '../layout/core'; @import '../layout/grid'; @@ -37,5 +37,5 @@ @import '../components/players'; // Plyr -@import '../../../../src/less/bundle'; @import '../settings/plyr'; +@import '../../../../src/sass/bundle'; diff --git a/demo/src/less/bundles/error.less b/demo/src/sass/bundles/error.scss index 67530689..67530689 100644 --- a/demo/src/less/bundles/error.less +++ b/demo/src/sass/bundles/error.scss diff --git a/demo/src/less/components/buttons.less b/demo/src/sass/components/buttons.scss index a8a15682..db821ad3 100644 --- a/demo/src/less/components/buttons.less +++ b/demo/src/sass/components/buttons.scss @@ -5,30 +5,30 @@ // Shared .button, .button__count { - position: relative; - display: inline-flex; - vertical-align: middle; align-items: center; - padding: (@spacing-base * 0.75); - border-radius: @border-radius-base; - box-shadow: 0 1px 1px fade(#000, 10%); background: #fff; border: 0; - user-select: none; + border-radius: $border-radius-base; + box-shadow: 0 1px 1px rgba(#000, 0.1); + color: $gray; + display: inline-flex; + padding: ($spacing-base * 0.75); + position: relative; text-shadow: none; - color: @gray; + user-select: none; + vertical-align: middle; } // Buttons .button { - padding-left: @spacing-base; - padding-right: @spacing-base; + font-weight: $font-weight-bold; + padding-left: $spacing-base; + padding-right: $spacing-base; transition: all 0.2s ease; - font-weight: @font-weight-bold; &:hover, &:focus { - color: @gray-dark; + color: $gray-dark; // Remove the underline/border &::after { @@ -37,8 +37,8 @@ } &:hover { + box-shadow: 0 2px 2px rgba(#000, 0.1); transform: translateY(-1px); - box-shadow: 0 2px 2px fade(#000, 10%); } &:focus { @@ -46,7 +46,7 @@ } &.tab-focus { - .tab-focus(); + @include tab-focus(); } &:active { @@ -65,19 +65,19 @@ // Count bubble .button__count { - margin-left: (@spacing-base / 2); animation: fadein 0.2s ease; + margin-left: ($spacing-base / 2); &::before { + border: $arrow-size solid transparent; + border-left-width: 0; + border-right-color: #fff; content: ''; - position: absolute; - width: 0; height: 0; + position: absolute; right: 100%; top: 50%; transform: translateY(-50%); - border: @arrow-size solid transparent; - border-right-color: #fff; - border-left-width: 0; + width: 0; } } diff --git a/demo/src/less/components/header.less b/demo/src/sass/components/header.scss index fc7bf63a..eab2214e 100644 --- a/demo/src/less/components/header.less +++ b/demo/src/sass/components/header.scss @@ -3,17 +3,17 @@ // ========================================================================== header { - padding-bottom: @spacing-base; + padding-bottom: $spacing-base; text-align: center; .call-to-action { - margin-top: (@spacing-base * 1.5); + margin-top: ($spacing-base * 1.5); } - @media @mq-md { + @media only screen and (min-width: $screen-md) { + margin-right: ($spacing-base * 3); max-width: 360px; - margin-right: (@spacing-base * 3); - padding-bottom: (@spacing-base * 2); + padding-bottom: ($spacing-base * 2); text-align: left; } } diff --git a/demo/src/less/components/icons.less b/demo/src/sass/components/icons.scss index 92b0567e..b2b353a6 100644 --- a/demo/src/less/components/icons.less +++ b/demo/src/sass/components/icons.scss @@ -5,9 +5,9 @@ // Base size icon styles .icon { fill: currentColor; - width: @icon-size; - height: @icon-size; + height: $icon-size; vertical-align: -3px; + width: $icon-size; } // Within elements @@ -19,5 +19,5 @@ label svg { a .icon, .btn .icon { - margin-right: floor(@spacing-base / 3); + margin-right: floor($spacing-base / 3); } diff --git a/demo/src/less/components/links.less b/demo/src/sass/components/links.scss index 7a62ab40..25780b41 100644 --- a/demo/src/less/components/links.less +++ b/demo/src/sass/components/links.scss @@ -4,30 +4,29 @@ // Make a <button> look like an <a> button.faux-link { - .cancel-button-styles(); - - &:extend(a all); + @extend a; // stylelint-disable-line + @include cancel-button-styles(); } // Links a { - position: relative; border-bottom: 1px dotted currentColor; - transition: all 0.2s ease; + color: $color-link; + font-weight: $font-weight-bold; + position: relative; text-decoration: none; - color: @color-link; - font-weight: @font-weight-bold; + transition: all 0.2s ease; &::after { + background: currentColor; content: ''; + height: 1px; + left: 50%; position: absolute; top: 100%; - left: 50%; transform: translateX(-50%); - width: 0; - height: 1px; transition: width 0.2s ease; - background: currentColor; + width: 0; } &:hover, @@ -41,6 +40,6 @@ a { } &.tab-focus { - .tab-focus(); + @include tab-focus(); } } diff --git a/demo/src/less/components/lists.less b/demo/src/sass/components/lists.scss index bae3d11d..bae3d11d 100644 --- a/demo/src/less/components/lists.less +++ b/demo/src/sass/components/lists.scss diff --git a/demo/src/less/components/navigation.less b/demo/src/sass/components/navigation.scss index 0b80f7e8..fe14c000 100644 --- a/demo/src/less/components/navigation.less +++ b/demo/src/sass/components/navigation.scss @@ -5,5 +5,5 @@ nav { display: flex; justify-content: center; - margin-bottom: @spacing-base; + margin-bottom: $spacing-base; } diff --git a/demo/src/less/components/players.less b/demo/src/sass/components/players.scss index 19ffd7df..90e2bc94 100644 --- a/demo/src/less/components/players.less +++ b/demo/src/sass/components/players.scss @@ -10,9 +10,9 @@ video { // Example players .plyr { - margin: @spacing-base auto; - border-radius: @border-radius-base; - box-shadow: 0 2px 5px fade(#000, 20%); + border-radius: $border-radius-base; + box-shadow: 0 2px 5px rgba(#000, 0.2); + margin: $spacing-base auto; &.plyr--audio { max-width: 480px; @@ -20,24 +20,24 @@ video { } .plyr__video-wrapper::after { + border: 1px solid rgba(#000, 0.15); + border-radius: inherit; + bottom: 0; content: ''; + left: 0; pointer-events: none; position: absolute; - top: 0; - bottom: 0; - left: 0; right: 0; - border: 1px solid fade(#000, 15%); - border-radius: inherit; + top: 0; } // Style full supported player .plyr__cite { display: none; - margin-top: @spacing-base; + margin-top: $spacing-base; .icon { - margin-right: ceil(@spacing-base / 6); + margin-right: ceil($spacing-base / 6); } } diff --git a/demo/src/less/layout/core.less b/demo/src/sass/layout/core.scss index 08352e3d..c4d9a445 100644 --- a/demo/src/less/layout/core.less +++ b/demo/src/sass/layout/core.scss @@ -2,12 +2,6 @@ // Core // ========================================================================== -*, -*::after, -*::before { - box-sizing: border-box; -} - html, body { display: flex; @@ -15,16 +9,16 @@ body { } html { - background: @page-background; + background: $page-background; background-attachment: fixed; height: 100%; } body { - display: flex; - min-height: 100%; align-items: center; + display: flex; flex-direction: column; + min-height: 100%; } .grid { @@ -38,21 +32,21 @@ main { } aside { - position: relative; + align-items: center; + background: #fff; + color: $gray; display: flex; flex-shrink: 0; - align-items: center; justify-content: center; - width: 100%; - padding: (@spacing-base * 0.75); - background: #fff; + padding: ($spacing-base * 0.75); + position: relative; text-align: center; - color: @gray; text-shadow: none; + width: 100%; .icon { - margin-right: (@spacing-base / 2); - fill: @color-twitter; + fill: $color-twitter; + margin-right: ($spacing-base / 2); } p { @@ -60,10 +54,10 @@ aside { } a { - color: @color-twitter; + color: $color-twitter; &.tab-focus { - .tab-focus(@color-twitter); + @include tab-focus($color-twitter); } } } diff --git a/demo/src/less/layout/error.less b/demo/src/sass/layout/error.scss index aebe8dca..385ecbf3 100644 --- a/demo/src/less/layout/error.less +++ b/demo/src/sass/layout/error.scss @@ -9,22 +9,22 @@ html.error, } html.error { - background: @page-background; + background: $page-background; background-attachment: fixed; } .error body { - width: 100%; - display: flex; align-items: center; + display: flex; + width: 100%; } .error main { - width: 100%; - padding: @spacing-base; + padding: $spacing-base; text-align: center; + width: 100%; p { - .font-size(@font-size-large); + @include font-size($font-size-large); } } diff --git a/demo/src/less/layout/grid.less b/demo/src/sass/layout/grid.scss index 02ff28c8..40dd829e 100644 --- a/demo/src/less/layout/grid.less +++ b/demo/src/sass/layout/grid.scss @@ -4,13 +4,13 @@ .grid { margin: 0 auto; - padding: @spacing-base; + padding: $spacing-base; - @media @mq-md { - display: flex; + @media only screen and (min-width: $screen-md) { align-items: center; + display: flex; + max-width: $container-max-width; width: 100%; - max-width: @container-max-width; > * { flex: 1; diff --git a/demo/src/less/lib/animation.less b/demo/src/sass/lib/animation.scss index c8c05548..3c14b0a7 100644 --- a/demo/src/less/lib/animation.less +++ b/demo/src/sass/lib/animation.scss @@ -7,7 +7,6 @@ 0% { opacity: 0; } - 100% { opacity: 1; } diff --git a/demo/src/sass/lib/decimal.scss b/demo/src/sass/lib/decimal.scss new file mode 100644 index 00000000..8cb41718 --- /dev/null +++ b/demo/src/sass/lib/decimal.scss @@ -0,0 +1,79 @@ +// _decimal.scss | MIT License | gist.github.com/terkel/4373420 + +// Round a number to specified digits. +// +// @param {Number} $number A number to round +// @param {Number} [$digits:0] Digits to output +// @param {String} [$mode:round] (round|ceil|floor) How to round a number +// @return {Number} A rounded number +// @example +// decimal-round(0.333) => 0 +// decimal-round(0.333, 1) => 0.3 +// decimal-round(0.333, 2) => 0.33 +// decimal-round(0.666) => 1 +// decimal-round(0.666, 1) => 0.7 +// decimal-round(0.666, 2) => 0.67 +// +@function decimal-round ($number, $digits: 0, $mode: round) { + $n: 1; + // $number must be a number + @if type-of($number) != number { + @warn '#{ $number } is not a number.'; + @return $number; + } + // $digits must be a unitless number + @if type-of($digits) != number { + @warn '#{ $digits } is not a number.'; + @return $number; + } @else if not unitless($digits) { + @warn '#{ $digits } has a unit.'; + @return $number; + } + @for $i from 1 through $digits { + $n: $n * 10; + } + @if $mode == round { + @return round($number * $n) / $n; + } @else if $mode == ceil { + @return ceil($number * $n) / $n; + } @else if $mode == floor { + @return floor($number * $n) / $n; + } @else { + @warn '#{ $mode } is undefined keyword.'; + @return $number; + } +} + +// Ceil a number to specified digits. +// +// @param {Number} $number A number to round +// @param {Number} [$digits:0] Digits to output +// @return {Number} A ceiled number +// @example +// decimal-ceil(0.333) => 1 +// decimal-ceil(0.333, 1) => 0.4 +// decimal-ceil(0.333, 2) => 0.34 +// decimal-ceil(0.666) => 1 +// decimal-ceil(0.666, 1) => 0.7 +// decimal-ceil(0.666, 2) => 0.67 +// +@function decimal-ceil ($number, $digits: 0) { + @return decimal-round($number, $digits, ceil); +} + +// Floor a number to specified digits. +// +// @param {Number} $number A number to round +// @param {Number} [$digits:0] Digits to output +// @return {Number} A floored number +// @example +// decimal-floor(0.333) => 0 +// decimal-floor(0.333, 1) => 0.3 +// decimal-floor(0.333, 2) => 0.33 +// decimal-floor(0.666) => 0 +// decimal-floor(0.666, 1) => 0.6 +// decimal-floor(0.666, 2) => 0.66 +// +@function decimal-floor ($number, $digits: 0) { + @return decimal-round($number, $digits, floor); +} diff --git a/demo/src/less/lib/fontface.less b/demo/src/sass/lib/fontface.scss index 88ec49a5..e7e4edf8 100644 --- a/demo/src/less/lib/fontface.less +++ b/demo/src/sass/lib/fontface.scss @@ -3,43 +3,43 @@ // ========================================================================== @font-face { + font-display: swap; font-family: 'Gordita'; - src: url('https://cdn.plyr.io/static/fonts/gordita-light.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-light.woff') format('woff'); - font-weight: @font-weight-light; font-style: normal; - font-display: swap; + font-weight: $font-weight-light; + src: url('https://cdn.plyr.io/static/fonts/gordita-light.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-light.woff') format('woff'); } @font-face { + font-display: swap; font-family: 'Gordita'; + font-style: normal; + font-weight: $font-weight-regular; src: url('https://cdn.plyr.io/static/fonts/gordita-regular.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-regular.woff') format('woff'); - font-weight: @font-weight-regular; - font-style: normal; - font-display: swap; } @font-face { + font-display: swap; font-family: 'Gordita'; + font-style: normal; + font-weight: $font-weight-medium; src: url('https://cdn.plyr.io/static/fonts/gordita-medium.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-medium.woff') format('woff'); - font-weight: @font-weight-medium; - font-style: normal; - font-display: swap; } @font-face { + font-display: swap; font-family: 'Gordita'; - src: url('https://cdn.plyr.io/static/fonts/gordita-bold.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-bold.woff') format('woff'); - font-weight: @font-weight-bold; font-style: normal; - font-display: swap; + font-weight: $font-weight-bold; + src: url('https://cdn.plyr.io/static/fonts/gordita-bold.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-bold.woff') format('woff'); } @font-face { + font-display: swap; font-family: 'Gordita'; - src: url('https://cdn.plyr.io/static/fonts/gordita-black.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-black.woff') format('woff'); - font-weight: @font-weight-black; font-style: normal; - font-display: swap; + font-weight: $font-weight-black; + src: url('https://cdn.plyr.io/static/fonts/gordita-black.woff2') format('woff2'), url('https://cdn.plyr.io/static/fonts/gordita-black.woff') format('woff'); } diff --git a/demo/src/less/lib/mixins.less b/demo/src/sass/lib/mixins.scss index 821d2b3e..ef155b46 100644 --- a/demo/src/less/lib/mixins.less +++ b/demo/src/sass/lib/mixins.scss @@ -4,47 +4,48 @@ // Convert a <button> into an <a> // --------------------------------------- -.cancel-button-styles() { - position: relative; +@mixin cancel-button-styles() { + background: transparent; + border: 0; + border-radius: 0; + cursor: pointer; + font: inherit; + line-height: $line-height-base; margin: 0; padding: 0; - width: auto; - border: 0; - background: transparent; - vertical-align: baseline; + position: relative; text-align: inherit; - font: inherit; - line-height: @line-height-base; - cursor: pointer; - -moz-user-select: text; text-shadow: inherit; - border-radius: 0; + -moz-user-select: text; // stylelint-disable-line + vertical-align: baseline; + width: auto; } // Nicer focus styles // --------------------------------------- -.tab-focus(@color: @tab-focus-default-color) { +@mixin tab-focus($color: $tab-focus-default-color) { + box-shadow: 0 0 0 3px rgba($color, 0.35); outline: 0; - box-shadow: 0 0 0 3px fade(@color, 35%); } // Use rems for font sizing // Leave <body> at 100%/16px // --------------------------------------- -.font-size(@font-size: 16) { - @rem: round((@font-size / 16), 3); +@mixin font-size($font-size: 16) { + $rem: decimal-round(($font-size / 16), 3); - font-size: (@font-size * 1px); - font-size: ~'@{rem}rem'; + font-size: ($font-size * 1px); + font-size: '#{$rem}rem'; } // Font smoothing // --------------------------------------- -.font-smoothing(@mode: on) when (@mode = on) { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; -} -.font-smoothing(@mode: on) when (@mode = off) { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: subpixel-antialiased; +@mixin font-smoothing($enabled: true) { + @if $enabled { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + } @else { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: subpixel-antialiased; + } } diff --git a/demo/src/less/lib/normalize.less b/demo/src/sass/lib/normalize.scss index 34743e73..34743e73 100644 --- a/demo/src/less/lib/normalize.less +++ b/demo/src/sass/lib/normalize.scss diff --git a/demo/src/less/lib/reset.less b/demo/src/sass/lib/reset.scss index 50798b10..50798b10 100644 --- a/demo/src/less/lib/reset.less +++ b/demo/src/sass/lib/reset.scss diff --git a/demo/src/sass/settings/breakpoints.scss b/demo/src/sass/settings/breakpoints.scss new file mode 100644 index 00000000..65940ad6 --- /dev/null +++ b/demo/src/sass/settings/breakpoints.scss @@ -0,0 +1,6 @@ +// ========================================================================== +// Breakpoints +// ========================================================================== + +$screen-sm: 480px; +$screen-md: 768px; diff --git a/demo/src/sass/settings/colors.scss b/demo/src/sass/settings/colors.scss new file mode 100644 index 00000000..aa1c96ee --- /dev/null +++ b/demo/src/sass/settings/colors.scss @@ -0,0 +1,27 @@ +// ========================================================================== +// Colors +// ========================================================================== + +// Greyscale +$gray-dark: #343f4a; +$gray: #55646b; +$gray-light: #cbd0d3; +$gray-lighter: #dbe3e8; +$off-white: #f2f5f7; + +// Text +$color-text: #fff; + +// Plyr +$color-brand-primary: #1aafff; + +// Brands +$color-twitter: #4baaf4; +$color-youtube: #cc181e; +$color-vimeo: #19b7ed; + +// Elements +$color-link: #fff; + +// Focus +$tab-focus-default-color: #fff; diff --git a/demo/src/less/settings/cosmetic.less b/demo/src/sass/settings/cosmetic.scss index 0024a446..dee536e5 100644 --- a/demo/src/less/settings/cosmetic.less +++ b/demo/src/sass/settings/cosmetic.scss @@ -3,10 +3,10 @@ // ========================================================================== // Button count arrow size -@arrow-size: 5px; +$arrow-size: 5px; // Radii -@border-radius-base: 4px; +$border-radius-base: 4px; // Background -@page-background: linear-gradient(to left top, lighten(@color-brand-primary, 10%), darken(@color-brand-primary, 20%)); +$page-background: linear-gradient(to left top, lighten($color-brand-primary, 10%), darken($color-brand-primary, 20%)); diff --git a/demo/src/less/settings/icons.less b/demo/src/sass/settings/icons.scss index 546607c7..ad16a645 100644 --- a/demo/src/less/settings/icons.less +++ b/demo/src/sass/settings/icons.scss @@ -2,4 +2,4 @@ // Icons // ========================================================================== -@icon-size: 16px; +$icon-size: 16px; diff --git a/demo/src/less/settings/layout.less b/demo/src/sass/settings/layout.scss index 810edc03..8d1fbd28 100644 --- a/demo/src/less/settings/layout.less +++ b/demo/src/sass/settings/layout.scss @@ -2,4 +2,4 @@ // Layout // ========================================================================== -@container-max-width: 1280px; +$container-max-width: 1280px; diff --git a/demo/src/sass/settings/plyr.scss b/demo/src/sass/settings/plyr.scss new file mode 100644 index 00000000..3d30ce71 --- /dev/null +++ b/demo/src/sass/settings/plyr.scss @@ -0,0 +1,18 @@ +// ========================================================================== +// Plyr Settings +// ========================================================================== + +// Font +$plyr-font-family: inherit; + +// Sizes +$plyr-font-size-base: 13px; +$plyr-font-size-small: 12px; +$plyr-font-size-time: 11px; +$plyr-font-size-badges: 9px; + +// Captions +$plyr-font-size-captions-base: $plyr-font-size-base; +$plyr-font-size-captions-small: $plyr-font-size-small; +$plyr-font-size-captions-medium: 18px; +$plyr-font-size-captions-large: 21px; diff --git a/demo/src/less/settings/spacing.less b/demo/src/sass/settings/spacing.scss index 6bd14f58..a19b0a95 100644 --- a/demo/src/less/settings/spacing.less +++ b/demo/src/sass/settings/spacing.scss @@ -2,4 +2,4 @@ // Colors // ========================================================================== -@spacing-base: 20px; +$spacing-base: 20px; diff --git a/demo/src/sass/settings/type.scss b/demo/src/sass/settings/type.scss new file mode 100644 index 00000000..e8f0b2c8 --- /dev/null +++ b/demo/src/sass/settings/type.scss @@ -0,0 +1,20 @@ +// ========================================================================== +// Typography +// ========================================================================== + +$font-sans-serif: 'Gordita', 'Avenir', 'Helvetica Neue', sans-serif; + +$font-size-base: 15; +$font-size-small: 13; +$font-size-large: 18; +$font-size-h1: 64; + +$font-weight-light: 300; +$font-weight-regular: 400; +$font-weight-medium: 500; +$font-weight-bold: 600; +$font-weight-black: 900; + +$line-height-base: 1.75; + +$letter-spacing-headings: -0.025em; diff --git a/demo/src/less/type/base.less b/demo/src/sass/type/base.scss index 70eddcb4..452298bd 100644 --- a/demo/src/less/type/base.less +++ b/demo/src/sass/type/base.scss @@ -8,13 +8,13 @@ html { } body { - font-family: @font-sans-serif; - line-height: @line-height-base; - color: @color-text; - font-weight: @font-weight-medium; - text-shadow: 0 1px 1px fade(#000, 15%); - .font-smoothing(); - .font-size(@font-size-base); + @include font-smoothing(); + @include font-size($font-size-base); + color: $color-text; + font-family: $font-sans-serif; + font-weight: $font-weight-medium; + line-height: $line-height-base; + text-shadow: 0 1px 1px rgba(#000, 0.15); } button, @@ -26,10 +26,10 @@ textarea { p, small { - margin: 0 0 @spacing-base; + margin: 0 0 $spacing-base; } small { + @include font-size($font-size-small); display: block; - .font-size(@font-size-small); } diff --git a/demo/src/less/type/headings.less b/demo/src/sass/type/headings.scss index 5e46bf34..c2abc97e 100644 --- a/demo/src/less/type/headings.less +++ b/demo/src/sass/type/headings.scss @@ -3,8 +3,8 @@ // ========================================================================== h1 { - margin: 0 0 (@spacing-base / 2); - font-weight: @font-weight-bold; - letter-spacing: @letter-spacing-headings; - .font-size(@font-size-h1); + @include font-size($font-size-h1); + font-weight: $font-weight-bold; + letter-spacing: $letter-spacing-headings; + margin: 0 0 ($spacing-base / 2); } diff --git a/demo/src/less/utilities/color.less b/demo/src/sass/utilities/color.scss index 8d6b1c4f..786e6ccb 100644 --- a/demo/src/less/utilities/color.less +++ b/demo/src/sass/utilities/color.scss @@ -3,9 +3,9 @@ // ========================================================================== .color--vimeo { - color: @color-vimeo; + color: $color-vimeo; } .color--youtube { - color: @color-youtube; + color: $color-youtube; } diff --git a/demo/src/less/utilities/hidden.less b/demo/src/sass/utilities/hidden.scss index a48b107a..a48b107a 100644 --- a/demo/src/less/utilities/hidden.less +++ b/demo/src/sass/utilities/hidden.scss diff --git a/dist/plyr.css b/dist/plyr.css deleted file mode 100644 index fb12eb15..00000000 --- a/dist/plyr.css +++ /dev/null @@ -1 +0,0 @@ -@charset 'UTF-8';@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;line-height:1.7;direction:ltr;text-shadow:none;transition:box-shadow .3s ease;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr:focus{outline:0}.plyr--full-ui,.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:border-box}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{padding:3px 4px;border-radius:2px;background:#4f5b5f;color:rgba(255,255,255,.9);font-size:10px;line-height:1}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:10px;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;-webkit-animation:plyr-fade-in .3s ease;animation:plyr-fade-in .3s ease;color:#fff;font-size:14px;text-align:center}.plyr__captions span{border-radius:2px;padding:.2em .5em;background:rgba(0,0,0,.8);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media only screen and (min-width:480px){.plyr__captions{padding:20px;font-size:16px}}@media only screen and (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr__control{position:relative;flex-shrink:0;overflow:visible;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:all .3s ease;color:inherit}.plyr__control svg{width:18px;height:18px;display:block;fill:currentColor;pointer-events:none}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{display:none;position:absolute;z-index:2;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);padding:15px;background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff}.plyr__control--overlaid svg{position:relative;left:2px;width:20px;height:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media only screen and (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:35px 10px 10px;background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .4s ease-in-out,-webkit-transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;color:#4f5b5f}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%);pointer-events:none}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{padding-bottom:56.25%;height:0}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;-webkit-transform:translateY(-35.9375%);transform:translateY(-35.9375%)}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr__menu{display:-webkit-box;display:flex;position:relative}.plyr__menu .plyr__control svg{transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;z-index:1;bottom:100%;right:-3px;margin-bottom:10px;-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.15);white-space:nowrap;text-align:left;color:#4f5b5f;font-size:16px}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{content:'';position:absolute;top:100%;right:15px;height:0;width:0;border:4px solid transparent;border-top-color:rgba(255,255,255,.9)}.plyr__menu__container ul{margin:0;padding:7px;list-style:none;overflow:hidden}.plyr__menu__container .plyr__control{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;width:100%;padding:4px 14px;color:#4f5b5f;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__menu__container .plyr__control::after{content:'';position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:4px solid transparent;transition:border-color .2s ease}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{right:5px;border-left-color:rgba(79,91,95,.8)}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{position:relative;width:calc(100% - 14px);margin:7px;margin-bottom:3px;padding-left:28px;font-weight:500}.plyr__menu__container .plyr__control--back::after{left:7px;border-right-color:rgba(79,91,95,.8)}.plyr__menu__container .plyr__control--back::before{content:'';position:absolute;top:100%;left:0;right:0;height:1px;overflow:hidden;margin-top:4px;background:#b7c5cd;box-shadow:0 1px 0 #fff}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{position:relative;display:block;flex-shrink:0;height:16px;width:16px;border-radius:100%;background:rgba(0,0,0,.1);margin-right:10px;transition:all .3s ease}.plyr__menu__container label.plyr__control input[type=radio]+span::after{content:'';position:absolute;height:6px;width:6px;top:5px;left:5px;-webkit-transform:scale(0);transform:scale(0);opacity:0;background:#fff;border-radius:100%;transition:opacity .3s ease,-webkit-transform .3s ease;transition:transform .3s ease,opacity .3s ease;transition:transform .3s ease,opacity .3s ease,-webkit-transform .3s ease}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{-webkit-transform:scale(1);transform:scale(1);opacity:1}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;margin-left:auto;margin-right:-7px;padding-left:25px;pointer-events:none;overflow:hidden}.plyr__progress{position:relative;display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{left:0;font-size:14px}.plyr__progress--buffer{position:absolute;left:0;top:50%;width:100%;height:6px;margin:-3px 0 0;padding:0;background:0 0;border:none;border-radius:100px;-webkit-appearance:none}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(47,52,61,.2) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.2) 50%,rgba(47,52,61,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;cursor:pointer;border:none;background:0 0;transition:box-shadow .3s ease;border-radius:28px;color:#1aafff;-webkit-appearance:none}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{height:6px;background:0 0;border:0;border-radius:3px;-webkit-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:14px;width:14px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box}.plyr--full-ui input[type=range]::-moz-range-track{height:6px;background:0 0;border:0;border-radius:3px;-moz-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-moz-range-thumb{position:relative;height:14px;width:14px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box}.plyr--full-ui input[type=range]::-moz-range-progress{height:6px;background:currentColor;border-radius:3px}.plyr--full-ui input[type=range]::-ms-track{color:transparent;height:6px;background:0 0;border:0;border-radius:3px;-ms-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-ms-fill-upper{height:6px;background:0 0;border:0;border-radius:3px;-ms-user-select:none;user-select:none;transition:all .3s ease}.plyr--full-ui input[type=range]::-ms-fill-lower{height:6px;background:0 0;border:0;border-radius:3px;-ms-user-select:none;user-select:none;transition:all .3s ease;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{position:relative;height:14px;width:14px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{outline:0;box-shadow:0 0 0 3px rgba(26,175,255,.35)}.plyr--full-ui input[type=range]:active::-webkit-slider-thumb{background:#1aafff;border-color:#fff;-webkit-transform:scale(1.42857143);transform:scale(1.42857143)}.plyr--full-ui input[type=range]:active::-moz-range-thumb{background:#1aafff;border-color:#fff;transform:scale(1.42857143)}.plyr--full-ui input[type=range]:active::-ms-thumb{background:#1aafff;border-color:#fff;transform:scale(1.42857143)}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background:rgba(255,255,255,.25)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background:rgba(183,197,205,.66)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media only screen and (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;pointer-events:none;opacity:0;background:rgba(255,255,255,.9);border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);border-left:4px solid transparent;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;z-index:0;overflow:hidden}.plyr__volume{-webkit-box-flex:1;flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media only screen and (min-width:480px){.plyr__volume{max-width:50px}}@media only screen and (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-moz-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-ms-fullscreen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:fullscreen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{height:100%;width:100%;margin:0;background:#000;border-radius:0!important}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{height:100%;width:100%;margin:0;background:#000;border-radius:0!important;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}@media only screen and (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr--no-transition{transition:none!important}.plyr--full-ui [hidden]{display:none}.plyr--full-ui [aria-hidden=true]{display:none}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}
\ No newline at end of file diff --git a/dist/plyr.js.map b/dist/plyr.js.map index 05987088..91338db9 100644 --- a/dist/plyr.js.map +++ b/dist/plyr.js.map @@ -1 +1 @@ -{"version":3,"file":"plyr.js","sources":["src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/storage.js","src/js/fullscreen.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// Default config\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/2.0.10/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: ['hd2160', 'hd1440', 'hd1080', 'hd720', 'large', 'medium', 'small', 'tiny', 'default'],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', 'fullscreen'],\n settings: ['captions', 'quality', 'speed', 'loop'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // API keys\n keys: {\n google: null,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Load an external script\n loadScript(url, callback) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false\n );\n }\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(response => (response.ok ? response.text() : null))\n .then(text => {\n if (text === null) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: text,\n })\n );\n }\n\n updateSprite.call(container, text);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return null;\n }\n\n element.parentNode.removeChild(element);\n\n return element;\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus() {\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n utils.on(\n this.elements.container,\n 'keydown',\n event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9 || !this.fullscreen.active) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n },\n false\n );\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elements\n if (utils.is.nullOrUndefined(elements)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!element || !type) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: this instanceof Plyr ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert object to URL parameters\n buildUrlParameters(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n transitionEnd: (() => {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return typeof type === 'string' ? type : false;\n })(),\n\n // Force repaint of element\n repaint(element) {\n window.setTimeout(() => {\n element.setAttribute('hidden', '');\n element.offsetHeight; // eslint-disable-line\n element.removeAttribute('hidden');\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEnd !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(player) {\n this.enabled = window.console && player.config.debug;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n const storage = this.get();\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr fullscreen API\n// ==========================================================================\n\nimport utils from './utils';\n\n// Determine the prefix\nconst prefix = (() => {\n let value = false;\n\n if (utils.is.function(document.cancelFullScreen)) {\n value = '';\n } else {\n // Check for fullscreen support by vendor prefix\n ['webkit', 'o', 'moz', 'ms', 'khtml'].some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen) && document.msFullscreenEnabled) {\n // Special case for MS (when isn't it?)\n value = 'ms';\n return true;\n }\n\n return false;\n });\n }\n\n return value;\n})();\n\n// Fullscreen API\nconst fullscreen = {\n // Get the prefix\n prefix,\n\n // Check if we can use it\n enabled: document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled,\n\n // Yet again Microsoft awesomeness,\n // Sometimes the prefix is 'ms', sometimes 'MS' to keep you on your toes\n eventType: prefix === 'ms' ? 'MSFullscreenChange' : `${prefix}fullscreenchange`,\n\n // Is an element fullscreen\n isFullScreen(element) {\n if (!fullscreen.enabled) {\n return false;\n }\n\n const target = utils.is.nullOrUndefined(element) ? document.body : element;\n\n switch (prefix) {\n case '':\n return document.fullscreenElement === target;\n\n case 'moz':\n return document.mozFullScreenElement === target;\n\n default:\n return document[`${prefix}FullscreenElement`] === target;\n }\n },\n\n // Make an element fullscreen\n requestFullScreen(element) {\n if (!fullscreen.enabled) {\n return false;\n }\n\n const target = utils.is.nullOrUndefined(element) ? document.body : element;\n\n return !prefix.length ? target.requestFullScreen() : target[prefix + (prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen')]();\n },\n\n // Bail from fullscreen\n cancelFullScreen() {\n if (!fullscreen.enabled) {\n return false;\n }\n\n return !prefix.length ? document.cancelFullScreen() : document[prefix + (prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen')]();\n },\n\n // Get the current element\n element() {\n if (!fullscreen.enabled) {\n return null;\n }\n\n return !prefix.length ? document.fullscreenElement : document[`${prefix}FullscreenElement`];\n },\n\n // Setup fullscreen\n setup() {\n if (!this.supported.ui || this.isAudio || !this.config.fullscreen.enabled) {\n return;\n }\n\n // Check for native support\n const nativeSupport = fullscreen.enabled;\n\n if (nativeSupport || (this.config.fullscreen.fallback && !utils.inFrame())) {\n this.debug.log(`${nativeSupport ? 'Native' : 'Fallback'} fullscreen enabled`);\n\n // Add styling hook to show button\n utils.toggleClass(this.elements.container, this.config.classNames.fullscreen.enabled, true);\n } else {\n this.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Toggle state\n if (this.elements.buttons && this.elements.buttons.fullscreen) {\n utils.toggleState(this.elements.buttons.fullscreen, false);\n }\n\n // Trap focus in container\n utils.trapFocus.call(this);\n },\n};\n\nexport default fullscreen;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport fullscreen from './fullscreen';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [48, 49, 50, 51, 52, 53, 54, 56, 57, 32, 75, 38, 40, 77, 39, 37, 70, 67, 73, 76, 79];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.toggleFullscreen();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.toggleFullscreen();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n\n // Handle user exiting fullscreen by escaping etc\n if (fullscreen.enabled) {\n utils.on(document, fullscreen.eventType, event => {\n this.toggleFullscreen(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'stalled waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat(['keyup', 'keydown']).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n })\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n })\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n })\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n })\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n })\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n })\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.toggleFullscreen();\n })\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n })\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n })\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n })\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n })\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport fullscreen from './fullscreen';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Remove controls\n utils.removeElement.call(this, 'controls');\n\n // Remove large play\n utils.removeElement.call(this, 'buttons.play');\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup fullscreen\n fullscreen.setup.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n utils.dispatchEvent.call(this, this.media, 'ready');\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set aria state\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => utils.toggleState(button, this.playing));\n }\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Helpers\n const getHours = value => parseInt((value / 60 / 60) % 60, 10);\n const getMinutes = value => parseInt((value / 60) % 60, 10);\n const getSeconds = value => parseInt(value % 60, 10);\n\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (getHours(this.duration) > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n // eslint-disable-next-line no-param-reassign\n target.textContent = `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's only one time display, display duration there\n if (!utils.is.element(this.elements.display.duration) && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (utils.is.element(this.elements.display.duration)) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Inject the stylesheet if needed\n if (!utils.is.element(this.elements.styleSheet)) {\n this.elements.styleSheet = utils.createElement('style');\n this.elements.container.appendChild(this.elements.styleSheet);\n }\n\n const styleSheet = this.elements.styleSheet.sheet;\n const percentage = range.value / range.max * 100;\n const selector = `#${range.id}::-webkit-slider-runnable-track`;\n const styles = `{ background-image: linear-gradient(to right, currentColor ${percentage}%, transparent ${percentage}%) }`;\n\n // Find old rule if it exists\n const index = Array.from(styleSheet.rules).findIndex(rule => rule.selectorText === selector);\n\n // Remove old rule\n if (index !== -1) {\n styleSheet.deleteRule(index);\n }\n\n // Insert new one\n styleSheet.insertRule([selector, styles].join(' '));\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n this.elements.buttons[type] = button;\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = this.elements.display.seekTooltip.style.left.replace('%', '');\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}×`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEnd, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEnd, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n // container.appendChild(controls.createButton.call(this, 'pause'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n\n // HTML passed as the option\n if (utils.is.string(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [this.config.selectors.controls.wrapper, ' ', this.config.selectors.labels, ' .', this.config.classNames.hidden].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(captions.getTracks.call(this))) {\n return;\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Remove previous bindings\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const active = track.activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n const videoId = utils.parseYouTubeId(this.embedId);\n\n // Remove old containers\n const containers = utils.getElements.call(this, `[id^=\"${this.provider}-\"]`);\n Array.from(containers).forEach(utils.removeElement);\n\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Set ID\n this.media.setAttribute('id', utils.generateId(this.provider));\n\n // Setup API\n if (utils.is.object(window.YT)) {\n youtube.ready.call(this, videoId);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this, videoId);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle() {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n const videoId = utils.parseYouTubeId(this.embedId);\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n fetch(url)\n .then(response => (response.ok ? response.json() : null))\n .then(result => {\n if (result !== null && utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready(videoId) {\n const player = this;\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(player.media.id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n origin: window && window.location.hostname,\n widget_referrer: window && window.location.href,\n\n // Captions are flaky on YouTube\n cc_load_policy: this.captions.active ? 1 : 0,\n cc_lang_pref: this.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n player.media.paused = false;\n };\n player.media.pause = () => {\n instance.pauseVideo();\n player.media.paused = true;\n };\n player.media.stop = () => {\n instance.stopVideo();\n player.media.paused = true;\n };\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Remove old containers\n const containers = utils.getElements.call(this, `[id^=\"${this.provider}-\"]`);\n Array.from(containers).forEach(utils.removeElement);\n\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Set ID\n this.media.setAttribute('id', utils.generateId(this.provider));\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParameters(options);\n const id = utils.parseVimeoId(player.embedId);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n player.media.appendChild(iframe);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo || this.isYouTube || this.isVimeo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n Array.from(this.media.querySelectorAll('source')).forEach(utils.removeElement);\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div');\n this.embedId = input.sources[0].src;\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n },\n true\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Storage from './storage';\n\nimport captions from './captions';\nimport controls from './controls';\nimport fullscreen from './fullscreen';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Globals\nlet scrollPosition = {\n x: 0,\n y: 0,\n};\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n this.ready = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })()\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed attributes\n const attributes = {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n };\n\n // Different setup based on type\n switch (type) {\n // TODO: Handle passing an iframe for true progressive enhancement\n // case 'iframe':\n case 'div':\n this.type = types.video; // Audio will come later for external providers\n this.provider = this.media.getAttribute(attributes.provider);\n this.embedId = this.media.getAttribute(attributes.id);\n\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Try and get the embed id\n if (utils.is.empty(this.embedId)) {\n this.debug.error('Setup failed: Embed ID or URL missing');\n return;\n }\n\n // Clean up\n this.media.removeAttribute(attributes.provider);\n this.media.removeAttribute(attributes.id);\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media\n */\n play() {\n if ('play' in this.media) {\n this.media.play();\n }\n return this;\n }\n\n /**\n * Pause the media\n */\n pause() {\n if ('pause' in this.media) {\n this.media.pause();\n }\n return this;\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} toggle\n */\n togglePlay(toggle) {\n // True toggle if nothing passed\n if ((!utils.is.boolean(toggle) && this.media.paused) || toggle) {\n return this.play();\n }\n\n return this.pause();\n }\n\n /**\n * Stop playback\n */\n stop() {\n return this.restart().pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n return this;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n return this;\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n return this;\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n return this;\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n return this;\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return this;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return this;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n\n // Allow chaining\n return this;\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle fullscreen playback\n * Requires user input event\n * @param {event} event\n */\n toggleFullscreen(event) {\n // Check for native support\n if (fullscreen.enabled) {\n if (utils.is.event(event) && event.type === fullscreen.eventType) {\n // If it's a fullscreen change event, update the state\n this.fullscreen.active = fullscreen.isFullScreen(this.elements.container);\n } else {\n // Else it's a user request to enter or exit\n if (!this.fullscreen.active) {\n fullscreen.requestFullScreen(this.elements.container);\n } else {\n fullscreen.cancelFullScreen();\n }\n\n return this;\n }\n } else {\n // Otherwise, it's a simple toggle\n this.fullscreen.active = !this.fullscreen.active;\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.fullscreen.fallback, this.fullscreen.active);\n\n // Make sure we don't lose scroll position\n if (this.fullscreen.active) {\n scrollPosition = {\n x: window.pageXOffset || 0,\n y: window.pageYOffset || 0,\n };\n } else {\n window.scrollTo(scrollPosition.x, scrollPosition.y);\n }\n\n // Bind/unbind escape key\n document.body.style.overflow = this.fullscreen.active ? 'hidden' : '';\n }\n\n // Set button state\n if (utils.is.element(this.elements.buttons.fullscreen)) {\n utils.toggleState(this.elements.buttons.fullscreen, this.fullscreen.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.fullscreen.active ? 'enterfullscreen' : 'exitfullscreen');\n\n return this;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Bail if no support\n if (!support.airplay) {\n return this;\n }\n\n // Show dialog\n this.media.webkitShowPlaybackTargetPicker();\n\n return this;\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return this;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return this;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = ['mouseenter', 'mousemove', 'touchstart', 'touchmove', 'focusin'].includes(toggle.type);\n\n // Delay hiding on move events\n if (['mousemove', 'touchmove', 'touchend'].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return this;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = window.setTimeout(() => {\n /* this.debug.warn({\n pressed: this.elements.controls.pressed,\n hover: this.elements.controls.pressed,\n playing: this.playing,\n paused: this.paused,\n loading: this.loading,\n }); */\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n\n return this;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n return this;\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n return this;\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n this.embedId = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove buttons\n if (this.elements.buttons && this.elements.buttons.play) {\n Array.from(this.elements.buttons.play).forEach(button => utils.removeElement(button));\n }\n\n // Remove others\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n const parent = this.elements.container.parentNode;\n\n if (utils.is.element(parent)) {\n parent.replaceChild(this.elements.original, this.elements.container);\n }\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n this.embed.destroy();\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n this.embed.unload().then(done);\n\n // Vimeo does not always return\n window.setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n}\n\nexport default Plyr;\n"],"names":["providers","types","defaults","window","navigator","language","split","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","test","userAgent","platform","url","callback","current","querySelector","callbacks","push","element","createElement","is","function","addEventListener","forEach","cb","call","event","src","first","getElementsByTagName","parentNode","insertBefore","id","updateSprite","data","innerHTML","body","childNodes","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","JSON","parse","content","then","response","ok","text","setItem","stringify","catch","prefix","Math","floor","random","self","top","e","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","setAttributes","textContent","target","removeChild","lastChild","empty","key","sel","existingAttributes","existing","selector","s","trim","className","replace","parts","value","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","on","keyCode","_this","active","getFocusElement","shiftKey","focus","preventDefault","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","dispatchEvent","pressed","getAttribute","state","max","toFixed","sources","source","shift","extend","match","RegExp","$2","number","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","find","undefined","setTimeout","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","transitionEnd","matchMedia","noop","Console","player","enabled","console","log","bind","Storage","store","json","get","removeItem","cancelFullScreen","some","pre","msExitFullscreen","msFullscreenEnabled","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","fullscreenElement","mozFullScreenElement","requestFullScreen","nativeSupport","fallback","inFrame","toggleClass","toggleState","trapFocus","listeners","handleKey","code","which","getKeyCode","repeat","altKey","ctrlKey","metaKey","editable","stopPropagation","togglePlay","increaseVolume","decreaseVolume","muted","toggleFullscreen","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","eventType","timeUpdate","durationUpdate","_this2","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","_this3","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","inverted","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","removeElement","inject","setup","ready","setTitle","label","i18n","title","isEmbed","iframe","frameTitle","playing","stopped","button","loading","timers","setRange","nodeValue","getPercentage","buffered","end","setProgress","time","format","slice","getHours","parseInt","hours","mins","getMinutes","secs","getSeconds","invert","updateTimeDisplay","seeking","displayDuration","styleSheet","sheet","percentage","styles","rules","findIndex","rule","selectorText","deleteRule","insertRule","iconUrl","indexOf","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","left","hasClass","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","open","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","off","createButton","createRange","createProgress","createTime","inner","home","_this4","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","_this5","stored","setCaptionsMenu","insertAfter","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","youtube","videoId","parseYouTubeId","embedId","containers","setAspectRatio","generateId","YT","loadScript","urls","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getVideoData","google","result","items","snippet","paddingBottom","Player","autoplay","location","hostname","href","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","setVolume","getVideoUrl","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","vimeo","Vimeo","padding","offset","transform","params","buildUrlParameters","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","cues","stripHTML","seconds","isIos","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","destroy","html5","check","crossorigin","poster","addStyleHook","insertElements","scrollPosition","jQuery","plyr","original","tagName","hasAttribute","step","isFullScreen","pageXOffset","pageYOffset","scrollTo","x","y","overflow","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","mime","soft","done","replaceChild","unload","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IAAaA,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCXLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,iDAGG,wDAIC,mBACC,SAAU,SAAU,SAAU,QAAS,QAAS,SAAU,QAAS,OAAQ,0BAK7E,mBAOE,WACA,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,uBAKhC,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,qBAKD,MACJ,kBAIE,aAAc,OAAQ,WAAY,eAAgB,OAAQ,SAAU,WAAY,WAAY,MAAO,UAAW,wBAC9G,WAAY,UAAW,QAAS,sBAI9B,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,6BAMD,uDAGA,uDAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,wCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,4BACE,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,sBACE,uBACD,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,gCAKF,g3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"}
\ No newline at end of file +{"version":3,"file":"plyr.js","sources":["src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/storage.js","src/js/fullscreen.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// Default config\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/2.0.10/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n 'loop',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // API keys\n keys: {\n google: null,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Load an external script\n loadScript(url, callback) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false\n );\n }\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(response => (response.ok ? response.text() : null))\n .then(text => {\n if (text === null) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: text,\n })\n );\n }\n\n updateSprite.call(container, text);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return null;\n }\n\n element.parentNode.removeChild(element);\n\n return element;\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus() {\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n utils.on(\n this.elements.container,\n 'keydown',\n event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9 || !this.fullscreen.active) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n },\n false\n );\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elements\n if (utils.is.nullOrUndefined(elements)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!element || !type) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: this instanceof Plyr ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert object to URL parameters\n buildUrlParameters(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n transitionEnd: (() => {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return typeof type === 'string' ? type : false;\n })(),\n\n // Force repaint of element\n repaint(element) {\n window.setTimeout(() => {\n element.setAttribute('hidden', '');\n element.offsetHeight; // eslint-disable-line\n element.removeAttribute('hidden');\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEnd !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(player) {\n this.enabled = window.console && player.config.debug;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n const storage = this.get();\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr fullscreen API\n// ==========================================================================\n\nimport utils from './utils';\n\n// Determine the prefix\nconst prefix = (() => {\n let value = false;\n\n if (utils.is.function(document.cancelFullScreen)) {\n value = '';\n } else {\n // Check for fullscreen support by vendor prefix\n [\n 'webkit',\n 'o',\n 'moz',\n 'ms',\n 'khtml',\n ].some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen) && document.msFullscreenEnabled) {\n // Special case for MS (when isn't it?)\n value = 'ms';\n return true;\n }\n\n return false;\n });\n }\n\n return value;\n})();\n\n// Fullscreen API\nconst fullscreen = {\n // Get the prefix\n prefix,\n\n // Check if we can use it\n enabled: document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled,\n\n // Yet again Microsoft awesomeness,\n // Sometimes the prefix is 'ms', sometimes 'MS' to keep you on your toes\n eventType: prefix === 'ms' ? 'MSFullscreenChange' : `${prefix}fullscreenchange`,\n\n // Is an element fullscreen\n isFullScreen(element) {\n if (!fullscreen.enabled) {\n return false;\n }\n\n const target = utils.is.nullOrUndefined(element) ? document.body : element;\n\n switch (prefix) {\n case '':\n return document.fullscreenElement === target;\n\n case 'moz':\n return document.mozFullScreenElement === target;\n\n default:\n return document[`${prefix}FullscreenElement`] === target;\n }\n },\n\n // Make an element fullscreen\n requestFullScreen(element) {\n if (!fullscreen.enabled) {\n return false;\n }\n\n const target = utils.is.nullOrUndefined(element) ? document.body : element;\n\n return !prefix.length ? target.requestFullScreen() : target[prefix + (prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen')]();\n },\n\n // Bail from fullscreen\n cancelFullScreen() {\n if (!fullscreen.enabled) {\n return false;\n }\n\n return !prefix.length ? document.cancelFullScreen() : document[prefix + (prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen')]();\n },\n\n // Get the current element\n element() {\n if (!fullscreen.enabled) {\n return null;\n }\n\n return !prefix.length ? document.fullscreenElement : document[`${prefix}FullscreenElement`];\n },\n\n // Setup fullscreen\n setup() {\n if (!this.supported.ui || this.isAudio || !this.config.fullscreen.enabled) {\n return;\n }\n\n // Check for native support\n const nativeSupport = fullscreen.enabled;\n\n if (nativeSupport || (this.config.fullscreen.fallback && !utils.inFrame())) {\n this.debug.log(`${nativeSupport ? 'Native' : 'Fallback'} fullscreen enabled`);\n\n // Add styling hook to show button\n utils.toggleClass(this.elements.container, this.config.classNames.fullscreen.enabled, true);\n } else {\n this.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Toggle state\n if (this.elements.buttons && this.elements.buttons.fullscreen) {\n utils.toggleState(this.elements.buttons.fullscreen, false);\n }\n\n // Trap focus in container\n utils.trapFocus.call(this);\n },\n};\n\nexport default fullscreen;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport fullscreen from './fullscreen';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.toggleFullscreen();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.toggleFullscreen();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n\n // Handle user exiting fullscreen by escaping etc\n if (fullscreen.enabled) {\n utils.on(document, fullscreen.eventType, event => {\n this.toggleFullscreen(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'stalled waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n })\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n })\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n })\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n })\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n })\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n })\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.toggleFullscreen();\n })\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n })\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n })\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n })\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n })\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport fullscreen from './fullscreen';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Remove controls\n utils.removeElement.call(this, 'controls');\n\n // Remove large play\n utils.removeElement.call(this, 'buttons.play');\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup fullscreen\n fullscreen.setup.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n utils.dispatchEvent.call(this, this.media, 'ready');\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set aria state\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => utils.toggleState(button, this.playing));\n }\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Helpers\n const getHours = value => parseInt((value / 60 / 60) % 60, 10);\n const getMinutes = value => parseInt((value / 60) % 60, 10);\n const getSeconds = value => parseInt(value % 60, 10);\n\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (getHours(this.duration) > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n // eslint-disable-next-line no-param-reassign\n target.textContent = `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's only one time display, display duration there\n if (!utils.is.element(this.elements.display.duration) && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (utils.is.element(this.elements.display.duration)) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Inject the stylesheet if needed\n if (!utils.is.element(this.elements.styleSheet)) {\n this.elements.styleSheet = utils.createElement('style');\n this.elements.container.appendChild(this.elements.styleSheet);\n }\n\n const styleSheet = this.elements.styleSheet.sheet;\n const percentage = range.value / range.max * 100;\n const selector = `#${range.id}::-webkit-slider-runnable-track`;\n const styles = `{ background-image: linear-gradient(to right, currentColor ${percentage}%, transparent ${percentage}%) }`;\n\n // Find old rule if it exists\n const index = Array.from(styleSheet.rules).findIndex(rule => rule.selectorText === selector);\n\n // Remove old rule\n if (index !== -1) {\n styleSheet.deleteRule(index);\n }\n\n // Insert new one\n styleSheet.insertRule([\n selector,\n styles,\n ].join(' '));\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n this.elements.buttons[type] = button;\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = this.elements.display.seekTooltip.style.left.replace('%', '');\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}×`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEnd, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEnd, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n // container.appendChild(controls.createButton.call(this, 'pause'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n\n // HTML passed as the option\n if (utils.is.string(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(captions.getTracks.call(this))) {\n return;\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Remove previous bindings\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const active = track.activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n const videoId = utils.parseYouTubeId(this.embedId);\n\n // Remove old containers\n const containers = utils.getElements.call(this, `[id^=\"${this.provider}-\"]`);\n Array.from(containers).forEach(utils.removeElement);\n\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Set ID\n this.media.setAttribute('id', utils.generateId(this.provider));\n\n // Setup API\n if (utils.is.object(window.YT)) {\n youtube.ready.call(this, videoId);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this, videoId);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle() {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n const videoId = utils.parseYouTubeId(this.embedId);\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n fetch(url)\n .then(response => (response.ok ? response.json() : null))\n .then(result => {\n if (result !== null && utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready(videoId) {\n const player = this;\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(player.media.id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n origin: window && window.location.hostname,\n widget_referrer: window && window.location.href,\n\n // Captions are flaky on YouTube\n cc_load_policy: this.captions.active ? 1 : 0,\n cc_lang_pref: this.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n player.media.paused = false;\n };\n player.media.pause = () => {\n instance.pauseVideo();\n player.media.paused = true;\n };\n player.media.stop = () => {\n instance.stopVideo();\n player.media.paused = true;\n };\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Remove old containers\n const containers = utils.getElements.call(this, `[id^=\"${this.provider}-\"]`);\n Array.from(containers).forEach(utils.removeElement);\n\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Set ID\n this.media.setAttribute('id', utils.generateId(this.provider));\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParameters(options);\n const id = utils.parseVimeoId(player.embedId);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n player.media.appendChild(iframe);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo || this.isYouTube || this.isVimeo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n Array.from(this.media.querySelectorAll('source')).forEach(utils.removeElement);\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div');\n this.embedId = input.sources[0].src;\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n },\n true\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Storage from './storage';\n\nimport captions from './captions';\nimport controls from './controls';\nimport fullscreen from './fullscreen';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Globals\nlet scrollPosition = {\n x: 0,\n y: 0,\n};\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n this.ready = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })()\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed attributes\n const attributes = {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n };\n\n // Different setup based on type\n switch (type) {\n // TODO: Handle passing an iframe for true progressive enhancement\n // case 'iframe':\n case 'div':\n this.type = types.video; // Audio will come later for external providers\n this.provider = this.media.getAttribute(attributes.provider);\n this.embedId = this.media.getAttribute(attributes.id);\n\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Try and get the embed id\n if (utils.is.empty(this.embedId)) {\n this.debug.error('Setup failed: Embed ID or URL missing');\n return;\n }\n\n // Clean up\n this.media.removeAttribute(attributes.provider);\n this.media.removeAttribute(attributes.id);\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media\n */\n play() {\n if ('play' in this.media) {\n this.media.play();\n }\n return this;\n }\n\n /**\n * Pause the media\n */\n pause() {\n if ('pause' in this.media) {\n this.media.pause();\n }\n return this;\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} toggle\n */\n togglePlay(toggle) {\n // True toggle if nothing passed\n if ((!utils.is.boolean(toggle) && this.media.paused) || toggle) {\n return this.play();\n }\n\n return this.pause();\n }\n\n /**\n * Stop playback\n */\n stop() {\n return this.restart().pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n return this;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n return this;\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n return this;\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n return this;\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n return this;\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return this;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return this;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n\n // Allow chaining\n return this;\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle fullscreen playback\n * Requires user input event\n * @param {event} event\n */\n toggleFullscreen(event) {\n // Check for native support\n if (fullscreen.enabled) {\n if (utils.is.event(event) && event.type === fullscreen.eventType) {\n // If it's a fullscreen change event, update the state\n this.fullscreen.active = fullscreen.isFullScreen(this.elements.container);\n } else {\n // Else it's a user request to enter or exit\n if (!this.fullscreen.active) {\n fullscreen.requestFullScreen(this.elements.container);\n } else {\n fullscreen.cancelFullScreen();\n }\n\n return this;\n }\n } else {\n // Otherwise, it's a simple toggle\n this.fullscreen.active = !this.fullscreen.active;\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.fullscreen.fallback, this.fullscreen.active);\n\n // Make sure we don't lose scroll position\n if (this.fullscreen.active) {\n scrollPosition = {\n x: window.pageXOffset || 0,\n y: window.pageYOffset || 0,\n };\n } else {\n window.scrollTo(scrollPosition.x, scrollPosition.y);\n }\n\n // Bind/unbind escape key\n document.body.style.overflow = this.fullscreen.active ? 'hidden' : '';\n }\n\n // Set button state\n if (utils.is.element(this.elements.buttons.fullscreen)) {\n utils.toggleState(this.elements.buttons.fullscreen, this.fullscreen.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.fullscreen.active ? 'enterfullscreen' : 'exitfullscreen');\n\n return this;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Bail if no support\n if (!support.airplay) {\n return this;\n }\n\n // Show dialog\n this.media.webkitShowPlaybackTargetPicker();\n\n return this;\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return this;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return this;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return this;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = window.setTimeout(() => {\n /* this.debug.warn({\n pressed: this.elements.controls.pressed,\n hover: this.elements.controls.pressed,\n playing: this.playing,\n paused: this.paused,\n loading: this.loading,\n }); */\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n\n return this;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n return this;\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n return this;\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n this.embedId = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove buttons\n if (this.elements.buttons && this.elements.buttons.play) {\n Array.from(this.elements.buttons.play).forEach(button => utils.removeElement(button));\n }\n\n // Remove others\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n const parent = this.elements.container.parentNode;\n\n if (utils.is.element(parent)) {\n parent.replaceChild(this.elements.original, this.elements.container);\n }\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n this.embed.destroy();\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n this.embed.unload().then(done);\n\n // Vimeo does not always return\n window.setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n}\n\nexport default Plyr;\n"],"names":["providers","types","defaults","window","navigator","language","split","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","test","userAgent","platform","url","callback","current","querySelector","callbacks","push","element","createElement","is","function","addEventListener","forEach","cb","call","event","src","first","getElementsByTagName","parentNode","insertBefore","id","updateSprite","data","innerHTML","body","childNodes","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","JSON","parse","content","then","response","ok","text","setItem","stringify","catch","prefix","Math","floor","random","self","top","e","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","setAttributes","textContent","target","removeChild","lastChild","empty","key","sel","existingAttributes","existing","selector","s","trim","className","replace","parts","value","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","on","keyCode","_this","active","getFocusElement","shiftKey","focus","preventDefault","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","dispatchEvent","pressed","getAttribute","state","max","toFixed","sources","source","shift","extend","match","RegExp","$2","number","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","find","undefined","setTimeout","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","transitionEnd","matchMedia","noop","Console","player","enabled","console","log","bind","Storage","store","json","get","removeItem","cancelFullScreen","some","pre","msExitFullscreen","msFullscreenEnabled","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","fullscreenElement","mozFullScreenElement","requestFullScreen","nativeSupport","fallback","inFrame","toggleClass","toggleState","trapFocus","listeners","handleKey","code","which","getKeyCode","repeat","altKey","ctrlKey","metaKey","editable","stopPropagation","togglePlay","increaseVolume","decreaseVolume","muted","toggleFullscreen","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","eventType","timeUpdate","durationUpdate","_this2","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","_this3","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","inverted","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","removeElement","inject","setup","ready","setTitle","label","i18n","title","isEmbed","iframe","frameTitle","playing","stopped","button","loading","timers","setRange","nodeValue","getPercentage","buffered","end","setProgress","time","format","slice","getHours","parseInt","hours","mins","getMinutes","secs","getSeconds","invert","updateTimeDisplay","seeking","displayDuration","styleSheet","sheet","percentage","styles","rules","findIndex","rule","selectorText","deleteRule","insertRule","iconUrl","indexOf","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","left","hasClass","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","open","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","off","createButton","createRange","createProgress","createTime","inner","home","_this4","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","_this5","stored","setCaptionsMenu","insertAfter","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","youtube","videoId","parseYouTubeId","embedId","containers","setAspectRatio","generateId","YT","loadScript","urls","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getVideoData","google","result","items","snippet","paddingBottom","Player","autoplay","location","hostname","href","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","setVolume","getVideoUrl","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","vimeo","Vimeo","padding","offset","transform","params","buildUrlParameters","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","cues","stripHTML","seconds","isIos","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","destroy","html5","check","crossorigin","poster","addStyleHook","insertElements","scrollPosition","jQuery","plyr","original","tagName","hasAttribute","step","isFullScreen","pageXOffset","pageYOffset","scrollTo","x","y","overflow","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","mime","soft","done","replaceChild","unload","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IAAaA,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCXLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,iDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,qBAKD,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,QACA,sBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,6BAMD,uDAGA,uDAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,wCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,4BACE,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,sBACE,uBACD,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,gCAKF,g3CChVV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"}
\ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 2bd7ff20..29dc8666 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -9,7 +9,6 @@ const path = require('path'); const gulp = require('gulp'); const gutil = require('gulp-util'); const concat = require('gulp-concat'); -const less = require('gulp-less'); const sass = require('gulp-sass'); const cleancss = require('gulp-clean-css'); const run = require('run-sequence'); @@ -39,8 +38,7 @@ const paths = { plyr: { // Source paths src: { - less: path.join(root, 'src/less/**/*'), - sass: path.join(root, 'src/sass/**/*'), + sass: path.join(root, 'src/sass/**/*.scss'), js: path.join(root, 'src/js/**/*'), sprite: path.join(root, 'src/sprite/*.svg'), }, @@ -51,7 +49,7 @@ const paths = { demo: { // Source paths src: { - less: path.join(root, 'demo/src/less/**/*'), + sass: path.join(root, 'demo/src/sassgu/**/*.scss'), js: path.join(root, 'demo/src/js/**/*'), }, @@ -61,12 +59,14 @@ const paths = { // Demo root: path.join(root, 'demo/'), }, - upload: [path.join(root, 'dist/**'), path.join(root, 'demo/dist/**')], + upload: [ + path.join(root, 'dist/**'), + path.join(root, 'demo/dist/**'), + ], }; // Task arrays const tasks = { - less: [], sass: [], js: [], sprite: [], @@ -81,18 +81,16 @@ const browsers = ['> 1%']; // Babel config const babelrc = { - presets: [ - [ - 'env', - { - targets: { - browsers, - }, - useBuiltIns: true, - modules: false, + presets: [[ + 'env', + { + targets: { + browsers, }, - ], - ], + useBuiltIns: true, + modules: false, + }, + ]], plugins: ['external-helpers'], babelrc: false, exclude: 'node_modules/**', @@ -100,7 +98,10 @@ const babelrc = { // Clean out /dist gulp.task('clean', () => { - const dirs = [paths.plyr.output, paths.demo.output].map(dir => path.join(dir, '**/*')); + const dirs = [ + paths.plyr.output, + paths.demo.output, + ].map(dir => path.join(dir, '**/*')); // Don't delete the mp4 dirs.push(`!${path.join(paths.plyr.output, '**/*.mp4')}`); @@ -122,7 +123,12 @@ const build = { .pipe( rollup( { - plugins: [resolve(), commonjs(), babel(babelrc), uglify({}, minify)], + plugins: [ + resolve(), + commonjs(), + babel(babelrc), + uglify({}, minify), + ], }, options ) @@ -133,24 +139,6 @@ const build = { ); }); }, - less(files, bundle) { - Object.keys(files).forEach(key => { - const name = `less:${key}`; - tasks.less.push(name); - - gulp.task(name, () => - gulp - .src(bundles[bundle].less[key]) - .pipe(less()) - .on('error', gutil.log) - .pipe(concat(key)) - .pipe(prefix(browsers, { cascade: false })) - .pipe(cleancss()) - .pipe(size(sizeOptions)) - .pipe(gulp.dest(paths[bundle].output)) - ); - }); - }, sass(files, bundle) { Object.keys(files).forEach(key => { const name = `sass:${key}`; @@ -179,11 +167,9 @@ const build = { .src(paths[bundle].src.sprite) .pipe( svgmin({ - plugins: [ - { - removeDesc: true, - }, - ], + plugins: [{ + removeDesc: true, + }], }) ) .pipe(svgstore()) @@ -196,12 +182,11 @@ const build = { // Plyr core files build.js(bundles.plyr.js, 'plyr', { name: 'Plyr', format: 'umd' }); -build.less(bundles.plyr.less, 'plyr'); build.sass(bundles.plyr.sass, 'plyr'); build.sprite('plyr'); // Demo files -build.less(bundles.demo.less, 'demo'); +build.sass(bundles.demo.sass, 'demo'); build.js(bundles.demo.js, 'demo', { format: 'es' }); // Build all JS @@ -209,26 +194,21 @@ gulp.task('js', () => { run(tasks.js); }); -// Build sass (for testing, default is LESS) -gulp.task('sass', () => { - run(tasks.sass); -}); - // Watch for file changes gulp.task('watch', () => { // Plyr core gulp.watch(paths.plyr.src.js, tasks.js); - gulp.watch(paths.plyr.src.less, tasks.less); + gulp.watch(paths.plyr.src.sass, tasks.sass); gulp.watch(paths.plyr.src.sprite, tasks.sprite); // Demo gulp.watch(paths.demo.src.js, tasks.js); - gulp.watch(paths.demo.src.less, tasks.less); + gulp.watch(paths.demo.src.sass, tasks.sass); }); // Default gulp task gulp.task('default', () => { - run(tasks.clean, tasks.js, tasks.less, tasks.sprite, 'watch'); + run(tasks.clean, tasks.js, tasks.sass, tasks.sprite, 'watch'); }); // Publish a version to CDN and demo @@ -360,6 +340,6 @@ if ('cdn' in aws) { // Do everything gulp.task('publish', () => { - run(tasks.clean, tasks.js, tasks.less, tasks.sprite, 'cdn', 'demo'); + run(tasks.clean, tasks.js, tasks.sass, tasks.sprite, 'cdn', 'demo'); }); } diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f54c0da3..00000000 --- a/package-lock.json +++ /dev/null @@ -1,8112 +0,0 @@ -{ - "name": "plyr", - "version": "2.0.13", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.32.tgz", - "integrity": "sha512-EVq4T1a2GviKiQ75OfxNrGPPhJyXzg9jjORuuwhloZbFdrhT4FHa73sv9OFWBwX7rl2b6bxBVmfxrBQYWYz9tA==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.32.tgz", - "integrity": "sha512-ysfIt7p72xm5fjSJsv7fMVN/j+EwIdqu8/MJjt6TqB4wM2r6rFRi0ujBTWDkLGQkRB/P5uDV8qcFCHAHnNzmsg==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.32", - "@babel/template": "7.0.0-beta.32", - "@babel/types": "7.0.0-beta.32" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.32.tgz", - "integrity": "sha512-bm7lIlizycJQY5SJ3HXWJV4XjSrOt1onzrDcOxUo9FEnKRZDEr/zfi5ar2s5tvvZvve/jGHwZKVKekRw2cjPCQ==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.32" - } - }, - "@babel/template": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.32.tgz", - "integrity": "sha512-DB9sLgX2mfE29vjAkxHlzLyWr31EO9HaYoAM/UsPSsL70Eudl0i25URwIfQT6S6ckeVFnFP1t6PhERVeV4EAHA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.32", - "@babel/types": "7.0.0-beta.32", - "babylon": "7.0.0-beta.32", - "lodash": "4.17.4" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.32.tgz", - "integrity": "sha512-PvAmyP2IJEBVAuE5yVzrTSWCCN9VMa1eGns8w3w6FYD/ivHSUmS7n+F40Fmjn+0nCQSUFR96wP0CqQ4jxTnF4Q==", - "dev": true - } - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.32.tgz", - "integrity": "sha512-dGe2CLduCIZ/iDkbmnqspQguRy5ARvI+zC8TiwFnsJ2YYO2TWK7x2aEwrbkSmi0iPlBP+Syiag7Idc1qNQq74g==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.32", - "@babel/helper-function-name": "7.0.0-beta.32", - "@babel/types": "7.0.0-beta.32", - "babylon": "7.0.0-beta.32", - "debug": "3.1.0", - "globals": "10.4.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.32.tgz", - "integrity": "sha512-PvAmyP2IJEBVAuE5yVzrTSWCCN9VMa1eGns8w3w6FYD/ivHSUmS7n+F40Fmjn+0nCQSUFR96wP0CqQ4jxTnF4Q==", - "dev": true - }, - "globals": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz", - "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.32.tgz", - "integrity": "sha512-w8+wzVcYCMb9OfaBfay2Vg5hyj7UfBX6qQtA+kB0qsW1h1NH/7xHMwvTZNqkuFBwjz5wxGS2QmaIcC3HH+UoxA==", - "dev": true, - "requires": { - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } - }, - "@gulp-sourcemaps/identity-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz", - "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=", - "dev": true, - "requires": { - "acorn": "5.1.2", - "css": "2.2.1", - "normalize-path": "2.1.1", - "source-map": "0.5.7", - "through2": "2.0.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", - "dev": true, - "requires": { - "normalize-path": "2.1.1", - "through2": "2.0.3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accord": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/accord/-/accord-0.27.3.tgz", - "integrity": "sha1-f7kSlwkoXK6oTrNyxOiCAxtxOOg=", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "glob": "7.1.2", - "indx": "0.2.3", - "lodash.clone": "4.5.0", - "lodash.defaults": "4.2.0", - "lodash.flatten": "4.4.0", - "lodash.merge": "4.6.0", - "lodash.partialright": "4.2.1", - "lodash.pick": "4.4.0", - "lodash.uniq": "4.5.0", - "resolve": "1.5.0", - "semver": "5.4.1", - "uglify-js": "2.8.29", - "when": "3.7.8" - } - }, - "acorn": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", - "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ajv-keywords": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", - "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "aria-query": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.0.tgz", - "integrity": "sha512-/r2lHl09V3o74+2MLKEdewoj37YZqiQZnfen1O4iNlrOjUgeKuu1U2yF3iKh6HJxqF+OXkLMfQv65Z/cvxD6vA==", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.9.0" - } - }, - "array-iterate": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.1.tgz", - "integrity": "sha1-hlv3+K851rCYLGCQKRSsdrwBCPY=", - "dev": true - }, - "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", - "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", - "dev": true - }, - "autoprefixer": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.6.tgz", - "integrity": "sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==", - "dev": true, - "requires": { - "browserslist": "2.5.1", - "caniuse-lite": "1.0.30000755", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.13", - "postcss-value-parser": "3.3.0" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "axobject-query": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz", - "integrity": "sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "babel-eslint": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.0.2.tgz", - "integrity": "sha512-yyl5U088oE+419+BNLJDKVWkUokuPLQeQt9ZTy9uM9kAzbtQgyYL3JkG425B8jxXA7MwTxnDAtRLMKJNH36qjA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.32", - "@babel/traverse": "7.0.0-beta.32", - "@babel/types": "7.0.0-beta.32", - "babylon": "7.0.0-beta.32" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.32.tgz", - "integrity": "sha512-PvAmyP2IJEBVAuE5yVzrTSWCCN9VMa1eGns8w3w6FYD/ivHSUmS7n+F40Fmjn+0nCQSUFR96wP0CqQ4jxTnF4Q==", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - } - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - } - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-external-helpers": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz", - "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - } - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - } - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - }, - "dependencies": { - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - } - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-preset-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.5.1", - "invariant": "2.2.2", - "semver": "5.4.1" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "bail": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz", - "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "binaryextensions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz", - "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserslist": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.5.1.tgz", - "integrity": "sha512-jAvM2ku7YDJ+leAq3bFH1DE0Ylw+F+EQDq4GkqZfgPEqpWYw9ofQH85uKSB9r3Tv7XDbfqVtE+sdvKJW7IlPJA==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000755", - "electron-to-chromium": "1.3.27" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30000755", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000755.tgz", - "integrity": "sha1-nOX24GvXXsggmr6IU8O+7wIkjWU=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "ccount": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.2.tgz", - "integrity": "sha1-U7ai+BW7d7nChx97mnLDol8djok=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "character-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz", - "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=", - "dev": true - }, - "character-entities-html4": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.1.tgz", - "integrity": "sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA=", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz", - "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", - "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.0", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "1.1.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", - "dev": true, - "requires": { - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - } - } - }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.0.tgz", - "integrity": "sha1-6uCiQT9VwJQvgYwin+/OhF1/Oxw=", - "dev": true, - "requires": { - "is-regexp": "1.0.0", - "is-supported-regexp-flag": "1.0.0" - } - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "1.5.1" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz", - "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=", - "dev": true - }, - "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "concat-with-sourcemaps": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz", - "integrity": "sha1-9Vs74q60dgGxCi1SWcz7cP0vHdY=", - "dev": true, - "requires": { - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", - "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.10.0", - "parse-json": "3.0.0", - "require-from-string": "2.0.1" - }, - "dependencies": { - "parse-json": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", - "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - } - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "css": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, - "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.35" - } - }, - "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-fabulous": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.2.1.tgz", - "integrity": "sha512-u0TV6HcfLsZ03xLBhdhSViQMldaiQ2o+8/nSILaXkuNSWvxkx66vYJUAam0Eu7gAilJRX/69J4kKdqajQPaPyw==", - "dev": true, - "requires": { - "debug": "3.1.0", - "memoizee": "0.4.11", - "object-assign": "4.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "1.0.2" - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "0.1.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "doctrine": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz", - "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", - "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "1.1.14" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "electron-to-chromium": { - "version": "1.3.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", - "dev": true - }, - "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "0.4.19" - } - }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "1.3.3" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - } - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, - "optional": true, - "requires": { - "prr": "0.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", - "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", - "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.35", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", - "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-symbol": "3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.12.1.tgz", - "integrity": "sha512-28hOYej+NZ/R5H1yMvyKa1+bPlu+fnsIAQffK6hxXgvmXnImos2bA5XfCn5dYv2k2mrKj+/U/Z4L5ICWxC7TQw==", - "dev": true, - "requires": { - "ajv": "5.3.0", - "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.0.2", - "eslint-scope": "3.7.1", - "espree": "3.5.2", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.0.1", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.0.0", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.0" - }, - "dependencies": { - "globals": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.0.1.tgz", - "integrity": "sha1-Eqh7sBDlFUOWrMU14eQ/x1Ow5eg=", - "dev": true - } - } - }, - "eslint-config-airbnb": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz", - "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "12.1.0" - } - }, - "eslint-config-airbnb-base": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", - "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", - "dev": true, - "requires": { - "eslint-restricted-globals": "0.1.1" - } - }, - "eslint-config-prettier": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz", - "integrity": "sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A==", - "dev": true, - "requires": { - "get-stdin": "5.0.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", - "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", - "dev": true, - "requires": { - "debug": "2.6.9", - "resolve": "1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", - "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", - "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", - "dev": true, - "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.1", - "eslint-module-utils": "2.1.1", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.2.tgz", - "integrity": "sha1-ZZJ3p1iwNsMFp+ShMFfDAc075z8=", - "dev": true, - "requires": { - "aria-query": "0.7.0", - "array-includes": "3.0.3", - "ast-types-flow": "0.0.7", - "axobject-query": "0.1.0", - "damerau-levenshtein": "1.0.4", - "emoji-regex": "6.5.1", - "jsx-ast-utils": "1.4.1" - } - }, - "eslint-plugin-react": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz", - "integrity": "sha512-YGSjB9Qu6QbVTroUZi66pYky3DfoIPLdHQ/wmrBGyBRnwxQsBXAov9j2rpXt/55i8nyMv6IRWJv2s4d4YnduzQ==", - "dev": true, - "requires": { - "doctrine": "2.0.2", - "has": "1.0.1", - "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.0" - }, - "dependencies": { - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "3.0.3" - } - } - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "espree": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", - "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", - "dev": true, - "requires": { - "acorn": "5.2.1", - "acorn-jsx": "3.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "estree-walker": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", - "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" - } - }, - "execall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", - "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", - "dev": true, - "requires": { - "clone-regexp": "1.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", - "dev": true, - "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", - "dev": true, - "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.17" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true, - "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" - } - }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - }, - "dependencies": { - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "0.1.0" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", - "dev": true, - "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" - }, - "dependencies": { - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "0.5.2" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "0.1.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "0.2.0", - "which": "1.3.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", - "dev": true - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.0.4", - "liftoff": "2.3.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "gulp-autoprefixer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-4.0.0.tgz", - "integrity": "sha1-4AqMVxuF0GUWrCY0G+kN/Z/B6rA=", - "dev": true, - "requires": { - "autoprefixer": "7.1.6", - "gulp-util": "3.0.8", - "postcss": "6.0.13", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "gulp-better-rollup": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-better-rollup/-/gulp-better-rollup-2.0.0.tgz", - "integrity": "sha512-CmK3LYY9RTXliAtptVisaGLP5XG3m3y5k0TV7bA9ksYgDSwPtHjnc0IzIZvYwRXfhWL1Uoscz5FZ7a4ieXHPcQ==", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "lodash.camelcase": "4.3.0", - "rollup": "0.50.0", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "gulp-clean-css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-3.9.0.tgz", - "integrity": "sha512-CsqaSO2ZTMQI/WwbWloZWBudhsRMKgxBthzxt4bbcbWrjOY4pRFziyK9IH6YbTpaWAPKEwWpopPkpiAEoDofxw==", - "dev": true, - "requires": { - "clean-css": "4.1.9", - "gulp-util": "3.0.8", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", - "dev": true, - "requires": { - "concat-with-sourcemaps": "1.0.4", - "through2": "2.0.3", - "vinyl": "2.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - } - } - }, - "gulp-less": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-3.3.2.tgz", - "integrity": "sha1-9mNq3MZhUKiQJxn6WZY/x/hipJo=", - "dev": true, - "requires": { - "accord": "0.27.3", - "gulp-util": "3.0.8", - "less": "2.7.3", - "object-assign": "4.1.1", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "gulp-open": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-open/-/gulp-open-2.0.0.tgz", - "integrity": "sha1-oW9n6VzqiyBhtjo7jDibxVm44c4=", - "dev": true, - "requires": { - "colors": "1.1.2", - "gulp-util": "3.0.8", - "open": "0.0.5", - "through2": "2.0.3" - } - }, - "gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", - "dev": true - }, - "gulp-replace": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.6.1.tgz", - "integrity": "sha1-Eb+Mj85TPjPi9qjy9DC5VboL4GY=", - "dev": true, - "requires": { - "istextorbinary": "1.0.2", - "readable-stream": "2.3.3", - "replacestream": "4.0.3" - } - }, - "gulp-s3": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/gulp-s3/-/gulp-s3-0.11.0.tgz", - "integrity": "sha1-njArVkUgbiF6Ul0gvvoe0pNEJJI=", - "dev": true, - "requires": { - "async": "2.5.0", - "event-stream": "3.3.4", - "gulp-util": "2.2.20", - "knox": "0.9.2", - "mime": "1.2.11" - }, - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - } - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "gulp-util": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", - "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", - "dev": true, - "requires": { - "chalk": "0.5.1", - "dateformat": "1.0.12", - "lodash._reinterpolate": "2.4.1", - "lodash.template": "2.4.1", - "minimist": "0.2.0", - "multipipe": "0.1.2", - "through2": "0.5.1", - "vinyl": "0.2.3" - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", - "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=", - "dev": true - }, - "lodash.defaults": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", - "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", - "dev": true, - "requires": { - "lodash._objecttypes": "2.4.1", - "lodash.keys": "2.4.1" - } - }, - "lodash.escape": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", - "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", - "dev": true, - "requires": { - "lodash._escapehtmlchar": "2.4.1", - "lodash._reunescapedhtml": "2.4.1", - "lodash.keys": "2.4.1" - } - }, - "lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "dev": true, - "requires": { - "lodash._isnative": "2.4.1", - "lodash._shimkeys": "2.4.1", - "lodash.isobject": "2.4.1" - } - }, - "lodash.template": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", - "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", - "dev": true, - "requires": { - "lodash._escapestringchar": "2.4.1", - "lodash._reinterpolate": "2.4.1", - "lodash.defaults": "2.4.1", - "lodash.escape": "2.4.1", - "lodash.keys": "2.4.1", - "lodash.templatesettings": "2.4.1", - "lodash.values": "2.4.1" - } - }, - "lodash.templatesettings": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", - "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", - "dev": true, - "requires": { - "lodash._reinterpolate": "2.4.1", - "lodash.escape": "2.4.1" - } - }, - "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", - "dev": true - }, - "minimist": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", - "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true - }, - "through2": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "3.0.0" - } - }, - "vinyl": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", - "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", - "dev": true, - "requires": { - "clone-stats": "0.0.1" - } - }, - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true - } - } - }, - "gulp-sass": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz", - "integrity": "sha1-U9xLaKH13f5EJKtMJHZVJpqLdLc=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "lodash.clonedeep": "4.5.0", - "node-sass": "4.5.3", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "gulp-size": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gulp-size/-/gulp-size-2.1.0.tgz", - "integrity": "sha1-HCtk8X+QcdWr2Z0VS3s0gfj7oSg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8", - "gzip-size": "3.0.0", - "object-assign": "4.1.1", - "pretty-bytes": "3.0.1", - "stream-counter": "1.0.0", - "through2": "2.0.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "gulp-sourcemaps": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.1.tgz", - "integrity": "sha512-1qHCI3hdmsMdq/SUotxwUh/L8YzlI6J9zQ5ifNOtx4Y6KV5y5sGuORv1KZzWhuKtz/mXNh5xLESUtwC4EndCjA==", - "dev": true, - "requires": { - "@gulp-sourcemaps/identity-map": "1.0.1", - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "4.0.13", - "convert-source-map": "1.5.0", - "css": "2.2.1", - "debug-fabulous": "0.2.1", - "detect-newline": "2.1.0", - "graceful-fs": "4.1.11", - "source-map": "0.6.1", - "strip-bom-string": "1.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulp-svgmin": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/gulp-svgmin/-/gulp-svgmin-1.2.4.tgz", - "integrity": "sha1-pKqeJhXPEQXvVVrqhuhilswg4nM=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "svgo": "0.7.2" - } - }, - "gulp-svgstore": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gulp-svgstore/-/gulp-svgstore-6.1.0.tgz", - "integrity": "sha1-BLIDrA4T+O1tv8lA0lllxOJFZnY=", - "dev": true, - "requires": { - "cheerio": "0.22.0", - "gulp-util": "3.0.8" - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "1.0.0" - } - }, - "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", - "dev": true, - "requires": { - "duplexer": "0.1.1" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true - }, - "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", - "dev": true - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.1", - "domutils": "1.5.1", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indx": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz", - "integrity": "sha1-Fdz1bunPZcAjTFE8J/vVgOcPvFA=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" - } - }, - "is-alphabetical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz", - "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=", - "dev": true - }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", - "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", - "dev": true, - "requires": { - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-decimal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz", - "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=", - "dev": true - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-hexadecimal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz", - "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "0.1.2" - } - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-supported-regexp-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz", - "integrity": "sha1-i1IMhfrnolM4LUsCZS4EVXbhO7g=", - "dev": true - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-whitespace-character": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz", - "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, - "is-word-character": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz", - "integrity": "sha1-WgP6HqkazopusMfNdw64bWXIvvs=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istextorbinary": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz", - "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=", - "dev": true, - "requires": { - "binaryextensions": "1.0.1", - "textextensions": "1.0.2" - } - }, - "js-base64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", - "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "known-css-properties": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.4.1.tgz", - "integrity": "sha512-n+ThoCKhyMFKkMfksdLMP5ndp+VzwDRzQdH6JlmZ2GTpUenYB2EeEKjOue2SErAAG/MmBSUISpwvawDhydWQdQ==", - "dev": true - }, - "knox": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/knox/-/knox-0.9.2.tgz", - "integrity": "sha1-NzZZNmniTwJP2vcjtqHcSv2DmnE=", - "dev": true, - "requires": { - "debug": "1.0.5", - "mime": "1.4.1", - "once": "1.4.0", - "stream-counter": "1.0.0", - "xml2js": "0.4.19" - }, - "dependencies": { - "debug": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.5.tgz", - "integrity": "sha1-9yQSF0MPmd7EwrRz6rkiKOh0wqw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "less": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", - "dev": true, - "requires": { - "errno": "0.1.4", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.4.1", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.81.0", - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true, - "requires": { - "extend": "3.0.1", - "findup-sync": "0.4.3", - "fined": "1.1.0", - "flagged-respawn": "0.3.2", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.mapvalues": "4.6.0", - "rechoir": "0.6.2", - "resolve": "1.5.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._escapehtmlchar": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", - "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", - "dev": true, - "requires": { - "lodash._htmlescapes": "2.4.1" - } - }, - "lodash._escapestringchar": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", - "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._htmlescapes": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", - "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._isnative": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", - "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=", - "dev": true - }, - "lodash._objecttypes": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._reunescapedhtml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", - "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", - "dev": true, - "requires": { - "lodash._htmlescapes": "2.4.1", - "lodash.keys": "2.4.1" - }, - "dependencies": { - "lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "dev": true, - "requires": { - "lodash._isnative": "2.4.1", - "lodash._shimkeys": "2.4.1", - "lodash.isobject": "2.4.1" - } - } - } - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash._shimkeys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", - "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", - "dev": true, - "requires": { - "lodash._objecttypes": "2.4.1" - } - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", - "dev": true - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "3.0.1" - } - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isobject": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "dev": true, - "requires": { - "lodash._objecttypes": "2.4.1" - } - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", - "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", - "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", - "dev": true - }, - "lodash.partialright": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", - "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=", - "dev": true - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "dev": true - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", - "dev": true - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" - } - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "lodash.values": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", - "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", - "dev": true, - "requires": { - "lodash.keys": "2.4.1" - }, - "dependencies": { - "lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "dev": true, - "requires": { - "lodash._isnative": "2.4.1", - "lodash._shimkeys": "2.4.1", - "lodash.isobject": "2.4.1" - } - } - } - }, - "log-symbols": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", - "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", - "dev": true, - "requires": { - "chalk": "2.3.0" - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "longest-streak": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", - "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "0.10.35" - } - }, - "magic-string": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", - "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==", - "dev": true, - "requires": { - "vlq": "0.2.3" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "markdown-escapes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz", - "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=", - "dev": true - }, - "markdown-table": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.1.tgz", - "integrity": "sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw=", - "dev": true - }, - "mathml-tag-names": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz", - "integrity": "sha1-jUEmgWi/htEQK5gQnijlMeejRXg=", - "dev": true - }, - "mdast-util-compact": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", - "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", - "dev": true, - "requires": { - "unist-util-modify-children": "1.1.1", - "unist-util-visit": "1.2.0" - } - }, - "memoizee": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.11.tgz", - "integrity": "sha1-vemBdmPJ5A/bKk6hw2cpYIeujI8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-weak-map": "2.0.2", - "event-emitter": "0.3.5", - "is-promise": "2.1.0", - "lru-queue": "0.1.0", - "next-tick": "1.0.0", - "timers-ext": "0.1.2" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true - }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.4", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-sass": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", - "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.0", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.7.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.81.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" - } - }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true, - "requires": { - "globule": "1.2.0" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", - "dev": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "1.0.1", - "array-slice": "1.0.0", - "for-own": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, - "open": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", - "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", - "dev": true - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.0" - } - }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "parse-entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", - "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", - "dev": true, - "requires": { - "character-entities": "1.2.1", - "character-entities-legacy": "1.1.1", - "character-reference-invalid": "1.1.1", - "is-alphanumerical": "1.0.1", - "is-decimal": "1.0.1", - "is-hexadecimal": "1.0.1" - } - }, - "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", - "dev": true, - "requires": { - "is-absolute": "0.2.6", - "map-cache": "0.2.2", - "path-root": "0.1.1" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "0.1.2" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "1.1.2" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "postcss": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.13.tgz", - "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - }, - "dependencies": { - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-html": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.11.0.tgz", - "integrity": "sha512-ruCTbRZWY+qOV4FNYNm6E0ucIbCkkuYHIqQ4W3iSVIc1aUVBTKMG0iUo2nPUAG2lhFaTmfBaZ17017osZ18ddA==", - "dev": true, - "requires": { - "htmlparser2": "3.9.2", - "remark": "8.0.0", - "unist-util-find-all-after": "1.0.1" - } - }, - "postcss-less": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.1.tgz", - "integrity": "sha512-zl0EEqq8Urh37Ppdv9zzhpZpLHrgkxmt6e3O4ftRa7/b8Uq2LV+/KBVM8/KuzmHNu+mthhOArg1lxbfqQ3NUdg==", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.3.2", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true - }, - "postcss-reporter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", - "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "lodash": "4.17.4", - "log-symbols": "2.1.0", - "postcss": "6.0.13" - } - }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", - "dev": true - }, - "postcss-safe-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz", - "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=", - "dev": true, - "requires": { - "postcss": "6.0.13" - } - }, - "postcss-scss": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.2.tgz", - "integrity": "sha1-/0XPM1S4ee6JpOtoaA9GrJuxT5Q=", - "dev": true, - "requires": { - "postcss": "6.0.13" - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "2.0.6" - } - }, - "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", - "dev": true, - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" - } - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true, - "optional": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.5.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remark": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz", - "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==", - "dev": true, - "requires": { - "remark-parse": "4.0.0", - "remark-stringify": "4.0.0", - "unified": "6.1.6" - } - }, - "remark-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", - "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", - "dev": true, - "requires": { - "collapse-white-space": "1.0.3", - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1", - "is-whitespace-character": "1.0.1", - "is-word-character": "1.0.1", - "markdown-escapes": "1.0.1", - "parse-entities": "1.1.1", - "repeat-string": "1.6.1", - "state-toggle": "1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "1.1.0", - "unherit": "1.1.0", - "unist-util-remove-position": "1.1.1", - "vfile-location": "2.0.2", - "xtend": "4.0.1" - } - }, - "remark-stringify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz", - "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==", - "dev": true, - "requires": { - "ccount": "1.0.2", - "is-alphanumeric": "1.0.0", - "is-decimal": "1.0.1", - "is-whitespace-character": "1.0.1", - "longest-streak": "2.0.2", - "markdown-escapes": "1.0.1", - "markdown-table": "1.1.1", - "mdast-util-compact": "1.0.1", - "parse-entities": "1.1.1", - "repeat-string": "1.6.1", - "state-toggle": "1.0.0", - "stringify-entities": "1.3.1", - "unherit": "1.1.0", - "xtend": "4.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "replacestream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", - "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1", - "readable-stream": "2.3.3" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", - "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "rollup": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.50.0.tgz", - "integrity": "sha512-7RqCBQ9iwsOBPkjYgoIaeUij606mSkDMExP0NT7QDI3bqkHYQHrQ83uoNIXwPcQm/vP2VbsUz3kiyZZ1qPlLTQ==", - "dev": true - }, - "rollup-plugin-babel": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.2.tgz", - "integrity": "sha512-ALGPBFtwJZcYHsNPM6RGJlEncTzAARPvZOGjNPZgDe5hS5t6sJGjiOWibEFVEz5LQN7S7spvCBILaS4N1Cql2w==", - "dev": true, - "requires": { - "rollup-pluginutils": "1.5.2" - } - }, - "rollup-plugin-commonjs": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.6.tgz", - "integrity": "sha512-qK0+uhktmnAgZkHkqFuajNmPw93fjrO7+CysDaxWE5jrUR9XSlSvuao5ZJP+XizxA8weakhgYYBtbVz9SGBpjA==", - "dev": true, - "requires": { - "acorn": "5.2.1", - "estree-walker": "0.5.0", - "magic-string": "0.22.4", - "resolve": "1.5.0", - "rollup-pluginutils": "2.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - }, - "estree-walker": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.0.tgz", - "integrity": "sha512-/bEAy+yKAZQrEWUhGmS3H9XpGqSDBtRzX0I2PgMw9kA2n1jN22uV5B5p7MFdZdvWdXCRJztXAfx6ZeRfgkEETg==", - "dev": true - }, - "rollup-pluginutils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz", - "integrity": "sha1-fslbNXP2VDpGpkYb2afFRFJdD8A=", - "dev": true, - "requires": { - "estree-walker": "0.3.1", - "micromatch": "2.3.11" - }, - "dependencies": { - "estree-walker": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.3.1.tgz", - "integrity": "sha1-5rGlHPcpJSTnI3wxLl/mZgwc4ao=", - "dev": true - } - } - } - } - }, - "rollup-plugin-node-resolve": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz", - "integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=", - "dev": true, - "requires": { - "browser-resolve": "1.11.2", - "builtin-modules": "1.1.1", - "is-module": "1.0.0", - "resolve": "1.5.0" - } - }, - "rollup-plugin-uglify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz", - "integrity": "sha1-Z7N60e/a+9g69MNrQMGJ7khmyWk=", - "dev": true, - "requires": { - "uglify-js": "3.1.6" - }, - "dependencies": { - "uglify-js": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.6.tgz", - "integrity": "sha512-/rseyxEKEVMBo8279lqpoJgD6C/i/CIi+9TJDvWmb+Xo6mqMKwjA8Io3IMHlcXQzj99feR6zrN8m3wqqvm/nYA==", - "dev": true, - "requires": { - "commander": "2.11.0", - "source-map": "0.6.1" - } - } - } - }, - "rollup-pluginutils": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", - "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", - "dev": true, - "requires": { - "estree-walker": "0.2.1", - "minimatch": "3.0.4" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "run-sequence": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.0.tgz", - "integrity": "sha512-xW5DmUwdvoyYQUMPKN8UW7TZSFs7AxtT59xo1m5y91jHbvwGlGgOmdV1Yw5P68fkjf3aHUZ4G1o1mZCtNe0qtw==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "2.3.2", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", - "dev": true, - "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", - "dev": true - }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, - "specificity": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.2.tgz", - "integrity": "sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==", - "dev": true - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "state-toggle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz", - "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "0.1.1" - } - }, - "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, - "stream-counter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz", - "integrity": "sha1-kc8lac5NxQYf6816yyY5SloRR1E=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "stringify-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.1.tgz", - "integrity": "sha1-sVDsLXKsTBtfMktR+2soyc3/BYw=", - "dev": true, - "requires": { - "character-entities-html4": "1.1.1", - "character-entities-legacy": "1.1.1", - "is-alphanumerical": "1.0.1", - "is-hexadecimal": "1.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - } - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", - "dev": true - }, - "stylelint": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-8.3.1.tgz", - "integrity": "sha512-v5K6tv+Ky3SoJfNqGOvgzRDLqZV133CZ7Wtu3y5aAGjQHVi+6dixFLgI82VrJZJdC4HwZplafJcRP+4r7EUt5g==", - "dev": true, - "requires": { - "autoprefixer": "7.1.6", - "balanced-match": "1.0.0", - "chalk": "2.3.0", - "cosmiconfig": "3.1.0", - "debug": "3.1.0", - "execall": "1.0.0", - "file-entry-cache": "2.0.0", - "get-stdin": "5.0.1", - "globby": "7.1.1", - "globjoin": "0.1.4", - "html-tags": "2.0.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "known-css-properties": "0.4.1", - "lodash": "4.17.4", - "log-symbols": "2.1.0", - "mathml-tag-names": "2.0.1", - "meow": "3.7.0", - "micromatch": "2.3.11", - "normalize-selector": "0.2.0", - "pify": "3.0.0", - "postcss": "6.0.13", - "postcss-html": "0.11.0", - "postcss-less": "1.1.1", - "postcss-media-query-parser": "0.2.3", - "postcss-reporter": "5.0.0", - "postcss-resolve-nested-selector": "0.1.1", - "postcss-safe-parser": "3.0.1", - "postcss-scss": "1.0.2", - "postcss-selector-parser": "3.1.1", - "postcss-value-parser": "3.3.0", - "resolve-from": "4.0.0", - "specificity": "0.3.2", - "string-width": "2.1.1", - "style-search": "0.1.0", - "sugarss": "1.0.0", - "svg-tags": "1.0.0", - "table": "4.0.2" - }, - "dependencies": { - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.2", - "ignore": "3.3.7", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "stylelint-config-prettier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-2.0.0.tgz", - "integrity": "sha512-B5kiuzUOiZreh9nikOKJ9+AtH5iNpDLQbyN+oGcrflNA1M6BEgbDnI/qeCn50NoQieav/ajsmB6HU9YtIYx5SQ==", - "dev": true - }, - "stylelint-config-standard": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-18.0.0.tgz", - "integrity": "sha1-DYcrQPr9zdz0GI+1tk3bOIforvw=", - "dev": true, - "requires": { - "stylelint-config-recommended": "2.0.0" - }, - "dependencies": { - "stylelint-config-recommended": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.0.0.tgz", - "integrity": "sha512-JgycdAgMlSzCDBCh3lydsyvEKy+utg6H8BI28lS4Q3W5HfKVN8HMLou1xnnaLtgk1H8uQ8FT34x+mpJSM41n7g==", - "dev": true - } - } - }, - "sugarss": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.0.tgz", - "integrity": "sha1-ZeUbOVhDL7cNVFGmi7M+MtDPHvc=", - "dev": true, - "requires": { - "postcss": "6.0.13" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", - "dev": true - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true, - "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - } - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "5.3.0", - "ajv-keywords": "2.1.0", - "chalk": "2.3.0", - "lodash": "4.17.4", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "textextensions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz", - "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timers-ext": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", - "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", - "dev": true, - "requires": { - "es5-ext": "0.10.35", - "next-tick": "1.0.0" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz", - "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=", - "dev": true - }, - "trough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz", - "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", - "dev": true - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", - "dev": true - }, - "uglify-es": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.0.tgz", - "integrity": "sha512-eD4rjK4o6rzrvE1SMZJLQFEVMnWRUyIu6phJ0BXk5TIthMmP5B4QP0HI8o3bkQB5wf1N4WHA0leZAQyQBAd+Jg==", - "dev": true, - "requires": { - "commander": "2.12.2", - "source-map": "0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", - "dev": true - } - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "unherit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", - "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "xtend": "4.0.1" - } - }, - "unified": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.6.tgz", - "integrity": "sha512-pW2f82bCIo2ifuIGYcV12fL96kMMYgw7JKVEgh7ODlrM9rj6vXSY3BV+H6lCcv1ksxynFf582hwWLnA1qRFy4w==", - "dev": true, - "requires": { - "bail": "1.0.2", - "extend": "3.0.1", - "is-plain-obj": "1.1.0", - "trough": "1.0.1", - "vfile": "2.3.0", - "x-is-function": "1.0.4", - "x-is-string": "0.1.0" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true - }, - "unist-util-find-all-after": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz", - "integrity": "sha1-TlUSq/734GFnga7Pex7XUcAK+Qg=", - "dev": true, - "requires": { - "unist-util-is": "2.1.1" - } - }, - "unist-util-is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz", - "integrity": "sha1-DDEmKeP5YMZukx6BLT2A53AQlHs=", - "dev": true - }, - "unist-util-modify-children": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz", - "integrity": "sha1-ZtfmpEnm9nIguXarPLi166w55R0=", - "dev": true, - "requires": { - "array-iterate": "1.1.1" - } - }, - "unist-util-remove-position": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", - "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", - "dev": true, - "requires": { - "unist-util-visit": "1.2.0" - } - }, - "unist-util-stringify-position": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz", - "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=", - "dev": true - }, - "unist-util-visit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.2.0.tgz", - "integrity": "sha512-lI+jyPlDztHZ2CJhUchcRMQ7MNc0yASgYFxwRTxs0EZ+9HbYFBLVGDJ2FchTBy+pra0O1LVEn0Wkgf19mDVDzw==", - "dev": true, - "requires": { - "unist-util-is": "2.1.1" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "dev": true, - "requires": { - "is-buffer": "1.1.6", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "1.1.1", - "vfile-message": "1.0.0" - }, - "dependencies": { - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - } - } - }, - "vfile-location": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz", - "integrity": "sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU=", - "dev": true - }, - "vfile-message": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz", - "integrity": "sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw==", - "dev": true, - "requires": { - "unist-util-stringify-position": "1.1.1" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "1.1.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", - "dev": true - }, - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", - "dev": true - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "x-is-function": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", - "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=", - "dev": true - }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.4" - } - }, - "xmlbuilder": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - } - } -} diff --git a/package.json b/package.json index bdbaacdf..e6859702 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "gulp-better-rollup": "^2.0.0", "gulp-clean-css": "^3.9.0", "gulp-concat": "^2.6.1", - "gulp-less": "^3.3.2", "gulp-open": "^2.0.0", "gulp-rename": "^1.2.2", "gulp-replace": "^0.6.1", @@ -32,14 +31,18 @@ "gulp-svgmin": "^1.2.4", "gulp-svgstore": "^6.1.0", "gulp-util": "^3.0.8", - "rollup-plugin-babel": "^3.0.2", + "rollup-plugin-babel": "^3.0.3", "rollup-plugin-commonjs": "^8.2.6", "rollup-plugin-node-resolve": "^3.0.0", "rollup-plugin-uglify": "^2.0.1", "run-sequence": "^2.2.0", "stylelint": "^8.4.0", "stylelint-config-prettier": "^2.0.0", + "stylelint-config-sass-guidelines": "^4.0.1", "stylelint-config-standard": "^18.0.0", + "stylelint-order": "^0.8.0", + "stylelint-scss": "^2.2.0", + "stylelint-selector-bem-pattern": "^2.0.0", "uglify-es": "^3.2.2" }, "keywords": ["HTML5 Video", "HTML5 Audio", "Media Player", "DASH", "Shaka", "WordPress", "HLS"], diff --git a/src/js/captions.js b/src/js/captions.js index 037de128..847ef7ff 100644 --- a/src/js/captions.js +++ b/src/js/captions.js @@ -109,7 +109,10 @@ const captions = { } // Only get accepted kinds - return Array.from(this.media.textTracks || []).filter(track => ['captions', 'subtitles'].includes(track.kind)); + return Array.from(this.media.textTracks || []).filter(track => [ + 'captions', + 'subtitles', + ].includes(track.kind)); }, // Get the current track for the current language diff --git a/src/js/controls.js b/src/js/controls.js index 1bbe10d3..8138367e 100644 --- a/src/js/controls.js +++ b/src/js/controls.js @@ -46,7 +46,10 @@ const controls = { } // Insert new one - styleSheet.insertRule([selector, styles].join(' ')); + styleSheet.insertRule([ + selector, + styles, + ].join(' ')); }, // Get icon URL @@ -417,7 +420,10 @@ const controls = { // Show/hide the tooltip // If the event is a moues in/out and percentage is inside bounds - if (utils.is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) { + if (utils.is.event(event) && [ + 'mouseenter', + 'mouseleave', + ].includes(event.type)) { utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter'); } }, @@ -701,7 +707,15 @@ const controls = { // Set the default speeds if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) { - this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]; + this.options.speed = [ + 0.5, + 0.75, + 1, + 1.25, + 1.5, + 1.75, + 2, + ]; } // Set options if passed and filter based on config @@ -841,7 +855,10 @@ const controls = { // Restore auto height/width const restore = e => { // We're only bothered about height and width on the container - if (e.target !== container || !['width', 'height'].includes(e.propertyName)) { + if (e.target !== container || ![ + 'width', + 'height', + ].includes(e.propertyName)) { return; } @@ -1211,7 +1228,13 @@ const controls = { if (this.config.tooltips.controls) { const labels = utils.getElements.call( this, - [this.config.selectors.controls.wrapper, ' ', this.config.selectors.labels, ' .', this.config.classNames.hidden].join('') + [ + this.config.selectors.controls.wrapper, + ' ', + this.config.selectors.labels, + ' .', + this.config.classNames.hidden, + ].join('') ); Array.from(labels).forEach(label => { diff --git a/src/js/defaults.js b/src/js/defaults.js index 75b31a6d..c6271a2a 100644 --- a/src/js/defaults.js +++ b/src/js/defaults.js @@ -61,7 +61,17 @@ const defaults = { // Quality default quality: { default: 'default', - options: ['hd2160', 'hd1440', 'hd1080', 'hd720', 'large', 'medium', 'small', 'tiny', 'default'], + options: [ + 'hd2160', + 'hd1440', + 'hd1080', + 'hd720', + 'large', + 'medium', + 'small', + 'tiny', + 'default', + ], }, // Set loops @@ -74,7 +84,15 @@ const defaults = { // Speed default and options to display speed: { selected: 1, - options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], + options: [ + 0.5, + 0.75, + 1, + 1.25, + 1.5, + 1.75, + 2, + ], }, // Keyboard shortcut settings @@ -108,8 +126,25 @@ const defaults = { }, // Default controls - controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', 'fullscreen'], - settings: ['captions', 'quality', 'speed', 'loop'], + controls: [ + 'play-large', + 'play', + 'progress', + 'current-time', + 'mute', + 'volume', + 'captions', + 'settings', + 'pip', + 'airplay', + 'fullscreen', + ], + settings: [ + 'captions', + 'quality', + 'speed', + 'loop', + ], // Localisation i18n: { diff --git a/src/js/fullscreen.js b/src/js/fullscreen.js index ac7d5fac..366ea729 100644 --- a/src/js/fullscreen.js +++ b/src/js/fullscreen.js @@ -12,7 +12,13 @@ const prefix = (() => { value = ''; } else { // Check for fullscreen support by vendor prefix - ['webkit', 'o', 'moz', 'ms', 'khtml'].some(pre => { + [ + 'webkit', + 'o', + 'moz', + 'ms', + 'khtml', + ].some(pre => { if (utils.is.function(document[`${pre}CancelFullScreen`])) { value = pre; return true; diff --git a/src/js/listeners.js b/src/js/listeners.js index 32557e72..0d57f5e1 100644 --- a/src/js/listeners.js +++ b/src/js/listeners.js @@ -46,7 +46,29 @@ const listeners = { // Reset on keyup if (pressed) { // Which keycodes should we prevent default - const preventDefault = [48, 49, 50, 51, 52, 53, 54, 56, 57, 32, 75, 38, 40, 77, 39, 37, 70, 67, 73, 76, 79]; + const preventDefault = [ + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 56, + 57, + 32, + 75, + 38, + 40, + 77, + 39, + 37, + 70, + 67, + 73, + 76, + 79, + ]; // Check focused element // and if the focused element is not editable (e.g. text input) @@ -325,7 +347,10 @@ const listeners = { // Proxy events to container // Bubble up key events for Edge - utils.on(this.media, this.config.events.concat(['keyup', 'keydown']).join(' '), event => { + utils.on(this.media, this.config.events.concat([ + 'keyup', + 'keydown', + ]).join(' '), event => { let detail = {}; // Get error details from media @@ -499,7 +524,10 @@ const listeners = { // Watch for cursor over controls so they don't hide when trying to interact utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => { - this.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type); + this.elements.controls.pressed = [ + 'mousedown', + 'touchstart', + ].includes(event.type); }); // Focus in/out on controls diff --git a/src/js/plyr.js b/src/js/plyr.js index a482f41f..9b06ed65 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -939,10 +939,20 @@ class Plyr { isEnterFullscreen = toggle.type === 'enterfullscreen'; // Whether to show controls - show = ['mouseenter', 'mousemove', 'touchstart', 'touchmove', 'focusin'].includes(toggle.type); + show = [ + 'mouseenter', + 'mousemove', + 'touchstart', + 'touchmove', + 'focusin', + ].includes(toggle.type); // Delay hiding on move events - if (['mousemove', 'touchmove', 'touchend'].includes(toggle.type)) { + if ([ + 'mousemove', + 'touchmove', + 'touchend', + ].includes(toggle.type)) { delay = 2000; } diff --git a/src/js/ui.js b/src/js/ui.js index 80ec587e..44f1a367 100644 --- a/src/js/ui.js +++ b/src/js/ui.js @@ -153,7 +153,10 @@ const ui = { // Check if media is loading checkLoading(event) { - this.loading = ['stalled', 'waiting'].includes(event.type); + this.loading = [ + 'stalled', + 'waiting', + ].includes(event.type); // Clear timer clearTimeout(this.timers.loading); diff --git a/src/less/settings.less b/src/less/settings.less deleted file mode 100644 index 0bcdafdb..00000000 --- a/src/less/settings.less +++ /dev/null @@ -1,112 +0,0 @@ -// ========================================================================== -// Plyr variables -// https://github.com/sampotts/plyr -// ========================================================================== - -// Settings -@plyr-border-box: true; -@plyr-touch-action: true; -@plyr-sr-only-important: true; - -// Colors -@plyr-color-main: #1aafff; -@plyr-color-gunmetal: #2f343d; -@plyr-color-fiord: #4f5b5f; -@plyr-color-lynch: #6b7d85; -@plyr-color-heather: #b7c5cd; - -// Type -@plyr-font-family: Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif; -@plyr-font-size-base: 16px; -@plyr-font-size-small: 14px; -@plyr-font-size-time: 14px; -@plyr-font-size-badge: 10px; -@plyr-font-weight-regular: 500; -@plyr-font-weight-bold: 600; -@plyr-line-height: 1.7; -@plyr-font-smoothing: on; - -// Focus -@plyr-tab-focus-default-color: @plyr-color-main; - -// Captions -@plyr-captions-bg: fade(#000, 80%); -@plyr-captions-color: #fff; -@plyr-font-size-captions-base: @plyr-font-size-base; -@plyr-font-size-captions-small: @plyr-font-size-small; -@plyr-font-size-captions-medium: 18px; -@plyr-font-size-captions-large: 21px; - -// Controls -@plyr-control-icon-size: 18px; -@plyr-control-icon-size-large: 20px; -@plyr-control-spacing: 10px; -@plyr-control-padding: (@plyr-control-spacing * 0.7); -@plyr-control-radius: 3px; - -@plyr-video-controls-bg: #000; -@plyr-video-control-color: #fff; -@plyr-video-control-color-hover: #fff; -@plyr-video-control-bg-hover: @plyr-color-main; - -@plyr-audio-controls-bg: #fff; -@plyr-audio-control-color: @plyr-color-fiord; -@plyr-audio-control-color-hover: #fff; -@plyr-audio-control-bg-hover: @plyr-color-main; - -// Tooltips -@plyr-tooltip-bg: fade(#fff, 90%); -@plyr-tooltip-color: @plyr-color-fiord; -@plyr-tooltip-padding: (@plyr-control-spacing / 2); -@plyr-tooltip-arrow-size: 4px; -@plyr-tooltip-radius: 3px; -@plyr-tooltip-shadow: 0 1px 2px fade(#000, 15%); - -// Menus -@plyr-menu-bg: @plyr-tooltip-bg; -@plyr-menu-color: @plyr-tooltip-color; -@plyr-menu-arrow-size: 6px; -@plyr-menu-border-color: @plyr-color-heather; -@plyr-menu-border-shadow-color: #fff; -@plyr-menu-shadow: 0 1px 2px fade(#000, 15%); - -// Progress -@plyr-progress-loading-size: 25px; -@plyr-progress-loading-bg: fade(@plyr-color-gunmetal, 20%); -@plyr-video-progress-buffered-bg: fade(#fff, 25%); -@plyr-audio-progress-buffered-bg: fade(@plyr-color-heather, 66%); - -// Range sliders -@plyr-range-track-height: 6px; -@plyr-range-thumb-height: 14px; -@plyr-range-thumb-bg: #fff; -@plyr-range-thumb-border: 2px solid transparent; -@plyr-range-thumb-shadow: 0 1px 1px fade(@plyr-video-controls-bg, 15%), 0 0 0 1px fade(@plyr-color-gunmetal, 20%); -@plyr-range-fill-bg: @plyr-color-main; - -@plyr-range-thumb-active-border-color: #fff; -@plyr-range-thumb-active-bg: @plyr-video-control-bg-hover; -@plyr-range-thumb-active-height: 20px; - -@plyr-video-range-track-bg: @plyr-video-progress-buffered-bg; -@plyr-audio-range-track-bg: @plyr-audio-progress-buffered-bg; - -// Breakpoints -@plyr-bp-sm: 480px; -@plyr-bp-md: 768px; -@plyr-bp-lg: 1024px; - -// Max-width media queries -@plyr-bp-xs-max: (@plyr-bp-sm - 1); -@plyr-bp-sm-max: (@plyr-bp-md - 1); -@plyr-bp-md-max: (@plyr-bp-lg - 1); - -// Mobile first -@plyr-mq-sm: ~'only screen and (min-width: @{plyr-bp-sm}) '; -@plyr-mq-md: ~'only screen and (min-width: @{plyr-bp-md}) '; -@plyr-mq-lg: ~'only screen and (min-width: @{plyr-bp-lg}) '; - -// Mobile last -@plyr-mq-xs-max: ~'only screen and (max-width: @{plyr-bp-xs-max}) '; -@plyr-mq-sm-max: ~'only screen and (max-width: @{plyr-bp-sm-max}) '; -@plyr-mq-md-max: ~'only screen and (max-width: @{plyr-bp-md-max}) '; diff --git a/src/less/base.less b/src/sass/base.scss index c17b3897..1b454151 100644 --- a/src/less/base.less +++ b/src/sass/base.scss @@ -4,24 +4,25 @@ // Base .plyr { - position: relative; + @include plyr-font-smoothing($plyr-font-smoothing); + + direction: ltr; + font-family: $plyr-font-family; + font-weight: $plyr-font-weight-regular; + line-height: $plyr-line-height; max-width: 100%; min-width: 200px; - font-family: @plyr-font-family; - font-weight: @plyr-font-weight-regular; - line-height: @plyr-line-height; - direction: ltr; + position: relative; text-shadow: none; transition: box-shadow 0.3s ease; - .plyr-font-smoothing(@plyr-font-smoothing); // Media elements video, audio { - width: 100%; + border-radius: inherit; height: auto; vertical-align: middle; - border-radius: inherit; + width: 100%; } // Ignore focus @@ -30,21 +31,23 @@ } } -// Full UI only -.plyr--full-ui { - & when(@plyr-border-box = true) { - // border-box everything - // http://paulirish.com/2012/box-sizing-border-box-ftw/ - &, +// border-box everything +// http://paulirish.com/2012/box-sizing-border-box-ftw/ +@if $plyr-border-box == true { + .plyr--full-ui { + box-sizing: border-box; + *, *::after, *::before { - box-sizing: border-box; + box-sizing: inherit; } } +} - & when(@plyr-touch-action = true) { - // Fix 300ms delay +// Fix 300ms delay +@if $plyr-touch-action == true { + .plyr--full-ui { a, button, input, diff --git a/src/less/bundle.less b/src/sass/bundle.scss index 2ee66ebc..2ee66ebc 100644 --- a/src/less/bundle.less +++ b/src/sass/bundle.scss diff --git a/src/less/components/badges.less b/src/sass/components/badges.scss index 230f6c2a..7d28ffaf 100644 --- a/src/less/components/badges.less +++ b/src/sass/components/badges.scss @@ -3,10 +3,10 @@ // -------------------------------------------------------------- .plyr__badge { - padding: 3px 4px; + background: $plyr-menu-color; border-radius: 2px; - background: @plyr-menu-color; - color: @plyr-menu-bg; - font-size: @plyr-font-size-badge; + color: $plyr-menu-bg; + font-size: $plyr-font-size-badge; line-height: 1; + padding: 3px 4px; } diff --git a/src/less/components/captions.less b/src/sass/components/captions.scss index b111cbce..9dfc2be8 100644 --- a/src/less/components/captions.less +++ b/src/sass/components/captions.scss @@ -8,25 +8,25 @@ } .plyr__captions { - display: none; - position: absolute; + animation: plyr-fade-in 0.3s ease; bottom: 0; + color: $plyr-captions-color; + display: none; + font-size: $plyr-font-size-captions-small; left: 0; - width: 100%; - padding: @plyr-control-spacing; - transform: translateY(-(@plyr-control-spacing * 4)); - transition: transform 0.4s ease-in-out; - animation: plyr-fade-in 0.3s ease; - color: @plyr-captions-color; - font-size: @plyr-font-size-captions-small; + padding: $plyr-control-spacing; + position: absolute; text-align: center; + transform: translateY(-($plyr-control-spacing * 4)); + transition: transform 0.4s ease-in-out; + width: 100%; span { + background: $plyr-captions-bg; border-radius: 2px; - padding: 0.2em 0.5em; - background: @plyr-captions-bg; box-decoration-break: clone; line-height: 185%; + padding: 0.2em 0.5em; white-space: pre-wrap; // Firefox adds a <div> when using getCueAsHTML() @@ -39,13 +39,13 @@ display: none; } - @media @plyr-mq-sm { - padding: (@plyr-control-spacing * 2); - font-size: @plyr-font-size-captions-base; + @media (min-width: $plyr-bp-sm) { + font-size: $plyr-font-size-captions-base; + padding: ($plyr-control-spacing * 2); } - @media @plyr-mq-md { - font-size: @plyr-font-size-captions-medium; + @media (min-width: $plyr-bp-md) { + font-size: $plyr-font-size-captions-medium; } } @@ -54,5 +54,5 @@ } .plyr--hide-controls .plyr__captions { - transform: translateY(-(@plyr-control-spacing * 1.5)); + transform: translateY(-($plyr-control-spacing * 1.5)); } diff --git a/src/less/components/control.less b/src/sass/components/control.scss index 0cf07b91..52716805 100644 --- a/src/less/components/control.less +++ b/src/sass/components/control.scss @@ -3,23 +3,23 @@ // -------------------------------------------------------------- .plyr__control { - position: relative; - flex-shrink: 0; - overflow: visible; // IE11 - padding: @plyr-control-padding; - border: 0; background: transparent; - border-radius: @plyr-control-radius; + border: 0; + border-radius: $plyr-control-radius; + color: inherit; cursor: pointer; + flex-shrink: 0; + overflow: visible; // IE11 + padding: $plyr-control-padding; + position: relative; transition: all 0.3s ease; - color: inherit; svg { - width: @plyr-control-icon-size; - height: @plyr-control-icon-size; display: block; fill: currentColor; + height: $plyr-control-icon-size; pointer-events: none; + width: $plyr-control-icon-size; } // Default focus @@ -29,15 +29,15 @@ // Tab focus &.plyr__tab-focus { - .plyr-tab-focus(); + @include plyr-tab-focus(); } } // Change icons on state change .plyr__control[aria-pressed='false'] .icon--pressed, - .plyr__control[aria-pressed='true'] .icon--not-pressed, - .plyr__control[aria-pressed='false'] .label--pressed, - .plyr__control[aria-pressed='true'] .label--not-pressed { +.plyr__control[aria-pressed='true'] .icon--not-pressed, +.plyr__control[aria-pressed='false'] .label--pressed, +.plyr__control[aria-pressed='true'] .label--not-pressed { display: none; } @@ -46,36 +46,36 @@ &.plyr__tab-focus, &:hover, &[aria-expanded='true'] { - background: @plyr-audio-control-bg-hover; - color: @plyr-audio-control-color-hover; + background: $plyr-audio-control-bg-hover; + color: $plyr-audio-control-color-hover; } } // Large play button (video only) .plyr__control--overlaid { + background: rgba($plyr-video-control-bg-hover, 0.8); + border: 0; + border-radius: 100%; + box-shadow: 0 1px 1px rgba(#000, 0.15); + color: $plyr-video-control-color; display: none; + left: 50%; + padding: ceil($plyr-control-spacing * 1.5); position: absolute; - z-index: 2; top: 50%; - left: 50%; transform: translate(-50%, -50%); - padding: ceil(@plyr-control-spacing * 1.5); - background: fade(@plyr-video-control-bg-hover, 80%); - border: 0; - border-radius: 100%; - box-shadow: 0 1px 1px fade(#000, 15%); - color: @plyr-video-control-color; + z-index: 2; svg { - position: relative; + height: $plyr-control-icon-size-large; left: 2px; // Offset to make the play button look right - width: @plyr-control-icon-size-large; - height: @plyr-control-icon-size-large; + position: relative; + width: $plyr-control-icon-size-large; } &:hover, &:focus { - background: @plyr-video-control-bg-hover; + background: $plyr-video-control-bg-hover; } } diff --git a/src/less/components/controls.less b/src/sass/components/controls.scss index 65a42509..91db1b20 100644 --- a/src/less/components/controls.less +++ b/src/sass/components/controls.scss @@ -9,8 +9,8 @@ // Playback controls .plyr__controls { - display: flex; align-items: center; + display: flex; text-align: center; // Spacing @@ -18,7 +18,7 @@ .plyr__progress, .plyr__time, .plyr__menu { - margin-left: (@plyr-control-spacing / 2); + margin-left: ($plyr-control-spacing / 2); &:first-child, &:first-child + [data-plyr='pause'] { @@ -27,79 +27,79 @@ } .plyr__volume { - margin-left: (@plyr-control-spacing / 2); + margin-left: ($plyr-control-spacing / 2); } - @media @plyr-mq-sm { + @media (min-width: $plyr-bp-sm) { > .plyr__control, .plyr__progress, .plyr__time, .plyr__menu { - margin-left: @plyr-control-spacing; + margin-left: $plyr-control-spacing; } > .plyr__control + .plyr__control, .plyr__menu + .plyr__control, > .plyr__control + .plyr__menu { - margin-left: (@plyr-control-spacing / 2); + margin-left: ($plyr-control-spacing / 2); } } } // Video controls .plyr--video .plyr__controls { - position: absolute; - left: 0; - right: 0; - bottom: 0; - z-index: 2; - padding: (@plyr-control-spacing * 3.5) @plyr-control-spacing @plyr-control-spacing; - background: linear-gradient(fade(@plyr-video-controls-bg, 0%), fade(@plyr-video-controls-bg, 70%)); + background: linear-gradient(rgba($plyr-video-controls-bg, 0), rgba($plyr-video-controls-bg, 0.7)); border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; - color: @plyr-video-control-color; + bottom: 0; + color: $plyr-video-control-color; + left: 0; + padding: ($plyr-control-spacing * 3.5) $plyr-control-spacing $plyr-control-spacing; + position: absolute; + right: 0; transition: opacity 0.4s ease-in-out, transform 0.4s ease-in-out; + z-index: 2; .plyr__control { svg { - filter: drop-shadow(0 1px 1px fade(#000, 15%)); + filter: drop-shadow(0 1px 1px rgba(#000, 0.15)); } // Hover and tab focus &.plyr__tab-focus, &:hover, &[aria-expanded='true'] { - background: @plyr-video-control-bg-hover; - color: @plyr-video-control-color-hover; + background: $plyr-video-control-bg-hover; + color: $plyr-video-control-color-hover; } } } // Audio controls .plyr--audio .plyr__controls { - padding: @plyr-control-spacing; + background: $plyr-audio-controls-bg; border-radius: inherit; - background: @plyr-audio-controls-bg; - color: @plyr-audio-control-color; + color: $plyr-audio-control-color; + padding: $plyr-control-spacing; } // Hide controls .plyr--video.plyr--hide-controls .plyr__controls { opacity: 0; - transform: translateY(100%); pointer-events: none; + transform: translateY(100%); } // Some options are hidden by default .plyr [data-plyr='captions'], - .plyr [data-plyr='pip'], - .plyr [data-plyr='airplay'], - .plyr [data-plyr='fullscreen'] { +.plyr [data-plyr='pip'], +.plyr [data-plyr='airplay'], +.plyr [data-plyr='fullscreen'] { display: none; } .plyr--captions-enabled [data-plyr='captions'], - .plyr--pip-supported [data-plyr='pip'], - .plyr--airplay-supported [data-plyr='airplay'], - .plyr--fullscreen-enabled [data-plyr='fullscreen'] { +.plyr--pip-supported [data-plyr='pip'], +.plyr--airplay-supported [data-plyr='airplay'], +.plyr--fullscreen-enabled [data-plyr='fullscreen'] { display: inline-block; } diff --git a/src/less/components/embed.less b/src/sass/components/embed.scss index a50a432b..b5d464f6 100644 --- a/src/less/components/embed.less +++ b/src/sass/components/embed.scss @@ -5,28 +5,28 @@ .plyr__video-embed { // Default to 16:9 ratio but this is set by JavaScript based on config - @padding: ((100 / 16) * 9); - @height: 200; - @offset: unit((@height - @padding) / (@height / 50), ~'%'); + $padding: ((100 / 16) * 9); + $height: 200; + $offset: percentage(($height - $padding) / ($height / 50)); - padding-bottom: unit(@padding, ~'%'); height: 0; + padding-bottom: percentage($padding); iframe { + border: 0; + height: 100%; + left: 0; position: absolute; top: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; user-select: none; + width: 100%; } // Vimeo hack > div { + padding-bottom: percentage($height); position: relative; - padding-bottom: unit(@height, ~'%'); - transform: translateY(-@offset); + transform: translateY(-$offset); } } // To allow mouse events to be captured if full support diff --git a/src/less/components/menus.less b/src/sass/components/menus.scss index f0a92d06..35fc580d 100644 --- a/src/less/components/menus.less +++ b/src/sass/components/menus.scss @@ -23,19 +23,19 @@ // The actual menu container &__container { - position: absolute; - z-index: 1; - bottom: 100%; - right: -3px; - margin-bottom: 10px; animation: plyr-popup 0.2s ease; - background: @plyr-menu-bg; + background: $plyr-menu-bg; border-radius: 4px; - box-shadow: @plyr-menu-shadow; - white-space: nowrap; + bottom: 100%; + box-shadow: $plyr-menu-shadow; + color: $plyr-menu-color; + font-size: $plyr-font-size-base; + margin-bottom: 10px; + position: absolute; + right: -3px; text-align: left; - color: @plyr-menu-color; - font-size: @plyr-font-size-base; + white-space: nowrap; + z-index: 1; > div { overflow: hidden; @@ -44,47 +44,47 @@ // Arrow &::after { + border: 4px solid transparent; + border-top-color: $plyr-menu-bg; content: ''; + height: 0; position: absolute; - top: 100%; right: 15px; - height: 0; + top: 100%; width: 0; - border: 4px solid transparent; - border-top-color: @plyr-menu-bg; } ul { - margin: 0; - padding: @plyr-control-padding; list-style: none; + margin: 0; overflow: hidden; + padding: $plyr-control-padding; } // Options .plyr__control { - display: flex; align-items: center; - width: 100%; - padding: ceil(@plyr-control-padding / 2) (@plyr-control-padding * 2); - color: @plyr-menu-color; + color: $plyr-menu-color; + display: flex; + padding: ceil($plyr-control-padding / 2) ($plyr-control-padding * 2); user-select: none; + width: 100%; &::after { + border: 4px solid transparent; content: ''; position: absolute; top: 50%; transform: translateY(-50%); - border: 4px solid transparent; transition: border-color 0.2s ease; } &--forward { - padding-right: ceil(@plyr-control-padding * 4); + padding-right: ceil($plyr-control-padding * 4); &::after { + border-left-color: rgba($plyr-menu-color, 0.8); right: 5px; - border-left-color: fade(@plyr-menu-color, 80%); } &.plyr__tab-focus::after, @@ -94,31 +94,31 @@ } &--back { + $horizontal-padding: ($plyr-control-padding * 2); + font-weight: $plyr-font-weight-regular; + margin: $plyr-control-padding; + margin-bottom: floor($plyr-control-padding / 2); + padding-left: ceil($plyr-control-padding * 4); position: relative; - @horizontal-padding: (@plyr-control-padding * 2); - width: ~'calc(100% - @{horizontal-padding})'; - margin: @plyr-control-padding; - margin-bottom: floor(@plyr-control-padding / 2); - padding-left: ceil(@plyr-control-padding * 4); - font-weight: @plyr-font-weight-regular; + width: calc(100% - #{$horizontal-padding}); &::after { - left: @plyr-control-padding; - border-right-color: fade(@plyr-menu-color, 80%); + border-right-color: rgba($plyr-menu-color, 0.8); + left: $plyr-control-padding; } &::before { + background: $plyr-menu-border-color; + box-shadow: 0 1px 0 $plyr-menu-border-shadow-color; content: ''; - position: absolute; - top: 100%; - left: 0; - right: 0; height: 1px; + left: 0; + margin-top: ceil($plyr-control-padding / 2); overflow: hidden; - margin-top: ceil(@plyr-control-padding / 2); - background: @plyr-menu-border-color; - box-shadow: 0 1px 0 @plyr-menu-border-shadow-color; + position: absolute; + right: 0; + top: 100%; } &.plyr__tab-focus::after, @@ -129,62 +129,62 @@ } label.plyr__control { - padding-left: @plyr-control-padding; + padding-left: $plyr-control-padding; input[type='radio'] + span { - position: relative; + background: rgba(#000, 0.1); + border-radius: 100%; display: block; flex-shrink: 0; height: 16px; - width: 16px; - border-radius: 100%; - background: fade(#000, 10%); - margin-right: @plyr-control-spacing; + margin-right: $plyr-control-spacing; + position: relative; transition: all 0.3s ease; + width: 16px; &::after { + background: #fff; + border-radius: 100%; content: ''; - position: absolute; height: 6px; - width: 6px; - top: 5px; left: 5px; - transform: scale(0); opacity: 0; - background: #fff; - border-radius: 100%; + position: absolute; + top: 5px; + transform: scale(0); transition: transform 0.3s ease, opacity 0.3s ease; + width: 6px; } } input[type='radio']:checked + span { - background: @plyr-color-main; + background: $plyr-color-main; &::after { - transform: scale(1); opacity: 1; + transform: scale(1); } } input[type='radio']:focus + span { - .plyr-tab-focus(); + @include plyr-tab-focus(); } &.plyr__tab-focus input[type='radio'] + span, &:hover input[type='radio'] + span { - background: fade(#000, 10%); + background: rgba(#000, 0.1); } } // Option value .plyr__menu__value { - display: flex; align-items: center; + display: flex; margin-left: auto; - margin-right: -@plyr-control-padding; - padding-left: ceil(@plyr-control-padding * 3.5); - pointer-events: none; + margin-right: -$plyr-control-padding; overflow: hidden; + padding-left: ceil($plyr-control-padding * 3.5); + pointer-events: none; } } } diff --git a/src/less/components/progress.less b/src/sass/components/progress.scss index 1a252937..7490ee17 100644 --- a/src/less/components/progress.less +++ b/src/sass/components/progress.scss @@ -3,9 +3,9 @@ // -------------------------------------------------------------- .plyr__progress { - position: relative; display: flex; flex: 1; + position: relative; input[type='range'] { position: relative; @@ -14,25 +14,23 @@ // Seek tooltip to show time .plyr__tooltip { + font-size: $plyr-font-size-time; left: 0; - font-size: @plyr-font-size-time; } } .plyr__progress--buffer { - position: absolute; + -webkit-appearance: none; /* stylelint-disable-line */ + background: transparent; + border: 0; + border-radius: 100px; + height: $plyr-range-track-height; left: 0; + margin: -($plyr-range-track-height / 2) 0 0; + padding: 0; + position: absolute; top: 50%; width: 100%; - height: @plyr-range-track-height; - margin: -(@plyr-range-track-height / 2) 0 0; - padding: 0; - background: transparent; - border: none; - border-radius: 100px; - - // WebKit - -webkit-appearance: none; &::-webkit-progress-bar { background: transparent; @@ -42,14 +40,14 @@ &::-webkit-progress-value { background: currentColor; border-radius: 100px; - min-width: @plyr-range-track-height; + min-width: $plyr-range-track-height; } // Mozilla &::-moz-progress-bar { background: currentColor; border-radius: 100px; - min-width: @plyr-range-track-height; + min-width: $plyr-range-track-height; transition: width 0.2s ease; } @@ -61,36 +59,36 @@ } .plyr--video .plyr__progress--buffer { - box-shadow: 0 1px 1px fade(#000, 15%); - color: @plyr-video-progress-buffered-bg; + box-shadow: 0 1px 1px rgba(#000, 0.15); + color: $plyr-video-progress-buffered-bg; } .plyr--audio .plyr__progress--buffer { - color: @plyr-audio-progress-buffered-bg; + color: $plyr-audio-progress-buffered-bg; } // Loading state .plyr--loading .plyr__progress--buffer { animation: plyr-progress 1s linear infinite; - background-size: @plyr-progress-loading-size @plyr-progress-loading-size; - background-repeat: repeat-x; background-image: linear-gradient( -45deg, - @plyr-progress-loading-bg 25%, + $plyr-progress-loading-bg 25%, transparent 25%, transparent 50%, - @plyr-progress-loading-bg 50%, - @plyr-progress-loading-bg 75%, + $plyr-progress-loading-bg 50%, + $plyr-progress-loading-bg 75%, transparent 75%, transparent ); + background-repeat: repeat-x; + background-size: $plyr-progress-loading-size $plyr-progress-loading-size; color: transparent; } .plyr--video.plyr--loading .plyr__progress--buffer { - background-color: @plyr-video-progress-buffered-bg; + background-color: $plyr-video-progress-buffered-bg; } .plyr--audio.plyr--loading .plyr__progress--buffer { - background-color: @plyr-audio-progress-buffered-bg; + background-color: $plyr-audio-progress-buffered-bg; } diff --git a/src/less/components/sliders.less b/src/sass/components/sliders.scss index 41954a97..73a7c25c 100644 --- a/src/less/components/sliders.less +++ b/src/sass/components/sliders.scss @@ -2,68 +2,65 @@ // Slider inputs - <input type="range"> // -------------------------------------------------------------- -// Specificity is for bootstrap compatibility .plyr--full-ui input[type='range'] { + // WebKit + -webkit-appearance: none; /* stylelint-disable-line */ + background: transparent; + border: 0; + border-radius: ($plyr-range-thumb-height * 2); + // color is used in JS to populate lower fill for WebKit + color: $plyr-range-fill-bg; + cursor: pointer; display: block; - height: @plyr-range-thumb-active-height; - width: 100%; + height: $plyr-range-thumb-active-height; margin: 0; padding: 0; - cursor: pointer; - border: none; - background: transparent; transition: box-shadow 0.3s ease; - border-radius: (@plyr-range-thumb-height * 2); - - // Used in JS to populate lower fill for WebKit - color: @plyr-range-fill-bg; - - // WebKit - -webkit-appearance: none; + width: 100%; &::-webkit-slider-runnable-track { - .plyr-range-track(); + @include plyr-range-track(); } &::-webkit-slider-thumb { - -webkit-appearance: none; - margin-top: -((@plyr-range-thumb-height - @plyr-range-track-height) / 2); - .plyr-range-thumb(); + @include plyr-range-thumb(); + -webkit-appearance: none; /* stylelint-disable-line */ + margin-top: -(($plyr-range-thumb-height - $plyr-range-track-height) / 2); } // Mozilla &::-moz-range-track { - .plyr-range-track(); + @include plyr-range-track(); } &::-moz-range-thumb { - .plyr-range-thumb(); + @include plyr-range-thumb(); } &::-moz-range-progress { - height: @plyr-range-track-height; background: currentColor; - border-radius: (@plyr-range-track-height / 2); + border-radius: ($plyr-range-track-height / 2); + height: $plyr-range-track-height; } // Microsoft &::-ms-track { + @include plyr-range-track(); color: transparent; - .plyr-range-track(); } &::-ms-fill-upper { - .plyr-range-track(); + @include plyr-range-track(); } &::-ms-fill-lower { - .plyr-range-track(); + @include plyr-range-track(); background: currentColor; } &::-ms-thumb { - .plyr-range-thumb(); + @include plyr-range-thumb(); // For some reason, Edge uses the -webkit margin above margin-top: 0; } @@ -83,30 +80,30 @@ &.plyr__tab-focus { &::-webkit-slider-runnable-track { - .plyr-tab-focus(); + @include plyr-tab-focus(); } &::-moz-range-track { - .plyr-tab-focus(); + @include plyr-tab-focus(); } &::-ms-track { - .plyr-tab-focus(); + @include plyr-tab-focus(); } } // Pressed styles &:active { &::-webkit-slider-thumb { - .plyr-range-thumb-active(); + @include plyr-range-thumb-active(); } &::-moz-range-thumb { - .plyr-range-thumb-active(); + @include plyr-range-thumb-active(); } &::-ms-thumb { - .plyr-range-thumb-active(); + @include plyr-range-thumb-active(); } } } @@ -114,29 +111,29 @@ // Video range inputs .plyr--full-ui.plyr--video input[type='range'] { &::-webkit-slider-runnable-track { - background: @plyr-video-range-track-bg; + background: $plyr-video-range-track-bg; } &::-moz-range-track { - background: @plyr-video-range-track-bg; + background: $plyr-video-range-track-bg; } &::-ms-track { - background: @plyr-video-range-track-bg; + background: $plyr-video-range-track-bg; } } // Audio range inputs .plyr--full-ui.plyr--audio input[type='range'] { &::-webkit-slider-runnable-track { - background: @plyr-audio-range-track-bg; + background: $plyr-audio-range-track-bg; } &::-moz-range-track { - background: @plyr-audio-range-track-bg; + background: $plyr-audio-range-track-bg; } &::-ms-track { - background: @plyr-audio-range-track-bg; + background: $plyr-audio-range-track-bg; } } diff --git a/src/less/components/times.less b/src/sass/components/times.scss index 09a55702..240d3528 100644 --- a/src/less/components/times.less +++ b/src/sass/components/times.scss @@ -3,7 +3,7 @@ // -------------------------------------------------------------- .plyr__time { - font-size: @plyr-font-size-time; + font-size: $plyr-font-size-time; } // Media duration hidden on small screens @@ -11,14 +11,14 @@ // Add a slash in before &::before { content: '\2044'; - margin-right: @plyr-control-spacing; + margin-right: $plyr-control-spacing; } - @media @plyr-mq-sm-max { + @media (max-width: $plyr-bp-sm-max) { display: none; } } .plyr--video .plyr__time { - text-shadow: 0 1px 1px fade(#000, 15%); + text-shadow: 0 1px 1px rgba(#000, 0.15); } diff --git a/src/less/components/tooltips.less b/src/sass/components/tooltips.scss index 79b8e404..19a9ce56 100644 --- a/src/less/components/tooltips.less +++ b/src/sass/components/tooltips.scss @@ -3,38 +3,36 @@ // -------------------------------------------------------------- .plyr__tooltip { - position: absolute; - z-index: 2; + background: $plyr-tooltip-bg; + border-radius: $plyr-tooltip-radius; bottom: 100%; - margin-bottom: (@plyr-tooltip-padding * 2); - padding: @plyr-tooltip-padding (@plyr-tooltip-padding * 1.5); - pointer-events: none; - opacity: 0; - background: @plyr-tooltip-bg; - border-radius: @plyr-tooltip-radius; - box-shadow: @plyr-tooltip-shadow; - color: @plyr-tooltip-color; - font-size: @plyr-font-size-small; - font-weight: @plyr-font-weight-regular; + box-shadow: $plyr-tooltip-shadow; + color: $plyr-tooltip-color; + font-size: $plyr-font-size-small; + font-weight: $plyr-font-weight-regular; line-height: 1.3; + margin-bottom: ($plyr-tooltip-padding * 2); + opacity: 0; + padding: $plyr-tooltip-padding ($plyr-tooltip-padding * 1.5); + pointer-events: none; + position: absolute; transform: translate(-50%, 10px) scale(0.8); transform-origin: 50% 100%; transition: transform 0.2s 0.1s ease, opacity 0.2s 0.1s ease; + z-index: 2; + // The background triangle &::before { - // Arrows + border-left: $plyr-tooltip-arrow-size solid transparent; + border-right: $plyr-tooltip-arrow-size solid transparent; + border-top: $plyr-tooltip-arrow-size solid $plyr-tooltip-bg; + bottom: -$plyr-tooltip-arrow-size; content: ''; - position: absolute; - width: 0; height: 0; left: 50%; + position: absolute; transform: translateX(-50%); - - // The background triangle - bottom: -@plyr-tooltip-arrow-size; - border-right: @plyr-tooltip-arrow-size solid transparent; - border-top: @plyr-tooltip-arrow-size solid @plyr-tooltip-bg; - border-left: @plyr-tooltip-arrow-size solid transparent; + width: 0; z-index: 2; } } @@ -59,7 +57,7 @@ transform-origin: 0 100%; &::before { - left: (@plyr-control-icon-size / 2) + @plyr-control-padding; + left: ($plyr-control-icon-size / 2) + $plyr-control-padding; } } @@ -71,7 +69,7 @@ &::before { left: auto; - right: (@plyr-control-icon-size / 2) + @plyr-control-padding; + right: ($plyr-control-icon-size / 2) + $plyr-control-padding; transform: translateX(50%); } } diff --git a/src/less/components/video.less b/src/sass/components/video.scss index 8bf43840..3caf866d 100644 --- a/src/less/components/video.less +++ b/src/sass/components/video.scss @@ -12,10 +12,10 @@ } .plyr__video-wrapper { - position: relative; background: #000; border-radius: inherit; + overflow: hidden; + position: relative; // Require z-index to force border-radius z-index: 0; - overflow: hidden; } diff --git a/src/less/components/volume.less b/src/sass/components/volume.scss index bb5a49ba..e12dc675 100644 --- a/src/less/components/volume.less +++ b/src/sass/components/volume.scss @@ -11,11 +11,11 @@ z-index: 2; } - @media @plyr-mq-sm { + @media (min-width: $plyr-bp-sm) { max-width: 50px; } - @media @plyr-mq-md { + @media (min-width: $plyr-bp-md) { max-width: 80px; } } diff --git a/src/less/lib/animation.less b/src/sass/lib/animation.scss index 4c8628e0..b6c22d42 100644 --- a/src/less/lib/animation.less +++ b/src/sass/lib/animation.scss @@ -4,19 +4,19 @@ @keyframes plyr-progress { to { - background-position: @plyr-progress-loading-size 0; + background-position: $plyr-progress-loading-size 0; } } @keyframes plyr-popup { - from { - transform: translateY(10px); + 0% { opacity: 0.5; + transform: translateY(10px); } to { - transform: translateY(0); opacity: 1; + transform: translateY(0); } } diff --git a/src/less/lib/mixins.less b/src/sass/lib/mixins.scss index da63443b..73e0f6dd 100644 --- a/src/less/lib/mixins.less +++ b/src/sass/lib/mixins.scss @@ -5,59 +5,60 @@ // Nicer focus styles // --------------------------------------- -.plyr-tab-focus(@color: @plyr-tab-focus-default-color) { +@mixin plyr-tab-focus($color: $plyr-tab-focus-default-color) { + box-shadow: 0 0 0 3px rgba($color, 0.35); outline: 0; - box-shadow: 0 0 0 3px fade(@color, 35%); } // Font smoothing // --------------------------------------- -.plyr-font-smoothing(@mode: on) when(@mode = on) { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; -} -.plyr-font-smoothing(@mode: on) when(@mode = off) { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: subpixel-antialiased; +@mixin plyr-font-smoothing($mode: true) { + @if $mode { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + } @else { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: subpixel-antialiased; + } } // <input type="range"> styling // --------------------------------------- -.plyr-range-track() { - height: @plyr-range-track-height; +@mixin plyr-range-track() { background: transparent; border: 0; - border-radius: (@plyr-range-track-height / 2); - user-select: none; + border-radius: ($plyr-range-track-height / 2); + height: $plyr-range-track-height; transition: all 0.3s ease; + user-select: none; } -.plyr-range-thumb() { - position: relative; - height: @plyr-range-thumb-height; - width: @plyr-range-thumb-height; - background: @plyr-range-thumb-bg; - border: @plyr-range-thumb-border; +@mixin plyr-range-thumb() { + background: $plyr-range-thumb-bg; + border: $plyr-range-thumb-border; border-radius: 100%; - transition: background 0.2s ease, border 0.2s ease, transform 0.2s ease; - box-shadow: @plyr-range-thumb-shadow; + box-shadow: $plyr-range-thumb-shadow; box-sizing: border-box; + height: $plyr-range-thumb-height; + position: relative; + transition: background 0.2s ease, border 0.2s ease, transform 0.2s ease; + width: $plyr-range-thumb-height; } -.plyr-range-thumb-active() { - background: @plyr-range-thumb-active-bg; - border-color: @plyr-range-thumb-active-border-color; - transform: scale(unit(@plyr-range-thumb-active-height / @plyr-range-thumb-height)); +@mixin plyr-range-thumb-active() { + background: $plyr-range-thumb-active-bg; + border-color: $plyr-range-thumb-active-border-color; + transform: scale(unit($plyr-range-thumb-active-height / $plyr-range-thumb-height)); } // Fullscreen styles // --------------------------------------- -.plyr-fullscreen-active() { - height: 100%; - width: 100%; - margin: 0; +@mixin plyr-fullscreen-active() { background: #000; border-radius: 0 !important; + height: 100%; + margin: 0; + width: 100%; video { height: 100%; @@ -90,9 +91,9 @@ } // Large captions in full screen on larger screens - @media @plyr-mq-lg { + @media (min-width: $plyr-bp-lg) { .plyr__captions { - font-size: @plyr-font-size-captions-large; + font-size: $plyr-font-size-captions-large; } } } diff --git a/src/sass/settings.scss b/src/sass/settings.scss new file mode 100644 index 00000000..a01308f9 --- /dev/null +++ b/src/sass/settings.scss @@ -0,0 +1,102 @@ +// ========================================================================== +// Plyr variables +// https://github.com/sampotts/plyr +// ========================================================================== + +// Settings +$plyr-border-box: true !default; +$plyr-touch-action: true !default; +$plyr-sr-only-important: true !default; + +// Colors +$plyr-color-main: #1aafff !default; +$plyr-color-gunmetal: #2f343d !default; +$plyr-color-fiord: #4f5b5f !default; +$plyr-color-lynch: #6b7d85 !default; +$plyr-color-heather: #b7c5cd !default; + +// Type +$plyr-font-family: Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif !default; +$plyr-font-size-base: 16px !default; +$plyr-font-size-small: 14px !default; +$plyr-font-size-time: 14px !default; +$plyr-font-size-badge: 10px !default; +$plyr-font-weight-regular: 500 !default; +$plyr-font-weight-bold: 600 !default; +$plyr-line-height: 1.7 !default; +$plyr-font-smoothing: true !default; + +// Focus +$plyr-tab-focus-default-color: $plyr-color-main !default; + +// Captions +$plyr-captions-bg: rgba(#000, 0.8) !default; +$plyr-captions-color: #fff !default; +$plyr-font-size-captions-base: $plyr-font-size-base !default; +$plyr-font-size-captions-small: $plyr-font-size-small !default; +$plyr-font-size-captions-medium: 18px !default; +$plyr-font-size-captions-large: 21px !default; + +// Controls +$plyr-control-icon-size: 18px !default; +$plyr-control-icon-size-large: 20px !default; +$plyr-control-spacing: 10px !default; +$plyr-control-padding: ($plyr-control-spacing * 0.7) !default; +$plyr-control-radius: 3px !default; + +$plyr-video-controls-bg: #000 !default; +$plyr-video-control-color: #fff !default; +$plyr-video-control-color-hover: #fff !default; +$plyr-video-control-bg-hover: $plyr-color-main !default; + +$plyr-audio-controls-bg: #fff !default; +$plyr-audio-control-color: $plyr-color-fiord !default; +$plyr-audio-control-color-hover: #fff !default; +$plyr-audio-control-bg-hover: $plyr-color-main !default; + +// Tooltips +$plyr-tooltip-bg: rgba(#fff, 0.9) !default; +$plyr-tooltip-color: $plyr-color-fiord !default; +$plyr-tooltip-padding: ($plyr-control-spacing / 2) !default; +$plyr-tooltip-arrow-size: 4px !default; +$plyr-tooltip-radius: 3px !default; +$plyr-tooltip-shadow: 0 1px 2px rgba(#000, 0.15) !default; + +// Menus +$plyr-menu-bg: $plyr-tooltip-bg !default; +$plyr-menu-color: $plyr-tooltip-color !default; +$plyr-menu-arrow-size: 6px !default; +$plyr-menu-border-color: $plyr-color-heather !default; +$plyr-menu-border-shadow-color: #fff !default; +$plyr-menu-shadow: 0 1px 2px rgba(#000, 0.15) !default; + +// Progress +$plyr-progress-loading-size: 25px !default; +$plyr-progress-loading-bg: rgba($plyr-color-gunmetal, 0.2) !default; +$plyr-video-progress-buffered-bg: rgba(#fff, 0.25) !default; +$plyr-audio-progress-buffered-bg: rgba($plyr-color-heather, 0.66) !default; + +// Range sliders +$plyr-range-track-height: 6px !default; +$plyr-range-thumb-height: 14px !default; +$plyr-range-thumb-bg: #fff !default; +$plyr-range-thumb-border: 2px solid transparent !default; +$plyr-range-thumb-shadow: 0 1px 1px rgba($plyr-video-controls-bg, 0.15), 0 0 0 1px rgba($plyr-color-gunmetal, 0.2) !default; +$plyr-range-fill-bg: $plyr-color-main !default; + +$plyr-range-thumb-active-border-color: #fff !default; +$plyr-range-thumb-active-bg: $plyr-video-control-bg-hover !default; +$plyr-range-thumb-active-height: 20px !default; + +$plyr-video-range-track-bg: $plyr-video-progress-buffered-bg !default; +$plyr-audio-range-track-bg: $plyr-audio-progress-buffered-bg !default; + +// Breakpoints +$plyr-bp-sm: 480px !default; +$plyr-bp-md: 768px !default; +$plyr-bp-lg: 1024px !default; + +// Max-width media queries +$plyr-bp-xs-max: ($plyr-bp-sm - 1) !default; +$plyr-bp-sm-max: ($plyr-bp-md - 1) !default; +$plyr-bp-md-max: ($plyr-bp-lg - 1) !default; diff --git a/src/less/states/fullscreen.less b/src/sass/states/fullscreen.scss index 9f7478d8..855e670f 100644 --- a/src/less/states/fullscreen.less +++ b/src/sass/states/fullscreen.scss @@ -3,29 +3,29 @@ // -------------------------------------------------------------- .plyr:fullscreen { - .plyr-fullscreen-active(); + @include plyr-fullscreen-active(); } .plyr:-webkit-full-screen { - .plyr-fullscreen-active(); + @include plyr-fullscreen-active(); } .plyr:-moz-full-screen { - .plyr-fullscreen-active(); + @include plyr-fullscreen-active(); } .plyr:-ms-fullscreen { - .plyr-fullscreen-active(); + @include plyr-fullscreen-active(); } // Fallback for unsupported browsers .plyr--fullscreen-fallback { - .plyr-fullscreen-active(); + @include plyr-fullscreen-active(); position: fixed; top: 0; + bottom: 0; left: 0; right: 0; - bottom: 0; z-index: 10000000; } diff --git a/src/less/utils/animation.less b/src/sass/utils/animation.scss index 4a5b6b90..4a5b6b90 100644 --- a/src/less/utils/animation.less +++ b/src/sass/utils/animation.scss diff --git a/src/less/utils/hidden.less b/src/sass/utils/hidden.scss index 20947c59..4deecf52 100644 --- a/src/less/utils/hidden.less +++ b/src/sass/utils/hidden.scss @@ -6,6 +6,7 @@ .plyr--full-ui [hidden] { display: none; } + .plyr--full-ui [aria-hidden='true'] { display: none; } @@ -16,18 +17,19 @@ overflow: hidden; // !important is not always needed - & when(@plyr-sr-only-important = true) { - position: absolute !important; - padding: 0 !important; + @if $plyr-sr-only-important == true { border: 0 !important; height: 1px !important; + padding: 0 !important; + position: absolute !important; width: 1px !important; } - & when(@plyr-sr-only-important = false) { - position: absolute; - padding: 0; + + @if $plyr-sr-only-important == false { border: 0; height: 1px; + padding: 0; + position: absolute; width: 1px; } } diff --git a/src/scss/mixins.scss b/src/scss/mixins.scss deleted file mode 100644 index 93cdbd8e..00000000 --- a/src/scss/mixins.scss +++ /dev/null @@ -1,29 +0,0 @@ -// ========================================================================== -// Plyr mixins -// https://github.com/sampotts/plyr -// ========================================================================== - -// <input type="range"> styling -@mixin plyr-range-track() { - height: $plyr-range-track-height; - background: transparent; - border: 0; - border-radius: ($plyr-range-track-height / 2); - user-select: none; -} -@mixin plyr-range-thumb() { - position: relative; - height: $plyr-range-thumb-height; - width: $plyr-range-thumb-width; - background: $plyr-range-thumb-bg; - border: $plyr-range-thumb-border; - border-radius: 100%; - transition: background .2s ease, border .2s ease, transform .2s ease; - box-shadow: $plyr-range-thumb-shadow; - box-sizing: border-box; -} -@mixin plyr-range-thumb-active() { - background: $plyr-range-thumb-active-bg; - border-color: $plyr-range-thumb-active-border-color; - transform: scale($plyr-range-thumb-active-scale); -}
\ No newline at end of file diff --git a/src/scss/plyr.scss b/src/scss/plyr.scss deleted file mode 100644 index d58666e7..00000000 --- a/src/scss/plyr.scss +++ /dev/null @@ -1,764 +0,0 @@ -// ========================================================================== -// Plyr styles -// https://github.com/sampotts/plyr -// ========================================================================== - -@import "variables"; -@import "mixins"; - -// Animation -// --------------------------------------- -@keyframes plyr-progress { - to { background-position: $plyr-progress-loading-size 0; } -} - -// Styles -// ------------------------------- -// Base -.plyr { - position: relative; - max-width: 100%; - min-width: 200px; - font-family: $plyr-font-family; - direction: ltr; - - @if $plyr-border-box == true { - // border-box everything - // http://paulirish.com/2012/box-sizing-border-box-ftw/ - &, - *, - *::after, - *::before { - box-sizing: border-box; - } - } - - @if $plyr-touch-action == true { - // Fix 300ms delay - a, button, input, label { - touch-action: manipulation; - } - } - - // Focus - &:focus { - outline: 0; - } - - // Media elements - video, - audio { - width: 100%; - height: auto; - vertical-align: middle; - border-radius: inherit; - } - - // Range inputs - // Specificity is for bootstrap compatibility - input[type='range'] { - display: block; - height: ($plyr-range-thumb-height * $plyr-range-thumb-active-scale); - width: 100%; - margin: 0; - padding: 0; - vertical-align: middle; - - appearance: none; - cursor: pointer; - border: none; - background: transparent; - - // WebKit - &::-webkit-slider-runnable-track { - @include plyr-range-track(); - } - &::-webkit-slider-thumb { - -webkit-appearance: none; - margin-top: -(($plyr-range-thumb-height - $plyr-range-track-height) / 2); - @include plyr-range-thumb(); - } - - // Mozilla - &::-moz-range-track { - @include plyr-range-track(); - } - &::-moz-range-thumb { - @include plyr-range-thumb(); - } - - // Microsoft - &::-ms-track { - height: $plyr-range-track-height; - background: transparent; - border: 0; - color: transparent; - } - &::-ms-fill-upper { - @include plyr-range-track(); - } - &::-ms-fill-lower { - @include plyr-range-track(); - background: $plyr-range-selected-bg; - } - &::-ms-thumb { - @include plyr-range-thumb(); - // For some reason, Edge uses the -webkit margin above - margin-top: 0; - } - &::-ms-tooltip { - display: none; - } - - // Focus styles - &:focus { - outline: 0; - } - &::-moz-focus-outer { - border: 0; - } - &.tab-focus:focus { - outline-offset: 3px; - } - - // Pressed styles - &:active { - &::-webkit-slider-thumb { - @include plyr-range-thumb-active(); - } - &::-moz-range-thumb { - @include plyr-range-thumb-active(); - } - &::-ms-thumb { - @include plyr-range-thumb-active(); - } - } - } -} - -// Video range inputs -.plyr--video input[type='range'].tab-focus:focus { - outline: 1px dotted transparentize($plyr-video-control-color, .5); -} - -// Audio range inputs -.plyr--audio input[type='range'].tab-focus:focus { - outline: 1px dotted transparentize($plyr-audio-control-color, .5); -} - -// Screen reader only elements -.plyr__sr-only { - clip: rect(1px, 1px, 1px, 1px); - overflow: hidden; - - // !important is not always needed - @if $plyr-sr-only-important == true { - position: absolute !important; - padding: 0 !important; - border: 0 !important; - height: 1px !important; - width: 1px !important; - } @else { - position: absolute; - padding: 0; - border: 0; - height: 1px; - width: 1px; - } -} - -// Video -.plyr__video-wrapper { - position: relative; - background: #000; - border-radius: inherit; - // Require z-index to force border-radius - z-index: 0; - overflow: hidden; -} - -// Container for embeds -.plyr__video-embed { - padding-bottom: 56.25%; /* 16:9 */ - height: 0; - border-radius: inherit; - - // Require overflow and z-index to force border-radius - overflow: hidden; - z-index: 0; - - iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; - user-select: none; - } - - // Vimeo hack - > div { - position: relative; - padding-bottom: 200%; - transform: translateY(-35.95%); - } -} -// To allow mouse events to be captured if full support -.plyr .plyr__video-embed iframe { - pointer-events: none; -} - -// Captions -// -------------------------------------------------------------- -// Hide default captions -.plyr video::-webkit-media-text-track-container { - display: none; -} -.plyr__captions { - display: none; - position: absolute; - bottom: 0; - left: 0; - width: 100%; - padding: ($plyr-control-spacing * 2); - transform: translateY(-($plyr-control-spacing * 6)); - transition: transform .3s ease; - color: $plyr-captions-color; - font-size: $plyr-font-size-captions-base; - text-align: center; - font-weight: 400; - - span { - border-radius: 2px; - padding: floor($plyr-control-spacing / 3) $plyr-control-spacing; - background: $plyr-captions-bg; - box-decoration-break: clone; - line-height: 150%; - } - span:empty { - display: none; - } - - @media (min-width: $plyr-bp-screen-md) { - font-size: $plyr-font-size-captions-medium; - } -} -.plyr--captions-active .plyr__captions { - display: block; -} -.plyr--hide-controls .plyr__captions { - transform: translateY(-($plyr-control-spacing * 2)); -} -// Large captions in full screen on larger screens -@media (min-width: $plyr-bp-screen-lg) { - .plyr--fullscreen-active .plyr__captions { - font-size: $plyr-font-size-captions-large; - } -} - -// Controls -// -------------------------------------------------------------- -// Hide native controls -.plyr ::-webkit-media-controls { - display: none; -} - -// Playback controls -.plyr__controls { - display: flex; - align-items: center; - line-height: 1; - text-align: center; - - // Spacing - > .plyr__control, - .plyr__progress, - .plyr__time, - .plyr__menu { - margin-left: ($plyr-control-spacing / 2); - - &:first-child, - &:first-child + [data-plyr="pause"] { - margin-left: 0; - } - } - .plyr__volume { - margin-left: ($plyr-control-spacing / 2); - } - - // Buttons - button { - position: relative; - display: inline-block; - flex-shrink: 0; - overflow: visible; // IE11 - vertical-align: middle; - padding: ($plyr-control-spacing * .7); - border: 0; - background: transparent; - border-radius: 3px; - cursor: pointer; - transition: background .3s ease, color .3s ease, opacity .3s ease; - color: inherit; - - svg { - width: $plyr-control-icon-size; - height: $plyr-control-icon-size; - display: block; - fill: currentColor; - pointer-events: none; - } - - // Default focus - &:focus { - outline: 0; - } - } - - // Hide toggle icons by default - .icon--exit-fullscreen, - .icon--muted, - .icon--captions-on { - display: none; - } - - @media (min-width: $plyr-bp-screen-sm) { - > button, - .plyr__progress, - .plyr__time { - margin-left: $plyr-control-spacing; - } - } -} -// Hide controls -.plyr--hide-controls .plyr__controls { - opacity: 0; - pointer-events: none; -} - -// Video controls -.plyr--video .plyr__controls { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: ($plyr-control-spacing * 5) $plyr-control-spacing $plyr-control-spacing; - background: linear-gradient(transparentize($plyr-video-controls-bg, 1), transparentize($plyr-video-controls-bg, .5)); - border-bottom-left-radius: inherit; - border-bottom-right-radius: inherit; - color: $plyr-video-control-color; - transition: opacity .3s ease; - - button { - // Hover and tab focus - &.tab-focus:focus, - &:hover { - background: $plyr-video-control-bg-hover; - color: $plyr-video-control-color-hover; - } - } -} - -// Audio controls -.plyr--audio .plyr__controls { - padding: $plyr-control-spacing; - border-radius: inherit; - background: $plyr-audio-controls-bg; - border: $plyr-audio-controls-border; - color: $plyr-audio-control-color; - - button { - // Hover and tab focus - &.tab-focus:focus, - &:hover { - background: $plyr-audio-control-bg-hover; - color: $plyr-audio-control-color-hover; - } - } -} - -// Large play button (video only) -.plyr__play-large { - display: none; - position: absolute; - z-index: 1; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - padding: $plyr-control-spacing; - background: $plyr-video-control-bg-hover; - border: 4px solid currentColor; - border-radius: 100%; - box-shadow: 0 1px 1px transparentize(#000, .85); - color: $plyr-video-control-color; - transition: all .3s ease; - - svg { - position: relative; - left: 2px; - width: 20px; - height: 20px; - display: block; - fill: currentColor; - pointer-events: none; - } - - &:focus { - outline: 1px dotted transparentize($plyr-video-control-color, .5); - } -} -.plyr .plyr__play-large { - display: inline-block; -} -.plyr--audio .plyr__play-large { - display: none; -} -.plyr--playing .plyr__play-large { - opacity: 0; - visibility: hidden; -} - -// States -.plyr__controls [data-plyr='pause'], -.plyr--playing .plyr__controls [data-plyr='play'] { - display: none; -} -.plyr--playing .plyr__controls [data-plyr='pause'] { - display: inline-block; -} - -// Change icons on state change -.plyr--fullscreen-active .icon--exit-fullscreen, -.plyr--muted .plyr__controls .icon--muted, -.plyr--captions-active .plyr__controls .icon--captions-on { - display: block; - - & + svg { - display: none; - } -} - -// Some options are hidden by default -.plyr [data-plyr='captions'], -.plyr [data-plyr='fullscreen'] { - display: none; -} -.plyr--captions-enabled [data-plyr='captions'], -.plyr--fullscreen-enabled [data-plyr='fullscreen'] { - display: inline-block; -} - -// Tooltips -// -------------------------------------------------------------- -.plyr__tooltip { - position: absolute; - z-index: 2; - bottom: 100%; - margin-bottom: ($plyr-tooltip-padding * 2); - padding: $plyr-tooltip-padding ($plyr-tooltip-padding * 1.5); - pointer-events: none; - - opacity: 0; - background: $plyr-tooltip-bg; - border-radius: $plyr-tooltip-radius; - - color: $plyr-tooltip-color; - font-size: $plyr-font-size-small; - line-height: 1.3; - - transform: translate(-50%, 10px) scale(.8); - transform-origin: 50% 100%; - transition: transform .2s .1s ease, opacity .2s .1s ease; - - &::before { - // Arrows - content: ''; - position: absolute; - width: 0; - height: 0; - left: 50%; - transform: translateX(-50%); - - // The background triangle - bottom: -$plyr-tooltip-arrow-size; - border-right: $plyr-tooltip-arrow-size solid transparent; - border-top: $plyr-tooltip-arrow-size solid $plyr-tooltip-bg; - border-left: $plyr-tooltip-arrow-size solid transparent; - z-index: 2; - } -} -.plyr button:hover .plyr__tooltip, -.plyr button.tab-focus:focus .plyr__tooltip, -.plyr__tooltip--visible { - opacity: 1; - transform: translate(-50%, 0) scale(1); -} -.plyr button:hover .plyr__tooltip { - z-index: 3; -} - -// First tooltip -.plyr__controls > button:first-child .plyr__tooltip, -.plyr__controls > button:first-child + button .plyr__tooltip { - left: 0; - transform: translate(0, 10px) scale(.8); - transform-origin: 0 100%; - - &::before { - left: ($plyr-control-icon-size / 2) + $plyr-control-padding; - } -} - -// Last tooltip -.plyr__controls > button:last-child .plyr__tooltip { - right: 0; - transform: translate(0, 10px) scale(.8); - transform-origin: 100% 100%; - - &::before { - left: auto; - right: ($plyr-control-icon-size / 2) + $plyr-control-padding; - transform: translateX(50%); - } -} - -.plyr__controls > button:first-child, -.plyr__controls > button:first-child + button, -.plyr__controls > button:last-child { - &:hover .plyr__tooltip, - &.tab-focus:focus .plyr__tooltip, - .plyr__tooltip--visible { - transform: translate(0, 0) scale(1); - } -} - -// Playback progress -// -------------------------------------------------------------- -// <progress> element -.plyr__progress { - display: none; - position: relative; - flex: 1; - - input[type="range"] { - position: relative; - z-index: 2; - - &::-webkit-slider-runnable-track { - background: transparent; - } - &::-moz-range-track { - background: transparent; - } - &::-ms-fill-upper { - background: transparent; - } - } - - // Seek tooltip to show time - .plyr__tooltip { - left: 0; - } -} -.plyr .plyr__progress { - display: inline-block; -} - -.plyr__progress--buffer, -.plyr__progress--played, -.plyr__volume--display { - position: absolute; - left: 0; - top: 50%; - width: 100%; - height: $plyr-range-track-height; - margin: -($plyr-range-track-height / 2) 0 0; - padding: 0; - vertical-align: top; - appearance: none; - border: none; - border-radius: 100px; - - &::-webkit-progress-bar { - background: transparent; - } - &::-webkit-progress-value { - background: currentColor; - border-radius: 100px; - min-width: $plyr-range-track-height; - } - &::-moz-progress-bar { - background: currentColor; - border-radius: 100px; - min-width: $plyr-range-track-height; - } - &::-ms-fill { - border-radius: 100px; - } -} -.plyr__progress--played, -.plyr__volume--display { - z-index: 1; - color: $plyr-range-selected-bg; - background: transparent; - transition: none; - - &::-webkit-progress-value { - min-width: $plyr-range-track-height; - max-width: 99%; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - transition: none; - } - &::-moz-progress-bar { - min-width: $plyr-range-track-height; - max-width: 99%; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - transition: none; - } - &::-ms-fill { - display: none; - } -} -.plyr__progress--buffer { - &::-webkit-progress-value { - transition: width .2s ease; - } - &::-moz-progress-bar { - transition: width .2s ease; - } - &::-ms-fill { - transition: width .2s ease; - } -} -.plyr--video .plyr__progress--buffer, -.plyr--video .plyr__volume--display { - background: $plyr-video-range-track-bg; -} -.plyr--video .plyr__progress--buffer { - color: $plyr-video-progress-buffered-bg; -} -.plyr--audio .plyr__progress--buffer, -.plyr--audio .plyr__volume--display { - background: $plyr-audio-range-track-bg; -} -.plyr--audio .plyr__progress--buffer { - color: $plyr-audio-progress-buffered-bg; -} - -// Loading state -.plyr--loading .plyr__progress--buffer { - animation: plyr-progress 1s linear infinite; - background-size: $plyr-progress-loading-size $plyr-progress-loading-size; - background-repeat: repeat-x; - background-image: linear-gradient( - -45deg, - $plyr-progress-loading-bg 25%, - transparent 25%, - transparent 50%, - $plyr-progress-loading-bg 50%, - $plyr-progress-loading-bg 75%, - transparent 75%, - transparent); - color: transparent; -} -.plyr--video.plyr--loading .plyr__progress--buffer { - background-color: $plyr-video-progress-buffered-bg; -} -.plyr--audio.plyr--loading .plyr__progress--buffer { - background-color: $plyr-audio-progress-buffered-bg; -} - -// Time -// -------------------------------------------------------------- -.plyr__time { - display: inline-block; - vertical-align: middle; - font-size: $plyr-font-size-small; -} -// Media duration hidden on small screens -.plyr__time + .plyr__time { - display: none; - - @media (min-width: $plyr-bp-screen-md) { - display: inline-block; - } - - // Add a slash in before - &::before { - content: '\2044'; - margin-right: $plyr-control-spacing; - } -} - -// Volume -// -------------------------------------------------------------- -.plyr__volume { - display: none; -} -.plyr .plyr__volume { - flex: 1; - position: relative; - - input[type="range"] { - position: relative; - z-index: 2; - } - @media (min-width: $plyr-bp-screen-sm) { - display: block; - max-width: 60px; - } - @media (min-width: $plyr-bp-screen-md) { - max-width: 100px; - } -} - -// Hide sound controls on iOS -// It's not supported to change volume using JavaScript: -// https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html -.plyr--is-ios .plyr__volume, -.plyr--is-ios [data-plyr='mute'] { - display: none !important; -} - -// Fullscreen -// -------------------------------------------------------------- -.plyr--fullscreen-active { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - height: 100%; - width: 100%; - z-index: 10000000; - background: #000; - border-radius: 0 !important; - - video { - height: 100%; - } - .plyr__video-wrapper { - height: 100%; - width: 100%; - } - .plyr__video-embed { - // Revert overflow change - overflow: visible; - } - .plyr__controls { - position: absolute; - bottom: 0; - left: 0; - right: 0; - } - - // Vimeo requires some different styling - &.plyr--vimeo .plyr__video-wrapper { - height: 0; - top: 50%; - transform: translateY(-50%); - } -} diff --git a/src/scss/variables.scss b/src/scss/variables.scss deleted file mode 100644 index 30c61bf5..00000000 --- a/src/scss/variables.scss +++ /dev/null @@ -1,73 +0,0 @@ -// ========================================================================== -// Plyr variables -// https://github.com/sampotts/plyr -// https://robots.thoughtbot.com/sass-default -// ========================================================================== - -// Settings -$plyr-border-box: true !default; -$plyr-touch-action: true !default; -$plyr-sr-only-important: true !default; - -// Colors -$plyr-color-main: #3498db !default; - -// Font sizes -$plyr-font-family: Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif !default; -$plyr-font-size-small: 14px !default; -$plyr-font-size-base: 16px !default; - -// Captions -$plyr-captions-bg: transparentize(#000, .4) !default; -$plyr-captions-color: #fff !default; -$plyr-font-size-captions-base: $plyr-font-size-base !default; -$plyr-font-size-captions-medium: ceil($plyr-font-size-base * 1.5) !default; -$plyr-font-size-captions-large: ($plyr-font-size-base * 2) !default; - -// Controls -$plyr-control-icon-size: 18px !default; -$plyr-control-spacing: 10px !default; -$plyr-control-padding: ($plyr-control-spacing * .7) !default; -$plyr-video-controls-bg: #000 !default; -$plyr-video-control-color: #fff !default; -$plyr-video-control-color-hover: #fff !default; -$plyr-video-control-bg-hover: $plyr-color-main !default; -$plyr-audio-controls-bg: #fff !default; -$plyr-audio-controls-border: 1px solid #dbe3e8 !default; -$plyr-audio-control-color: #565D64 !default; -$plyr-audio-control-color-hover: #fff !default; -$plyr-audio-control-bg-hover: $plyr-color-main; - -// Tooltips -$plyr-tooltip-bg: transparentize(#000, .3) !default; -$plyr-tooltip-color: #fff !default; -$plyr-tooltip-padding: ($plyr-control-spacing / 2) !default; -$plyr-tooltip-arrow-size: 4px !default; -$plyr-tooltip-radius: 3px !default; - -// Progress -$plyr-progress-loading-size: 25px !default; -$plyr-progress-loading-bg: transparentize(#000, .85) !default; -$plyr-video-progress-bg: transparentize(#fff, .75) !default; -$plyr-video-progress-buffered-bg: $plyr-video-progress-bg !default; -$plyr-audio-progress-bg: transparentize(#C6D6DB, .33) !default; -$plyr-audio-progress-buffered-bg: $plyr-audio-progress-bg !default; - -// Range sliders -$plyr-range-track-height: 8px !default; -$plyr-range-thumb-height: floor($plyr-range-track-height * 2) !default; -$plyr-range-thumb-width: floor($plyr-range-track-height * 2) !default; -$plyr-range-thumb-bg: #fff !default; -$plyr-range-thumb-border: 2px solid transparent !default; -$plyr-range-thumb-shadow: 0 1px 1px transparentize($plyr-video-controls-bg, .85), 0 0 0 1px transparentize(#000, .85) !default; -$plyr-range-thumb-active-border-color: #fff !default; -$plyr-range-thumb-active-bg: $plyr-video-control-bg-hover !default; -$plyr-range-thumb-active-scale: 1.25 !default; -$plyr-video-range-track-bg: $plyr-video-progress-buffered-bg !default; -$plyr-audio-range-track-bg: $plyr-audio-progress-buffered-bg !default; -$plyr-range-selected-bg: $plyr-color-main !default; - -// Breakpoints -$plyr-bp-screen-sm: 480px !default; -$plyr-bp-screen-md: 768px !default; -$plyr-bp-screen-lg: 1024px !default;
\ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..8e51f8e1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5731 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" + 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" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.31" + "@babel/template" "7.0.0-beta.31" + "@babel/traverse" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + +"@babel/helper-get-function-arity@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" + dependencies: + "@babel/types" "7.0.0-beta.31" + +"@babel/template@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" + dependencies: + "@babel/code-frame" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" + lodash "^4.2.0" + +"@babel/traverse@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" + dependencies: + "@babel/code-frame" "7.0.0-beta.31" + "@babel/helper-function-name" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@gulp-sourcemaps/identity-map@1.X": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz#cfa23bc5840f9104ce32a65e74db7e7a974bbee1" + dependencies: + acorn "^5.0.3" + css "^2.2.1" + normalize-path "^2.1.1" + source-map "^0.5.6" + through2 "^2.0.3" + +"@gulp-sourcemaps/map-sources@1.X": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz#890ae7c5d8c877f6d384860215ace9d7ec945bda" + dependencies: + normalize-path "^2.0.1" + through2 "^2.0.3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@4.X: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^5.0.3, acorn@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^0.2.0, ansi-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" + +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: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +aria-query@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" + dependencies: + ast-types-flow "0.0.7" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + +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" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-iterate@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.1.tgz#865bf7f8af39d6b0982c60902914ac76bc0108f6" + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1, array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +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" + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + +async@: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + +atob@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" + +autoprefixer@^7.0.0, autoprefixer@^7.1.2: + version "7.2.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.3.tgz#c2841e38b7940c2d0a9bbffd72c75f33637854f8" + dependencies: + browserslist "^2.10.0" + caniuse-lite "^1.0.30000783" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.14" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axobject-query@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + dependencies: + ast-types-flow "0.0.7" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-eslint@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.3.tgz#f29ecf02336be438195325cd47c468da81ee4e98" + dependencies: + "@babel/code-frame" "7.0.0-beta.31" + "@babel/traverse" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" + +babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.6" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +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" + +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-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^2.1.2" + invariant "^2.2.2" + semver "^5.3.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.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: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +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: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +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: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@7.0.0-beta.31: + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +bail@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +binaryextensions@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-1.0.1.tgz#1e637488b35b58bda5f4774bf96a5212a8c90755" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.0.0, brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.0.tgz#a46941cb5fb492156b3d6a656e06c35364e3e66e" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-resolve@^1.11.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browserslist@^2.1.2, browserslist@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.10.0.tgz#bac5ee1cc69ca9d96403ffb8a3abdc5b6aed6346" + dependencies: + caniuse-lite "^1.0.30000780" + electron-to-chromium "^1.3.28" + +builtin-modules@^1.0.0, builtin-modules@^1.1.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-lite@^1.0.30000780, caniuse-lite@^1.0.30000783: + version "1.0.30000784" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000784.tgz#129ced74e9a1280a441880b6cd2bce30ef59e6c0" + +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" + +ccount@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.2.tgz#53b6a2f815bb77b9c2871f7b9a72c3a25f1d8e89" + +chalk@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" + dependencies: + ansi-styles "^1.1.0" + escape-string-regexp "^1.0.0" + has-ansi "^0.1.0" + strip-ansi "^0.3.0" + supports-color "^0.2.0" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.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: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +character-entities-html4@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" + +character-entities-legacy@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" + +character-entities@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.1.tgz#f76871be5ef66ddb7f8f8e3478ecc374c27d6dca" + +character-reference-invalid@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +cheerio@0.*: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.5.tgz#17e793103750f9627b2176ea34cfd1b565903c80" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + lazy-cache "^2.0.2" + static-extend "^0.1.1" + +clean-css@4.1.9: + version "4.1.9" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" + dependencies: + source-map "0.5.x" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + +clone-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.0.tgz#eae0a2413f55c0942f818c229fefce845d7f3b1c" + dependencies: + is-regexp "^1.0.0" + is-supported-regexp-flag "^1.0.0" + +clone-stats@^0.0.1, clone-stats@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + +clone@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +clone@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + +cloneable-readable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" + dependencies: + inherits "^2.0.1" + process-nextick-args "^1.0.6" + through2 "^2.0.1" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collapse-white-space@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + +colors@^1.1.2, colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.9.0, commander@~2.12.1: + version "2.12.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-with-sourcemaps@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6" + dependencies: + source-map "^0.5.1" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +convert-source-map@1.X, 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" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cosmiconfig@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^3.0.0" + require-from-string "^2.0.1" + +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.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +css@2.X, css@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.3.0" + urix "^0.1.0" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +damerau-levenshtein@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +dateformat@^1.0.7-1.2.3: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + +debug-fabulous@>=0.1.1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-1.0.0.tgz#57f6648646097b1b0849dcda0017362c1ec00f8b" + dependencies: + debug "3.X" + memoizee "0.4.X" + object-assign "4.X" + +debug@3.X, debug@^3.0.0, debug@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-1.0.5.tgz#f7241217430f99dec4c2b473eab92228e874c2ac" + dependencies: + ms "2.0.0" + +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +defaults@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +deprecated@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-newline@2.X: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.0.0, doctrine@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" + dependencies: + esutils "^2.0.2" + +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: + domelementtype "~1.1.1" + entities "~1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +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.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + 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" + +dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexer@^0.1.1, duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +electron-to-chromium@^1.3.28: + version "1.3.29" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.29.tgz#7a58236b95468c3e7660091348522d65d7736b36" + +emoji-regex@^6.1.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" + dependencies: + once "~1.3.0" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.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: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: + version "0.10.37" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3" + dependencies: + es6-iterator "~2.0.1" + es6-symbol "~3.1.1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, 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" + +eslint-config-airbnb-base@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" + dependencies: + eslint-restricted-globals "^0.1.1" + +eslint-config-airbnb@^16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" + dependencies: + eslint-config-airbnb-base "^12.1.0" + +eslint-config-prettier@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + dependencies: + get-stdin "^5.0.1" + +eslint-import-resolver-node@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" + dependencies: + debug "^2.6.8" + resolve "^1.2.0" + +eslint-module-utils@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-import@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.1.1" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + +eslint-plugin-jsx-a11y@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" + dependencies: + aria-query "^0.7.0" + array-includes "^3.0.3" + ast-types-flow "0.0.7" + axobject-query "^0.1.0" + damerau-levenshtein "^1.0.0" + emoji-regex "^6.1.0" + jsx-ast-utils "^2.0.0" + +eslint-plugin-react@^7.5.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b" + dependencies: + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^2.0.0" + prop-types "^15.6.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint@^4.13.1: + version "4.13.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f" + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.0.1" + doctrine "^2.0.2" + eslint-scope "^3.7.1" + espree "^3.5.2" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "^4.0.1" + text-table "~0.2.0" + +espree@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" + dependencies: + acorn "^5.2.1" + acorn-jsx "^3.0.0" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + estraverse "^4.1.0" + object-assign "^4.0.1" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estree-walker@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" + +estree-walker@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa" + +estree-walker@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.1.tgz#64fc375053abc6f57d73e9bd2f004644ad3c5854" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +event-stream@*: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +execall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" + dependencies: + clone-regexp "^1.0.0" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.1.tgz#4b6d8c49b147fee029dc9eb9484adb770f689844" + dependencies: + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +external-editor@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.2.tgz#3290f46208db1b2e8eb8be0c94ed9e6ad80edbe2" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fancy-log@^1.1.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + time-stamp "^1.0.0" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fbjs@^0.8.16: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +fined@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +first-chunk-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" + +flagged-respawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" + +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fstream@^1.0.0, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" + dependencies: + globule "~0.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" + +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" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-stream@^3.1.5: + version "3.1.18" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" + dependencies: + glob "^4.3.1" + glob2base "^0.0.12" + minimatch "^2.0.1" + ordered-read-streams "^0.1.0" + through2 "^0.6.1" + unique-stream "^1.0.0" + +glob-watcher@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" + dependencies: + gaze "^0.5.1" + +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + +glob@^4.3.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.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.2, glob@~7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~3.1.21: + version "3.1.21" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" + dependencies: + graceful-fs "~1.2.0" + inherits "1" + minimatch "~0.2.11" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^10.0.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" + +globals@^11.0.1: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + +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" + +globule@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" + dependencies: + glob "~3.1.21" + lodash "~1.0.1" + minimatch "~0.2.11" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +gonzales-pe@^4.0.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" + dependencies: + minimist "1.1.x" + +graceful-fs@4.X, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +graceful-fs@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + +graceful-fs@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" + +gulp-autoprefixer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-4.0.0.tgz#e00a8c571b85d06516ac26341be90dfd9fc1eab0" + dependencies: + autoprefixer "^7.0.0" + gulp-util "^3.0.0" + postcss "^6.0.1" + through2 "^2.0.0" + vinyl-sourcemaps-apply "^0.2.0" + +gulp-better-rollup@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gulp-better-rollup/-/gulp-better-rollup-2.0.0.tgz#e0792758bcd59084b5a1b15e34f62eaf22afdaed" + dependencies: + gulp-util "^3.0.8" + lodash.camelcase "^4.3.0" + rollup "^0.50.0" + vinyl-sourcemaps-apply "^0.2.1" + +gulp-clean-css@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/gulp-clean-css/-/gulp-clean-css-3.9.0.tgz#e43e4c8d695060f6ba08a154d8e76d0d87b1c822" + dependencies: + clean-css "4.1.9" + gulp-util "3.0.8" + through2 "2.0.3" + vinyl-sourcemaps-apply "0.2.1" + +gulp-concat@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz#633d16c95d88504628ad02665663cee5a4793353" + dependencies: + concat-with-sourcemaps "^1.0.0" + through2 "^2.0.0" + vinyl "^2.0.0" + +gulp-open@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gulp-open/-/gulp-open-2.0.0.tgz#a16f67e95cea8b2061b63a3b8c389bc559b8e1ce" + dependencies: + colors "^1.1.2" + gulp-util "^3.0.2" + open "0.0.5" + through2 "^2.0.1" + +gulp-rename@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" + +gulp-replace@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-0.6.1.tgz#11bf8c8fce533e33e2f6a8f2f430b955ba0be066" + dependencies: + istextorbinary "1.0.2" + readable-stream "^2.0.1" + replacestream "^4.0.0" + +gulp-s3@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/gulp-s3/-/gulp-s3-0.11.0.tgz#9e302b5645206e217a525d20befa1ed293442492" + dependencies: + async "" + event-stream "*" + gulp-util "~2.2.6" + knox "" + mime "~1.2.11" + +gulp-sass@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-3.1.0.tgz#53dc4b68a1f5ddfe4424ab4c247655269a8b74b7" + dependencies: + gulp-util "^3.0" + lodash.clonedeep "^4.3.2" + node-sass "^4.2.0" + through2 "^2.0.0" + vinyl-sourcemaps-apply "^0.2.0" + +gulp-size@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/gulp-size/-/gulp-size-2.1.0.tgz#1c2b64f17f9071d5abd99d154b7b3481f8fba128" + dependencies: + chalk "^1.0.0" + gulp-util "^3.0.0" + gzip-size "^3.0.0" + object-assign "^4.0.1" + pretty-bytes "^3.0.1" + stream-counter "^1.0.0" + through2 "^2.0.0" + +gulp-sourcemaps@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.1.tgz#833a4e28f0b8f4661075032cd782417f7cd8fb0b" + dependencies: + "@gulp-sourcemaps/identity-map" "1.X" + "@gulp-sourcemaps/map-sources" "1.X" + acorn "4.X" + convert-source-map "1.X" + css "2.X" + debug-fabulous ">=0.1.1" + detect-newline "2.X" + graceful-fs "4.X" + source-map "0.X" + strip-bom-string "1.X" + through2 "2.X" + vinyl "1.X" + +gulp-svgmin@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/gulp-svgmin/-/gulp-svgmin-1.2.4.tgz#a4aa9e2615cf1105ef555aea86e86296cc20e273" + dependencies: + gulp-util "^3.0.4" + svgo "^0.7.0" + +gulp-svgstore@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/gulp-svgstore/-/gulp-svgstore-6.1.0.tgz#04b203ac0e13f8ed6dbfc940d25965c4e2456676" + dependencies: + cheerio "0.*" + gulp-util "^3.0.0" + +gulp-util@3.0.8, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.2, gulp-util@^3.0.4, gulp-util@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulp-util@~2.2.6: + version "2.2.20" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c" + dependencies: + chalk "^0.5.0" + dateformat "^1.0.7-1.2.3" + lodash._reinterpolate "^2.4.1" + lodash.template "^2.4.1" + minimist "^0.2.0" + multipipe "^0.1.0" + through2 "^0.5.0" + vinyl "^0.2.1" + +gulp@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" + dependencies: + archy "^1.0.0" + chalk "^1.0.0" + deprecated "^0.0.1" + gulp-util "^3.0.0" + interpret "^1.0.0" + liftoff "^2.1.0" + minimist "^1.1.0" + orchestrator "^0.3.0" + pretty-hrtime "^1.0.0" + semver "^4.1.0" + tildify "^1.0.0" + v8flags "^2.0.2" + vinyl-fs "^0.3.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + +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@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" + dependencies: + ansi-regex "^0.2.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + +htmlparser2@^3.9.1, htmlparser2@^3.9.2: + 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" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@^0.4.17, iconv-lite@~0.4.13: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +ignore@^3.3.3, ignore@^3.3.5: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + +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" + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + +invariant@^2.2.0, invariant@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-alphabetical@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" + +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + +is-alphanumerical@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.4, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-decimal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.1.tgz#2c6023599bde2de9d5d2c8b9a9d94082036b6ef2" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +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-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-hexadecimal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + +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@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-odd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088" + dependencies: + is-number "^3.0.0" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-promise@^2.1, 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" + dependencies: + has "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + dependencies: + is-unc-path "^1.0.0" + +is-resolvable@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-supported-regexp-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz#8b520c85fae7a253382d4b02652e045576e13bb8" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-whitespace-character@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" + +is-windows@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" + +is-word-character@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istextorbinary@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-1.0.2.tgz#ace19354d1a9a0173efeb1084ce0f87b0ad7decf" + dependencies: + binaryextensions "~1.0.0" + textextensions "~1.0.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" + +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.9.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" + +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-parse-better-errors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + +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" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +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" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + dependencies: + array-includes "^3.0.3" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.1.0, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0, kind-of@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +known-css-properties@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.5.0.tgz#6ff66943ed4a5b55657ee095779a91f4536f8084" + +knox@: + version "0.9.2" + resolved "https://registry.yarnpkg.com/knox/-/knox-0.9.2.tgz#3736593669e24f024fdaf723b6a1dc4afd839a71" + dependencies: + debug "^1.0.2" + mime "*" + once "^1.3.0" + stream-counter "^1.0.0" + xml2js "^0.4.4" + +lazy-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + dependencies: + set-getter "^0.1.0" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +liftoff@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" + dependencies: + extend "^3.0.0" + findup-sync "^2.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._escapehtmlchar@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d" + dependencies: + lodash._htmlescapes "~2.4.1" + +lodash._escapestringchar@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz#ecfe22618a2ade50bfeea43937e51df66f0edb72" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._htmlescapes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz#32d14bf0844b6de6f8b62a051b4f67c228b624cb" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._isnative@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" + +lodash._objecttypes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^2.4.1, lodash._reinterpolate@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz#4f1227aa5a8711fc632f5b07a1f4607aab8b3222" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._reunescapedhtml@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz#747c4fc40103eb3bb8a0976e571f7a2659e93ba7" + dependencies: + lodash._htmlescapes "~2.4.1" + lodash.keys "~2.4.1" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash._shimkeys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" + dependencies: + lodash._objecttypes "~2.4.1" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + +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.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.defaults@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" + dependencies: + lodash._objecttypes "~2.4.1" + lodash.keys "~2.4.1" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.escape@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz#2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4" + dependencies: + lodash._escapehtmlchar "~2.4.1" + lodash._reunescapedhtml "~2.4.1" + lodash.keys "~2.4.1" + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isobject@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" + dependencies: + lodash._objecttypes "~2.4.1" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.keys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" + dependencies: + lodash._isnative "~2.4.1" + lodash._shimkeys "~2.4.1" + lodash.isobject "~2.4.1" + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +lodash.mergewith@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + +lodash.template@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz#9e611007edf629129a974ab3c48b817b3e1cf20d" + dependencies: + lodash._escapestringchar "~2.4.1" + lodash._reinterpolate "~2.4.1" + lodash.defaults "~2.4.1" + lodash.escape "~2.4.1" + lodash.keys "~2.4.1" + lodash.templatesettings "~2.4.1" + lodash.values "~2.4.1" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.templatesettings@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz#ea76c75d11eb86d4dbe89a83893bb861929ac699" + dependencies: + lodash._reinterpolate "~2.4.1" + lodash.escape "~2.4.1" + +lodash.values@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4" + dependencies: + lodash.keys "~2.4.1" + +lodash@>=3.10.0, lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +lodash@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" + +log-symbols@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" + dependencies: + chalk "^2.0.1" + +longest-streak@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" + +loose-envify@^1.0.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-queue@0.1: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + dependencies: + es5-ext "~0.10.2" + +magic-string@^0.22.4: + version "0.22.4" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.4.tgz#31039b4e40366395618c1d6cf8193c53917475ff" + dependencies: + vlq "^0.2.1" + +make-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.0.tgz#57bef5dc85d23923ba23767324d8e8f8f3d9694b" + dependencies: + kind-of "^3.1.0" + +map-cache@^0.2.0, map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +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" + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" + +markdown-table@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c" + +mathml-tag-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz#8d41268168bf86d1102b98109e28e531e7a34578" + +mdast-util-compact@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz#cdb5f84e2b6a2d3114df33bd05d9cb32e3c4083a" + dependencies: + unist-util-modify-children "^1.0.0" + unist-util-visit "^1.1.0" + +memoizee@0.4.X: + version "0.4.11" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.11.tgz#bde9817663c9e40fdb2a4ea1c367296087ae8c8f" + dependencies: + d "1" + es5-ext "^0.10.30" + es6-weak-map "^2.0.2" + event-emitter "^0.3.5" + is-promise "^2.1" + lru-queue "0.1" + next-tick "1" + timers-ext "^0.1.2" + +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.0.tgz#fd5855dd008db5b92c552082db1c307cba20b29d" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.0.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.4.tgz#bb812e741a41f982c854e42b421a7eac458796f4" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.0" + define-property "^1.0.0" + extend-shallow "^2.0.1" + extglob "^2.0.2" + fragment-cache "^0.2.1" + kind-of "^6.0.0" + nanomatch "^1.2.5" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime@*: + version "2.0.3" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.0.3.tgz#4353337854747c48ea498330dc034f9f4bbbcc0b" + +mime@~1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimatch@^2.0.1: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + +minimatch@~0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@1.1.x: + version "1.1.3" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" + +minimist@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" + +minimist@^1.1.0, minimist@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mixin-deep@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.0.tgz#47a8732ba97799457c8c1eca28f95132d7e8150a" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, 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" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multipipe@^0.1.0, multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +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.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + +nanomatch@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.6.tgz#f27233e97c34a8706b7e781a4bc611c957a81625" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + is-odd "^1.0.0" + kind-of "^5.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natives@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.1.tgz#011acce1f7cbd87f7ba6b3093d6cd9392be1c574" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +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-sass@^4.2.0: + 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" + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +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" + +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" + +object-assign@4.X, 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-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.map@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.0.tgz#92aef871cd6dcbced31fe29c0921db8395624597" + dependencies: + for-own "^0.1.4" + make-iterator "^1.0.0" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.2.0, object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +open@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +orchestrator@^0.3.0: + version "0.3.8" + resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" + dependencies: + end-of-stream "~0.1.5" + sequencify "~0.0.7" + stream-consume "~0.1.0" + +ordered-read-streams@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +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: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +parse-entities@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-json@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" + dependencies: + error-ex "^1.3.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + dependencies: + path-root-regex "^0.1.0" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-bem-linter@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-bem-linter/-/postcss-bem-linter-3.1.0.tgz#55352412fb481aad0d05148185a990734e1ca030" + dependencies: + minimatch "^3.0.3" + postcss "^6.0.6" + postcss-resolve-nested-selector "^0.1.1" + +postcss-html@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.12.0.tgz#39b6adb4005dfc5464df7999c0f81c95bced7e50" + dependencies: + htmlparser2 "^3.9.2" + remark "^8.0.0" + unist-util-find-all-after "^1.0.1" + +postcss-less@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-1.1.3.tgz#6930525271bfe38d5793d33ac09c1a546b87bb51" + dependencies: + postcss "^5.2.16" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + +postcss-reporter@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3" + dependencies: + chalk "^2.0.1" + lodash "^4.17.4" + log-symbols "^2.0.0" + postcss "^6.0.8" + +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + +postcss-safe-parser@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz#b753eff6c7c0aea5e8375fbe4cde8bf9063ff142" + dependencies: + postcss "^6.0.6" + +postcss-sass@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.2.0.tgz#e55516441e9526ba4b380a730d3a02e9eaa78c7a" + dependencies: + gonzales-pe "^4.0.3" + postcss "^6.0.6" + +postcss-scss@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.2.tgz#ff45cf3354b879ee89a4eb68680f46ac9bb14f94" + dependencies: + postcss "^6.0.3" + +postcss-selector-parser@^3.1.0, postcss-selector-parser@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-sorting@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-3.1.0.tgz#af7c90ee73ad12569a57664eaf06735c2e25bec0" + dependencies: + lodash "^4.17.4" + postcss "^6.0.13" + +postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss@>=5.0.19, postcss@^6.0.1, postcss@^6.0.13, postcss@^6.0.14, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.8: + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" + dependencies: + chalk "^2.3.0" + source-map "^0.6.1" + supports-color "^4.4.0" + +postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-bytes@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + dependencies: + number-is-nan "^1.0.0" + +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + +private@^0.1.6, private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9" + dependencies: + extend-shallow "^2.0.1" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remark-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b" + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-stringify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-4.0.0.tgz#4431884c0418f112da44991b4e356cfe37facd87" + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-8.0.0.tgz#287b6df2fe1190e263c1d15e486d3fa835594d6d" + dependencies: + remark-parse "^4.0.0" + remark-stringify "^4.0.0" + unified "^6.0.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +replace-ext@1.0.0, replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + +replacestream@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/replacestream/-/replacestream-4.0.3.tgz#3ee5798092be364b1cdb1484308492cb3dff2f36" + dependencies: + escape-string-regexp "^1.0.3" + object-assign "^4.0.1" + readable-stream "^2.0.2" + +request@2: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +request@~2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.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" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-from-string@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + +resolve-url@^0.2.1, resolve-url@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +rimraf@2, rimraf@^2.2.8: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rollup-plugin-babel@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-3.0.3.tgz#63adedc863130327512a4a9006efc2241c5b7c15" + dependencies: + rollup-pluginutils "^1.5.0" + +rollup-plugin-commonjs@^8.2.6: + version "8.2.6" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.6.tgz#27e5b9069ff94005bb01e01bb46a1e4873784677" + dependencies: + acorn "^5.2.1" + estree-walker "^0.5.0" + magic-string "^0.22.4" + resolve "^1.4.0" + rollup-pluginutils "^2.0.1" + +rollup-plugin-node-resolve@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz#8b897c4c3030d5001277b0514b25d2ca09683ee0" + dependencies: + browser-resolve "^1.11.0" + builtin-modules "^1.1.0" + is-module "^1.0.0" + resolve "^1.1.6" + +rollup-plugin-uglify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz#67b37ad1efdafbd83af4c36b40c189ee4866c969" + dependencies: + uglify-js "^3.0.9" + +rollup-pluginutils@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + dependencies: + estree-walker "^0.2.1" + minimatch "^3.0.2" + +rollup-pluginutils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0" + dependencies: + estree-walker "^0.3.0" + micromatch "^2.3.11" + +rollup@^0.50.0: + version "0.50.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.50.1.tgz#e4dafcbf8d2bb0d9f5589d0cc6f64d76b8815730" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +run-sequence@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/run-sequence/-/run-sequence-2.2.0.tgz#b3f8d42836db89d08b2fe704eaf0c93dfd8335e2" + dependencies: + chalk "^1.1.3" + gulp-util "^3.0.8" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +sax@>=0.6.0, sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +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" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +semver@^4.1.0: + version "4.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +sequencify@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-getter@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" + dependencies: + to-object-path "^0.3.0" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +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" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^2.0.0" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +source-map-resolve@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" + dependencies: + atob "~1.1.0" + resolve-url "~0.2.1" + source-map-url "~0.3.0" + urix "~0.1.0" + +source-map-resolve@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + dependencies: + atob "^2.0.0" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map-url@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" + +source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, 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.X, 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" + +source-map@^0.1.38: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +specificity@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.3.2.tgz#99e6511eceef0f8d9b57924937aac2cb13d13c42" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +state-toggle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +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" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +stream-consume@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" + +stream-counter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-1.0.0.tgz#91cf2569ce4dc5061febcd7acb26394a5a114751" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.1.tgz#b150ec2d72ac4c1b5f324b51fb6b28c9cdff058c" + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" + dependencies: + ansi-regex "^0.2.1" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom-string@1.X: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + +strip-bom@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" + dependencies: + first-chunk-stream "^1.0.0" + is-utf8 "^0.2.0" + +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-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + +stylelint-config-prettier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-2.0.0.tgz#0f671435294ebe4a215971855e1e576f5f227a21" + +stylelint-config-recommended@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.0.1.tgz#4746119ec85f5f4663c7b5107c05c13ed0e2ab0d" + +stylelint-config-sass-guidelines@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-4.0.1.tgz#c64f353e07575ad06f6405d6dd902066aa5bc8c4" + +stylelint-config-standard@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.0.0.tgz#0d872b40fafdcddcf4188fb5b64ddb3887e8aefc" + dependencies: + stylelint-config-recommended "^2.0.0" + +stylelint-order@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-0.8.0.tgz#49da5615cb91ed077ebd274687f4df3d6feeb4e4" + dependencies: + lodash "^4.17.4" + postcss "^6.0.14" + postcss-sorting "^3.1.0" + +stylelint-scss@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-2.2.0.tgz#3e324bf13346db7af21cd24ad57fe3202f7c3823" + dependencies: + lodash "^4.17.4" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-selector-parser "^3.1.1" + postcss-value-parser "^3.3.0" + +stylelint-selector-bem-pattern@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stylelint-selector-bem-pattern/-/stylelint-selector-bem-pattern-2.0.0.tgz#9a6130c9c90963b30e925c917079d6c8fed73f45" + dependencies: + lodash ">=3.10.0" + postcss ">=5.0.19" + postcss-bem-linter "^3.0.0" + stylelint ">=3.0.2" + +stylelint@>=3.0.2, stylelint@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.4.0.tgz#c2dbaeb17236917819f9206e1c0df5fddf6f83c3" + dependencies: + autoprefixer "^7.1.2" + balanced-match "^1.0.0" + chalk "^2.0.1" + cosmiconfig "^3.1.0" + debug "^3.0.0" + execall "^1.0.0" + file-entry-cache "^2.0.0" + get-stdin "^5.0.1" + globby "^7.0.0" + globjoin "^0.1.4" + html-tags "^2.0.0" + ignore "^3.3.3" + imurmurhash "^0.1.4" + known-css-properties "^0.5.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + mathml-tag-names "^2.0.1" + meow "^4.0.0" + micromatch "^2.3.11" + normalize-selector "^0.2.0" + pify "^3.0.0" + postcss "^6.0.6" + postcss-html "^0.12.0" + postcss-less "^1.1.0" + postcss-media-query-parser "^0.2.3" + postcss-reporter "^5.0.0" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^3.0.1" + postcss-sass "^0.2.0" + postcss-scss "^1.0.2" + postcss-selector-parser "^3.1.0" + postcss-value-parser "^3.3.0" + resolve-from "^4.0.0" + specificity "^0.3.1" + string-width "^2.1.0" + style-search "^0.1.0" + sugarss "^1.0.0" + svg-tags "^1.0.0" + table "^4.0.1" + +sugarss@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44" + dependencies: + postcss "^6.0.14" + +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + +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: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^4.0.0, supports-color@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +table@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tar@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +textextensions@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-1.0.2.tgz#65486393ee1f2bb039a60cbba05b0b68bd9501d2" + +through2@2.0.3, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through2@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" + dependencies: + readable-stream "~1.0.17" + xtend "~3.0.0" + +through2@^0.6.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through@2, through@^2.3.6, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +tildify@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" + dependencies: + os-homedir "^1.0.0" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +timers-ext@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.2.tgz#61cc47a76c1abd3195f14527f978d58ae94c5204" + dependencies: + es5-ext "~0.10.14" + next-tick "1" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae" + dependencies: + define-property "^0.2.5" + extend-shallow "^2.0.1" + regex-not "^1.0.0" + +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" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +trim-trailing-lines@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz#7aefbb7808df9d669f6da2e438cac8c46ada7684" + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + +trough@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" + +"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" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + 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" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +ua-parser-js@^0.7.9: + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + +uglify-es@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.2.tgz#15c62b7775002c81b7987a1c49ecd3f126cace73" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + +uglify-js@^3.0.9: + version "3.2.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.2.tgz#870e4b34ed733d179284f9998efd3293f7fd73f6" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +unherit@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + +unified@^6.0.0: + version "6.1.6" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.1.6.tgz#5ea7f807a0898f1f8acdeefe5f25faa010cc42b1" + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-function "^1.0.4" + x-is-string "^0.1.0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +unique-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" + +unist-util-find-all-after@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz#4e5512abfef7e0616781aecf7b1ed751c00af908" + dependencies: + unist-util-is "^2.0.0" + +unist-util-is@^2.0.0, unist-util-is@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" + +unist-util-modify-children@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz#66d7e6a449e6f67220b976ab3cb8b5ebac39e51d" + dependencies: + array-iterate "^1.0.0" + +unist-util-remove-position@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz#5a85c1555fc1ba0c101b86707d15e50fa4c871bb" + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz#3ccbdc53679eed6ecf3777dd7f5e3229c1b6aa3c" + +unist-util-visit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.3.0.tgz#41ca7c82981fd1ce6c762aac397fc24e35711444" + dependencies: + unist-util-is "^2.1.1" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +urix@^0.1.0, urix@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +use@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" + dependencies: + define-property "^0.2.5" + isobject "^3.0.0" + lazy-cache "^2.0.2" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +v8flags@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-location@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.2.tgz#d3675c59c877498e492b4756ff65e4af1a752255" + +vfile-message@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.0.tgz#a6adb0474ea400fa25d929f1d673abea6a17e359" + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vinyl-fs@^0.3.0: + version "0.3.14" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" + dependencies: + defaults "^1.0.0" + glob-stream "^3.1.5" + glob-watcher "^0.0.6" + graceful-fs "^3.0.0" + mkdirp "^0.5.0" + strip-bom "^1.0.0" + through2 "^0.6.1" + vinyl "^0.4.0" + +vinyl-sourcemaps-apply@0.2.1, vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" + dependencies: + source-map "^0.5.1" + +vinyl@1.X: + version "1.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vinyl@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz#bca938209582ec5a49ad538a00fa1f125e513252" + dependencies: + clone-stats "~0.0.1" + +vinyl@^0.4.0: + version "0.4.6" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" + dependencies: + clone "^0.2.0" + clone-stats "^0.0.1" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vinyl@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +vlq@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@1, which@^1.2.14, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +x-is-function@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/x-is-function/-/x-is-function-1.0.4.tgz#5d294dc3d268cbdd062580e0c5df77a391d1fa1e" + +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + +xml2js@^0.4.4: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f" + +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +xtend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +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@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" |