From 386284c1d85e3b6440570d505c6f00c7cb1bbb06 Mon Sep 17 00:00:00 2001 From: Gabriel Lau Date: Thu, 5 Jul 2018 11:24:03 -0300 Subject: [PATCH 1/6] Added option to delay auto initialization of the glidejs instance + Helpful if you have to deal with v-for to update dynamic lists + Avoids the error "Cannot read property 'classList' of undefined" when using async content --- src/components/Glide.vue | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/Glide.vue b/src/components/Glide.vue index fc75be6..9f6066e 100644 --- a/src/components/Glide.vue +++ b/src/components/Glide.vue @@ -15,12 +15,19 @@ export default { settings: { type: Object, default: () => {} + }, + delayInitialization: { + type: Boolean, + default: false } }, methods: { go (pattern) { this.glide.go(pattern) + }, + init () { + this.glide.mount() } }, @@ -41,7 +48,9 @@ export default { }) }) - this.glide.mount() + if (!this.delayInitialization) { + this.init() + } } } From 0ac69a600003bcacd19e65d7e026d8eedc9464b1 Mon Sep 17 00:00:00 2001 From: Gabriel Lau Date: Thu, 5 Jul 2018 11:43:28 -0300 Subject: [PATCH 2/6] Added minimal documentation of usage --- README.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/README.md b/README.md index ba29c8a..fbc85ac 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,87 @@ A Glide.js extension for Vue ### Installation + ``` npm install --save vue-glide ``` +### Usage + +```js +import VueGlide from "@glidejs/vue-glide/src"; + +Vue.use(VueGlide); + +new Vue({ + // ... +}); + +// OR +import Glide from "@glidejs/vue-glide/src/components/Glide"; +import GlideTrack from "@glidejs/vue-glide/src/components/Track"; +import GlideSlide from "@glidejs/vue-glide/src/components/Slide"; + +new Vue({ + components: { + Glide, + GlideTrack, + GlideSlide, + }, + + // ... +}); +``` + +Inside a component + +```html + +``` + +Import the glidejs stylesheet (scss) + +```scss +@import "~@glidejs/glide/src/assets/sass/glide.core"; +@import "~@glidejs/glide/src/assets/sass/glide.theme"; // (optional) +``` + ## Credits - [Jędrzej Chałubek][https://github.com/jedrzejchalubek] - creator From 5e102c7483c7985f490d9b5109c23342e941cf99 Mon Sep 17 00:00:00 2001 From: Gabriel Lau Date: Tue, 19 Feb 2019 23:48:56 -0300 Subject: [PATCH 3/6] removed indexed package-lock.json --- package-lock.json | 5657 --------------------------------------------- 1 file changed, 5657 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index fee0dcf..0000000 --- a/package-lock.json +++ /dev/null @@ -1,5657 +0,0 @@ -{ - "name": "@glidejs/vue-glide", - "version": "3.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@glidejs/glide": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@glidejs/glide/-/glide-3.0.4.tgz", - "integrity": "sha512-hB8zFDHYUwlpJSvxhM5eg6Ih/r8bnP+e1xbhz4U55z/33oQjnxi4qZMWvhEpgc5iynKCMnIEuCan0h+zw3qXnQ==" - }, - "@types/babel-types": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.2.tgz", - "integrity": "sha512-ylggu8DwwxT6mk3jVoJeohWAePWMNWEYm06MSoJ19kwp3hT9eY2Z4NNZn3oevzgFmClgNQ2GQF500hPDvNsGHg==", - "dev": true - }, - "@types/babylon": { - "version": "6.16.2", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz", - "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==", - "dev": true, - "requires": { - "@types/babel-types": "7.0.2" - } - }, - "@types/node": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.3.0.tgz", - "integrity": "sha512-hWzNviaVFIr1TqcRA8ou49JaSHp+Rfabmnqg2kNvusKqLhPU0rIsGPUj5WJJ7ld4Bb7qdgLmIhLfCD1qS08IVA==", - "dev": true - }, - "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, - "optional": true - }, - "acorn": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.1.tgz", - "integrity": "sha512-XH4o5BK5jmw9PzSGK7mNf+/xV+mPxQxGZoeC36OVsJZYV77JAG9NnI7T90hoUpI/C1TOfXWTvugRdZ9ZR3iE2Q==", - "dev": true - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "dev": true, - "optional": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true, - "optional": 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.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "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, - "optional": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "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 - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "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-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true, - "optional": true - }, - "array-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, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "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.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true - }, - "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" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "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.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "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.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "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.10" - } - }, - "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-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-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.10" - } - }, - "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" - } - }, - "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.10" - } - }, - "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" - } - }, - "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" - } - }, - "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.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "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" - } - }, - "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-object-assign": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", - "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", - "dev": true, - "requires": { - "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.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "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.2", - "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": "3.2.8", - "invariant": "2.2.4", - "semver": "5.5.0" - } - }, - "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.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "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.7", - "regenerator-runtime": "0.11.1" - } - }, - "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.10" - } - }, - "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.4", - "lodash": "4.17.10" - } - }, - "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.10", - "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 - }, - "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" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "optional": true, - "requires": { - "inherits": "2.0.3" - } - }, - "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.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "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" - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000847", - "electron-to-chromium": "1.3.48" - } - }, - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "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 - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "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, - "optional": 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, - "optional": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30000847", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000847.tgz", - "integrity": "sha512-Weo+tRtVWcN2da782Ebx/27hFNEb+KP+uP6tdqAa+2S5bp1zOJhVH9tEpDygagrfvU4QjeuPwi/5VGsgT4SLaA==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": 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, - "optional": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "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" - } - }, - "character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", - "dev": true, - "optional": true, - "requires": { - "is-regex": "1.0.4" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "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 - }, - "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "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": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "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, - "optional": 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, - "optional": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "dev": true, - "optional": true - }, - "coffeescript-compiler": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/coffeescript-compiler/-/coffeescript-compiler-0.1.1.tgz", - "integrity": "sha1-gai9RKeL2kIffgtR8o0TyFO+uAU=", - "dev": true, - "optional": true - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "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 - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "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.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "1.1.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" - } - }, - "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 - }, - "constantinople": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", - "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", - "dev": true, - "requires": { - "@types/babel-types": "7.0.2", - "@types/babylon": "6.16.2", - "babel-types": "6.26.0", - "babylon": "6.18.0" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "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": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.12.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "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.3", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "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-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" - }, - "dependencies": { - "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": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "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" - } - } - } - }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true, - "optional": true - }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" - }, - "dependencies": { - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - } - } - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "optional": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "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 - } - } - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "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" - } - }, - "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 - }, - "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.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "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 - }, - "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" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, - "doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", - "dev": true, - "optional": true - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "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.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "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.48", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", - "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "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.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "optional": true, - "requires": { - "prr": "1.0.1" - } - }, - "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" - } - }, - "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.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.4.1", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.5.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.12.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "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", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.5.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.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 - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "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" - } - }, - "globals": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", - "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==", - "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" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "2.6.9", - "resolve": "1.7.1" - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, - "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.12.0.tgz", - "integrity": "sha1-2tMXgSktZmSyUxf9BJ0uKy8CIF0=", - "dev": true, - "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.2.0", - "has": "1.0.2", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.7.1" - }, - "dependencies": { - "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" - } - } - } - }, - "eslint-plugin-node": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", - "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", - "dev": true, - "requires": { - "ignore": "3.3.8", - "minimatch": "3.0.4", - "resolve": "1.7.1", - "semver": "5.5.0" - } - }, - "eslint-plugin-promise": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", - "dev": true - }, - "eslint-plugin-standard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", - "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", - "dev": true - }, - "eslint-plugin-vue": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.5.0.tgz", - "integrity": "sha512-2CDidjAZ875tbJgtjKihIQRkqxgk3gVUDOAW2e9dP+Kf39jhCwKy6aMXIsHRKCPjRqQhDWF0jtVRNcywBFWTZA==", - "dev": true, - "requires": { - "vue-eslint-parser": "2.0.3" - } - }, - "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.1", - "estraverse": "4.2.0" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "5.6.1", - "acorn-jsx": "3.0.1" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "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 - }, - "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.4" - } - }, - "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.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.23", - "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 - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "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 - }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "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.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "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" - } - }, - "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" - } - }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "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.6", - "mime-types": "2.1.18" - } - }, - "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.3" - }, - "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" - } - } - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "optional": true, - "requires": { - "globule": "1.2.1" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true, - "optional": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "optional": true, - "requires": { - "is-property": "1.0.2" - } - }, - "generic-names": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-1.0.3.tgz", - "integrity": "sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=", - "dev": true, - "requires": { - "loader-utils": "0.2.17" - } - }, - "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, - "optional": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "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" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "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" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "minimatch": "3.0.4" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": 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, - "optional": 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, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } - } - }, - "has": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.2.tgz", - "integrity": "sha512-D5/WxwX+SrGfs/fiQn34RAoIZkCLJBDEfBWS1kmTI6G/1mtjhxTBiIiJi8EsKhwaQqKqj7lpKOi3i69tg3P+OQ==", - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "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" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "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" - } - }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", - "dev": true - }, - "html-minifier": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.16.tgz", - "integrity": "sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.11", - "commander": "2.15.1", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.28" - }, - "dependencies": { - "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 - }, - "uglify-js": { - "version": "3.3.28", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", - "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", - "dev": true, - "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" - } - } - } - }, - "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.2", - "domutils": "1.7.0", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "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.14.1" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", - "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, - "optional": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "optional": true, - "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 - }, - "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 - }, - "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.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.10", - "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" - }, - "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 - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "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, - "optional": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-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-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-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", - "dev": true, - "optional": true, - "requires": { - "acorn": "4.0.13", - "object-assign": "4.1.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true, - "optional": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "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-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-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true, - "optional": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "optional": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "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-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.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "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-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-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true, - "optional": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "optional": true, - "requires": { - "has": "1.0.2" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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" - } - }, - "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 - }, - "js-base64": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", - "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", - "dev": true - }, - "js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", - "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.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "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, - "optional": 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, - "optional": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.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 - } - } - }, - "jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", - "dev": true, - "optional": true, - "requires": { - "is-promise": "2.1.0", - "promise": "7.3.1" - } - }, - "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" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "optional": 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, - "optional": true, - "requires": { - "errno": "0.1.7", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.6.0", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.81.0", - "source-map": "0.5.7" - } - }, - "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" - } - }, - "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" - } - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.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.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true, - "optional": true - }, - "lodash.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, - "optional": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true, - "optional": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "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, - "optional": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "dev": true, - "requires": { - "vlq": "0.2.3" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "optional": true, - "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": { - "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, - "optional": 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" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": 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, - "optional": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "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, - "optional": 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, - "optional": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "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, - "optional": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "merge-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", - "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", - "dev": true, - "requires": { - "is-plain-obj": "1.1.0" - } - }, - "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.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "1.33.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "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.11" - } - }, - "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 - }, - "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.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true, - "optional": 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 - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "1.1.4" - } - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true, - "optional": true, - "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.5", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true - } - } - }, - "node-sass": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", - "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", - "dev": true, - "optional": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.3", - "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.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.10.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" - }, - "dependencies": { - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true, - "optional": true - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "4.1.3", - "which": "1.3.1" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "optional": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.15.1", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" - } - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true, - "optional": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "optional": true, - "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.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" - } - }, - "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" - } - }, - "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.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "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.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" - } - }, - "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.2.0" - } - }, - "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" - } - }, - "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, - "optional": 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.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "dev": true, - "requires": { - "p-try": "1.0.0" - } - }, - "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.2.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.2" - } - }, - "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" - } - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "10.3.0" - } - }, - "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-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" - } - }, - "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, - "optional": 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": "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.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "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 - }, - "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-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" - } - }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-modules": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-0.6.4.tgz", - "integrity": "sha1-d6WLt3uhtDkrJwwLWYUv116JqLQ=", - "dev": true, - "requires": { - "css-modules-loader-core": "1.1.0", - "generic-names": "1.0.3", - "postcss": "5.2.18", - "string-hash": "1.1.3" - } - }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "dev": true, - "requires": { - "postcss": "6.0.22" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" - } - }, - "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 - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.22" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" - } - }, - "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 - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.22" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" - } - }, - "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 - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.22" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" - } - }, - "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 - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "posthtml": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.10.1.tgz", - "integrity": "sha512-4OW8nA6kOMyIivdEUL+b4vvSxWDEtQFiSAbM0n0baeSBcb9EQTaD9s1DqT6Qgr46oJZ1aJe8lioZZ5Exr4Ophg==", - "dev": true, - "requires": { - "posthtml-parser": "0.3.3", - "posthtml-render": "1.1.4" - } - }, - "posthtml-attrs-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posthtml-attrs-parser/-/posthtml-attrs-parser-0.1.1.tgz", - "integrity": "sha1-zDPgAVX7mbqW9n4l4zBGHwV0Ksg=", - "dev": true, - "requires": { - "object-assign": "4.1.1" - } - }, - "posthtml-parser": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.3.3.tgz", - "integrity": "sha512-H/Z/yXGwl49A7hYQLV1iQ3h87NE0aZ/PMZhFwhw3lKeCAN+Ti4idrHvVvh4/GX10I7u77aQw+QB4vV5/Lzvv5A==", - "dev": true, - "requires": { - "htmlparser2": "3.9.2", - "isobject": "2.1.0", - "object-assign": "4.1.1" - } - }, - "posthtml-render": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.1.4.tgz", - "integrity": "sha512-jL6eFIzoN3xUEvbo33OAkSDE2VIKU4JQ1wENOows1DpfnrdapR/K3Q1/fB43Mq7wQlcSgRm23nFrvoioufM7eA==", - "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 - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "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, - "optional": true, - "requires": { - "asap": "2.0.6" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "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 - }, - "pug": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", - "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", - "dev": true, - "optional": true, - "requires": { - "pug-code-gen": "2.0.1", - "pug-filters": "3.1.0", - "pug-lexer": "4.0.0", - "pug-linker": "3.0.5", - "pug-load": "2.0.11", - "pug-parser": "5.0.0", - "pug-runtime": "2.0.4", - "pug-strip-comments": "1.0.3" - } - }, - "pug-attrs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", - "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", - "dev": true, - "optional": true, - "requires": { - "constantinople": "3.1.2", - "js-stringify": "1.0.2", - "pug-runtime": "2.0.4" - } - }, - "pug-code-gen": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", - "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", - "dev": true, - "optional": true, - "requires": { - "constantinople": "3.1.2", - "doctypes": "1.1.0", - "js-stringify": "1.0.2", - "pug-attrs": "2.0.3", - "pug-error": "1.3.2", - "pug-runtime": "2.0.4", - "void-elements": "2.0.1", - "with": "5.1.1" - } - }, - "pug-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", - "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=", - "dev": true - }, - "pug-filters": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", - "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", - "dev": true, - "optional": true, - "requires": { - "clean-css": "4.1.11", - "constantinople": "3.1.2", - "jstransformer": "1.0.0", - "pug-error": "1.3.2", - "pug-walk": "1.1.7", - "resolve": "1.7.1", - "uglify-js": "2.8.29" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "pug-lexer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", - "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", - "dev": true, - "optional": true, - "requires": { - "character-parser": "2.2.0", - "is-expression": "3.0.0", - "pug-error": "1.3.2" - } - }, - "pug-linker": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", - "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", - "dev": true, - "optional": true, - "requires": { - "pug-error": "1.3.2", - "pug-walk": "1.1.7" - } - }, - "pug-load": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", - "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", - "dev": true, - "optional": true, - "requires": { - "object-assign": "4.1.1", - "pug-walk": "1.1.7" - } - }, - "pug-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", - "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", - "dev": true, - "optional": true, - "requires": { - "pug-error": "1.3.2", - "token-stream": "0.0.1" - } - }, - "pug-runtime": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", - "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=", - "dev": true - }, - "pug-strip-comments": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", - "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", - "dev": true, - "optional": true, - "requires": { - "pug-error": "1.3.2" - } - }, - "pug-walk": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", - "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "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, - "optional": true - }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, - "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "optional": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "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" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "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.4.0", - "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 - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.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" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "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.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - } - }, - "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, - "optional": true - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true, - "optional": 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.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "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 - }, - "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, - "optional": 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.48.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.48.2.tgz", - "integrity": "sha512-5IOVEA87/OWQlojaAPN0WStLAhlaY7GS/5p+pA/IHReXjtc+d7IJYgRD3Y/U2LVXoD7f1SBc3ymYd4g3M/zRzQ==", - "dev": true - }, - "rollup-plugin-babel": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.4.tgz", - "integrity": "sha512-TGhQbliTZnRoUhd2214K3r4KJUBu9J1DPzcrAnkluVXOVrveU9OvAaYQ16KyOmujAoq+LMC1+x6YF2xBrU7t+g==", - "dev": true, - "requires": { - "rollup-pluginutils": "1.5.2" - } - }, - "rollup-plugin-node-resolve": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz", - "integrity": "sha512-9zHGr3oUJq6G+X0oRMYlzid9fXicBdiydhwGChdyeNRGPcN/majtegApRKHLR5drboUvEWU+QeUmGTyEZQs3WA==", - "dev": true, - "requires": { - "builtin-modules": "2.0.0", - "is-module": "1.0.0", - "resolve": "1.7.1" - }, - "dependencies": { - "builtin-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", - "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", - "dev": true - } - } - }, - "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.4.0" - } - }, - "rollup-plugin-vue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-vue/-/rollup-plugin-vue-3.0.0.tgz", - "integrity": "sha512-gclx1gc7hwDw3PNz627pOWCdhNoBAR6lNp/hcCe4jjE43jrcT50u2/4E4Vp2FRWI4HyaN6RuC3+89dlDJ79xow==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "camelcase": "4.1.0", - "coffee-script": "1.12.7", - "coffeescript-compiler": "0.1.1", - "de-indent": "1.0.2", - "debug": "3.1.0", - "hash-sum": "1.0.2", - "html-minifier": "3.5.16", - "less": "2.7.3", - "magic-string": "0.22.5", - "merge-options": "1.0.1", - "node-sass": "4.9.0", - "parse5": "3.0.3", - "postcss": "5.2.18", - "postcss-load-config": "1.2.0", - "postcss-modules": "0.6.4", - "postcss-selector-parser": "2.2.3", - "posthtml": "0.10.1", - "posthtml-attrs-parser": "0.1.1", - "pug": "2.0.3", - "rollup-pluginutils": "2.3.0", - "stylus": "0.54.5", - "typescript": "2.9.1", - "vue-template-es2015-compiler": "1.6.0", - "vue-template-validator": "1.1.5" - }, - "dependencies": { - "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" - } - }, - "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - }, - "rollup-pluginutils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.0.tgz", - "integrity": "sha512-xB6hsRsjdJdIYWEyYUJy/3ki5g69wrf0luHPGNK3ZSocV6HLNfio59l3dZ3TL4xUwEKgROhFi9jOCt6c5gfUWw==", - "dev": true, - "requires": { - "estree-walker": "0.5.2", - "micromatch": "2.3.11" - } - } - } - }, - "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" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" - } - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true, - "optional": true - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "optional": true, - "requires": { - "js-base64": "2.4.5", - "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, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "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 - }, - "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 - }, - "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.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "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" - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "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 - } - } - }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.3.6" - } - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", - "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" - }, - "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-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" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "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" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "4.0.1" - } - }, - "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 - }, - "stylus": { - "version": "0.54.5", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", - "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", - "dev": true, - "optional": true, - "requires": { - "css-parse": "1.7.0", - "debug": "2.6.9", - "glob": "7.0.6", - "mkdirp": "0.5.1", - "sax": "0.5.8", - "source-map": "0.1.43" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "optional": 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" - } - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "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 - }, - "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.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.4.1", - "lodash": "4.17.10", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "optional": 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 - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "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 - }, - "token-stream": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", - "dev": true, - "optional": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true, - "optional": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", - "dev": true, - "optional": true, - "requires": { - "glob": "6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "optional": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "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 - }, - "typescript": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", - "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", - "dev": true - }, - "uglify-js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.0.tgz", - "integrity": "sha512-Jcf5naPkX3rVPSQpRn9Vm6Rr572I1gTtR9LnqKgXjmOgfYQ/QS0V2WRStFR53Bdj520M66aCZqt9uzYXgtGrJQ==", - "dev": true, - "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" - }, - "dependencies": { - "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 - } - } - }, - "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 - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "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.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "dev": true, - "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" - } - }, - "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 - } - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true, - "optional": true - }, - "vue": { - "version": "2.5.16", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.16.tgz", - "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==" - }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", - "dev": true, - "requires": { - "debug": "3.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "lodash": "4.17.10" - }, - "dependencies": { - "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" - } - } - } - }, - "vue-template-compiler": { - "version": "2.5.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz", - "integrity": "sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==", - "dev": true, - "requires": { - "de-indent": "1.0.2", - "he": "1.1.1" - } - }, - "vue-template-es2015-compiler": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", - "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", - "dev": true - }, - "vue-template-validator": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/vue-template-validator/-/vue-template-validator-1.1.5.tgz", - "integrity": "sha1-ItHud9BkfBqxT/frAYZZQtmzxFg=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "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, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "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, - "optional": true - }, - "with": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", - "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", - "dev": true, - "optional": true, - "requires": { - "acorn": "3.3.0", - "acorn-globals": "3.1.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, - "optional": 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, - "optional": 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, - "optional": 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, - "optional": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.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" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true, - "optional": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true, - "optional": 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": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "optional": 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" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "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, - "optional": 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" - } - }, - "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, - "optional": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "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, - "optional": 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, - "optional": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "optional": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "optional": true, - "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, - "optional": true - } - } - } - } -} From 25c8c140fcf71e57d380fa228ddba21db111ed50 Mon Sep 17 00:00:00 2001 From: Gabriel Lau Date: Tue, 19 Feb 2019 23:50:07 -0300 Subject: [PATCH 4/6] updated GIT and NPM ignore rules --- .gitignore | 7 +++++-- .npmignore | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a7bc3c4..d2c913c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ node_modules/ -dist/ -.package-lock.json +.idea +.vscode .DS_Store + +package-lock.json +yarn.lock diff --git a/.npmignore b/.npmignore index f733c4b..82c49b9 100644 --- a/.npmignore +++ b/.npmignore @@ -1 +1,7 @@ config/ +node_modules/ + +.editorconfig +.vscode + +.DS_Store From 8066bd28f2aacb6d08a85584fd4850ac7505c802 Mon Sep 17 00:00:00 2001 From: Gabriel Lau Date: Tue, 19 Feb 2019 23:50:58 -0300 Subject: [PATCH 5/6] upgraded glidejs version to v3.2.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c71f80c..563a85c 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "author": "jedrzejchalubek (https://jedrzejchalubek.com)", "license": "MIT", "dependencies": { - "@glidejs/glide": "^3.0.1", + "@glidejs/glide": "^3.2.6", "vue": "^2.0.0" }, "devDependencies": { From 3a2da914bd6bf8c0b53da4913febe21d339670d2 Mon Sep 17 00:00:00 2001 From: Gabriel Lau Date: Tue, 19 Feb 2019 23:52:13 -0300 Subject: [PATCH 6/6] upgraded version to 3.1.0 + included /dist directory to fix imports --- dist/vue-glide.esm.js | 3698 ++++++++++++++++++++++++++++++++++++++++ dist/vue-glide.js | 3706 +++++++++++++++++++++++++++++++++++++++++ dist/vue-glide.min.js | 11 + package.json | 2 +- 4 files changed, 7416 insertions(+), 1 deletion(-) create mode 100644 dist/vue-glide.esm.js create mode 100644 dist/vue-glide.js create mode 100644 dist/vue-glide.min.js diff --git a/dist/vue-glide.esm.js b/dist/vue-glide.esm.js new file mode 100644 index 0000000..473a5d4 --- /dev/null +++ b/dist/vue-glide.esm.js @@ -0,0 +1,3698 @@ +/*! + * VueGlide.js v3.1.0 + * (c) 2017-2019 jedrzejchalubek (https://jedrzejchalubek.com) + * Released under the MIT License. + */ + +var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +/*! + * Glide.js v3.2.6 + * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/) + * Released under the MIT License. + */ + +var defaults = { + /** + * Type of the movement. + * + * Available types: + * `slider` - Rewinds slider to the start/end when it reaches the first or last slide. + * `carousel` - Changes slides without starting over when it reaches the first or last slide. + * + * @type {String} + */ + type: 'slider', + + /** + * Start at specific slide number defined with zero-based index. + * + * @type {Number} + */ + startAt: 0, + + /** + * A number of slides visible on the single viewport. + * + * @type {Number} + */ + perView: 1, + + /** + * Focus currently active slide at a specified position in the track. + * + * Available inputs: + * `center` - Current slide will be always focused at the center of a track. + * `0,1,2,3...` - Current slide will be focused on the specified zero-based index. + * + * @type {String|Number} + */ + focusAt: 0, + + /** + * A size of the gap added between slides. + * + * @type {Number} + */ + gap: 10, + + /** + * Change slides after a specified interval. Use `false` for turning off autoplay. + * + * @type {Number|Boolean} + */ + autoplay: false, + + /** + * Stop autoplay on mouseover event. + * + * @type {Boolean} + */ + hoverpause: true, + + /** + * Allow for changing slides with left and right keyboard arrows. + * + * @type {Boolean} + */ + keyboard: true, + + /** + * Stop running `perView` number of slides from the end. Use this + * option if you don't want to have an empty space after + * a slider. Works only with `slider` type and a + * non-centered `focusAt` setting. + * + * @type {Boolean} + */ + bound: false, + + /** + * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping. + * + * @type {Number|Boolean} + */ + swipeThreshold: 80, + + /** + * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging. + * + * @type {Number|Boolean} + */ + dragThreshold: 120, + + /** + * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited. + * + * @type {Number|Boolean} + */ + perTouch: false, + + /** + * Moving distance ratio of the slides on a swiping and dragging. + * + * @type {Number} + */ + touchRatio: 0.5, + + /** + * Angle required to activate slides moving on swiping or dragging. + * + * @type {Number} + */ + touchAngle: 45, + + /** + * Duration of the animation in milliseconds. + * + * @type {Number} + */ + animationDuration: 400, + + /** + * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end. + * + * @type {Boolean} + */ + rewind: true, + + /** + * Duration of the rewinding animation of the `slider` type in milliseconds. + * + * @type {Number} + */ + rewindDuration: 800, + + /** + * Easing function for the animation. + * + * @type {String} + */ + animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)', + + /** + * Throttle costly events at most once per every wait milliseconds. + * + * @type {Number} + */ + throttle: 10, + + /** + * Moving direction mode. + * + * Available inputs: + * - 'ltr' - left to right movement, + * - 'rtl' - right to left movement. + * + * @type {String} + */ + direction: 'ltr', + + /** + * The distance value of the next and previous viewports which + * have to peek in the current view. Accepts number and + * pixels as a string. Left and right peeking can be + * set up separately with a directions object. + * + * For example: + * `100` - Peek 100px on the both sides. + * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side. + * + * @type {Number|String|Object} + */ + peek: 0, + + /** + * Collection of options applied at specified media breakpoints. + * For example: display two slides per view under 800px. + * `{ + * '800px': { + * perView: 2 + * } + * }` + */ + breakpoints: {}, + + /** + * Collection of internally used HTML classes. + * + * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object + * @type {Object} + */ + classes: { + direction: { + ltr: 'glide--ltr', + rtl: 'glide--rtl' + }, + slider: 'glide--slider', + carousel: 'glide--carousel', + swipeable: 'glide--swipeable', + dragging: 'glide--dragging', + cloneSlide: 'glide__slide--clone', + activeNav: 'glide__bullet--active', + activeSlide: 'glide__slide--active', + disabledArrow: 'glide__arrow--disabled' + } +}; + +/** + * Outputs warning message to the bowser console. + * + * @param {String} msg + * @return {Void} + */ +function warn(msg) { + console.error("[Glide warn]: " + msg); +} + +var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { + return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj); +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj); +}; + +var classCallCheck = function classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +var get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } else { + return get(parent, property, receiver); + } + } else if ("value" in desc) { + return desc.value; + } else { + var getter = desc.get; + + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); + } +}; + +var inherits = function inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass))); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + +var possibleConstructorReturn = function possibleConstructorReturn(self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === "object" || typeof call === "function") ? call : self; +}; + +/** + * Converts value entered as number + * or string to integer value. + * + * @param {String} value + * @returns {Number} + */ +function toInt(value) { + return parseInt(value); +} + +/** + * Converts value entered as number + * or string to flat value. + * + * @param {String} value + * @returns {Number} + */ +function toFloat(value) { + return parseFloat(value); +} + +/** + * Indicates whether the specified value is a string. + * + * @param {*} value + * @return {Boolean} + */ +function isString(value) { + return typeof value === 'string'; +} + +/** + * Indicates whether the specified value is an object. + * + * @param {*} value + * @return {Boolean} + * + * @see https://github.com/jashkenas/underscore + */ +function isObject(value) { + var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); + + return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators +} + +/** + * Indicates whether the specified value is a number. + * + * @param {*} value + * @return {Boolean} + */ +function isNumber(value) { + return typeof value === 'number'; +} + +/** + * Indicates whether the specified value is a function. + * + * @param {*} value + * @return {Boolean} + */ +function isFunction(value) { + return typeof value === 'function'; +} + +/** + * Indicates whether the specified value is undefined. + * + * @param {*} value + * @return {Boolean} + */ +function isUndefined(value) { + return typeof value === 'undefined'; +} + +/** + * Indicates whether the specified value is an array. + * + * @param {*} value + * @return {Boolean} + */ +function isArray(value) { + return value.constructor === Array; +} + +/** + * Creates and initializes specified collection of extensions. + * Each extension receives access to instance of glide and rest of components. + * + * @param {Object} glide + * @param {Object} extensions + * + * @returns {Object} + */ +function mount(glide, extensions, events) { + var components = {}; + + for (var name in extensions) { + if (isFunction(extensions[name])) { + components[name] = extensions[name](glide, components, events); + } else { + warn('Extension must be a function'); + } + } + + for (var _name in components) { + if (isFunction(components[_name].mount)) { + components[_name].mount(); + } + } + + return components; +} + +/** + * Defines getter and setter property on the specified object. + * + * @param {Object} obj Object where property has to be defined. + * @param {String} prop Name of the defined property. + * @param {Object} definition Get and set definitions for the property. + * @return {Void} + */ +function define(obj, prop, definition) { + Object.defineProperty(obj, prop, definition); +} + +/** + * Sorts aphabetically object keys. + * + * @param {Object} obj + * @return {Object} + */ +function sortKeys(obj) { + return Object.keys(obj).sort().reduce(function (r, k) { + r[k] = obj[k]; + + return r[k], r; + }, {}); +} + +/** + * Merges passed settings object with default options. + * + * @param {Object} defaults + * @param {Object} settings + * @return {Object} + */ +function mergeOptions(defaults, settings) { + var options = _extends({}, defaults, settings); + + // `Object.assign` do not deeply merge objects, so we + // have to do it manually for every nested object + // in options. Although it does not look smart, + // it's smaller and faster than some fancy + // merging deep-merge algorithm script. + if (settings.hasOwnProperty('classes')) { + options.classes = _extends({}, defaults.classes, settings.classes); + + if (settings.classes.hasOwnProperty('direction')) { + options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction); + } + } + + if (settings.hasOwnProperty('breakpoints')) { + options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints); + } + + return options; +} + +var EventsBus = function () { + /** + * Construct a EventBus instance. + * + * @param {Object} events + */ + function EventsBus() { + var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, EventsBus); + + this.events = events; + this.hop = events.hasOwnProperty; + } + + /** + * Adds listener to the specifed event. + * + * @param {String|Array} event + * @param {Function} handler + */ + + createClass(EventsBus, [{ + key: 'on', + value: function on(event, handler) { + if (isArray(event)) { + for (var i = 0; i < event.length; i++) { + this.on(event[i], handler); + } + } + + // Create the event's object if not yet created + if (!this.hop.call(this.events, event)) { + this.events[event] = []; + } + + // Add the handler to queue + var index = this.events[event].push(handler) - 1; + + // Provide handle back for removal of event + return { + remove: function remove() { + delete this.events[event][index]; + } + }; + } + + /** + * Runs registered handlers for specified event. + * + * @param {String|Array} event + * @param {Object=} context + */ + + }, { + key: 'emit', + value: function emit(event, context) { + if (isArray(event)) { + for (var i = 0; i < event.length; i++) { + this.emit(event[i], context); + } + } + + // If the event doesn't exist, or there's no handlers in queue, just leave + if (!this.hop.call(this.events, event)) { + return; + } + + // Cycle through events queue, fire! + this.events[event].forEach(function (item) { + item(context || {}); + }); + } + }]); + return EventsBus; +}(); + +var Glide$1 = function () { + /** + * Construct glide. + * + * @param {String} selector + * @param {Object} options + */ + function Glide(selector) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, Glide); + + this._c = {}; + this._t = []; + this._e = new EventsBus(); + + this.disabled = false; + this.selector = selector; + this.settings = mergeOptions(defaults, options); + this.index = this.settings.startAt; + } + + /** + * Initializes glide. + * + * @param {Object} extensions Collection of extensions to initialize. + * @return {Glide} + */ + + createClass(Glide, [{ + key: 'mount', + value: function mount$$1() { + var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this._e.emit('mount.before'); + + if (isObject(extensions)) { + this._c = mount(this, extensions, this._e); + } else { + warn('You need to provide a object on `mount()`'); + } + + this._e.emit('mount.after'); + + return this; + } + + /** + * Collects an instance `translate` transformers. + * + * @param {Array} transformers Collection of transformers. + * @return {Void} + */ + + }, { + key: 'mutate', + value: function mutate() { + var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + if (isArray(transformers)) { + this._t = transformers; + } else { + warn('You need to provide a array on `mutate()`'); + } + + return this; + } + + /** + * Updates glide with specified settings. + * + * @param {Object} settings + * @return {Glide} + */ + + }, { + key: 'update', + value: function update() { + var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.settings = mergeOptions(this.settings, settings); + + if (settings.hasOwnProperty('startAt')) { + this.index = settings.startAt; + } + + this._e.emit('update'); + + return this; + } + + /** + * Change slide with specified pattern. A pattern must be in the special format: + * `>` - Move one forward + * `<` - Move one backward + * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide) + * `>>` - Rewinds to end (last slide) + * `<<` - Rewinds to start (first slide) + * + * @param {String} pattern + * @return {Glide} + */ + + }, { + key: 'go', + value: function go(pattern) { + this._c.Run.make(pattern); + + return this; + } + + /** + * Move track by specified distance. + * + * @param {String} distance + * @return {Glide} + */ + + }, { + key: 'move', + value: function move(distance) { + this._c.Transition.disable(); + this._c.Move.make(distance); + + return this; + } + + /** + * Destroy instance and revert all changes done by this._c. + * + * @return {Glide} + */ + + }, { + key: 'destroy', + value: function destroy() { + this._e.emit('destroy'); + + return this; + } + + /** + * Start instance autoplaying. + * + * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings + * @return {Glide} + */ + + }, { + key: 'play', + value: function play() { + var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (interval) { + this.settings.autoplay = interval; + } + + this._e.emit('play'); + + return this; + } + + /** + * Stop instance autoplaying. + * + * @return {Glide} + */ + + }, { + key: 'pause', + value: function pause() { + this._e.emit('pause'); + + return this; + } + + /** + * Sets glide into a idle status. + * + * @return {Glide} + */ + + }, { + key: 'disable', + value: function disable() { + this.disabled = true; + + return this; + } + + /** + * Sets glide into a active status. + * + * @return {Glide} + */ + + }, { + key: 'enable', + value: function enable() { + this.disabled = false; + + return this; + } + + /** + * Adds cuutom event listener with handler. + * + * @param {String|Array} event + * @param {Function} handler + * @return {Glide} + */ + + }, { + key: 'on', + value: function on(event, handler) { + this._e.on(event, handler); + + return this; + } + + /** + * Checks if glide is a precised type. + * + * @param {String} name + * @return {Boolean} + */ + + }, { + key: 'isType', + value: function isType(name) { + return this.settings.type === name; + } + + /** + * Gets value of the core options. + * + * @return {Object} + */ + + }, { + key: 'settings', + get: function get$$1() { + return this._o; + } + + /** + * Sets value of the core options. + * + * @param {Object} o + * @return {Void} + */ + + , set: function set$$1(o) { + if (isObject(o)) { + this._o = o; + } else { + warn('Options must be an `object` instance.'); + } + } + + /** + * Gets current index of the slider. + * + * @return {Object} + */ + + }, { + key: 'index', + get: function get$$1() { + return this._i; + } + + /** + * Sets current index a slider. + * + * @return {Object} + */ + + , set: function set$$1(i) { + this._i = toInt(i); + } + + /** + * Gets type name of the slider. + * + * @return {String} + */ + + }, { + key: 'type', + get: function get$$1() { + return this.settings.type; + } + + /** + * Gets value of the idle status. + * + * @return {Boolean} + */ + + }, { + key: 'disabled', + get: function get$$1() { + return this._d; + } + + /** + * Sets value of the idle status. + * + * @return {Boolean} + */ + + , set: function set$$1(status) { + this._d = !!status; + } + }]); + return Glide; +}(); + +function Run(Glide, Components, Events) { + var Run = { + /** + * Initializes autorunning of the glide. + * + * @return {Void} + */ + mount: function mount() { + this._o = false; + }, + + /** + * Makes glides running based on the passed moving schema. + * + * @param {String} move + */ + make: function make(move) { + var _this = this; + + if (!Glide.disabled) { + Glide.disable(); + + this.move = move; + + Events.emit('run.before', this.move); + + this.calculate(); + + Events.emit('run', this.move); + + Components.Transition.after(function () { + if (_this.isOffset('<') || _this.isOffset('>')) { + _this._o = false; + + Events.emit('run.offset', _this.move); + } + + Events.emit('run.after', _this.move); + + Glide.enable(); + }); + } + }, + + /** + * Calculates current index based on defined move. + * + * @return {Void} + */ + calculate: function calculate() { + var move = this.move, + length = this.length; + var steps = move.steps, + direction = move.direction; + + var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0; + + switch (direction) { + case '>': + if (steps === '>') { + Glide.index = length; + } else if (this.isEnd()) { + if (!(Glide.isType('slider') && !Glide.settings.rewind)) { + this._o = true; + + Glide.index = 0; + } + + Events.emit('run.end', move); + } else if (countableSteps) { + Glide.index += Math.min(length - Glide.index, -toInt(steps)); + } else { + Glide.index++; + } + break; + + case '<': + if (steps === '<') { + Glide.index = 0; + } else if (this.isStart()) { + if (!(Glide.isType('slider') && !Glide.settings.rewind)) { + this._o = true; + + Glide.index = length; + } + + Events.emit('run.start', move); + } else if (countableSteps) { + Glide.index -= Math.min(Glide.index, toInt(steps)); + } else { + Glide.index--; + } + break; + + case '=': + Glide.index = steps; + break; + } + }, + + /** + * Checks if we are on the first slide. + * + * @return {Boolean} + */ + isStart: function isStart() { + return Glide.index === 0; + }, + + /** + * Checks if we are on the last slide. + * + * @return {Boolean} + */ + isEnd: function isEnd() { + return Glide.index === this.length; + }, + + /** + * Checks if we are making a offset run. + * + * @param {String} direction + * @return {Boolean} + */ + isOffset: function isOffset(direction) { + return this._o && this.move.direction === direction; + } + }; + + define(Run, 'move', { + /** + * Gets value of the move schema. + * + * @returns {Object} + */ + get: function get() { + return this._m; + }, + + /** + * Sets value of the move schema. + * + * @returns {Object} + */ + set: function set(value) { + this._m = { + direction: value.substr(0, 1), + steps: value.substr(1) ? value.substr(1) : 0 + }; + } + }); + + define(Run, 'length', { + /** + * Gets value of the running distance based + * on zero-indexing number of slides. + * + * @return {Number} + */ + get: function get() { + var settings = Glide.settings; + var length = Components.Html.slides.length; + + // If the `bound` option is acitve, a maximum running distance should be + // reduced by `perView` and `focusAt` settings. Running distance + // should end before creating an empty space after instance. + + if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) { + return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt); + } + + return length - 1; + } + }); + + define(Run, 'offset', { + /** + * Gets status of the offsetting flag. + * + * @return {Boolean} + */ + get: function get() { + return this._o; + } + }); + + return Run; +} + +/** + * Returns a current time. + * + * @return {Number} + */ +function now() { + return new Date().getTime(); +} + +/** + * Returns a function, that, when invoked, will only be triggered + * at most once during a given window of time. + * + * @param {Function} func + * @param {Number} wait + * @param {Object=} options + * @return {Function} + * + * @see https://github.com/jashkenas/underscore + */ +function throttle(func, wait, options) { + var timeout = void 0, + context = void 0, + args = void 0, + result = void 0; + var previous = 0; + if (!options) options = {}; + + var later = function later() { + previous = options.leading === false ? 0 : now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function throttled() { + var at = now(); + if (!previous && options.leading === false) previous = at; + var remaining = wait - (at - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = at; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function () { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; +} + +var MARGIN_TYPE = { + ltr: ['marginLeft', 'marginRight'], + rtl: ['marginRight', 'marginLeft'] +}; + +function Gaps(Glide, Components, Events) { + var Gaps = { + /** + * Applies gaps between slides. First and last + * slides do not receive it's edge margins. + * + * @param {HTMLCollection} slides + * @return {Void} + */ + apply: function apply(slides) { + for (var i = 0, len = slides.length; i < len; i++) { + var style = slides[i].style; + var direction = Components.Direction.value; + + if (i !== 0) { + style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px'; + } else { + style[MARGIN_TYPE[direction][0]] = ''; + } + + if (i !== slides.length - 1) { + style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px'; + } else { + style[MARGIN_TYPE[direction][1]] = ''; + } + } + }, + + /** + * Removes gaps from the slides. + * + * @param {HTMLCollection} slides + * @returns {Void} + */ + remove: function remove(slides) { + for (var i = 0, len = slides.length; i < len; i++) { + var style = slides[i].style; + + style.marginLeft = ''; + style.marginRight = ''; + } + } + }; + + define(Gaps, 'value', { + /** + * Gets value of the gap. + * + * @returns {Number} + */ + get: function get() { + return toInt(Glide.settings.gap); + } + }); + + define(Gaps, 'grow', { + /** + * Gets additional dimentions value caused by gaps. + * Used to increase width of the slides wrapper. + * + * @returns {Number} + */ + get: function get() { + return Gaps.value * (Components.Sizes.length - 1); + } + }); + + define(Gaps, 'reductor', { + /** + * Gets reduction value caused by gaps. + * Used to subtract width of the slides. + * + * @returns {Number} + */ + get: function get() { + var perView = Glide.settings.perView; + + return Gaps.value * (perView - 1) / perView; + } + }); + + /** + * Apply calculated gaps: + * - after building, so slides (including clones) will receive proper margins + * - on updating via API, to recalculate gaps with new options + */ + Events.on(['build.after', 'update'], throttle(function () { + Gaps.apply(Components.Html.wrapper.children); + }, 30)); + + /** + * Remove gaps: + * - on destroying to bring markup to its inital state + */ + Events.on('destroy', function () { + Gaps.remove(Components.Html.wrapper.children); + }); + + return Gaps; +} + +/** + * Finds siblings nodes of the passed node. + * + * @param {Element} node + * @return {Array} + */ +function siblings(node) { + if (node && node.parentNode) { + var n = node.parentNode.firstChild; + var matched = []; + + for (; n; n = n.nextSibling) { + if (n.nodeType === 1 && n !== node) { + matched.push(n); + } + } + + return matched; + } + + return []; +} + +/** + * Checks if passed node exist and is a valid element. + * + * @param {Element} node + * @return {Boolean} + */ +function exist(node) { + if (node && node instanceof window.HTMLElement) { + return true; + } + + return false; +} + +var TRACK_SELECTOR = '[data-glide-el="track"]'; + +function Html(Glide, Components) { + var Html = { + /** + * Setup slider HTML nodes. + * + * @param {Glide} glide + */ + mount: function mount() { + this.root = Glide.selector; + this.track = this.root.querySelector(TRACK_SELECTOR); + this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) { + return !slide.classList.contains(Glide.settings.classes.cloneSlide); + }); + } + }; + + define(Html, 'root', { + /** + * Gets node of the glide main element. + * + * @return {Object} + */ + get: function get() { + return Html._r; + }, + + /** + * Sets node of the glide main element. + * + * @return {Object} + */ + set: function set(r) { + if (isString(r)) { + r = document.querySelector(r); + } + + if (exist(r)) { + Html._r = r; + } else { + warn('Root element must be a existing Html node'); + } + } + }); + + define(Html, 'track', { + /** + * Gets node of the glide track with slides. + * + * @return {Object} + */ + get: function get() { + return Html._t; + }, + + /** + * Sets node of the glide track with slides. + * + * @return {Object} + */ + set: function set(t) { + if (exist(t)) { + Html._t = t; + } else { + warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.'); + } + } + }); + + define(Html, 'wrapper', { + /** + * Gets node of the slides wrapper. + * + * @return {Object} + */ + get: function get() { + return Html.track.children[0]; + } + }); + + return Html; +} + +function Peek(Glide, Components, Events) { + var Peek = { + /** + * Setups how much to peek based on settings. + * + * @return {Void} + */ + mount: function mount() { + this.value = Glide.settings.peek; + } + }; + + define(Peek, 'value', { + /** + * Gets value of the peek. + * + * @returns {Number|Object} + */ + get: function get() { + return Peek._v; + }, + + /** + * Sets value of the peek. + * + * @param {Number|Object} value + * @return {Void} + */ + set: function set(value) { + if (isObject(value)) { + value.before = toInt(value.before); + value.after = toInt(value.after); + } else { + value = toInt(value); + } + + Peek._v = value; + } + }); + + define(Peek, 'reductor', { + /** + * Gets reduction value caused by peek. + * + * @returns {Number} + */ + get: function get() { + var value = Peek.value; + var perView = Glide.settings.perView; + + if (isObject(value)) { + return value.before / perView + value.after / perView; + } + + return value * 2 / perView; + } + }); + + /** + * Recalculate peeking sizes on: + * - when resizing window to update to proper percents + */ + Events.on(['resize', 'update'], function () { + Peek.mount(); + }); + + return Peek; +} + +function Move(Glide, Components, Events) { + var Move = { + /** + * Constructs move component. + * + * @returns {Void} + */ + mount: function mount() { + this._o = 0; + }, + + /** + * Calculates a movement value based on passed offset and currently active index. + * + * @param {Number} offset + * @return {Void} + */ + make: function make() { + var _this = this; + + var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + this.offset = offset; + + Events.emit('move', { + movement: this.value + }); + + Components.Transition.after(function () { + Events.emit('move.after', { + movement: _this.value + }); + }); + } + }; + + define(Move, 'offset', { + /** + * Gets an offset value used to modify current translate. + * + * @return {Object} + */ + get: function get() { + return Move._o; + }, + + /** + * Sets an offset value used to modify current translate. + * + * @return {Object} + */ + set: function set(value) { + Move._o = !isUndefined(value) ? toInt(value) : 0; + } + }); + + define(Move, 'translate', { + /** + * Gets a raw movement value. + * + * @return {Number} + */ + get: function get() { + return Components.Sizes.slideWidth * Glide.index; + } + }); + + define(Move, 'value', { + /** + * Gets an actual movement value corrected by offset. + * + * @return {Number} + */ + get: function get() { + var offset = this.offset; + var translate = this.translate; + + if (Components.Direction.is('rtl')) { + return translate + offset; + } + + return translate - offset; + } + }); + + /** + * Make movement to proper slide on: + * - before build, so glide will start at `startAt` index + * - on each standard run to move to newly calculated index + */ + Events.on(['build.before', 'run'], function () { + Move.make(); + }); + + return Move; +} + +function Sizes(Glide, Components, Events) { + var Sizes = { + /** + * Setups dimentions of slides. + * + * @return {Void} + */ + setupSlides: function setupSlides() { + var width = this.slideWidth + 'px'; + var slides = Components.Html.slides; + + for (var i = 0; i < slides.length; i++) { + slides[i].style.width = width; + } + }, + + /** + * Setups dimentions of slides wrapper. + * + * @return {Void} + */ + setupWrapper: function setupWrapper(dimention) { + Components.Html.wrapper.style.width = this.wrapperSize + 'px'; + }, + + /** + * Removes applied styles from HTML elements. + * + * @returns {Void} + */ + remove: function remove() { + var slides = Components.Html.slides; + + for (var i = 0; i < slides.length; i++) { + slides[i].style.width = ''; + } + + Components.Html.wrapper.style.width = ''; + } + }; + + define(Sizes, 'length', { + /** + * Gets count number of the slides. + * + * @return {Number} + */ + get: function get() { + return Components.Html.slides.length; + } + }); + + define(Sizes, 'width', { + /** + * Gets width value of the glide. + * + * @return {Number} + */ + get: function get() { + return Components.Html.root.offsetWidth; + } + }); + + define(Sizes, 'wrapperSize', { + /** + * Gets size of the slides wrapper. + * + * @return {Number} + */ + get: function get() { + return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow; + } + }); + + define(Sizes, 'slideWidth', { + /** + * Gets width value of the single slide. + * + * @return {Number} + */ + get: function get() { + return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor; + } + }); + + /** + * Apply calculated glide's dimensions: + * - before building, so other dimentions (e.g. translate) will be calculated propertly + * - when resizing window to recalculate sildes dimensions + * - on updating via API, to calculate dimensions based on new options + */ + Events.on(['build.before', 'resize', 'update'], function () { + Sizes.setupSlides(); + Sizes.setupWrapper(); + }); + + /** + * Remove calculated glide's dimensions: + * - on destoting to bring markup to its inital state + */ + Events.on('destroy', function () { + Sizes.remove(); + }); + + return Sizes; +} + +function Build(Glide, Components, Events) { + var Build = { + /** + * Init glide building. Adds classes, sets + * dimensions and setups initial state. + * + * @return {Void} + */ + mount: function mount() { + Events.emit('build.before'); + + this.typeClass(); + this.activeClass(); + + Events.emit('build.after'); + }, + + /** + * Adds `type` class to the glide element. + * + * @return {Void} + */ + typeClass: function typeClass() { + Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]); + }, + + /** + * Sets active class to current slide. + * + * @return {Void} + */ + activeClass: function activeClass() { + var classes = Glide.settings.classes; + var slide = Components.Html.slides[Glide.index]; + + if (slide) { + slide.classList.add(classes.activeSlide); + + siblings(slide).forEach(function (sibling) { + sibling.classList.remove(classes.activeSlide); + }); + } + }, + + /** + * Removes HTML classes applied at building. + * + * @return {Void} + */ + removeClasses: function removeClasses() { + var classes = Glide.settings.classes; + + Components.Html.root.classList.remove(classes[Glide.settings.type]); + + Components.Html.slides.forEach(function (sibling) { + sibling.classList.remove(classes.activeSlide); + }); + } + }; + + /** + * Clear building classes: + * - on destroying to bring HTML to its initial state + * - on updating to remove classes before remounting component + */ + Events.on(['destroy', 'update'], function () { + Build.removeClasses(); + }); + + /** + * Remount component: + * - on resizing of the window to calculate new dimentions + * - on updating settings via API + */ + Events.on(['resize', 'update'], function () { + Build.mount(); + }); + + /** + * Swap active class of current slide: + * - after each move to the new index + */ + Events.on('move.after', function () { + Build.activeClass(); + }); + + return Build; +} + +function Clones(Glide, Components, Events) { + var Clones = { + /** + * Create pattern map and collect slides to be cloned. + */ + mount: function mount() { + this.items = []; + + if (Glide.isType('carousel')) { + this.items = this.collect(); + } + }, + + /** + * Collect clones with pattern. + * + * @return {Void} + */ + collect: function collect() { + var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var slides = Components.Html.slides; + var _Glide$settings = Glide.settings, + perView = _Glide$settings.perView, + classes = _Glide$settings.classes; + + var peekIncrementer = +!!Glide.settings.peek; + var part = perView + peekIncrementer; + var start = slides.slice(0, part); + var end = slides.slice(-part); + + for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) { + for (var i = 0; i < start.length; i++) { + var clone = start[i].cloneNode(true); + + clone.classList.add(classes.cloneSlide); + + items.push(clone); + } + + for (var _i = 0; _i < end.length; _i++) { + var _clone = end[_i].cloneNode(true); + + _clone.classList.add(classes.cloneSlide); + + items.unshift(_clone); + } + } + + return items; + }, + + /** + * Append cloned slides with generated pattern. + * + * @return {Void} + */ + append: function append() { + var items = this.items; + var _Components$Html = Components.Html, + wrapper = _Components$Html.wrapper, + slides = _Components$Html.slides; + + var half = Math.floor(items.length / 2); + var prepend = items.slice(0, half).reverse(); + var append = items.slice(half, items.length); + var width = Components.Sizes.slideWidth + 'px'; + + for (var i = 0; i < append.length; i++) { + wrapper.appendChild(append[i]); + } + + for (var _i2 = 0; _i2 < prepend.length; _i2++) { + wrapper.insertBefore(prepend[_i2], slides[0]); + } + + for (var _i3 = 0; _i3 < items.length; _i3++) { + items[_i3].style.width = width; + } + }, + + /** + * Remove all cloned slides. + * + * @return {Void} + */ + remove: function remove() { + var items = this.items; + + for (var i = 0; i < items.length; i++) { + Components.Html.wrapper.removeChild(items[i]); + } + } + }; + + define(Clones, 'grow', { + /** + * Gets additional dimentions value caused by clones. + * + * @return {Number} + */ + get: function get() { + return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length; + } + }); + + /** + * Append additional slide's clones: + * - while glide's type is `carousel` + */ + Events.on('update', function () { + Clones.remove(); + Clones.mount(); + Clones.append(); + }); + + /** + * Append additional slide's clones: + * - while glide's type is `carousel` + */ + Events.on('build.before', function () { + if (Glide.isType('carousel')) { + Clones.append(); + } + }); + + /** + * Remove clones HTMLElements: + * - on destroying, to bring HTML to its initial state + */ + Events.on('destroy', function () { + Clones.remove(); + }); + + return Clones; +} + +var EventsBinder = function () { + /** + * Construct a EventsBinder instance. + */ + function EventsBinder() { + var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, EventsBinder); + + this.listeners = listeners; + } + + /** + * Adds events listeners to arrows HTML elements. + * + * @param {String|Array} events + * @param {Element|Window|Document} el + * @param {Function} closure + * @param {Boolean|Object} capture + * @return {Void} + */ + + createClass(EventsBinder, [{ + key: 'on', + value: function on(events, el, closure) { + var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + if (isString(events)) { + events = [events]; + } + + for (var i = 0; i < events.length; i++) { + this.listeners[events[i]] = closure; + + el.addEventListener(events[i], this.listeners[events[i]], capture); + } + } + + /** + * Removes event listeners from arrows HTML elements. + * + * @param {String|Array} events + * @param {Element|Window|Document} el + * @param {Boolean|Object} capture + * @return {Void} + */ + + }, { + key: 'off', + value: function off(events, el) { + var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + if (isString(events)) { + events = [events]; + } + + for (var i = 0; i < events.length; i++) { + el.removeEventListener(events[i], this.listeners[events[i]], capture); + } + } + + /** + * Destroy collected listeners. + * + * @returns {Void} + */ + + }, { + key: 'destroy', + value: function destroy() { + delete this.listeners; + } + }]); + return EventsBinder; +}(); + +function Resize(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Resize = { + /** + * Initializes window bindings. + */ + mount: function mount() { + this.bind(); + }, + + /** + * Binds `rezsize` listener to the window. + * It's a costly event, so we are debouncing it. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('resize', window, throttle(function () { + Events.emit('resize'); + }, Glide.settings.throttle)); + }, + + /** + * Unbinds listeners from the window. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('resize', window); + } + }; + + /** + * Remove bindings from window: + * - on destroying, to remove added EventListener + */ + Events.on('destroy', function () { + Resize.unbind(); + Binder.destroy(); + }); + + return Resize; +} + +var VALID_DIRECTIONS = ['ltr', 'rtl']; +var FLIPED_MOVEMENTS = { + '>': '<', + '<': '>', + '=': '=' +}; + +function Direction(Glide, Components, Events) { + var Direction = { + /** + * Setups gap value based on settings. + * + * @return {Void} + */ + mount: function mount() { + this.value = Glide.settings.direction; + }, + + /** + * Resolves pattern based on direction value + * + * @param {String} pattern + * @returns {String} + */ + resolve: function resolve(pattern) { + var token = pattern.slice(0, 1); + + if (this.is('rtl')) { + return pattern.split(token).join(FLIPED_MOVEMENTS[token]); + } + + return pattern; + }, + + /** + * Checks value of direction mode. + * + * @param {String} direction + * @returns {Boolean} + */ + is: function is(direction) { + return this.value === direction; + }, + + /** + * Applies direction class to the root HTML element. + * + * @return {Void} + */ + addClass: function addClass() { + Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]); + }, + + /** + * Removes direction class from the root HTML element. + * + * @return {Void} + */ + removeClass: function removeClass() { + Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]); + } + }; + + define(Direction, 'value', { + /** + * Gets value of the direction. + * + * @returns {Number} + */ + get: function get() { + return Direction._v; + }, + + /** + * Sets value of the direction. + * + * @param {String} value + * @return {Void} + */ + set: function set(value) { + if (VALID_DIRECTIONS.indexOf(value) > -1) { + Direction._v = value; + } else { + warn('Direction value must be `ltr` or `rtl`'); + } + } + }); + + /** + * Clear direction class: + * - on destroy to bring HTML to its initial state + * - on update to remove class before reappling bellow + */ + Events.on(['destroy', 'update'], function () { + Direction.removeClass(); + }); + + /** + * Remount component: + * - on update to reflect changes in direction value + */ + Events.on('update', function () { + Direction.mount(); + }); + + /** + * Apply direction class: + * - before building to apply class for the first time + * - on updating to reapply direction class that may changed + */ + Events.on(['build.before', 'update'], function () { + Direction.addClass(); + }); + + return Direction; +} + +/** + * Reflects value of glide movement. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Rtl(Glide, Components) { + return { + /** + * Negates the passed translate if glide is in RTL option. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + if (Components.Direction.is('rtl')) { + return -translate; + } + + return translate; + } + }; +} + +/** + * Updates glide movement with a `gap` settings. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Gap(Glide, Components) { + return { + /** + * Modifies passed translate value with number in the `gap` settings. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + return translate + Components.Gaps.value * Glide.index; + } + }; +} + +/** + * Updates glide movement with width of additional clones width. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Grow(Glide, Components) { + return { + /** + * Adds to the passed translate width of the half of clones. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + return translate + Components.Clones.grow / 2; + } + }; +} + +/** + * Updates glide movement with a `peek` settings. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Peeking(Glide, Components) { + return { + /** + * Modifies passed translate value with a `peek` setting. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + if (Glide.settings.focusAt >= 0) { + var peek = Components.Peek.value; + + if (isObject(peek)) { + return translate - peek.before; + } + + return translate - peek; + } + + return translate; + } + }; +} + +/** + * Updates glide movement with a `focusAt` settings. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Focusing(Glide, Components) { + return { + /** + * Modifies passed translate value with index in the `focusAt` setting. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + var gap = Components.Gaps.value; + var width = Components.Sizes.width; + var focusAt = Glide.settings.focusAt; + var slideWidth = Components.Sizes.slideWidth; + + if (focusAt === 'center') { + return translate - (width / 2 - slideWidth / 2); + } + + return translate - slideWidth * focusAt - gap * focusAt; + } + }; +} + +/** + * Applies diffrent transformers on translate value. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function mutator(Glide, Components, Events) { + /** + * Merge instance transformers with collection of default transformers. + * It's important that the Rtl component be last on the list, + * so it reflects all previous transformations. + * + * @type {Array} + */ + var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]); + + return { + /** + * Piplines translate value with registered transformers. + * + * @param {Number} translate + * @return {Number} + */ + mutate: function mutate(translate) { + for (var i = 0; i < TRANSFORMERS.length; i++) { + var transformer = TRANSFORMERS[i]; + + if (isFunction(transformer) && isFunction(transformer().modify)) { + translate = transformer(Glide, Components, Events).modify(translate); + } else { + warn('Transformer should be a function that returns an object with `modify()` method'); + } + } + + return translate; + } + }; +} + +function Translate(Glide, Components, Events) { + var Translate = { + /** + * Sets value of translate on HTML element. + * + * @param {Number} value + * @return {Void} + */ + set: function set(value) { + var transform = mutator(Glide, Components).mutate(value); + + Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)'; + }, + + /** + * Removes value of translate from HTML element. + * + * @return {Void} + */ + remove: function remove() { + Components.Html.wrapper.style.transform = ''; + } + }; + + /** + * Set new translate value: + * - on move to reflect index change + * - on updating via API to reflect possible changes in options + */ + Events.on('move', function (context) { + var gap = Components.Gaps.value; + var length = Components.Sizes.length; + var width = Components.Sizes.slideWidth; + + if (Glide.isType('carousel') && Components.Run.isOffset('<')) { + Components.Transition.after(function () { + Events.emit('translate.jump'); + + Translate.set(width * (length - 1)); + }); + + return Translate.set(-width - gap * length); + } + + if (Glide.isType('carousel') && Components.Run.isOffset('>')) { + Components.Transition.after(function () { + Events.emit('translate.jump'); + + Translate.set(0); + }); + + return Translate.set(width * length + gap * length); + } + + return Translate.set(context.movement); + }); + + /** + * Remove translate: + * - on destroying to bring markup to its inital state + */ + Events.on('destroy', function () { + Translate.remove(); + }); + + return Translate; +} + +function Transition(Glide, Components, Events) { + /** + * Holds inactivity status of transition. + * When true transition is not applied. + * + * @type {Boolean} + */ + var disabled = false; + + var Transition = { + /** + * Composes string of the CSS transition. + * + * @param {String} property + * @return {String} + */ + compose: function compose(property) { + var settings = Glide.settings; + + if (!disabled) { + return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc; + } + + return property + ' 0ms ' + settings.animationTimingFunc; + }, + + /** + * Sets value of transition on HTML element. + * + * @param {String=} property + * @return {Void} + */ + set: function set() { + var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform'; + + Components.Html.wrapper.style.transition = this.compose(property); + }, + + /** + * Removes value of transition from HTML element. + * + * @return {Void} + */ + remove: function remove() { + Components.Html.wrapper.style.transition = ''; + }, + + /** + * Runs callback after animation. + * + * @param {Function} callback + * @return {Void} + */ + after: function after(callback) { + setTimeout(function () { + callback(); + }, this.duration); + }, + + /** + * Enable transition. + * + * @return {Void} + */ + enable: function enable() { + disabled = false; + + this.set(); + }, + + /** + * Disable transition. + * + * @return {Void} + */ + disable: function disable() { + disabled = true; + + this.set(); + } + }; + + define(Transition, 'duration', { + /** + * Gets duration of the transition based + * on currently running animation type. + * + * @return {Number} + */ + get: function get() { + var settings = Glide.settings; + + if (Glide.isType('slider') && Components.Run.offset) { + return settings.rewindDuration; + } + + return settings.animationDuration; + } + }); + + /** + * Set transition `style` value: + * - on each moving, because it may be cleared by offset move + */ + Events.on('move', function () { + Transition.set(); + }); + + /** + * Disable transition: + * - before initial build to avoid transitioning from `0` to `startAt` index + * - while resizing window and recalculating dimentions + * - on jumping from offset transition at start and end edges in `carousel` type + */ + Events.on(['build.before', 'resize', 'translate.jump'], function () { + Transition.disable(); + }); + + /** + * Enable transition: + * - on each running, because it may be disabled by offset move + */ + Events.on('run', function () { + Transition.enable(); + }); + + /** + * Remove transition: + * - on destroying to bring markup to its inital state + */ + Events.on('destroy', function () { + Transition.remove(); + }); + + return Transition; +} + +/** + * Test via a getter in the options object to see + * if the passive property is accessed. + * + * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + */ + +var supportsPassive = false; + +try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + } + }); + + window.addEventListener('testPassive', null, opts); + window.removeEventListener('testPassive', null, opts); +} catch (e) {} + +var supportsPassive$1 = supportsPassive; + +var START_EVENTS = ['touchstart', 'mousedown']; +var MOVE_EVENTS = ['touchmove', 'mousemove']; +var END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave']; +var MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave']; + +function Swipe(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var swipeSin = 0; + var swipeStartX = 0; + var swipeStartY = 0; + var disabled = false; + var moveable = true; + var capture = supportsPassive$1 ? { passive: true } : false; + + var Swipe = { + /** + * Initializes swipe bindings. + * + * @return {Void} + */ + mount: function mount() { + this.bindSwipeStart(); + }, + + /** + * Handler for `swipestart` event. Calculates entry points of the user's tap. + * + * @param {Object} event + * @return {Void} + */ + start: function start(event) { + if (!disabled && !Glide.disabled) { + this.disable(); + + var swipe = this.touches(event); + + moveable = true; + swipeSin = null; + swipeStartX = toInt(swipe.pageX); + swipeStartY = toInt(swipe.pageY); + + this.bindSwipeMove(); + this.bindSwipeEnd(); + + Events.emit('swipe.start'); + } + }, + + /** + * Handler for `swipemove` event. Calculates user's tap angle and distance. + * + * @param {Object} event + */ + move: function move(event) { + if (!Glide.disabled) { + var _Glide$settings = Glide.settings, + touchAngle = _Glide$settings.touchAngle, + touchRatio = _Glide$settings.touchRatio, + classes = _Glide$settings.classes; + + var swipe = this.touches(event); + + var subExSx = toInt(swipe.pageX) - swipeStartX; + var subEySy = toInt(swipe.pageY) - swipeStartY; + var powEX = Math.abs(subExSx << 2); + var powEY = Math.abs(subEySy << 2); + var swipeHypotenuse = Math.sqrt(powEX + powEY); + var swipeCathetus = Math.sqrt(powEY); + + swipeSin = Math.asin(swipeCathetus / swipeHypotenuse); + + if (moveable && swipeSin * 180 / Math.PI < touchAngle) { + event.stopPropagation(); + + Components.Move.make(subExSx * toFloat(touchRatio)); + + Components.Html.root.classList.add(classes.dragging); + + Events.emit('swipe.move'); + } else { + moveable = false; + + return false; + } + } + }, + + /** + * Handler for `swipeend` event. Finitializes user's tap and decides about glide move. + * + * @param {Object} event + * @return {Void} + */ + end: function end(event) { + if (!Glide.disabled) { + var settings = Glide.settings; + + var swipe = this.touches(event); + var threshold = this.threshold(event); + + var swipeDistance = swipe.pageX - swipeStartX; + var swipeDeg = swipeSin * 180 / Math.PI; + var steps = Math.round(swipeDistance / Components.Sizes.slideWidth); + + this.enable(); + + if (moveable) { + if (swipeDistance > threshold && swipeDeg < settings.touchAngle) { + // While swipe is positive and greater than threshold move backward. + if (settings.perTouch) { + steps = Math.min(steps, toInt(settings.perTouch)); + } + + if (Components.Direction.is('rtl')) { + steps = -steps; + } + + Components.Run.make(Components.Direction.resolve('<' + steps)); + } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) { + // While swipe is negative and lower than negative threshold move forward. + if (settings.perTouch) { + steps = Math.max(steps, -toInt(settings.perTouch)); + } + + if (Components.Direction.is('rtl')) { + steps = -steps; + } + + Components.Run.make(Components.Direction.resolve('>' + steps)); + } else { + // While swipe don't reach distance apply previous transform. + Components.Move.make(); + } + } + + Components.Html.root.classList.remove(settings.classes.dragging); + + this.unbindSwipeMove(); + this.unbindSwipeEnd(); + + Events.emit('swipe.end'); + } + }, + + /** + * Binds swipe's starting event. + * + * @return {Void} + */ + bindSwipeStart: function bindSwipeStart() { + var _this = this; + + var settings = Glide.settings; + + if (settings.swipeThreshold) { + Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) { + _this.start(event); + }, capture); + } + + if (settings.dragThreshold) { + Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) { + _this.start(event); + }, capture); + } + }, + + /** + * Unbinds swipe's starting event. + * + * @return {Void} + */ + unbindSwipeStart: function unbindSwipeStart() { + Binder.off(START_EVENTS[0], Components.Html.wrapper, capture); + Binder.off(START_EVENTS[1], Components.Html.wrapper, capture); + }, + + /** + * Binds swipe's moving event. + * + * @return {Void} + */ + bindSwipeMove: function bindSwipeMove() { + var _this2 = this; + + Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) { + _this2.move(event); + }, Glide.settings.throttle), capture); + }, + + /** + * Unbinds swipe's moving event. + * + * @return {Void} + */ + unbindSwipeMove: function unbindSwipeMove() { + Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture); + }, + + /** + * Binds swipe's ending event. + * + * @return {Void} + */ + bindSwipeEnd: function bindSwipeEnd() { + var _this3 = this; + + Binder.on(END_EVENTS, Components.Html.wrapper, function (event) { + _this3.end(event); + }); + }, + + /** + * Unbinds swipe's ending event. + * + * @return {Void} + */ + unbindSwipeEnd: function unbindSwipeEnd() { + Binder.off(END_EVENTS, Components.Html.wrapper); + }, + + /** + * Normalizes event touches points accorting to different types. + * + * @param {Object} event + */ + touches: function touches(event) { + if (MOUSE_EVENTS.indexOf(event.type) > -1) { + return event; + } + + return event.touches[0] || event.changedTouches[0]; + }, + + /** + * Gets value of minimum swipe distance settings based on event type. + * + * @return {Number} + */ + threshold: function threshold(event) { + var settings = Glide.settings; + + if (MOUSE_EVENTS.indexOf(event.type) > -1) { + return settings.dragThreshold; + } + + return settings.swipeThreshold; + }, + + /** + * Enables swipe event. + * + * @return {self} + */ + enable: function enable() { + disabled = false; + + Components.Transition.enable(); + + return this; + }, + + /** + * Disables swipe event. + * + * @return {self} + */ + disable: function disable() { + disabled = true; + + Components.Transition.disable(); + + return this; + } + }; + + /** + * Add component class: + * - after initial building + */ + Events.on('build.after', function () { + Components.Html.root.classList.add(Glide.settings.classes.swipeable); + }); + + /** + * Remove swiping bindings: + * - on destroying, to remove added EventListeners + */ + Events.on('destroy', function () { + Swipe.unbindSwipeStart(); + Swipe.unbindSwipeMove(); + Swipe.unbindSwipeEnd(); + Binder.destroy(); + }); + + return Swipe; +} + +function Images(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Images = { + /** + * Binds listener to glide wrapper. + * + * @return {Void} + */ + mount: function mount() { + this.bind(); + }, + + /** + * Binds `dragstart` event on wrapper to prevent dragging images. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('dragstart', Components.Html.wrapper, this.dragstart); + }, + + /** + * Unbinds `dragstart` event on wrapper. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('dragstart', Components.Html.wrapper); + }, + + /** + * Event handler. Prevents dragging. + * + * @return {Void} + */ + dragstart: function dragstart(event) { + event.preventDefault(); + } + }; + + /** + * Remove bindings from images: + * - on destroying, to remove added EventListeners + */ + Events.on('destroy', function () { + Images.unbind(); + Binder.destroy(); + }); + + return Images; +} + +function Anchors(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + /** + * Holds detaching status of anchors. + * Prevents detaching of already detached anchors. + * + * @private + * @type {Boolean} + */ + var detached = false; + + /** + * Holds preventing status of anchors. + * If `true` redirection after click will be disabled. + * + * @private + * @type {Boolean} + */ + var prevented = false; + + var Anchors = { + /** + * Setups a initial state of anchors component. + * + * @returns {Void} + */ + mount: function mount() { + /** + * Holds collection of anchors elements. + * + * @private + * @type {HTMLCollection} + */ + this._a = Components.Html.wrapper.querySelectorAll('a'); + + this.bind(); + }, + + /** + * Binds events to anchors inside a track. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('click', Components.Html.wrapper, this.click); + }, + + /** + * Unbinds events attached to anchors inside a track. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('click', Components.Html.wrapper); + }, + + /** + * Handler for click event. Prevents clicks when glide is in `prevent` status. + * + * @param {Object} event + * @return {Void} + */ + click: function click(event) { + if (prevented) { + event.stopPropagation(); + event.preventDefault(); + } + }, + + /** + * Detaches anchors click event inside glide. + * + * @return {self} + */ + detach: function detach() { + prevented = true; + + if (!detached) { + for (var i = 0; i < this.items.length; i++) { + this.items[i].draggable = false; + + this.items[i].setAttribute('data-href', this.items[i].getAttribute('href')); + + this.items[i].removeAttribute('href'); + } + + detached = true; + } + + return this; + }, + + /** + * Attaches anchors click events inside glide. + * + * @return {self} + */ + attach: function attach() { + prevented = false; + + if (detached) { + for (var i = 0; i < this.items.length; i++) { + this.items[i].draggable = true; + + this.items[i].setAttribute('href', this.items[i].getAttribute('data-href')); + } + + detached = false; + } + + return this; + } + }; + + define(Anchors, 'items', { + /** + * Gets collection of the arrows HTML elements. + * + * @return {HTMLElement[]} + */ + get: function get() { + return Anchors._a; + } + }); + + /** + * Detach anchors inside slides: + * - on swiping, so they won't redirect to its `href` attributes + */ + Events.on('swipe.move', function () { + Anchors.detach(); + }); + + /** + * Attach anchors inside slides: + * - after swiping and transitions ends, so they can redirect after click again + */ + Events.on('swipe.end', function () { + Components.Transition.after(function () { + Anchors.attach(); + }); + }); + + /** + * Unbind anchors inside slides: + * - on destroying, to bring anchors to its initial state + */ + Events.on('destroy', function () { + Anchors.attach(); + Anchors.unbind(); + Binder.destroy(); + }); + + return Anchors; +} + +var NAV_SELECTOR = '[data-glide-el="controls[nav]"]'; +var CONTROLS_SELECTOR = '[data-glide-el^="controls"]'; + +function Controls(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Controls = { + /** + * Inits arrows. Binds events listeners + * to the arrows HTML elements. + * + * @return {Void} + */ + mount: function mount() { + /** + * Collection of navigation HTML elements. + * + * @private + * @type {HTMLCollection} + */ + this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR); + + /** + * Collection of controls HTML elements. + * + * @private + * @type {HTMLCollection} + */ + this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR); + + this.addBindings(); + }, + + /** + * Sets active class to current slide. + * + * @return {Void} + */ + setActive: function setActive() { + for (var i = 0; i < this._n.length; i++) { + this.addClass(this._n[i].children); + } + }, + + /** + * Removes active class to current slide. + * + * @return {Void} + */ + removeActive: function removeActive() { + for (var i = 0; i < this._n.length; i++) { + this.removeClass(this._n[i].children); + } + }, + + /** + * Toggles active class on items inside navigation. + * + * @param {HTMLElement} controls + * @return {Void} + */ + addClass: function addClass(controls) { + var settings = Glide.settings; + var item = controls[Glide.index]; + + item.classList.add(settings.classes.activeNav); + + siblings(item).forEach(function (sibling) { + sibling.classList.remove(settings.classes.activeNav); + }); + }, + + /** + * Removes active class from active control. + * + * @param {HTMLElement} controls + * @return {Void} + */ + removeClass: function removeClass(controls) { + controls[Glide.index].classList.remove(Glide.settings.classes.activeNav); + }, + + /** + * Adds handles to the each group of controls. + * + * @return {Void} + */ + addBindings: function addBindings() { + for (var i = 0; i < this._c.length; i++) { + this.bind(this._c[i].children); + } + }, + + /** + * Removes handles from the each group of controls. + * + * @return {Void} + */ + removeBindings: function removeBindings() { + for (var i = 0; i < this._c.length; i++) { + this.unbind(this._c[i].children); + } + }, + + /** + * Binds events to arrows HTML elements. + * + * @param {HTMLCollection} elements + * @return {Void} + */ + bind: function bind(elements) { + for (var i = 0; i < elements.length; i++) { + Binder.on(['click', 'touchstart'], elements[i], this.click); + } + }, + + /** + * Unbinds events binded to the arrows HTML elements. + * + * @param {HTMLCollection} elements + * @return {Void} + */ + unbind: function unbind(elements) { + for (var i = 0; i < elements.length; i++) { + Binder.off(['click', 'touchstart'], elements[i]); + } + }, + + /** + * Handles `click` event on the arrows HTML elements. + * Moves slider in driection precised in + * `data-glide-dir` attribute. + * + * @param {Object} event + * @return {Void} + */ + click: function click(event) { + event.preventDefault(); + + Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir'))); + } + }; + + define(Controls, 'items', { + /** + * Gets collection of the controls HTML elements. + * + * @return {HTMLElement[]} + */ + get: function get() { + return Controls._c; + } + }); + + /** + * Swap active class of current navigation item: + * - after mounting to set it to initial index + * - after each move to the new index + */ + Events.on(['mount.after', 'move.after'], function () { + Controls.setActive(); + }); + + /** + * Remove bindings and HTML Classes: + * - on destroying, to bring markup to its initial state + */ + Events.on('destroy', function () { + Controls.removeBindings(); + Controls.removeActive(); + Binder.destroy(); + }); + + return Controls; +} + +function Keyboard(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Keyboard = { + /** + * Binds keyboard events on component mount. + * + * @return {Void} + */ + mount: function mount() { + if (Glide.settings.keyboard) { + this.bind(); + } + }, + + /** + * Adds keyboard press events. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('keyup', document, this.press); + }, + + /** + * Removes keyboard press events. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('keyup', document); + }, + + /** + * Handles keyboard's arrows press and moving glide foward and backward. + * + * @param {Object} event + * @return {Void} + */ + press: function press(event) { + if (event.keyCode === 39) { + Components.Run.make(Components.Direction.resolve('>')); + } + + if (event.keyCode === 37) { + Components.Run.make(Components.Direction.resolve('<')); + } + } + }; + + /** + * Remove bindings from keyboard: + * - on destroying to remove added events + * - on updating to remove events before remounting + */ + Events.on(['destroy', 'update'], function () { + Keyboard.unbind(); + }); + + /** + * Remount component + * - on updating to reflect potential changes in settings + */ + Events.on('update', function () { + Keyboard.mount(); + }); + + /** + * Destroy binder: + * - on destroying to remove listeners + */ + Events.on('destroy', function () { + Binder.destroy(); + }); + + return Keyboard; +} + +function Autoplay(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Autoplay = { + /** + * Initializes autoplaying and events. + * + * @return {Void} + */ + mount: function mount() { + this.start(); + + if (Glide.settings.hoverpause) { + this.bind(); + } + }, + + /** + * Starts autoplaying in configured interval. + * + * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings + * @return {Void} + */ + start: function start() { + var _this = this; + + if (Glide.settings.autoplay) { + if (isUndefined(this._i)) { + this._i = setInterval(function () { + _this.stop(); + + Components.Run.make('>'); + + _this.start(); + }, this.time); + } + } + }, + + /** + * Stops autorunning of the glide. + * + * @return {Void} + */ + stop: function stop() { + this._i = clearInterval(this._i); + }, + + /** + * Stops autoplaying while mouse is over glide's area. + * + * @return {Void} + */ + bind: function bind() { + var _this2 = this; + + Binder.on('mouseover', Components.Html.root, function () { + _this2.stop(); + }); + + Binder.on('mouseout', Components.Html.root, function () { + _this2.start(); + }); + }, + + /** + * Unbind mouseover events. + * + * @returns {Void} + */ + unbind: function unbind() { + Binder.off(['mouseover', 'mouseout'], Components.Html.root); + } + }; + + define(Autoplay, 'time', { + /** + * Gets time period value for the autoplay interval. Prioritizes + * times in `data-glide-autoplay` attrubutes over options. + * + * @return {Number} + */ + get: function get() { + var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay'); + + if (autoplay) { + return toInt(autoplay); + } + + return toInt(Glide.settings.autoplay); + } + }); + + /** + * Stop autoplaying and unbind events: + * - on destroying, to clear defined interval + * - on updating via API to reset interval that may changed + */ + Events.on(['destroy', 'update'], function () { + Autoplay.unbind(); + }); + + /** + * Stop autoplaying: + * - before each run, to restart autoplaying + * - on pausing via API + * - on destroying, to clear defined interval + * - while starting a swipe + * - on updating via API to reset interval that may changed + */ + Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () { + Autoplay.stop(); + }); + + /** + * Start autoplaying: + * - after each run, to restart autoplaying + * - on playing via API + * - while ending a swipe + */ + Events.on(['run.after', 'play', 'swipe.end'], function () { + Autoplay.start(); + }); + + /** + * Remount autoplaying: + * - on updating via API to reset interval that may changed + */ + Events.on('update', function () { + Autoplay.mount(); + }); + + /** + * Destroy a binder: + * - on destroying glide instance to clearup listeners + */ + Events.on('destroy', function () { + Binder.destroy(); + }); + + return Autoplay; +} + +/** + * Sorts keys of breakpoint object so they will be ordered from lower to bigger. + * + * @param {Object} points + * @returns {Object} + */ +function sortBreakpoints(points) { + if (isObject(points)) { + return sortKeys(points); + } else { + warn('Breakpoints option must be an object'); + } + + return {}; +} + +function Breakpoints(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + /** + * Holds reference to settings. + * + * @type {Object} + */ + var settings = Glide.settings; + + /** + * Holds reference to breakpoints object in settings. Sorts breakpoints + * from smaller to larger. It is required in order to proper + * matching currently active breakpoint settings. + * + * @type {Object} + */ + var points = sortBreakpoints(settings.breakpoints); + + /** + * Cache initial settings before overwritting. + * + * @type {Object} + */ + var defaults = _extends({}, settings); + + var Breakpoints = { + /** + * Matches settings for currectly matching media breakpoint. + * + * @param {Object} points + * @returns {Object} + */ + match: function match(points) { + if (typeof window.matchMedia !== 'undefined') { + for (var point in points) { + if (points.hasOwnProperty(point)) { + if (window.matchMedia('(max-width: ' + point + 'px)').matches) { + return points[point]; + } + } + } + } + + return defaults; + } + }; + + /** + * Overwrite instance settings with currently matching breakpoint settings. + * This happens right after component initialization. + */ + _extends(settings, Breakpoints.match(points)); + + /** + * Update glide with settings of matched brekpoint: + * - window resize to update slider + */ + Binder.on('resize', window, throttle(function () { + Glide.settings = mergeOptions(settings, Breakpoints.match(points)); + }, Glide.settings.throttle)); + + /** + * Resort and update default settings: + * - on reinit via API, so breakpoint matching will be performed with options + */ + Events.on('update', function () { + points = sortBreakpoints(points); + + defaults = _extends({}, settings); + }); + + /** + * Unbind resize listener: + * - on destroying, to bring markup to its initial state + */ + Events.on('destroy', function () { + Binder.off('resize', window); + }); + + return Breakpoints; +} + +var COMPONENTS = { + // Required + Html: Html, + Translate: Translate, + Transition: Transition, + Direction: Direction, + Peek: Peek, + Sizes: Sizes, + Gaps: Gaps, + Move: Move, + Clones: Clones, + Resize: Resize, + Build: Build, + Run: Run, + + // Optional + Swipe: Swipe, + Images: Images, + Anchors: Anchors, + Controls: Controls, + Keyboard: Keyboard, + Autoplay: Autoplay, + Breakpoints: Breakpoints +}; + +var Glide$1$1 = function (_Core) { + inherits(Glide$$1, _Core); + + function Glide$$1() { + classCallCheck(this, Glide$$1); + return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments)); + } + + createClass(Glide$$1, [{ + key: 'mount', + value: function mount() { + var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions)); + } + }]); + return Glide$$1; +}(Glide$1); + +var Events = ['mount.before', 'mount.after', 'update', 'play', 'pause', 'build.before', 'build.after', 'run.before', 'run', 'run.after', 'run.offset', 'run.start', 'run.end', 'move', 'move.after', 'resize', 'swipe.start', 'swipe.move', 'swipe.end', 'translate.jump']; + +(function () { + if (typeof document !== 'undefined') { + var head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'), + css = "";style.type = 'text/css';if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + }head.appendChild(style); + } +})(); + +var Glide = { render: function render() { + var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('div', { staticClass: "glide" }, [_vm._t("default")], 2); + }, staticRenderFns: [], + name: 'Glide', + + props: { + settings: { + type: Object, + default: function _default() {} + }, + delayInitialization: { + type: Boolean, + default: false + } + }, + + methods: { + go: function go(pattern) { + this.glide.go(pattern); + }, + init: function init() { + this.glide.mount(); + } + }, + + data: function data() { + return { + glide: undefined + }; + }, + mounted: function mounted() { + var _this = this; + + this.glide = new Glide$1$1(this.$el, this.settings); + + Events.forEach(function (event) { + _this.glide.on(event, function () { + for (var _len = arguments.length, parameters = Array(_len), _key = 0; _key < _len; _key++) { + parameters[_key] = arguments[_key]; + } + + var emmiter = event.replace(/\.([a-z])/g, function (m, w) { + return w.toUpperCase(); + }); + + _this.$emit.apply(_this, [emmiter].concat(parameters)); + }); + }); + + if (!this.delayInitialization) { + this.init(); + } + } +}; + +(function () { + if (typeof document !== 'undefined') { + var head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'), + css = "";style.type = 'text/css';if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + }head.appendChild(style); + } +})(); + +var Track = { render: function render() { + var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('div', { staticClass: "glide__track", attrs: { "data-glide-el": "track" } }, [_c('ul', { staticClass: "glide__slides" }, [_vm._t("default")], 2)]); + }, staticRenderFns: [], + name: 'GlideTrack' +}; + +(function () { + if (typeof document !== 'undefined') { + var head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'), + css = "";style.type = 'text/css';if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + }head.appendChild(style); + } +})(); + +var Slide = { render: function render() { + var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('li', { staticClass: "glide__slide" }, [_vm._t("default")], 2); + }, staticRenderFns: [], + name: 'GlideSlide' +}; + +var index = { + install: function install(Vue, options) { + Vue.component(Glide.name, Glide); + Vue.component(Track.name, Track); + Vue.component(Slide.name, Slide); + } +}; + +export default index; diff --git a/dist/vue-glide.js b/dist/vue-glide.js new file mode 100644 index 0000000..225b677 --- /dev/null +++ b/dist/vue-glide.js @@ -0,0 +1,3706 @@ +/*! + * VueGlide.js v3.1.0 + * (c) 2017-2019 jedrzejchalubek (https://jedrzejchalubek.com) + * Released under the MIT License. + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.VueGlide = factory()); +}(this, (function () { 'use strict'; + +var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +/*! + * Glide.js v3.2.6 + * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/) + * Released under the MIT License. + */ + +var defaults = { + /** + * Type of the movement. + * + * Available types: + * `slider` - Rewinds slider to the start/end when it reaches the first or last slide. + * `carousel` - Changes slides without starting over when it reaches the first or last slide. + * + * @type {String} + */ + type: 'slider', + + /** + * Start at specific slide number defined with zero-based index. + * + * @type {Number} + */ + startAt: 0, + + /** + * A number of slides visible on the single viewport. + * + * @type {Number} + */ + perView: 1, + + /** + * Focus currently active slide at a specified position in the track. + * + * Available inputs: + * `center` - Current slide will be always focused at the center of a track. + * `0,1,2,3...` - Current slide will be focused on the specified zero-based index. + * + * @type {String|Number} + */ + focusAt: 0, + + /** + * A size of the gap added between slides. + * + * @type {Number} + */ + gap: 10, + + /** + * Change slides after a specified interval. Use `false` for turning off autoplay. + * + * @type {Number|Boolean} + */ + autoplay: false, + + /** + * Stop autoplay on mouseover event. + * + * @type {Boolean} + */ + hoverpause: true, + + /** + * Allow for changing slides with left and right keyboard arrows. + * + * @type {Boolean} + */ + keyboard: true, + + /** + * Stop running `perView` number of slides from the end. Use this + * option if you don't want to have an empty space after + * a slider. Works only with `slider` type and a + * non-centered `focusAt` setting. + * + * @type {Boolean} + */ + bound: false, + + /** + * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping. + * + * @type {Number|Boolean} + */ + swipeThreshold: 80, + + /** + * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging. + * + * @type {Number|Boolean} + */ + dragThreshold: 120, + + /** + * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited. + * + * @type {Number|Boolean} + */ + perTouch: false, + + /** + * Moving distance ratio of the slides on a swiping and dragging. + * + * @type {Number} + */ + touchRatio: 0.5, + + /** + * Angle required to activate slides moving on swiping or dragging. + * + * @type {Number} + */ + touchAngle: 45, + + /** + * Duration of the animation in milliseconds. + * + * @type {Number} + */ + animationDuration: 400, + + /** + * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end. + * + * @type {Boolean} + */ + rewind: true, + + /** + * Duration of the rewinding animation of the `slider` type in milliseconds. + * + * @type {Number} + */ + rewindDuration: 800, + + /** + * Easing function for the animation. + * + * @type {String} + */ + animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)', + + /** + * Throttle costly events at most once per every wait milliseconds. + * + * @type {Number} + */ + throttle: 10, + + /** + * Moving direction mode. + * + * Available inputs: + * - 'ltr' - left to right movement, + * - 'rtl' - right to left movement. + * + * @type {String} + */ + direction: 'ltr', + + /** + * The distance value of the next and previous viewports which + * have to peek in the current view. Accepts number and + * pixels as a string. Left and right peeking can be + * set up separately with a directions object. + * + * For example: + * `100` - Peek 100px on the both sides. + * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side. + * + * @type {Number|String|Object} + */ + peek: 0, + + /** + * Collection of options applied at specified media breakpoints. + * For example: display two slides per view under 800px. + * `{ + * '800px': { + * perView: 2 + * } + * }` + */ + breakpoints: {}, + + /** + * Collection of internally used HTML classes. + * + * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object + * @type {Object} + */ + classes: { + direction: { + ltr: 'glide--ltr', + rtl: 'glide--rtl' + }, + slider: 'glide--slider', + carousel: 'glide--carousel', + swipeable: 'glide--swipeable', + dragging: 'glide--dragging', + cloneSlide: 'glide__slide--clone', + activeNav: 'glide__bullet--active', + activeSlide: 'glide__slide--active', + disabledArrow: 'glide__arrow--disabled' + } +}; + +/** + * Outputs warning message to the bowser console. + * + * @param {String} msg + * @return {Void} + */ +function warn(msg) { + console.error("[Glide warn]: " + msg); +} + +var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { + return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj); +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj); +}; + +var classCallCheck = function classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +var get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } else { + return get(parent, property, receiver); + } + } else if ("value" in desc) { + return desc.value; + } else { + var getter = desc.get; + + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); + } +}; + +var inherits = function inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass))); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + +var possibleConstructorReturn = function possibleConstructorReturn(self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === "object" || typeof call === "function") ? call : self; +}; + +/** + * Converts value entered as number + * or string to integer value. + * + * @param {String} value + * @returns {Number} + */ +function toInt(value) { + return parseInt(value); +} + +/** + * Converts value entered as number + * or string to flat value. + * + * @param {String} value + * @returns {Number} + */ +function toFloat(value) { + return parseFloat(value); +} + +/** + * Indicates whether the specified value is a string. + * + * @param {*} value + * @return {Boolean} + */ +function isString(value) { + return typeof value === 'string'; +} + +/** + * Indicates whether the specified value is an object. + * + * @param {*} value + * @return {Boolean} + * + * @see https://github.com/jashkenas/underscore + */ +function isObject(value) { + var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); + + return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators +} + +/** + * Indicates whether the specified value is a number. + * + * @param {*} value + * @return {Boolean} + */ +function isNumber(value) { + return typeof value === 'number'; +} + +/** + * Indicates whether the specified value is a function. + * + * @param {*} value + * @return {Boolean} + */ +function isFunction(value) { + return typeof value === 'function'; +} + +/** + * Indicates whether the specified value is undefined. + * + * @param {*} value + * @return {Boolean} + */ +function isUndefined(value) { + return typeof value === 'undefined'; +} + +/** + * Indicates whether the specified value is an array. + * + * @param {*} value + * @return {Boolean} + */ +function isArray(value) { + return value.constructor === Array; +} + +/** + * Creates and initializes specified collection of extensions. + * Each extension receives access to instance of glide and rest of components. + * + * @param {Object} glide + * @param {Object} extensions + * + * @returns {Object} + */ +function mount(glide, extensions, events) { + var components = {}; + + for (var name in extensions) { + if (isFunction(extensions[name])) { + components[name] = extensions[name](glide, components, events); + } else { + warn('Extension must be a function'); + } + } + + for (var _name in components) { + if (isFunction(components[_name].mount)) { + components[_name].mount(); + } + } + + return components; +} + +/** + * Defines getter and setter property on the specified object. + * + * @param {Object} obj Object where property has to be defined. + * @param {String} prop Name of the defined property. + * @param {Object} definition Get and set definitions for the property. + * @return {Void} + */ +function define(obj, prop, definition) { + Object.defineProperty(obj, prop, definition); +} + +/** + * Sorts aphabetically object keys. + * + * @param {Object} obj + * @return {Object} + */ +function sortKeys(obj) { + return Object.keys(obj).sort().reduce(function (r, k) { + r[k] = obj[k]; + + return r[k], r; + }, {}); +} + +/** + * Merges passed settings object with default options. + * + * @param {Object} defaults + * @param {Object} settings + * @return {Object} + */ +function mergeOptions(defaults, settings) { + var options = _extends({}, defaults, settings); + + // `Object.assign` do not deeply merge objects, so we + // have to do it manually for every nested object + // in options. Although it does not look smart, + // it's smaller and faster than some fancy + // merging deep-merge algorithm script. + if (settings.hasOwnProperty('classes')) { + options.classes = _extends({}, defaults.classes, settings.classes); + + if (settings.classes.hasOwnProperty('direction')) { + options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction); + } + } + + if (settings.hasOwnProperty('breakpoints')) { + options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints); + } + + return options; +} + +var EventsBus = function () { + /** + * Construct a EventBus instance. + * + * @param {Object} events + */ + function EventsBus() { + var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, EventsBus); + + this.events = events; + this.hop = events.hasOwnProperty; + } + + /** + * Adds listener to the specifed event. + * + * @param {String|Array} event + * @param {Function} handler + */ + + createClass(EventsBus, [{ + key: 'on', + value: function on(event, handler) { + if (isArray(event)) { + for (var i = 0; i < event.length; i++) { + this.on(event[i], handler); + } + } + + // Create the event's object if not yet created + if (!this.hop.call(this.events, event)) { + this.events[event] = []; + } + + // Add the handler to queue + var index = this.events[event].push(handler) - 1; + + // Provide handle back for removal of event + return { + remove: function remove() { + delete this.events[event][index]; + } + }; + } + + /** + * Runs registered handlers for specified event. + * + * @param {String|Array} event + * @param {Object=} context + */ + + }, { + key: 'emit', + value: function emit(event, context) { + if (isArray(event)) { + for (var i = 0; i < event.length; i++) { + this.emit(event[i], context); + } + } + + // If the event doesn't exist, or there's no handlers in queue, just leave + if (!this.hop.call(this.events, event)) { + return; + } + + // Cycle through events queue, fire! + this.events[event].forEach(function (item) { + item(context || {}); + }); + } + }]); + return EventsBus; +}(); + +var Glide$1 = function () { + /** + * Construct glide. + * + * @param {String} selector + * @param {Object} options + */ + function Glide(selector) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, Glide); + + this._c = {}; + this._t = []; + this._e = new EventsBus(); + + this.disabled = false; + this.selector = selector; + this.settings = mergeOptions(defaults, options); + this.index = this.settings.startAt; + } + + /** + * Initializes glide. + * + * @param {Object} extensions Collection of extensions to initialize. + * @return {Glide} + */ + + createClass(Glide, [{ + key: 'mount', + value: function mount$$1() { + var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this._e.emit('mount.before'); + + if (isObject(extensions)) { + this._c = mount(this, extensions, this._e); + } else { + warn('You need to provide a object on `mount()`'); + } + + this._e.emit('mount.after'); + + return this; + } + + /** + * Collects an instance `translate` transformers. + * + * @param {Array} transformers Collection of transformers. + * @return {Void} + */ + + }, { + key: 'mutate', + value: function mutate() { + var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + if (isArray(transformers)) { + this._t = transformers; + } else { + warn('You need to provide a array on `mutate()`'); + } + + return this; + } + + /** + * Updates glide with specified settings. + * + * @param {Object} settings + * @return {Glide} + */ + + }, { + key: 'update', + value: function update() { + var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.settings = mergeOptions(this.settings, settings); + + if (settings.hasOwnProperty('startAt')) { + this.index = settings.startAt; + } + + this._e.emit('update'); + + return this; + } + + /** + * Change slide with specified pattern. A pattern must be in the special format: + * `>` - Move one forward + * `<` - Move one backward + * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide) + * `>>` - Rewinds to end (last slide) + * `<<` - Rewinds to start (first slide) + * + * @param {String} pattern + * @return {Glide} + */ + + }, { + key: 'go', + value: function go(pattern) { + this._c.Run.make(pattern); + + return this; + } + + /** + * Move track by specified distance. + * + * @param {String} distance + * @return {Glide} + */ + + }, { + key: 'move', + value: function move(distance) { + this._c.Transition.disable(); + this._c.Move.make(distance); + + return this; + } + + /** + * Destroy instance and revert all changes done by this._c. + * + * @return {Glide} + */ + + }, { + key: 'destroy', + value: function destroy() { + this._e.emit('destroy'); + + return this; + } + + /** + * Start instance autoplaying. + * + * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings + * @return {Glide} + */ + + }, { + key: 'play', + value: function play() { + var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (interval) { + this.settings.autoplay = interval; + } + + this._e.emit('play'); + + return this; + } + + /** + * Stop instance autoplaying. + * + * @return {Glide} + */ + + }, { + key: 'pause', + value: function pause() { + this._e.emit('pause'); + + return this; + } + + /** + * Sets glide into a idle status. + * + * @return {Glide} + */ + + }, { + key: 'disable', + value: function disable() { + this.disabled = true; + + return this; + } + + /** + * Sets glide into a active status. + * + * @return {Glide} + */ + + }, { + key: 'enable', + value: function enable() { + this.disabled = false; + + return this; + } + + /** + * Adds cuutom event listener with handler. + * + * @param {String|Array} event + * @param {Function} handler + * @return {Glide} + */ + + }, { + key: 'on', + value: function on(event, handler) { + this._e.on(event, handler); + + return this; + } + + /** + * Checks if glide is a precised type. + * + * @param {String} name + * @return {Boolean} + */ + + }, { + key: 'isType', + value: function isType(name) { + return this.settings.type === name; + } + + /** + * Gets value of the core options. + * + * @return {Object} + */ + + }, { + key: 'settings', + get: function get$$1() { + return this._o; + } + + /** + * Sets value of the core options. + * + * @param {Object} o + * @return {Void} + */ + + , set: function set$$1(o) { + if (isObject(o)) { + this._o = o; + } else { + warn('Options must be an `object` instance.'); + } + } + + /** + * Gets current index of the slider. + * + * @return {Object} + */ + + }, { + key: 'index', + get: function get$$1() { + return this._i; + } + + /** + * Sets current index a slider. + * + * @return {Object} + */ + + , set: function set$$1(i) { + this._i = toInt(i); + } + + /** + * Gets type name of the slider. + * + * @return {String} + */ + + }, { + key: 'type', + get: function get$$1() { + return this.settings.type; + } + + /** + * Gets value of the idle status. + * + * @return {Boolean} + */ + + }, { + key: 'disabled', + get: function get$$1() { + return this._d; + } + + /** + * Sets value of the idle status. + * + * @return {Boolean} + */ + + , set: function set$$1(status) { + this._d = !!status; + } + }]); + return Glide; +}(); + +function Run(Glide, Components, Events) { + var Run = { + /** + * Initializes autorunning of the glide. + * + * @return {Void} + */ + mount: function mount() { + this._o = false; + }, + + /** + * Makes glides running based on the passed moving schema. + * + * @param {String} move + */ + make: function make(move) { + var _this = this; + + if (!Glide.disabled) { + Glide.disable(); + + this.move = move; + + Events.emit('run.before', this.move); + + this.calculate(); + + Events.emit('run', this.move); + + Components.Transition.after(function () { + if (_this.isOffset('<') || _this.isOffset('>')) { + _this._o = false; + + Events.emit('run.offset', _this.move); + } + + Events.emit('run.after', _this.move); + + Glide.enable(); + }); + } + }, + + /** + * Calculates current index based on defined move. + * + * @return {Void} + */ + calculate: function calculate() { + var move = this.move, + length = this.length; + var steps = move.steps, + direction = move.direction; + + var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0; + + switch (direction) { + case '>': + if (steps === '>') { + Glide.index = length; + } else if (this.isEnd()) { + if (!(Glide.isType('slider') && !Glide.settings.rewind)) { + this._o = true; + + Glide.index = 0; + } + + Events.emit('run.end', move); + } else if (countableSteps) { + Glide.index += Math.min(length - Glide.index, -toInt(steps)); + } else { + Glide.index++; + } + break; + + case '<': + if (steps === '<') { + Glide.index = 0; + } else if (this.isStart()) { + if (!(Glide.isType('slider') && !Glide.settings.rewind)) { + this._o = true; + + Glide.index = length; + } + + Events.emit('run.start', move); + } else if (countableSteps) { + Glide.index -= Math.min(Glide.index, toInt(steps)); + } else { + Glide.index--; + } + break; + + case '=': + Glide.index = steps; + break; + } + }, + + /** + * Checks if we are on the first slide. + * + * @return {Boolean} + */ + isStart: function isStart() { + return Glide.index === 0; + }, + + /** + * Checks if we are on the last slide. + * + * @return {Boolean} + */ + isEnd: function isEnd() { + return Glide.index === this.length; + }, + + /** + * Checks if we are making a offset run. + * + * @param {String} direction + * @return {Boolean} + */ + isOffset: function isOffset(direction) { + return this._o && this.move.direction === direction; + } + }; + + define(Run, 'move', { + /** + * Gets value of the move schema. + * + * @returns {Object} + */ + get: function get() { + return this._m; + }, + + /** + * Sets value of the move schema. + * + * @returns {Object} + */ + set: function set(value) { + this._m = { + direction: value.substr(0, 1), + steps: value.substr(1) ? value.substr(1) : 0 + }; + } + }); + + define(Run, 'length', { + /** + * Gets value of the running distance based + * on zero-indexing number of slides. + * + * @return {Number} + */ + get: function get() { + var settings = Glide.settings; + var length = Components.Html.slides.length; + + // If the `bound` option is acitve, a maximum running distance should be + // reduced by `perView` and `focusAt` settings. Running distance + // should end before creating an empty space after instance. + + if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) { + return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt); + } + + return length - 1; + } + }); + + define(Run, 'offset', { + /** + * Gets status of the offsetting flag. + * + * @return {Boolean} + */ + get: function get() { + return this._o; + } + }); + + return Run; +} + +/** + * Returns a current time. + * + * @return {Number} + */ +function now() { + return new Date().getTime(); +} + +/** + * Returns a function, that, when invoked, will only be triggered + * at most once during a given window of time. + * + * @param {Function} func + * @param {Number} wait + * @param {Object=} options + * @return {Function} + * + * @see https://github.com/jashkenas/underscore + */ +function throttle(func, wait, options) { + var timeout = void 0, + context = void 0, + args = void 0, + result = void 0; + var previous = 0; + if (!options) options = {}; + + var later = function later() { + previous = options.leading === false ? 0 : now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function throttled() { + var at = now(); + if (!previous && options.leading === false) previous = at; + var remaining = wait - (at - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = at; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function () { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; +} + +var MARGIN_TYPE = { + ltr: ['marginLeft', 'marginRight'], + rtl: ['marginRight', 'marginLeft'] +}; + +function Gaps(Glide, Components, Events) { + var Gaps = { + /** + * Applies gaps between slides. First and last + * slides do not receive it's edge margins. + * + * @param {HTMLCollection} slides + * @return {Void} + */ + apply: function apply(slides) { + for (var i = 0, len = slides.length; i < len; i++) { + var style = slides[i].style; + var direction = Components.Direction.value; + + if (i !== 0) { + style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px'; + } else { + style[MARGIN_TYPE[direction][0]] = ''; + } + + if (i !== slides.length - 1) { + style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px'; + } else { + style[MARGIN_TYPE[direction][1]] = ''; + } + } + }, + + /** + * Removes gaps from the slides. + * + * @param {HTMLCollection} slides + * @returns {Void} + */ + remove: function remove(slides) { + for (var i = 0, len = slides.length; i < len; i++) { + var style = slides[i].style; + + style.marginLeft = ''; + style.marginRight = ''; + } + } + }; + + define(Gaps, 'value', { + /** + * Gets value of the gap. + * + * @returns {Number} + */ + get: function get() { + return toInt(Glide.settings.gap); + } + }); + + define(Gaps, 'grow', { + /** + * Gets additional dimentions value caused by gaps. + * Used to increase width of the slides wrapper. + * + * @returns {Number} + */ + get: function get() { + return Gaps.value * (Components.Sizes.length - 1); + } + }); + + define(Gaps, 'reductor', { + /** + * Gets reduction value caused by gaps. + * Used to subtract width of the slides. + * + * @returns {Number} + */ + get: function get() { + var perView = Glide.settings.perView; + + return Gaps.value * (perView - 1) / perView; + } + }); + + /** + * Apply calculated gaps: + * - after building, so slides (including clones) will receive proper margins + * - on updating via API, to recalculate gaps with new options + */ + Events.on(['build.after', 'update'], throttle(function () { + Gaps.apply(Components.Html.wrapper.children); + }, 30)); + + /** + * Remove gaps: + * - on destroying to bring markup to its inital state + */ + Events.on('destroy', function () { + Gaps.remove(Components.Html.wrapper.children); + }); + + return Gaps; +} + +/** + * Finds siblings nodes of the passed node. + * + * @param {Element} node + * @return {Array} + */ +function siblings(node) { + if (node && node.parentNode) { + var n = node.parentNode.firstChild; + var matched = []; + + for (; n; n = n.nextSibling) { + if (n.nodeType === 1 && n !== node) { + matched.push(n); + } + } + + return matched; + } + + return []; +} + +/** + * Checks if passed node exist and is a valid element. + * + * @param {Element} node + * @return {Boolean} + */ +function exist(node) { + if (node && node instanceof window.HTMLElement) { + return true; + } + + return false; +} + +var TRACK_SELECTOR = '[data-glide-el="track"]'; + +function Html(Glide, Components) { + var Html = { + /** + * Setup slider HTML nodes. + * + * @param {Glide} glide + */ + mount: function mount() { + this.root = Glide.selector; + this.track = this.root.querySelector(TRACK_SELECTOR); + this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) { + return !slide.classList.contains(Glide.settings.classes.cloneSlide); + }); + } + }; + + define(Html, 'root', { + /** + * Gets node of the glide main element. + * + * @return {Object} + */ + get: function get() { + return Html._r; + }, + + /** + * Sets node of the glide main element. + * + * @return {Object} + */ + set: function set(r) { + if (isString(r)) { + r = document.querySelector(r); + } + + if (exist(r)) { + Html._r = r; + } else { + warn('Root element must be a existing Html node'); + } + } + }); + + define(Html, 'track', { + /** + * Gets node of the glide track with slides. + * + * @return {Object} + */ + get: function get() { + return Html._t; + }, + + /** + * Sets node of the glide track with slides. + * + * @return {Object} + */ + set: function set(t) { + if (exist(t)) { + Html._t = t; + } else { + warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.'); + } + } + }); + + define(Html, 'wrapper', { + /** + * Gets node of the slides wrapper. + * + * @return {Object} + */ + get: function get() { + return Html.track.children[0]; + } + }); + + return Html; +} + +function Peek(Glide, Components, Events) { + var Peek = { + /** + * Setups how much to peek based on settings. + * + * @return {Void} + */ + mount: function mount() { + this.value = Glide.settings.peek; + } + }; + + define(Peek, 'value', { + /** + * Gets value of the peek. + * + * @returns {Number|Object} + */ + get: function get() { + return Peek._v; + }, + + /** + * Sets value of the peek. + * + * @param {Number|Object} value + * @return {Void} + */ + set: function set(value) { + if (isObject(value)) { + value.before = toInt(value.before); + value.after = toInt(value.after); + } else { + value = toInt(value); + } + + Peek._v = value; + } + }); + + define(Peek, 'reductor', { + /** + * Gets reduction value caused by peek. + * + * @returns {Number} + */ + get: function get() { + var value = Peek.value; + var perView = Glide.settings.perView; + + if (isObject(value)) { + return value.before / perView + value.after / perView; + } + + return value * 2 / perView; + } + }); + + /** + * Recalculate peeking sizes on: + * - when resizing window to update to proper percents + */ + Events.on(['resize', 'update'], function () { + Peek.mount(); + }); + + return Peek; +} + +function Move(Glide, Components, Events) { + var Move = { + /** + * Constructs move component. + * + * @returns {Void} + */ + mount: function mount() { + this._o = 0; + }, + + /** + * Calculates a movement value based on passed offset and currently active index. + * + * @param {Number} offset + * @return {Void} + */ + make: function make() { + var _this = this; + + var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + this.offset = offset; + + Events.emit('move', { + movement: this.value + }); + + Components.Transition.after(function () { + Events.emit('move.after', { + movement: _this.value + }); + }); + } + }; + + define(Move, 'offset', { + /** + * Gets an offset value used to modify current translate. + * + * @return {Object} + */ + get: function get() { + return Move._o; + }, + + /** + * Sets an offset value used to modify current translate. + * + * @return {Object} + */ + set: function set(value) { + Move._o = !isUndefined(value) ? toInt(value) : 0; + } + }); + + define(Move, 'translate', { + /** + * Gets a raw movement value. + * + * @return {Number} + */ + get: function get() { + return Components.Sizes.slideWidth * Glide.index; + } + }); + + define(Move, 'value', { + /** + * Gets an actual movement value corrected by offset. + * + * @return {Number} + */ + get: function get() { + var offset = this.offset; + var translate = this.translate; + + if (Components.Direction.is('rtl')) { + return translate + offset; + } + + return translate - offset; + } + }); + + /** + * Make movement to proper slide on: + * - before build, so glide will start at `startAt` index + * - on each standard run to move to newly calculated index + */ + Events.on(['build.before', 'run'], function () { + Move.make(); + }); + + return Move; +} + +function Sizes(Glide, Components, Events) { + var Sizes = { + /** + * Setups dimentions of slides. + * + * @return {Void} + */ + setupSlides: function setupSlides() { + var width = this.slideWidth + 'px'; + var slides = Components.Html.slides; + + for (var i = 0; i < slides.length; i++) { + slides[i].style.width = width; + } + }, + + /** + * Setups dimentions of slides wrapper. + * + * @return {Void} + */ + setupWrapper: function setupWrapper(dimention) { + Components.Html.wrapper.style.width = this.wrapperSize + 'px'; + }, + + /** + * Removes applied styles from HTML elements. + * + * @returns {Void} + */ + remove: function remove() { + var slides = Components.Html.slides; + + for (var i = 0; i < slides.length; i++) { + slides[i].style.width = ''; + } + + Components.Html.wrapper.style.width = ''; + } + }; + + define(Sizes, 'length', { + /** + * Gets count number of the slides. + * + * @return {Number} + */ + get: function get() { + return Components.Html.slides.length; + } + }); + + define(Sizes, 'width', { + /** + * Gets width value of the glide. + * + * @return {Number} + */ + get: function get() { + return Components.Html.root.offsetWidth; + } + }); + + define(Sizes, 'wrapperSize', { + /** + * Gets size of the slides wrapper. + * + * @return {Number} + */ + get: function get() { + return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow; + } + }); + + define(Sizes, 'slideWidth', { + /** + * Gets width value of the single slide. + * + * @return {Number} + */ + get: function get() { + return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor; + } + }); + + /** + * Apply calculated glide's dimensions: + * - before building, so other dimentions (e.g. translate) will be calculated propertly + * - when resizing window to recalculate sildes dimensions + * - on updating via API, to calculate dimensions based on new options + */ + Events.on(['build.before', 'resize', 'update'], function () { + Sizes.setupSlides(); + Sizes.setupWrapper(); + }); + + /** + * Remove calculated glide's dimensions: + * - on destoting to bring markup to its inital state + */ + Events.on('destroy', function () { + Sizes.remove(); + }); + + return Sizes; +} + +function Build(Glide, Components, Events) { + var Build = { + /** + * Init glide building. Adds classes, sets + * dimensions and setups initial state. + * + * @return {Void} + */ + mount: function mount() { + Events.emit('build.before'); + + this.typeClass(); + this.activeClass(); + + Events.emit('build.after'); + }, + + /** + * Adds `type` class to the glide element. + * + * @return {Void} + */ + typeClass: function typeClass() { + Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]); + }, + + /** + * Sets active class to current slide. + * + * @return {Void} + */ + activeClass: function activeClass() { + var classes = Glide.settings.classes; + var slide = Components.Html.slides[Glide.index]; + + if (slide) { + slide.classList.add(classes.activeSlide); + + siblings(slide).forEach(function (sibling) { + sibling.classList.remove(classes.activeSlide); + }); + } + }, + + /** + * Removes HTML classes applied at building. + * + * @return {Void} + */ + removeClasses: function removeClasses() { + var classes = Glide.settings.classes; + + Components.Html.root.classList.remove(classes[Glide.settings.type]); + + Components.Html.slides.forEach(function (sibling) { + sibling.classList.remove(classes.activeSlide); + }); + } + }; + + /** + * Clear building classes: + * - on destroying to bring HTML to its initial state + * - on updating to remove classes before remounting component + */ + Events.on(['destroy', 'update'], function () { + Build.removeClasses(); + }); + + /** + * Remount component: + * - on resizing of the window to calculate new dimentions + * - on updating settings via API + */ + Events.on(['resize', 'update'], function () { + Build.mount(); + }); + + /** + * Swap active class of current slide: + * - after each move to the new index + */ + Events.on('move.after', function () { + Build.activeClass(); + }); + + return Build; +} + +function Clones(Glide, Components, Events) { + var Clones = { + /** + * Create pattern map and collect slides to be cloned. + */ + mount: function mount() { + this.items = []; + + if (Glide.isType('carousel')) { + this.items = this.collect(); + } + }, + + /** + * Collect clones with pattern. + * + * @return {Void} + */ + collect: function collect() { + var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var slides = Components.Html.slides; + var _Glide$settings = Glide.settings, + perView = _Glide$settings.perView, + classes = _Glide$settings.classes; + + var peekIncrementer = +!!Glide.settings.peek; + var part = perView + peekIncrementer; + var start = slides.slice(0, part); + var end = slides.slice(-part); + + for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) { + for (var i = 0; i < start.length; i++) { + var clone = start[i].cloneNode(true); + + clone.classList.add(classes.cloneSlide); + + items.push(clone); + } + + for (var _i = 0; _i < end.length; _i++) { + var _clone = end[_i].cloneNode(true); + + _clone.classList.add(classes.cloneSlide); + + items.unshift(_clone); + } + } + + return items; + }, + + /** + * Append cloned slides with generated pattern. + * + * @return {Void} + */ + append: function append() { + var items = this.items; + var _Components$Html = Components.Html, + wrapper = _Components$Html.wrapper, + slides = _Components$Html.slides; + + var half = Math.floor(items.length / 2); + var prepend = items.slice(0, half).reverse(); + var append = items.slice(half, items.length); + var width = Components.Sizes.slideWidth + 'px'; + + for (var i = 0; i < append.length; i++) { + wrapper.appendChild(append[i]); + } + + for (var _i2 = 0; _i2 < prepend.length; _i2++) { + wrapper.insertBefore(prepend[_i2], slides[0]); + } + + for (var _i3 = 0; _i3 < items.length; _i3++) { + items[_i3].style.width = width; + } + }, + + /** + * Remove all cloned slides. + * + * @return {Void} + */ + remove: function remove() { + var items = this.items; + + for (var i = 0; i < items.length; i++) { + Components.Html.wrapper.removeChild(items[i]); + } + } + }; + + define(Clones, 'grow', { + /** + * Gets additional dimentions value caused by clones. + * + * @return {Number} + */ + get: function get() { + return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length; + } + }); + + /** + * Append additional slide's clones: + * - while glide's type is `carousel` + */ + Events.on('update', function () { + Clones.remove(); + Clones.mount(); + Clones.append(); + }); + + /** + * Append additional slide's clones: + * - while glide's type is `carousel` + */ + Events.on('build.before', function () { + if (Glide.isType('carousel')) { + Clones.append(); + } + }); + + /** + * Remove clones HTMLElements: + * - on destroying, to bring HTML to its initial state + */ + Events.on('destroy', function () { + Clones.remove(); + }); + + return Clones; +} + +var EventsBinder = function () { + /** + * Construct a EventsBinder instance. + */ + function EventsBinder() { + var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, EventsBinder); + + this.listeners = listeners; + } + + /** + * Adds events listeners to arrows HTML elements. + * + * @param {String|Array} events + * @param {Element|Window|Document} el + * @param {Function} closure + * @param {Boolean|Object} capture + * @return {Void} + */ + + createClass(EventsBinder, [{ + key: 'on', + value: function on(events, el, closure) { + var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + if (isString(events)) { + events = [events]; + } + + for (var i = 0; i < events.length; i++) { + this.listeners[events[i]] = closure; + + el.addEventListener(events[i], this.listeners[events[i]], capture); + } + } + + /** + * Removes event listeners from arrows HTML elements. + * + * @param {String|Array} events + * @param {Element|Window|Document} el + * @param {Boolean|Object} capture + * @return {Void} + */ + + }, { + key: 'off', + value: function off(events, el) { + var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + if (isString(events)) { + events = [events]; + } + + for (var i = 0; i < events.length; i++) { + el.removeEventListener(events[i], this.listeners[events[i]], capture); + } + } + + /** + * Destroy collected listeners. + * + * @returns {Void} + */ + + }, { + key: 'destroy', + value: function destroy() { + delete this.listeners; + } + }]); + return EventsBinder; +}(); + +function Resize(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Resize = { + /** + * Initializes window bindings. + */ + mount: function mount() { + this.bind(); + }, + + /** + * Binds `rezsize` listener to the window. + * It's a costly event, so we are debouncing it. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('resize', window, throttle(function () { + Events.emit('resize'); + }, Glide.settings.throttle)); + }, + + /** + * Unbinds listeners from the window. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('resize', window); + } + }; + + /** + * Remove bindings from window: + * - on destroying, to remove added EventListener + */ + Events.on('destroy', function () { + Resize.unbind(); + Binder.destroy(); + }); + + return Resize; +} + +var VALID_DIRECTIONS = ['ltr', 'rtl']; +var FLIPED_MOVEMENTS = { + '>': '<', + '<': '>', + '=': '=' +}; + +function Direction(Glide, Components, Events) { + var Direction = { + /** + * Setups gap value based on settings. + * + * @return {Void} + */ + mount: function mount() { + this.value = Glide.settings.direction; + }, + + /** + * Resolves pattern based on direction value + * + * @param {String} pattern + * @returns {String} + */ + resolve: function resolve(pattern) { + var token = pattern.slice(0, 1); + + if (this.is('rtl')) { + return pattern.split(token).join(FLIPED_MOVEMENTS[token]); + } + + return pattern; + }, + + /** + * Checks value of direction mode. + * + * @param {String} direction + * @returns {Boolean} + */ + is: function is(direction) { + return this.value === direction; + }, + + /** + * Applies direction class to the root HTML element. + * + * @return {Void} + */ + addClass: function addClass() { + Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]); + }, + + /** + * Removes direction class from the root HTML element. + * + * @return {Void} + */ + removeClass: function removeClass() { + Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]); + } + }; + + define(Direction, 'value', { + /** + * Gets value of the direction. + * + * @returns {Number} + */ + get: function get() { + return Direction._v; + }, + + /** + * Sets value of the direction. + * + * @param {String} value + * @return {Void} + */ + set: function set(value) { + if (VALID_DIRECTIONS.indexOf(value) > -1) { + Direction._v = value; + } else { + warn('Direction value must be `ltr` or `rtl`'); + } + } + }); + + /** + * Clear direction class: + * - on destroy to bring HTML to its initial state + * - on update to remove class before reappling bellow + */ + Events.on(['destroy', 'update'], function () { + Direction.removeClass(); + }); + + /** + * Remount component: + * - on update to reflect changes in direction value + */ + Events.on('update', function () { + Direction.mount(); + }); + + /** + * Apply direction class: + * - before building to apply class for the first time + * - on updating to reapply direction class that may changed + */ + Events.on(['build.before', 'update'], function () { + Direction.addClass(); + }); + + return Direction; +} + +/** + * Reflects value of glide movement. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Rtl(Glide, Components) { + return { + /** + * Negates the passed translate if glide is in RTL option. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + if (Components.Direction.is('rtl')) { + return -translate; + } + + return translate; + } + }; +} + +/** + * Updates glide movement with a `gap` settings. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Gap(Glide, Components) { + return { + /** + * Modifies passed translate value with number in the `gap` settings. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + return translate + Components.Gaps.value * Glide.index; + } + }; +} + +/** + * Updates glide movement with width of additional clones width. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Grow(Glide, Components) { + return { + /** + * Adds to the passed translate width of the half of clones. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + return translate + Components.Clones.grow / 2; + } + }; +} + +/** + * Updates glide movement with a `peek` settings. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Peeking(Glide, Components) { + return { + /** + * Modifies passed translate value with a `peek` setting. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + if (Glide.settings.focusAt >= 0) { + var peek = Components.Peek.value; + + if (isObject(peek)) { + return translate - peek.before; + } + + return translate - peek; + } + + return translate; + } + }; +} + +/** + * Updates glide movement with a `focusAt` settings. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function Focusing(Glide, Components) { + return { + /** + * Modifies passed translate value with index in the `focusAt` setting. + * + * @param {Number} translate + * @return {Number} + */ + modify: function modify(translate) { + var gap = Components.Gaps.value; + var width = Components.Sizes.width; + var focusAt = Glide.settings.focusAt; + var slideWidth = Components.Sizes.slideWidth; + + if (focusAt === 'center') { + return translate - (width / 2 - slideWidth / 2); + } + + return translate - slideWidth * focusAt - gap * focusAt; + } + }; +} + +/** + * Applies diffrent transformers on translate value. + * + * @param {Object} Glide + * @param {Object} Components + * @return {Object} + */ +function mutator(Glide, Components, Events) { + /** + * Merge instance transformers with collection of default transformers. + * It's important that the Rtl component be last on the list, + * so it reflects all previous transformations. + * + * @type {Array} + */ + var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]); + + return { + /** + * Piplines translate value with registered transformers. + * + * @param {Number} translate + * @return {Number} + */ + mutate: function mutate(translate) { + for (var i = 0; i < TRANSFORMERS.length; i++) { + var transformer = TRANSFORMERS[i]; + + if (isFunction(transformer) && isFunction(transformer().modify)) { + translate = transformer(Glide, Components, Events).modify(translate); + } else { + warn('Transformer should be a function that returns an object with `modify()` method'); + } + } + + return translate; + } + }; +} + +function Translate(Glide, Components, Events) { + var Translate = { + /** + * Sets value of translate on HTML element. + * + * @param {Number} value + * @return {Void} + */ + set: function set(value) { + var transform = mutator(Glide, Components).mutate(value); + + Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)'; + }, + + /** + * Removes value of translate from HTML element. + * + * @return {Void} + */ + remove: function remove() { + Components.Html.wrapper.style.transform = ''; + } + }; + + /** + * Set new translate value: + * - on move to reflect index change + * - on updating via API to reflect possible changes in options + */ + Events.on('move', function (context) { + var gap = Components.Gaps.value; + var length = Components.Sizes.length; + var width = Components.Sizes.slideWidth; + + if (Glide.isType('carousel') && Components.Run.isOffset('<')) { + Components.Transition.after(function () { + Events.emit('translate.jump'); + + Translate.set(width * (length - 1)); + }); + + return Translate.set(-width - gap * length); + } + + if (Glide.isType('carousel') && Components.Run.isOffset('>')) { + Components.Transition.after(function () { + Events.emit('translate.jump'); + + Translate.set(0); + }); + + return Translate.set(width * length + gap * length); + } + + return Translate.set(context.movement); + }); + + /** + * Remove translate: + * - on destroying to bring markup to its inital state + */ + Events.on('destroy', function () { + Translate.remove(); + }); + + return Translate; +} + +function Transition(Glide, Components, Events) { + /** + * Holds inactivity status of transition. + * When true transition is not applied. + * + * @type {Boolean} + */ + var disabled = false; + + var Transition = { + /** + * Composes string of the CSS transition. + * + * @param {String} property + * @return {String} + */ + compose: function compose(property) { + var settings = Glide.settings; + + if (!disabled) { + return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc; + } + + return property + ' 0ms ' + settings.animationTimingFunc; + }, + + /** + * Sets value of transition on HTML element. + * + * @param {String=} property + * @return {Void} + */ + set: function set() { + var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform'; + + Components.Html.wrapper.style.transition = this.compose(property); + }, + + /** + * Removes value of transition from HTML element. + * + * @return {Void} + */ + remove: function remove() { + Components.Html.wrapper.style.transition = ''; + }, + + /** + * Runs callback after animation. + * + * @param {Function} callback + * @return {Void} + */ + after: function after(callback) { + setTimeout(function () { + callback(); + }, this.duration); + }, + + /** + * Enable transition. + * + * @return {Void} + */ + enable: function enable() { + disabled = false; + + this.set(); + }, + + /** + * Disable transition. + * + * @return {Void} + */ + disable: function disable() { + disabled = true; + + this.set(); + } + }; + + define(Transition, 'duration', { + /** + * Gets duration of the transition based + * on currently running animation type. + * + * @return {Number} + */ + get: function get() { + var settings = Glide.settings; + + if (Glide.isType('slider') && Components.Run.offset) { + return settings.rewindDuration; + } + + return settings.animationDuration; + } + }); + + /** + * Set transition `style` value: + * - on each moving, because it may be cleared by offset move + */ + Events.on('move', function () { + Transition.set(); + }); + + /** + * Disable transition: + * - before initial build to avoid transitioning from `0` to `startAt` index + * - while resizing window and recalculating dimentions + * - on jumping from offset transition at start and end edges in `carousel` type + */ + Events.on(['build.before', 'resize', 'translate.jump'], function () { + Transition.disable(); + }); + + /** + * Enable transition: + * - on each running, because it may be disabled by offset move + */ + Events.on('run', function () { + Transition.enable(); + }); + + /** + * Remove transition: + * - on destroying to bring markup to its inital state + */ + Events.on('destroy', function () { + Transition.remove(); + }); + + return Transition; +} + +/** + * Test via a getter in the options object to see + * if the passive property is accessed. + * + * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + */ + +var supportsPassive = false; + +try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + } + }); + + window.addEventListener('testPassive', null, opts); + window.removeEventListener('testPassive', null, opts); +} catch (e) {} + +var supportsPassive$1 = supportsPassive; + +var START_EVENTS = ['touchstart', 'mousedown']; +var MOVE_EVENTS = ['touchmove', 'mousemove']; +var END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave']; +var MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave']; + +function Swipe(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var swipeSin = 0; + var swipeStartX = 0; + var swipeStartY = 0; + var disabled = false; + var moveable = true; + var capture = supportsPassive$1 ? { passive: true } : false; + + var Swipe = { + /** + * Initializes swipe bindings. + * + * @return {Void} + */ + mount: function mount() { + this.bindSwipeStart(); + }, + + /** + * Handler for `swipestart` event. Calculates entry points of the user's tap. + * + * @param {Object} event + * @return {Void} + */ + start: function start(event) { + if (!disabled && !Glide.disabled) { + this.disable(); + + var swipe = this.touches(event); + + moveable = true; + swipeSin = null; + swipeStartX = toInt(swipe.pageX); + swipeStartY = toInt(swipe.pageY); + + this.bindSwipeMove(); + this.bindSwipeEnd(); + + Events.emit('swipe.start'); + } + }, + + /** + * Handler for `swipemove` event. Calculates user's tap angle and distance. + * + * @param {Object} event + */ + move: function move(event) { + if (!Glide.disabled) { + var _Glide$settings = Glide.settings, + touchAngle = _Glide$settings.touchAngle, + touchRatio = _Glide$settings.touchRatio, + classes = _Glide$settings.classes; + + var swipe = this.touches(event); + + var subExSx = toInt(swipe.pageX) - swipeStartX; + var subEySy = toInt(swipe.pageY) - swipeStartY; + var powEX = Math.abs(subExSx << 2); + var powEY = Math.abs(subEySy << 2); + var swipeHypotenuse = Math.sqrt(powEX + powEY); + var swipeCathetus = Math.sqrt(powEY); + + swipeSin = Math.asin(swipeCathetus / swipeHypotenuse); + + if (moveable && swipeSin * 180 / Math.PI < touchAngle) { + event.stopPropagation(); + + Components.Move.make(subExSx * toFloat(touchRatio)); + + Components.Html.root.classList.add(classes.dragging); + + Events.emit('swipe.move'); + } else { + moveable = false; + + return false; + } + } + }, + + /** + * Handler for `swipeend` event. Finitializes user's tap and decides about glide move. + * + * @param {Object} event + * @return {Void} + */ + end: function end(event) { + if (!Glide.disabled) { + var settings = Glide.settings; + + var swipe = this.touches(event); + var threshold = this.threshold(event); + + var swipeDistance = swipe.pageX - swipeStartX; + var swipeDeg = swipeSin * 180 / Math.PI; + var steps = Math.round(swipeDistance / Components.Sizes.slideWidth); + + this.enable(); + + if (moveable) { + if (swipeDistance > threshold && swipeDeg < settings.touchAngle) { + // While swipe is positive and greater than threshold move backward. + if (settings.perTouch) { + steps = Math.min(steps, toInt(settings.perTouch)); + } + + if (Components.Direction.is('rtl')) { + steps = -steps; + } + + Components.Run.make(Components.Direction.resolve('<' + steps)); + } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) { + // While swipe is negative and lower than negative threshold move forward. + if (settings.perTouch) { + steps = Math.max(steps, -toInt(settings.perTouch)); + } + + if (Components.Direction.is('rtl')) { + steps = -steps; + } + + Components.Run.make(Components.Direction.resolve('>' + steps)); + } else { + // While swipe don't reach distance apply previous transform. + Components.Move.make(); + } + } + + Components.Html.root.classList.remove(settings.classes.dragging); + + this.unbindSwipeMove(); + this.unbindSwipeEnd(); + + Events.emit('swipe.end'); + } + }, + + /** + * Binds swipe's starting event. + * + * @return {Void} + */ + bindSwipeStart: function bindSwipeStart() { + var _this = this; + + var settings = Glide.settings; + + if (settings.swipeThreshold) { + Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) { + _this.start(event); + }, capture); + } + + if (settings.dragThreshold) { + Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) { + _this.start(event); + }, capture); + } + }, + + /** + * Unbinds swipe's starting event. + * + * @return {Void} + */ + unbindSwipeStart: function unbindSwipeStart() { + Binder.off(START_EVENTS[0], Components.Html.wrapper, capture); + Binder.off(START_EVENTS[1], Components.Html.wrapper, capture); + }, + + /** + * Binds swipe's moving event. + * + * @return {Void} + */ + bindSwipeMove: function bindSwipeMove() { + var _this2 = this; + + Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) { + _this2.move(event); + }, Glide.settings.throttle), capture); + }, + + /** + * Unbinds swipe's moving event. + * + * @return {Void} + */ + unbindSwipeMove: function unbindSwipeMove() { + Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture); + }, + + /** + * Binds swipe's ending event. + * + * @return {Void} + */ + bindSwipeEnd: function bindSwipeEnd() { + var _this3 = this; + + Binder.on(END_EVENTS, Components.Html.wrapper, function (event) { + _this3.end(event); + }); + }, + + /** + * Unbinds swipe's ending event. + * + * @return {Void} + */ + unbindSwipeEnd: function unbindSwipeEnd() { + Binder.off(END_EVENTS, Components.Html.wrapper); + }, + + /** + * Normalizes event touches points accorting to different types. + * + * @param {Object} event + */ + touches: function touches(event) { + if (MOUSE_EVENTS.indexOf(event.type) > -1) { + return event; + } + + return event.touches[0] || event.changedTouches[0]; + }, + + /** + * Gets value of minimum swipe distance settings based on event type. + * + * @return {Number} + */ + threshold: function threshold(event) { + var settings = Glide.settings; + + if (MOUSE_EVENTS.indexOf(event.type) > -1) { + return settings.dragThreshold; + } + + return settings.swipeThreshold; + }, + + /** + * Enables swipe event. + * + * @return {self} + */ + enable: function enable() { + disabled = false; + + Components.Transition.enable(); + + return this; + }, + + /** + * Disables swipe event. + * + * @return {self} + */ + disable: function disable() { + disabled = true; + + Components.Transition.disable(); + + return this; + } + }; + + /** + * Add component class: + * - after initial building + */ + Events.on('build.after', function () { + Components.Html.root.classList.add(Glide.settings.classes.swipeable); + }); + + /** + * Remove swiping bindings: + * - on destroying, to remove added EventListeners + */ + Events.on('destroy', function () { + Swipe.unbindSwipeStart(); + Swipe.unbindSwipeMove(); + Swipe.unbindSwipeEnd(); + Binder.destroy(); + }); + + return Swipe; +} + +function Images(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Images = { + /** + * Binds listener to glide wrapper. + * + * @return {Void} + */ + mount: function mount() { + this.bind(); + }, + + /** + * Binds `dragstart` event on wrapper to prevent dragging images. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('dragstart', Components.Html.wrapper, this.dragstart); + }, + + /** + * Unbinds `dragstart` event on wrapper. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('dragstart', Components.Html.wrapper); + }, + + /** + * Event handler. Prevents dragging. + * + * @return {Void} + */ + dragstart: function dragstart(event) { + event.preventDefault(); + } + }; + + /** + * Remove bindings from images: + * - on destroying, to remove added EventListeners + */ + Events.on('destroy', function () { + Images.unbind(); + Binder.destroy(); + }); + + return Images; +} + +function Anchors(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + /** + * Holds detaching status of anchors. + * Prevents detaching of already detached anchors. + * + * @private + * @type {Boolean} + */ + var detached = false; + + /** + * Holds preventing status of anchors. + * If `true` redirection after click will be disabled. + * + * @private + * @type {Boolean} + */ + var prevented = false; + + var Anchors = { + /** + * Setups a initial state of anchors component. + * + * @returns {Void} + */ + mount: function mount() { + /** + * Holds collection of anchors elements. + * + * @private + * @type {HTMLCollection} + */ + this._a = Components.Html.wrapper.querySelectorAll('a'); + + this.bind(); + }, + + /** + * Binds events to anchors inside a track. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('click', Components.Html.wrapper, this.click); + }, + + /** + * Unbinds events attached to anchors inside a track. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('click', Components.Html.wrapper); + }, + + /** + * Handler for click event. Prevents clicks when glide is in `prevent` status. + * + * @param {Object} event + * @return {Void} + */ + click: function click(event) { + if (prevented) { + event.stopPropagation(); + event.preventDefault(); + } + }, + + /** + * Detaches anchors click event inside glide. + * + * @return {self} + */ + detach: function detach() { + prevented = true; + + if (!detached) { + for (var i = 0; i < this.items.length; i++) { + this.items[i].draggable = false; + + this.items[i].setAttribute('data-href', this.items[i].getAttribute('href')); + + this.items[i].removeAttribute('href'); + } + + detached = true; + } + + return this; + }, + + /** + * Attaches anchors click events inside glide. + * + * @return {self} + */ + attach: function attach() { + prevented = false; + + if (detached) { + for (var i = 0; i < this.items.length; i++) { + this.items[i].draggable = true; + + this.items[i].setAttribute('href', this.items[i].getAttribute('data-href')); + } + + detached = false; + } + + return this; + } + }; + + define(Anchors, 'items', { + /** + * Gets collection of the arrows HTML elements. + * + * @return {HTMLElement[]} + */ + get: function get() { + return Anchors._a; + } + }); + + /** + * Detach anchors inside slides: + * - on swiping, so they won't redirect to its `href` attributes + */ + Events.on('swipe.move', function () { + Anchors.detach(); + }); + + /** + * Attach anchors inside slides: + * - after swiping and transitions ends, so they can redirect after click again + */ + Events.on('swipe.end', function () { + Components.Transition.after(function () { + Anchors.attach(); + }); + }); + + /** + * Unbind anchors inside slides: + * - on destroying, to bring anchors to its initial state + */ + Events.on('destroy', function () { + Anchors.attach(); + Anchors.unbind(); + Binder.destroy(); + }); + + return Anchors; +} + +var NAV_SELECTOR = '[data-glide-el="controls[nav]"]'; +var CONTROLS_SELECTOR = '[data-glide-el^="controls"]'; + +function Controls(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Controls = { + /** + * Inits arrows. Binds events listeners + * to the arrows HTML elements. + * + * @return {Void} + */ + mount: function mount() { + /** + * Collection of navigation HTML elements. + * + * @private + * @type {HTMLCollection} + */ + this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR); + + /** + * Collection of controls HTML elements. + * + * @private + * @type {HTMLCollection} + */ + this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR); + + this.addBindings(); + }, + + /** + * Sets active class to current slide. + * + * @return {Void} + */ + setActive: function setActive() { + for (var i = 0; i < this._n.length; i++) { + this.addClass(this._n[i].children); + } + }, + + /** + * Removes active class to current slide. + * + * @return {Void} + */ + removeActive: function removeActive() { + for (var i = 0; i < this._n.length; i++) { + this.removeClass(this._n[i].children); + } + }, + + /** + * Toggles active class on items inside navigation. + * + * @param {HTMLElement} controls + * @return {Void} + */ + addClass: function addClass(controls) { + var settings = Glide.settings; + var item = controls[Glide.index]; + + item.classList.add(settings.classes.activeNav); + + siblings(item).forEach(function (sibling) { + sibling.classList.remove(settings.classes.activeNav); + }); + }, + + /** + * Removes active class from active control. + * + * @param {HTMLElement} controls + * @return {Void} + */ + removeClass: function removeClass(controls) { + controls[Glide.index].classList.remove(Glide.settings.classes.activeNav); + }, + + /** + * Adds handles to the each group of controls. + * + * @return {Void} + */ + addBindings: function addBindings() { + for (var i = 0; i < this._c.length; i++) { + this.bind(this._c[i].children); + } + }, + + /** + * Removes handles from the each group of controls. + * + * @return {Void} + */ + removeBindings: function removeBindings() { + for (var i = 0; i < this._c.length; i++) { + this.unbind(this._c[i].children); + } + }, + + /** + * Binds events to arrows HTML elements. + * + * @param {HTMLCollection} elements + * @return {Void} + */ + bind: function bind(elements) { + for (var i = 0; i < elements.length; i++) { + Binder.on(['click', 'touchstart'], elements[i], this.click); + } + }, + + /** + * Unbinds events binded to the arrows HTML elements. + * + * @param {HTMLCollection} elements + * @return {Void} + */ + unbind: function unbind(elements) { + for (var i = 0; i < elements.length; i++) { + Binder.off(['click', 'touchstart'], elements[i]); + } + }, + + /** + * Handles `click` event on the arrows HTML elements. + * Moves slider in driection precised in + * `data-glide-dir` attribute. + * + * @param {Object} event + * @return {Void} + */ + click: function click(event) { + event.preventDefault(); + + Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir'))); + } + }; + + define(Controls, 'items', { + /** + * Gets collection of the controls HTML elements. + * + * @return {HTMLElement[]} + */ + get: function get() { + return Controls._c; + } + }); + + /** + * Swap active class of current navigation item: + * - after mounting to set it to initial index + * - after each move to the new index + */ + Events.on(['mount.after', 'move.after'], function () { + Controls.setActive(); + }); + + /** + * Remove bindings and HTML Classes: + * - on destroying, to bring markup to its initial state + */ + Events.on('destroy', function () { + Controls.removeBindings(); + Controls.removeActive(); + Binder.destroy(); + }); + + return Controls; +} + +function Keyboard(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Keyboard = { + /** + * Binds keyboard events on component mount. + * + * @return {Void} + */ + mount: function mount() { + if (Glide.settings.keyboard) { + this.bind(); + } + }, + + /** + * Adds keyboard press events. + * + * @return {Void} + */ + bind: function bind() { + Binder.on('keyup', document, this.press); + }, + + /** + * Removes keyboard press events. + * + * @return {Void} + */ + unbind: function unbind() { + Binder.off('keyup', document); + }, + + /** + * Handles keyboard's arrows press and moving glide foward and backward. + * + * @param {Object} event + * @return {Void} + */ + press: function press(event) { + if (event.keyCode === 39) { + Components.Run.make(Components.Direction.resolve('>')); + } + + if (event.keyCode === 37) { + Components.Run.make(Components.Direction.resolve('<')); + } + } + }; + + /** + * Remove bindings from keyboard: + * - on destroying to remove added events + * - on updating to remove events before remounting + */ + Events.on(['destroy', 'update'], function () { + Keyboard.unbind(); + }); + + /** + * Remount component + * - on updating to reflect potential changes in settings + */ + Events.on('update', function () { + Keyboard.mount(); + }); + + /** + * Destroy binder: + * - on destroying to remove listeners + */ + Events.on('destroy', function () { + Binder.destroy(); + }); + + return Keyboard; +} + +function Autoplay(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + var Autoplay = { + /** + * Initializes autoplaying and events. + * + * @return {Void} + */ + mount: function mount() { + this.start(); + + if (Glide.settings.hoverpause) { + this.bind(); + } + }, + + /** + * Starts autoplaying in configured interval. + * + * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings + * @return {Void} + */ + start: function start() { + var _this = this; + + if (Glide.settings.autoplay) { + if (isUndefined(this._i)) { + this._i = setInterval(function () { + _this.stop(); + + Components.Run.make('>'); + + _this.start(); + }, this.time); + } + } + }, + + /** + * Stops autorunning of the glide. + * + * @return {Void} + */ + stop: function stop() { + this._i = clearInterval(this._i); + }, + + /** + * Stops autoplaying while mouse is over glide's area. + * + * @return {Void} + */ + bind: function bind() { + var _this2 = this; + + Binder.on('mouseover', Components.Html.root, function () { + _this2.stop(); + }); + + Binder.on('mouseout', Components.Html.root, function () { + _this2.start(); + }); + }, + + /** + * Unbind mouseover events. + * + * @returns {Void} + */ + unbind: function unbind() { + Binder.off(['mouseover', 'mouseout'], Components.Html.root); + } + }; + + define(Autoplay, 'time', { + /** + * Gets time period value for the autoplay interval. Prioritizes + * times in `data-glide-autoplay` attrubutes over options. + * + * @return {Number} + */ + get: function get() { + var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay'); + + if (autoplay) { + return toInt(autoplay); + } + + return toInt(Glide.settings.autoplay); + } + }); + + /** + * Stop autoplaying and unbind events: + * - on destroying, to clear defined interval + * - on updating via API to reset interval that may changed + */ + Events.on(['destroy', 'update'], function () { + Autoplay.unbind(); + }); + + /** + * Stop autoplaying: + * - before each run, to restart autoplaying + * - on pausing via API + * - on destroying, to clear defined interval + * - while starting a swipe + * - on updating via API to reset interval that may changed + */ + Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () { + Autoplay.stop(); + }); + + /** + * Start autoplaying: + * - after each run, to restart autoplaying + * - on playing via API + * - while ending a swipe + */ + Events.on(['run.after', 'play', 'swipe.end'], function () { + Autoplay.start(); + }); + + /** + * Remount autoplaying: + * - on updating via API to reset interval that may changed + */ + Events.on('update', function () { + Autoplay.mount(); + }); + + /** + * Destroy a binder: + * - on destroying glide instance to clearup listeners + */ + Events.on('destroy', function () { + Binder.destroy(); + }); + + return Autoplay; +} + +/** + * Sorts keys of breakpoint object so they will be ordered from lower to bigger. + * + * @param {Object} points + * @returns {Object} + */ +function sortBreakpoints(points) { + if (isObject(points)) { + return sortKeys(points); + } else { + warn('Breakpoints option must be an object'); + } + + return {}; +} + +function Breakpoints(Glide, Components, Events) { + /** + * Instance of the binder for DOM Events. + * + * @type {EventsBinder} + */ + var Binder = new EventsBinder(); + + /** + * Holds reference to settings. + * + * @type {Object} + */ + var settings = Glide.settings; + + /** + * Holds reference to breakpoints object in settings. Sorts breakpoints + * from smaller to larger. It is required in order to proper + * matching currently active breakpoint settings. + * + * @type {Object} + */ + var points = sortBreakpoints(settings.breakpoints); + + /** + * Cache initial settings before overwritting. + * + * @type {Object} + */ + var defaults = _extends({}, settings); + + var Breakpoints = { + /** + * Matches settings for currectly matching media breakpoint. + * + * @param {Object} points + * @returns {Object} + */ + match: function match(points) { + if (typeof window.matchMedia !== 'undefined') { + for (var point in points) { + if (points.hasOwnProperty(point)) { + if (window.matchMedia('(max-width: ' + point + 'px)').matches) { + return points[point]; + } + } + } + } + + return defaults; + } + }; + + /** + * Overwrite instance settings with currently matching breakpoint settings. + * This happens right after component initialization. + */ + _extends(settings, Breakpoints.match(points)); + + /** + * Update glide with settings of matched brekpoint: + * - window resize to update slider + */ + Binder.on('resize', window, throttle(function () { + Glide.settings = mergeOptions(settings, Breakpoints.match(points)); + }, Glide.settings.throttle)); + + /** + * Resort and update default settings: + * - on reinit via API, so breakpoint matching will be performed with options + */ + Events.on('update', function () { + points = sortBreakpoints(points); + + defaults = _extends({}, settings); + }); + + /** + * Unbind resize listener: + * - on destroying, to bring markup to its initial state + */ + Events.on('destroy', function () { + Binder.off('resize', window); + }); + + return Breakpoints; +} + +var COMPONENTS = { + // Required + Html: Html, + Translate: Translate, + Transition: Transition, + Direction: Direction, + Peek: Peek, + Sizes: Sizes, + Gaps: Gaps, + Move: Move, + Clones: Clones, + Resize: Resize, + Build: Build, + Run: Run, + + // Optional + Swipe: Swipe, + Images: Images, + Anchors: Anchors, + Controls: Controls, + Keyboard: Keyboard, + Autoplay: Autoplay, + Breakpoints: Breakpoints +}; + +var Glide$1$1 = function (_Core) { + inherits(Glide$$1, _Core); + + function Glide$$1() { + classCallCheck(this, Glide$$1); + return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments)); + } + + createClass(Glide$$1, [{ + key: 'mount', + value: function mount() { + var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions)); + } + }]); + return Glide$$1; +}(Glide$1); + +var Events = ['mount.before', 'mount.after', 'update', 'play', 'pause', 'build.before', 'build.after', 'run.before', 'run', 'run.after', 'run.offset', 'run.start', 'run.end', 'move', 'move.after', 'resize', 'swipe.start', 'swipe.move', 'swipe.end', 'translate.jump']; + +(function () { + if (typeof document !== 'undefined') { + var head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'), + css = "";style.type = 'text/css';if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + }head.appendChild(style); + } +})(); + +var Glide = { render: function render() { + var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('div', { staticClass: "glide" }, [_vm._t("default")], 2); + }, staticRenderFns: [], + name: 'Glide', + + props: { + settings: { + type: Object, + default: function _default() {} + }, + delayInitialization: { + type: Boolean, + default: false + } + }, + + methods: { + go: function go(pattern) { + this.glide.go(pattern); + }, + init: function init() { + this.glide.mount(); + } + }, + + data: function data() { + return { + glide: undefined + }; + }, + mounted: function mounted() { + var _this = this; + + this.glide = new Glide$1$1(this.$el, this.settings); + + Events.forEach(function (event) { + _this.glide.on(event, function () { + for (var _len = arguments.length, parameters = Array(_len), _key = 0; _key < _len; _key++) { + parameters[_key] = arguments[_key]; + } + + var emmiter = event.replace(/\.([a-z])/g, function (m, w) { + return w.toUpperCase(); + }); + + _this.$emit.apply(_this, [emmiter].concat(parameters)); + }); + }); + + if (!this.delayInitialization) { + this.init(); + } + } +}; + +(function () { + if (typeof document !== 'undefined') { + var head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'), + css = "";style.type = 'text/css';if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + }head.appendChild(style); + } +})(); + +var Track = { render: function render() { + var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('div', { staticClass: "glide__track", attrs: { "data-glide-el": "track" } }, [_c('ul', { staticClass: "glide__slides" }, [_vm._t("default")], 2)]); + }, staticRenderFns: [], + name: 'GlideTrack' +}; + +(function () { + if (typeof document !== 'undefined') { + var head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'), + css = "";style.type = 'text/css';if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + }head.appendChild(style); + } +})(); + +var Slide = { render: function render() { + var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('li', { staticClass: "glide__slide" }, [_vm._t("default")], 2); + }, staticRenderFns: [], + name: 'GlideSlide' +}; + +var index = { + install: function install(Vue, options) { + Vue.component(Glide.name, Glide); + Vue.component(Track.name, Track); + Vue.component(Slide.name, Slide); + } +}; + +return index; + +}))); diff --git a/dist/vue-glide.min.js b/dist/vue-glide.min.js new file mode 100644 index 0000000..4cff3cb --- /dev/null +++ b/dist/vue-glide.min.js @@ -0,0 +1,11 @@ +/*! + * VueGlide.js v3.1.0 + * (c) 2017-2019 jedrzejchalubek (https://jedrzejchalubek.com) + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueGlide=e()}(this,function(){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={type:"slider",startAt:0,perView:1,focusAt:0,gap:10,autoplay:!1,hoverpause:!0,keyboard:!0,bound:!1,swipeThreshold:80,dragThreshold:120,perTouch:!1,touchRatio:.5,touchAngle:45,animationDuration:400,rewind:!0,rewindDuration:800,animationTimingFunc:"cubic-bezier(.165, .840, .440, 1)",throttle:10,direction:"ltr",peek:0,breakpoints:{},classes:{direction:{ltr:"glide--ltr",rtl:"glide--rtl"},slider:"glide--slider",carousel:"glide--carousel",swipeable:"glide--swipeable",dragging:"glide--dragging",cloneSlide:"glide__slide--clone",activeNav:"glide__bullet--active",activeSlide:"glide__slide--active",disabledArrow:"glide__arrow--disabled"}}; +/*! + * Glide.js v3.2.6 + * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/) + * Released under the MIT License. + */var r="function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?function(t){return void 0===t?"undefined":n(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":void 0===t?"undefined":n(t)},o=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},s=function(){function i(t,e){for(var n=0;n":"<","<":">","=":"="};function t(t,e){return{modify:function(t){return e.Direction.is("rtl")?-t:t}}}function O(i,r,o){var s=[function(e,n){return{modify:function(t){return t+n.Gaps.value*e.index}}},function(t,e){return{modify:function(t){return t+e.Clones.grow/2}}},function(n,i){return{modify:function(t){if(0<=n.settings.focusAt){var e=i.Peek.value;return c(e)?t-e.before:t-e}return t}}},function(o,s){return{modify:function(t){var e=s.Gaps.value,n=s.Sizes.width,i=o.settings.focusAt,r=s.Sizes.slideWidth;return"center"===i?t-(n/2-r/2):t-r*i-e*i}}}].concat(i._t,[t]);return{mutate:function(t){for(var e=0;e")?(o.Transition.after(function(){s.emit("translate.jump"),u.set(0)}),u.set(i*n+e*n)):u.set(t.movement)}),s.on("destroy",function(){u.remove()}),u},Transition:function(n,e,t){var i=!1,r={compose:function(t){var e=n.settings;return i?t+" 0ms "+e.animationTimingFunc:t+" "+this.duration+"ms "+e.animationTimingFunc},set:function(){var t=0"))&&(e._o=!1,s.emit("run.offset",e.move)),s.emit("run.after",e.move),o.enable()}))},calculate:function(){var t=this.move,e=this.length,n=t.steps,i=t.direction,r="number"==typeof b(n)&&0!==b(n);switch(i){case">":">"===n?o.index=e:this.isEnd()?(o.isType("slider")&&!o.settings.rewind||(this._o=!0,o.index=0),s.emit("run.end",t)):r?o.index+=Math.min(e-o.index,-b(n)):o.index++;break;case"<":"<"===n?o.index=0:this.isStart()?(o.isType("slider")&&!o.settings.rewind||(this._o=!0,o.index=e),s.emit("run.start",t)):r?o.index-=Math.min(o.index,b(n)):o.index--;break;case"=":o.index=n}},isStart:function(){return 0===o.index},isEnd:function(){return o.index===this.length},isOffset:function(t){return this._o&&this.move.direction===t}};return v(t,"move",{get:function(){return this._m},set:function(t){this._m={direction:t.substr(0,1),steps:t.substr(1)?t.substr(1):0}}}),v(t,"length",{get:function(){var t=o.settings,e=n.Html.slides.length;return o.isType("slider")&&"center"!==t.focusAt&&t.bound?e-1-(b(t.perView)-1)+b(t.focusAt):e-1}}),v(t,"offset",{get:function(){return this._o}}),t},Swipe:function(d,h,p){var n=new x,v=0,m=0,g=0,i=!1,y=!0,r=!!z&&{passive:!0},t={mount:function(){this.bindSwipeStart()},start:function(t){if(!i&&!d.disabled){this.disable();var e=this.touches(t);y=!0,v=null,m=b(e.pageX),g=b(e.pageY),this.bindSwipeMove(),this.bindSwipeEnd(),p.emit("swipe.start")}},move:function(t){if(!d.disabled){var e=d.settings,n=e.touchAngle,i=e.touchRatio,r=e.classes,o=this.touches(t),s=b(o.pageX)-m,u=b(o.pageY)-g,a=Math.abs(s<<2),c=Math.abs(u<<2),l=Math.sqrt(a+c),f=Math.sqrt(c);if(v=Math.asin(f/l),!(y&&180*v/Math.PI"+s))):h.Move.make()),h.Html.root.classList.remove(e.classes.dragging),this.unbindSwipeMove(),this.unbindSwipeEnd(),p.emit("swipe.end")}},bindSwipeStart:function(){var e=this,t=d.settings;t.swipeThreshold&&n.on(M[0],h.Html.wrapper,function(t){e.start(t)},r),t.dragThreshold&&n.on(M[1],h.Html.wrapper,function(t){e.start(t)},r)},unbindSwipeStart:function(){n.off(M[0],h.Html.wrapper,r),n.off(M[1],h.Html.wrapper,r)},bindSwipeMove:function(){var e=this;n.on(P,h.Html.wrapper,_(function(t){e.move(t)},d.settings.throttle),r)},unbindSwipeMove:function(){n.off(P,h.Html.wrapper,r)},bindSwipeEnd:function(){var e=this;n.on(L,h.Html.wrapper,function(t){e.end(t)})},unbindSwipeEnd:function(){n.off(L,h.Html.wrapper)},touches:function(t){return-1")),37===t.keyCode&&e.Run.make(e.Direction.resolve("<"))}};return n.on(["destroy","update"],function(){r.unbind()}),n.on("update",function(){r.mount()}),n.on("destroy",function(){i.destroy()}),r},Autoplay:function(e,n,t){var i=new x,r={mount:function(){this.start(),e.settings.hoverpause&&this.bind()},start:function(){var t=this;e.settings.autoplay&&f(this._i)&&(this._i=setInterval(function(){t.stop(),n.Run.make(">"),t.start()},this.time))},stop:function(){this._i=clearInterval(this._i)},bind:function(){var t=this;i.on("mouseover",n.Html.root,function(){t.stop()}),i.on("mouseout",n.Html.root,function(){t.start()})},unbind:function(){i.off(["mouseover","mouseout"],n.Html.root)}};return v(r,"time",{get:function(){var t=n.Html.slides[e.index].getAttribute("data-glide-autoplay");return b(t||e.settings.autoplay)}}),t.on(["destroy","update"],function(){r.unbind()}),t.on(["run.before","pause","destroy","swipe.start","update"],function(){r.stop()}),t.on(["run.after","play","swipe.end"],function(){r.start()}),t.on("update",function(){r.mount()}),t.on("destroy",function(){i.destroy()}),r},Breakpoints:function(t,e,n){var i=new x,r=t.settings,o=R(r.breakpoints),s=a({},r),u={match:function(t){if(void 0!==window.matchMedia)for(var e in t)if(t.hasOwnProperty(e)&&window.matchMedia("(max-width: "+e+"px)").matches)return t[e];return s}};return a(r,u.match(o)),i.on("resize",window,_(function(){t.settings=h(r,u.match(o))},t.settings.throttle)),n.on("update",function(){o=R(o),s=a({},r)}),n.on("destroy",function(){i.off("resize",window)}),u}},N=function(t){function e(){return o(this,e),function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":n(e))&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":n(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,m),s(e,[{key:"mount",value:function(){var t=0