├── .gitignore ├── LICENSE.txt ├── README.md ├── dist ├── native.smooth.scroll.umd.js └── native.smooth.scroll.umd.min.js ├── package-lock.json ├── package.json ├── rollup.config.js └── src └── native.smooth.scroll.js /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /.idea 3 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2018 Martin Laxenaire 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Native smooth scroll 2 | 3 |

Initializing

4 | 5 | ```javascript 6 | import {SmoothScroll} from './src/native.smooth.scroll.js'; 7 | 8 | const smoothScroll = new SmoothScroll({ 9 | container: document.querySelector(".container"), 10 | }); 11 | ``` 12 | 13 | In a browser, you can use the UMD files located in the `dist` directory: 14 | 15 | ```html 16 | 17 | ``` 18 | 19 | ```javascript 20 | const smoothScroll = new SmoothScroll({ 21 | container: document.querySelector(".container"), 22 | }); 23 | ``` 24 | 25 |

Parameters

26 | 27 | Here are the basic parameters that you can specify: 28 | 29 | | Parameter | Type | Default | Description | 30 | | --- | --- | --- | --- | 31 | | container | HTML node | document.body | container that will be fixed and translated to according scroll values | 32 | | inertia | float | 0.1 | Easing value | 33 | | threshold | float | 0.5 | Threshold to stop the easing animation, in pixels | 34 | | useRaf | bool | false | Whether to use the built-in requestAnimationFrame callback. | 35 | 36 | ```javascript 37 | const smoothScroll = new SmoothScroll({ 38 | // container that will be translated 39 | container: document.getElementById("content"), 40 | // round the threshold to 1 pixel 41 | threshold: 1, 42 | // use built-in raf loop 43 | useRaf: true 44 | }); 45 | ``` 46 | 47 |

Methods

48 | 49 | | Name | Description | 50 | | --- | --- | 51 | | resize | Should be called in a window resize event to update the values | 52 | | update | Should be called to update internal values when the document height changed | 53 | | scrollTo | Immediately scroll to a defined position | 54 | | render | Update our current scroll and velocity values, translate the container and emit our onScroll event. Should be called at each tick of a requestAnimationFrame callback if useRaf is set to false | 55 | 56 | ```javascript 57 | const smoothScroll = new SmoothScroll({ 58 | // container that will be translated 59 | container: document.getElementById("content"), 60 | // round the threshold to 1 pixel 61 | threshold: 1, 62 | // use built-in raf loop 63 | useRaf: true 64 | }); 65 | 66 | window.addEventListener("resize", () => { 67 | smoothScroll.resize(); 68 | }); 69 | ``` 70 | 71 |

onScroll callback

72 | 73 | ```javascript 74 | const smoothScroll = new SmoothScroll({ 75 | // container that will be translated 76 | container: document.getElementById("content"), 77 | // round the threshold to 1 pixel 78 | threshold: 1, 79 | // use built-in raf loop 80 | useRaf: true 81 | }); 82 | 83 | smoothScroll.onScroll((scroll) => { 84 | // an object containing the current scroll value, the target scroll value and the velocity value 85 | console.log(scroll); 86 | }); 87 | ``` 88 | -------------------------------------------------------------------------------- /dist/native.smooth.scroll.umd.js: -------------------------------------------------------------------------------- 1 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 2 | 3 | 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); } } 4 | 5 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 6 | 7 | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 8 | 9 | (function (global, factory) { 10 | (typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = global || self, factory(global.window = global.window || {})); 11 | })(this, function (exports) { 12 | 'use strict'; 13 | /** 14 | * SmoothScroll v1.0.0 15 | * https://github.com/martinlaxenaire/native-smooth-scroll 16 | * 17 | * Author: Martin Laxenaire 18 | * https://www.martin-laxenaire.fr/ 19 | * 20 | * */ 21 | 22 | var SmoothScroll = /*#__PURE__*/function () { 23 | /** 24 | * Init our class 25 | * 26 | * @param container (HTML element): container that will be translated to according scroll values 27 | * @param inertia (float): easing value. Default to 0.1. 28 | * @param threshold (float): when to stop the easing. Default to 0.5. 29 | * @param useRaf (bool): whether to use the built-in requestAnimationFrame callback. Default to false. 30 | */ 31 | function SmoothScroll() { 32 | var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, 33 | container = _ref.container, 34 | _ref$inertia = _ref.inertia, 35 | inertia = _ref$inertia === void 0 ? 0.1 : _ref$inertia, 36 | _ref$threshold = _ref.threshold, 37 | threshold = _ref$threshold === void 0 ? 0.5 : _ref$threshold, 38 | _ref$useRaf = _ref.useRaf, 39 | useRaf = _ref$useRaf === void 0 ? false : _ref$useRaf; 40 | 41 | _classCallCheck(this, SmoothScroll); 42 | 43 | this.container = container; // no container, return 44 | 45 | if (!this.container) { 46 | console.warn("Can't init SmoothScroll class because the container passed does not exist:", container); 47 | return; 48 | } 49 | 50 | this.inertia = inertia; 51 | this.threshold = threshold; 52 | this._useRaf = useRaf; 53 | this._raf = null; // are we currently animating the scroll 54 | 55 | this._isScrolling = false; // will hold our scroll values 56 | 57 | this.scroll = {}; // will hold our sizes values 58 | 59 | this.store = {}; // set sizes and init everything 60 | 61 | this.resize(); 62 | this.init(); 63 | } 64 | /** 65 | * Apply fixed position to our container and start listening to scroll event 66 | */ 67 | 68 | 69 | _createClass(SmoothScroll, [{ 70 | key: "init", 71 | value: function init() { 72 | var _this = this; 73 | 74 | // set container styles 75 | this.container.style.position = "fixed"; 76 | this.container.style.top = 0; 77 | this.container.style.left = 0; 78 | this.container.style.width = "100%"; // page scrolled on load 79 | 80 | if (this.scroll.current !== 0) { 81 | this.scrollTo(this.scroll.current); 82 | setTimeout(function () { 83 | _this.emitScroll(); 84 | }, 0); 85 | } 86 | 87 | window.addEventListener("scroll", function () { 88 | return _this.scrollEvent(); 89 | }); 90 | 91 | if (this._useRaf) { 92 | this.animate(); 93 | } 94 | } 95 | /** 96 | * Update our store sizes 97 | */ 98 | 99 | }, { 100 | key: "update", 101 | value: function update() { 102 | this.store.documentHeight = this.container.clientHeight; 103 | this.store.windowHeight = window.innerHeight; 104 | document.body.style.height = this.store.documentHeight + "px"; 105 | } 106 | /** 107 | * Reset our store and scroll values 108 | * Should be called in a window resize event to update the values 109 | */ 110 | 111 | }, { 112 | key: "resize", 113 | value: function resize() { 114 | this.update(); 115 | var newScrollValue = window.pageYOffset; 116 | this.scroll = { 117 | target: newScrollValue, 118 | current: newScrollValue, 119 | velocity: 0 120 | }; 121 | this.scrollTo(this.scroll.current); 122 | } 123 | /** 124 | * Simple utility function to linear interpolate values 125 | * 126 | * @param start (float): value to lerp 127 | * @param end (float): target value 128 | * @param amount (float): easing 129 | * 130 | * @returns (float): lerped value 131 | */ 132 | 133 | }, { 134 | key: "lerp", 135 | value: function lerp(start, end, amount) { 136 | return ((1 - amount) * start + amount * end).toFixed(2); 137 | } 138 | /** 139 | * Add our scroll event listener and update our scroll target value on scroll 140 | */ 141 | 142 | }, { 143 | key: "scrollEvent", 144 | value: function scrollEvent() { 145 | this.scroll.target = window.pageYOffset; 146 | } 147 | /** 148 | * Emit our onScroll event with our current, target and velocity scroll values 149 | */ 150 | 151 | }, { 152 | key: "emitScroll", 153 | value: function emitScroll() { 154 | if (this.onScrollCallback) { 155 | this.onScrollCallback({ 156 | current: this.scroll.current, 157 | target: this.scroll.target, 158 | velocity: this.scroll.velocity 159 | }); 160 | } 161 | } 162 | /** 163 | * Immediately scroll to a defined position 164 | * 165 | * @param value (float): new scroll position 166 | */ 167 | 168 | }, { 169 | key: "scrollTo", 170 | value: function scrollTo(value) { 171 | value = Math.max(0, Math.min(value, this.store.documentHeight - this.store.windowHeight)); 172 | this.scroll.current = value; 173 | this.scroll.target = value; 174 | this.scroll.velocity = 0; // force window scroll to update as well 175 | 176 | window.scrollTo(0, value); 177 | this.updatePosition(); 178 | this.emitScroll(); 179 | } 180 | /** 181 | * Translate our container 182 | */ 183 | 184 | }, { 185 | key: "updatePosition", 186 | value: function updatePosition() { 187 | this.container.style.transform = "translateY(" + -this.scroll.current + "px)"; 188 | } 189 | /** 190 | * Update our current scroll and velocity values, translate the container and emit our onScroll event 191 | * Should be called at each tick of a requestAnimationFrame callback 192 | */ 193 | 194 | }, { 195 | key: "render", 196 | value: function render() { 197 | // update current and velocity scroll values 198 | var previous = this.scroll.current; 199 | this.scroll.current = this.lerp(this.scroll.current, this.scroll.target, this.inertia); 200 | this.scroll.velocity = this.scroll.current - previous; // if we haven't reached our threshold value, update our position and emit scroll 201 | 202 | if (Math.abs(this.scroll.current - this.scroll.target) >= this.threshold) { 203 | this._isScrolling = true; 204 | this.updatePosition(); 205 | this.emitScroll(); 206 | } else if (this._isScrolling) { 207 | // if we have reached the threshold value, reset our current and velocity scroll values 208 | // and emit one last onScroll event 209 | this._isScrolling = false; 210 | this.scroll.current = this.scroll.target; 211 | this.scroll.velocity = 0; 212 | this.updatePosition(); 213 | this.emitScroll(); 214 | } 215 | } 216 | }, { 217 | key: "animate", 218 | value: function animate() { 219 | var _this2 = this; 220 | 221 | this.render(); 222 | this._raf = window.requestAnimationFrame(function () { 223 | return _this2.animate(); 224 | }); 225 | } 226 | /** 227 | * onScroll event 228 | * 229 | * @param callback (function): the callback function 230 | */ 231 | 232 | }, { 233 | key: "onScroll", 234 | value: function onScroll(callback) { 235 | if (callback) { 236 | this.onScrollCallback = callback; 237 | } 238 | } 239 | /** 240 | * Destroy the smooth scroll instance 241 | */ 242 | 243 | }, { 244 | key: "destroy", 245 | value: function destroy() { 246 | if (this._raf) { 247 | window.cancelAnimationFrame(this._raf); 248 | } 249 | 250 | window.removeEventListener(this.scrollEvent); 251 | } 252 | }]); 253 | 254 | return SmoothScroll; 255 | }(); 256 | 257 | exports.SmoothScroll = SmoothScroll; 258 | Object.defineProperty(exports, '__esModule', { 259 | value: true 260 | }); 261 | }); 262 | -------------------------------------------------------------------------------- /dist/native.smooth.scroll.umd.min.js: -------------------------------------------------------------------------------- 1 | function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},i=e.container,o=e.inertia,n=void 0===o?.1:o,r=e.threshold,s=void 0===r?.5:r,l=e.useRaf,c=void 0!==l&&l;_classCallCheck(this,t),this.container=i,this.container?(this.inertia=n,this.threshold=s,this._useRaf=c,this._raf=null,this._isScrolling=!1,this.scroll={},this.store={},this.resize(),this.init()):console.warn("Can't init SmoothScroll class because the container passed does not exist:",i)}return _createClass(t,[{key:"init",value:function(){var t=this;this.container.style.position="fixed",this.container.style.top=0,this.container.style.left=0,this.container.style.width="100%",0!==this.scroll.current&&(this.scrollTo(this.scroll.current),setTimeout((function(){t.emitScroll()}),0)),window.addEventListener("scroll",(function(){return t.scrollEvent()})),this._useRaf&&this.animate()}},{key:"update",value:function(){this.store.documentHeight=this.container.clientHeight,this.store.windowHeight=window.innerHeight,document.body.style.height=this.store.documentHeight+"px"}},{key:"resize",value:function(){this.update();var t=window.pageYOffset;this.scroll={target:t,current:t,velocity:0},this.scrollTo(this.scroll.current)}},{key:"lerp",value:function(t,e,i){return((1-i)*t+i*e).toFixed(2)}},{key:"scrollEvent",value:function(){this.scroll.target=window.pageYOffset}},{key:"emitScroll",value:function(){this.onScrollCallback&&this.onScrollCallback({current:this.scroll.current,target:this.scroll.target,velocity:this.scroll.velocity})}},{key:"scrollTo",value:function(t){t=Math.max(0,Math.min(t,this.store.documentHeight-this.store.windowHeight)),this.scroll.current=t,this.scroll.target=t,this.scroll.velocity=0,window.scrollTo(0,t),this.updatePosition(),this.emitScroll()}},{key:"updatePosition",value:function(){this.container.style.transform="translateY("+-this.scroll.current+"px)"}},{key:"render",value:function(){var t=this.scroll.current;this.scroll.current=this.lerp(this.scroll.current,this.scroll.target,this.inertia),this.scroll.velocity=this.scroll.current-t,Math.abs(this.scroll.current-this.scroll.target)>=this.threshold?(this._isScrolling=!0,this.updatePosition(),this.emitScroll()):this._isScrolling&&(this._isScrolling=!1,this.scroll.current=this.scroll.target,this.scroll.velocity=0,this.updatePosition(),this.emitScroll())}},{key:"animate",value:function(){var t=this;this.render(),this._raf=window.requestAnimationFrame((function(){return t.animate()}))}},{key:"onScroll",value:function(t){t&&(this.onScrollCallback=t)}},{key:"destroy",value:function(){this._raf&&window.cancelAnimationFrame(this._raf),window.removeEventListener(this.scrollEvent)}}]),t}();t.SmoothScroll=e,Object.defineProperty(t,"__esModule",{value:!0})})); 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "native-smooth-scroll", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.4", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 10 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/compat-data": { 17 | "version": "7.11.0", 18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", 19 | "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", 20 | "dev": true, 21 | "requires": { 22 | "browserslist": "^4.12.0", 23 | "invariant": "^2.2.4", 24 | "semver": "^5.5.0" 25 | } 26 | }, 27 | "@babel/core": { 28 | "version": "7.11.6", 29 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", 30 | "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", 31 | "dev": true, 32 | "requires": { 33 | "@babel/code-frame": "^7.10.4", 34 | "@babel/generator": "^7.11.6", 35 | "@babel/helper-module-transforms": "^7.11.0", 36 | "@babel/helpers": "^7.10.4", 37 | "@babel/parser": "^7.11.5", 38 | "@babel/template": "^7.10.4", 39 | "@babel/traverse": "^7.11.5", 40 | "@babel/types": "^7.11.5", 41 | "convert-source-map": "^1.7.0", 42 | "debug": "^4.1.0", 43 | "gensync": "^1.0.0-beta.1", 44 | "json5": "^2.1.2", 45 | "lodash": "^4.17.19", 46 | "resolve": "^1.3.2", 47 | "semver": "^5.4.1", 48 | "source-map": "^0.5.0" 49 | }, 50 | "dependencies": { 51 | "source-map": { 52 | "version": "0.5.7", 53 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 54 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 55 | "dev": true 56 | } 57 | } 58 | }, 59 | "@babel/generator": { 60 | "version": "7.11.6", 61 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", 62 | "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", 63 | "dev": true, 64 | "requires": { 65 | "@babel/types": "^7.11.5", 66 | "jsesc": "^2.5.1", 67 | "source-map": "^0.5.0" 68 | }, 69 | "dependencies": { 70 | "source-map": { 71 | "version": "0.5.7", 72 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 73 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 74 | "dev": true 75 | } 76 | } 77 | }, 78 | "@babel/helper-annotate-as-pure": { 79 | "version": "7.10.4", 80 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", 81 | "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", 82 | "dev": true, 83 | "requires": { 84 | "@babel/types": "^7.10.4" 85 | } 86 | }, 87 | "@babel/helper-builder-binary-assignment-operator-visitor": { 88 | "version": "7.10.4", 89 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", 90 | "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", 91 | "dev": true, 92 | "requires": { 93 | "@babel/helper-explode-assignable-expression": "^7.10.4", 94 | "@babel/types": "^7.10.4" 95 | } 96 | }, 97 | "@babel/helper-compilation-targets": { 98 | "version": "7.10.4", 99 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", 100 | "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", 101 | "dev": true, 102 | "requires": { 103 | "@babel/compat-data": "^7.10.4", 104 | "browserslist": "^4.12.0", 105 | "invariant": "^2.2.4", 106 | "levenary": "^1.1.1", 107 | "semver": "^5.5.0" 108 | } 109 | }, 110 | "@babel/helper-create-class-features-plugin": { 111 | "version": "7.10.5", 112 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", 113 | "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", 114 | "dev": true, 115 | "requires": { 116 | "@babel/helper-function-name": "^7.10.4", 117 | "@babel/helper-member-expression-to-functions": "^7.10.5", 118 | "@babel/helper-optimise-call-expression": "^7.10.4", 119 | "@babel/helper-plugin-utils": "^7.10.4", 120 | "@babel/helper-replace-supers": "^7.10.4", 121 | "@babel/helper-split-export-declaration": "^7.10.4" 122 | } 123 | }, 124 | "@babel/helper-create-regexp-features-plugin": { 125 | "version": "7.10.4", 126 | "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", 127 | "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", 128 | "dev": true, 129 | "requires": { 130 | "@babel/helper-annotate-as-pure": "^7.10.4", 131 | "@babel/helper-regex": "^7.10.4", 132 | "regexpu-core": "^4.7.0" 133 | } 134 | }, 135 | "@babel/helper-define-map": { 136 | "version": "7.10.5", 137 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", 138 | "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", 139 | "dev": true, 140 | "requires": { 141 | "@babel/helper-function-name": "^7.10.4", 142 | "@babel/types": "^7.10.5", 143 | "lodash": "^4.17.19" 144 | } 145 | }, 146 | "@babel/helper-explode-assignable-expression": { 147 | "version": "7.11.4", 148 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", 149 | "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", 150 | "dev": true, 151 | "requires": { 152 | "@babel/types": "^7.10.4" 153 | } 154 | }, 155 | "@babel/helper-function-name": { 156 | "version": "7.10.4", 157 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", 158 | "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", 159 | "dev": true, 160 | "requires": { 161 | "@babel/helper-get-function-arity": "^7.10.4", 162 | "@babel/template": "^7.10.4", 163 | "@babel/types": "^7.10.4" 164 | } 165 | }, 166 | "@babel/helper-get-function-arity": { 167 | "version": "7.10.4", 168 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", 169 | "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", 170 | "dev": true, 171 | "requires": { 172 | "@babel/types": "^7.10.4" 173 | } 174 | }, 175 | "@babel/helper-hoist-variables": { 176 | "version": "7.10.4", 177 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", 178 | "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", 179 | "dev": true, 180 | "requires": { 181 | "@babel/types": "^7.10.4" 182 | } 183 | }, 184 | "@babel/helper-member-expression-to-functions": { 185 | "version": "7.11.0", 186 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", 187 | "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", 188 | "dev": true, 189 | "requires": { 190 | "@babel/types": "^7.11.0" 191 | } 192 | }, 193 | "@babel/helper-module-imports": { 194 | "version": "7.10.4", 195 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", 196 | "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", 197 | "dev": true, 198 | "requires": { 199 | "@babel/types": "^7.10.4" 200 | } 201 | }, 202 | "@babel/helper-module-transforms": { 203 | "version": "7.11.0", 204 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", 205 | "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", 206 | "dev": true, 207 | "requires": { 208 | "@babel/helper-module-imports": "^7.10.4", 209 | "@babel/helper-replace-supers": "^7.10.4", 210 | "@babel/helper-simple-access": "^7.10.4", 211 | "@babel/helper-split-export-declaration": "^7.11.0", 212 | "@babel/template": "^7.10.4", 213 | "@babel/types": "^7.11.0", 214 | "lodash": "^4.17.19" 215 | } 216 | }, 217 | "@babel/helper-optimise-call-expression": { 218 | "version": "7.10.4", 219 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", 220 | "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", 221 | "dev": true, 222 | "requires": { 223 | "@babel/types": "^7.10.4" 224 | } 225 | }, 226 | "@babel/helper-plugin-utils": { 227 | "version": "7.10.4", 228 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", 229 | "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", 230 | "dev": true 231 | }, 232 | "@babel/helper-regex": { 233 | "version": "7.10.5", 234 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", 235 | "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", 236 | "dev": true, 237 | "requires": { 238 | "lodash": "^4.17.19" 239 | } 240 | }, 241 | "@babel/helper-remap-async-to-generator": { 242 | "version": "7.11.4", 243 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", 244 | "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", 245 | "dev": true, 246 | "requires": { 247 | "@babel/helper-annotate-as-pure": "^7.10.4", 248 | "@babel/helper-wrap-function": "^7.10.4", 249 | "@babel/template": "^7.10.4", 250 | "@babel/types": "^7.10.4" 251 | } 252 | }, 253 | "@babel/helper-replace-supers": { 254 | "version": "7.10.4", 255 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", 256 | "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", 257 | "dev": true, 258 | "requires": { 259 | "@babel/helper-member-expression-to-functions": "^7.10.4", 260 | "@babel/helper-optimise-call-expression": "^7.10.4", 261 | "@babel/traverse": "^7.10.4", 262 | "@babel/types": "^7.10.4" 263 | } 264 | }, 265 | "@babel/helper-simple-access": { 266 | "version": "7.10.4", 267 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", 268 | "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", 269 | "dev": true, 270 | "requires": { 271 | "@babel/template": "^7.10.4", 272 | "@babel/types": "^7.10.4" 273 | } 274 | }, 275 | "@babel/helper-skip-transparent-expression-wrappers": { 276 | "version": "7.11.0", 277 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", 278 | "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", 279 | "dev": true, 280 | "requires": { 281 | "@babel/types": "^7.11.0" 282 | } 283 | }, 284 | "@babel/helper-split-export-declaration": { 285 | "version": "7.11.0", 286 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", 287 | "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", 288 | "dev": true, 289 | "requires": { 290 | "@babel/types": "^7.11.0" 291 | } 292 | }, 293 | "@babel/helper-validator-identifier": { 294 | "version": "7.10.4", 295 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 296 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 297 | "dev": true 298 | }, 299 | "@babel/helper-wrap-function": { 300 | "version": "7.10.4", 301 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", 302 | "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", 303 | "dev": true, 304 | "requires": { 305 | "@babel/helper-function-name": "^7.10.4", 306 | "@babel/template": "^7.10.4", 307 | "@babel/traverse": "^7.10.4", 308 | "@babel/types": "^7.10.4" 309 | } 310 | }, 311 | "@babel/helpers": { 312 | "version": "7.10.4", 313 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", 314 | "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", 315 | "dev": true, 316 | "requires": { 317 | "@babel/template": "^7.10.4", 318 | "@babel/traverse": "^7.10.4", 319 | "@babel/types": "^7.10.4" 320 | } 321 | }, 322 | "@babel/highlight": { 323 | "version": "7.10.4", 324 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 325 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 326 | "dev": true, 327 | "requires": { 328 | "@babel/helper-validator-identifier": "^7.10.4", 329 | "chalk": "^2.0.0", 330 | "js-tokens": "^4.0.0" 331 | } 332 | }, 333 | "@babel/parser": { 334 | "version": "7.11.5", 335 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", 336 | "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", 337 | "dev": true 338 | }, 339 | "@babel/plugin-proposal-async-generator-functions": { 340 | "version": "7.10.5", 341 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", 342 | "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", 343 | "dev": true, 344 | "requires": { 345 | "@babel/helper-plugin-utils": "^7.10.4", 346 | "@babel/helper-remap-async-to-generator": "^7.10.4", 347 | "@babel/plugin-syntax-async-generators": "^7.8.0" 348 | } 349 | }, 350 | "@babel/plugin-proposal-class-properties": { 351 | "version": "7.10.4", 352 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", 353 | "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", 354 | "dev": true, 355 | "requires": { 356 | "@babel/helper-create-class-features-plugin": "^7.10.4", 357 | "@babel/helper-plugin-utils": "^7.10.4" 358 | } 359 | }, 360 | "@babel/plugin-proposal-dynamic-import": { 361 | "version": "7.10.4", 362 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", 363 | "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", 364 | "dev": true, 365 | "requires": { 366 | "@babel/helper-plugin-utils": "^7.10.4", 367 | "@babel/plugin-syntax-dynamic-import": "^7.8.0" 368 | } 369 | }, 370 | "@babel/plugin-proposal-export-namespace-from": { 371 | "version": "7.10.4", 372 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", 373 | "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", 374 | "dev": true, 375 | "requires": { 376 | "@babel/helper-plugin-utils": "^7.10.4", 377 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3" 378 | } 379 | }, 380 | "@babel/plugin-proposal-json-strings": { 381 | "version": "7.10.4", 382 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", 383 | "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", 384 | "dev": true, 385 | "requires": { 386 | "@babel/helper-plugin-utils": "^7.10.4", 387 | "@babel/plugin-syntax-json-strings": "^7.8.0" 388 | } 389 | }, 390 | "@babel/plugin-proposal-logical-assignment-operators": { 391 | "version": "7.11.0", 392 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", 393 | "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", 394 | "dev": true, 395 | "requires": { 396 | "@babel/helper-plugin-utils": "^7.10.4", 397 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" 398 | } 399 | }, 400 | "@babel/plugin-proposal-nullish-coalescing-operator": { 401 | "version": "7.10.4", 402 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", 403 | "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", 404 | "dev": true, 405 | "requires": { 406 | "@babel/helper-plugin-utils": "^7.10.4", 407 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" 408 | } 409 | }, 410 | "@babel/plugin-proposal-numeric-separator": { 411 | "version": "7.10.4", 412 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", 413 | "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", 414 | "dev": true, 415 | "requires": { 416 | "@babel/helper-plugin-utils": "^7.10.4", 417 | "@babel/plugin-syntax-numeric-separator": "^7.10.4" 418 | } 419 | }, 420 | "@babel/plugin-proposal-object-rest-spread": { 421 | "version": "7.11.0", 422 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", 423 | "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", 424 | "dev": true, 425 | "requires": { 426 | "@babel/helper-plugin-utils": "^7.10.4", 427 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 428 | "@babel/plugin-transform-parameters": "^7.10.4" 429 | } 430 | }, 431 | "@babel/plugin-proposal-optional-catch-binding": { 432 | "version": "7.10.4", 433 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", 434 | "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", 435 | "dev": true, 436 | "requires": { 437 | "@babel/helper-plugin-utils": "^7.10.4", 438 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" 439 | } 440 | }, 441 | "@babel/plugin-proposal-optional-chaining": { 442 | "version": "7.11.0", 443 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", 444 | "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", 445 | "dev": true, 446 | "requires": { 447 | "@babel/helper-plugin-utils": "^7.10.4", 448 | "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", 449 | "@babel/plugin-syntax-optional-chaining": "^7.8.0" 450 | } 451 | }, 452 | "@babel/plugin-proposal-private-methods": { 453 | "version": "7.10.4", 454 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", 455 | "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", 456 | "dev": true, 457 | "requires": { 458 | "@babel/helper-create-class-features-plugin": "^7.10.4", 459 | "@babel/helper-plugin-utils": "^7.10.4" 460 | } 461 | }, 462 | "@babel/plugin-proposal-unicode-property-regex": { 463 | "version": "7.10.4", 464 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", 465 | "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", 466 | "dev": true, 467 | "requires": { 468 | "@babel/helper-create-regexp-features-plugin": "^7.10.4", 469 | "@babel/helper-plugin-utils": "^7.10.4" 470 | } 471 | }, 472 | "@babel/plugin-syntax-async-generators": { 473 | "version": "7.8.4", 474 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 475 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 476 | "dev": true, 477 | "requires": { 478 | "@babel/helper-plugin-utils": "^7.8.0" 479 | } 480 | }, 481 | "@babel/plugin-syntax-class-properties": { 482 | "version": "7.10.4", 483 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", 484 | "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", 485 | "dev": true, 486 | "requires": { 487 | "@babel/helper-plugin-utils": "^7.10.4" 488 | } 489 | }, 490 | "@babel/plugin-syntax-dynamic-import": { 491 | "version": "7.8.3", 492 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 493 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 494 | "dev": true, 495 | "requires": { 496 | "@babel/helper-plugin-utils": "^7.8.0" 497 | } 498 | }, 499 | "@babel/plugin-syntax-export-namespace-from": { 500 | "version": "7.8.3", 501 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", 502 | "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", 503 | "dev": true, 504 | "requires": { 505 | "@babel/helper-plugin-utils": "^7.8.3" 506 | } 507 | }, 508 | "@babel/plugin-syntax-json-strings": { 509 | "version": "7.8.3", 510 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 511 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 512 | "dev": true, 513 | "requires": { 514 | "@babel/helper-plugin-utils": "^7.8.0" 515 | } 516 | }, 517 | "@babel/plugin-syntax-logical-assignment-operators": { 518 | "version": "7.10.4", 519 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 520 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 521 | "dev": true, 522 | "requires": { 523 | "@babel/helper-plugin-utils": "^7.10.4" 524 | } 525 | }, 526 | "@babel/plugin-syntax-nullish-coalescing-operator": { 527 | "version": "7.8.3", 528 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 529 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 530 | "dev": true, 531 | "requires": { 532 | "@babel/helper-plugin-utils": "^7.8.0" 533 | } 534 | }, 535 | "@babel/plugin-syntax-numeric-separator": { 536 | "version": "7.10.4", 537 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", 538 | "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", 539 | "dev": true, 540 | "requires": { 541 | "@babel/helper-plugin-utils": "^7.10.4" 542 | } 543 | }, 544 | "@babel/plugin-syntax-object-rest-spread": { 545 | "version": "7.8.3", 546 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 547 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 548 | "dev": true, 549 | "requires": { 550 | "@babel/helper-plugin-utils": "^7.8.0" 551 | } 552 | }, 553 | "@babel/plugin-syntax-optional-catch-binding": { 554 | "version": "7.8.3", 555 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 556 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 557 | "dev": true, 558 | "requires": { 559 | "@babel/helper-plugin-utils": "^7.8.0" 560 | } 561 | }, 562 | "@babel/plugin-syntax-optional-chaining": { 563 | "version": "7.8.3", 564 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 565 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 566 | "dev": true, 567 | "requires": { 568 | "@babel/helper-plugin-utils": "^7.8.0" 569 | } 570 | }, 571 | "@babel/plugin-syntax-top-level-await": { 572 | "version": "7.10.4", 573 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", 574 | "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", 575 | "dev": true, 576 | "requires": { 577 | "@babel/helper-plugin-utils": "^7.10.4" 578 | } 579 | }, 580 | "@babel/plugin-transform-arrow-functions": { 581 | "version": "7.10.4", 582 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", 583 | "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", 584 | "dev": true, 585 | "requires": { 586 | "@babel/helper-plugin-utils": "^7.10.4" 587 | } 588 | }, 589 | "@babel/plugin-transform-async-to-generator": { 590 | "version": "7.10.4", 591 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", 592 | "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", 593 | "dev": true, 594 | "requires": { 595 | "@babel/helper-module-imports": "^7.10.4", 596 | "@babel/helper-plugin-utils": "^7.10.4", 597 | "@babel/helper-remap-async-to-generator": "^7.10.4" 598 | } 599 | }, 600 | "@babel/plugin-transform-block-scoped-functions": { 601 | "version": "7.10.4", 602 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", 603 | "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", 604 | "dev": true, 605 | "requires": { 606 | "@babel/helper-plugin-utils": "^7.10.4" 607 | } 608 | }, 609 | "@babel/plugin-transform-block-scoping": { 610 | "version": "7.11.1", 611 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", 612 | "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", 613 | "dev": true, 614 | "requires": { 615 | "@babel/helper-plugin-utils": "^7.10.4" 616 | } 617 | }, 618 | "@babel/plugin-transform-classes": { 619 | "version": "7.10.4", 620 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", 621 | "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", 622 | "dev": true, 623 | "requires": { 624 | "@babel/helper-annotate-as-pure": "^7.10.4", 625 | "@babel/helper-define-map": "^7.10.4", 626 | "@babel/helper-function-name": "^7.10.4", 627 | "@babel/helper-optimise-call-expression": "^7.10.4", 628 | "@babel/helper-plugin-utils": "^7.10.4", 629 | "@babel/helper-replace-supers": "^7.10.4", 630 | "@babel/helper-split-export-declaration": "^7.10.4", 631 | "globals": "^11.1.0" 632 | } 633 | }, 634 | "@babel/plugin-transform-computed-properties": { 635 | "version": "7.10.4", 636 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", 637 | "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", 638 | "dev": true, 639 | "requires": { 640 | "@babel/helper-plugin-utils": "^7.10.4" 641 | } 642 | }, 643 | "@babel/plugin-transform-destructuring": { 644 | "version": "7.10.4", 645 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", 646 | "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", 647 | "dev": true, 648 | "requires": { 649 | "@babel/helper-plugin-utils": "^7.10.4" 650 | } 651 | }, 652 | "@babel/plugin-transform-dotall-regex": { 653 | "version": "7.10.4", 654 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", 655 | "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", 656 | "dev": true, 657 | "requires": { 658 | "@babel/helper-create-regexp-features-plugin": "^7.10.4", 659 | "@babel/helper-plugin-utils": "^7.10.4" 660 | } 661 | }, 662 | "@babel/plugin-transform-duplicate-keys": { 663 | "version": "7.10.4", 664 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", 665 | "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", 666 | "dev": true, 667 | "requires": { 668 | "@babel/helper-plugin-utils": "^7.10.4" 669 | } 670 | }, 671 | "@babel/plugin-transform-exponentiation-operator": { 672 | "version": "7.10.4", 673 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", 674 | "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", 675 | "dev": true, 676 | "requires": { 677 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", 678 | "@babel/helper-plugin-utils": "^7.10.4" 679 | } 680 | }, 681 | "@babel/plugin-transform-for-of": { 682 | "version": "7.10.4", 683 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", 684 | "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", 685 | "dev": true, 686 | "requires": { 687 | "@babel/helper-plugin-utils": "^7.10.4" 688 | } 689 | }, 690 | "@babel/plugin-transform-function-name": { 691 | "version": "7.10.4", 692 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", 693 | "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", 694 | "dev": true, 695 | "requires": { 696 | "@babel/helper-function-name": "^7.10.4", 697 | "@babel/helper-plugin-utils": "^7.10.4" 698 | } 699 | }, 700 | "@babel/plugin-transform-literals": { 701 | "version": "7.10.4", 702 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", 703 | "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", 704 | "dev": true, 705 | "requires": { 706 | "@babel/helper-plugin-utils": "^7.10.4" 707 | } 708 | }, 709 | "@babel/plugin-transform-member-expression-literals": { 710 | "version": "7.10.4", 711 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", 712 | "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", 713 | "dev": true, 714 | "requires": { 715 | "@babel/helper-plugin-utils": "^7.10.4" 716 | } 717 | }, 718 | "@babel/plugin-transform-modules-amd": { 719 | "version": "7.10.5", 720 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", 721 | "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", 722 | "dev": true, 723 | "requires": { 724 | "@babel/helper-module-transforms": "^7.10.5", 725 | "@babel/helper-plugin-utils": "^7.10.4", 726 | "babel-plugin-dynamic-import-node": "^2.3.3" 727 | } 728 | }, 729 | "@babel/plugin-transform-modules-commonjs": { 730 | "version": "7.10.4", 731 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", 732 | "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", 733 | "dev": true, 734 | "requires": { 735 | "@babel/helper-module-transforms": "^7.10.4", 736 | "@babel/helper-plugin-utils": "^7.10.4", 737 | "@babel/helper-simple-access": "^7.10.4", 738 | "babel-plugin-dynamic-import-node": "^2.3.3" 739 | } 740 | }, 741 | "@babel/plugin-transform-modules-systemjs": { 742 | "version": "7.10.5", 743 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", 744 | "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", 745 | "dev": true, 746 | "requires": { 747 | "@babel/helper-hoist-variables": "^7.10.4", 748 | "@babel/helper-module-transforms": "^7.10.5", 749 | "@babel/helper-plugin-utils": "^7.10.4", 750 | "babel-plugin-dynamic-import-node": "^2.3.3" 751 | } 752 | }, 753 | "@babel/plugin-transform-modules-umd": { 754 | "version": "7.10.4", 755 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", 756 | "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", 757 | "dev": true, 758 | "requires": { 759 | "@babel/helper-module-transforms": "^7.10.4", 760 | "@babel/helper-plugin-utils": "^7.10.4" 761 | } 762 | }, 763 | "@babel/plugin-transform-named-capturing-groups-regex": { 764 | "version": "7.10.4", 765 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", 766 | "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", 767 | "dev": true, 768 | "requires": { 769 | "@babel/helper-create-regexp-features-plugin": "^7.10.4" 770 | } 771 | }, 772 | "@babel/plugin-transform-new-target": { 773 | "version": "7.10.4", 774 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", 775 | "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", 776 | "dev": true, 777 | "requires": { 778 | "@babel/helper-plugin-utils": "^7.10.4" 779 | } 780 | }, 781 | "@babel/plugin-transform-object-super": { 782 | "version": "7.10.4", 783 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", 784 | "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", 785 | "dev": true, 786 | "requires": { 787 | "@babel/helper-plugin-utils": "^7.10.4", 788 | "@babel/helper-replace-supers": "^7.10.4" 789 | } 790 | }, 791 | "@babel/plugin-transform-parameters": { 792 | "version": "7.10.5", 793 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", 794 | "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", 795 | "dev": true, 796 | "requires": { 797 | "@babel/helper-get-function-arity": "^7.10.4", 798 | "@babel/helper-plugin-utils": "^7.10.4" 799 | } 800 | }, 801 | "@babel/plugin-transform-property-literals": { 802 | "version": "7.10.4", 803 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", 804 | "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", 805 | "dev": true, 806 | "requires": { 807 | "@babel/helper-plugin-utils": "^7.10.4" 808 | } 809 | }, 810 | "@babel/plugin-transform-regenerator": { 811 | "version": "7.10.4", 812 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", 813 | "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", 814 | "dev": true, 815 | "requires": { 816 | "regenerator-transform": "^0.14.2" 817 | } 818 | }, 819 | "@babel/plugin-transform-reserved-words": { 820 | "version": "7.10.4", 821 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", 822 | "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", 823 | "dev": true, 824 | "requires": { 825 | "@babel/helper-plugin-utils": "^7.10.4" 826 | } 827 | }, 828 | "@babel/plugin-transform-shorthand-properties": { 829 | "version": "7.10.4", 830 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", 831 | "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", 832 | "dev": true, 833 | "requires": { 834 | "@babel/helper-plugin-utils": "^7.10.4" 835 | } 836 | }, 837 | "@babel/plugin-transform-spread": { 838 | "version": "7.11.0", 839 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", 840 | "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", 841 | "dev": true, 842 | "requires": { 843 | "@babel/helper-plugin-utils": "^7.10.4", 844 | "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" 845 | } 846 | }, 847 | "@babel/plugin-transform-sticky-regex": { 848 | "version": "7.10.4", 849 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", 850 | "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", 851 | "dev": true, 852 | "requires": { 853 | "@babel/helper-plugin-utils": "^7.10.4", 854 | "@babel/helper-regex": "^7.10.4" 855 | } 856 | }, 857 | "@babel/plugin-transform-template-literals": { 858 | "version": "7.10.5", 859 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", 860 | "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", 861 | "dev": true, 862 | "requires": { 863 | "@babel/helper-annotate-as-pure": "^7.10.4", 864 | "@babel/helper-plugin-utils": "^7.10.4" 865 | } 866 | }, 867 | "@babel/plugin-transform-typeof-symbol": { 868 | "version": "7.10.4", 869 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", 870 | "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", 871 | "dev": true, 872 | "requires": { 873 | "@babel/helper-plugin-utils": "^7.10.4" 874 | } 875 | }, 876 | "@babel/plugin-transform-unicode-escapes": { 877 | "version": "7.10.4", 878 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", 879 | "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", 880 | "dev": true, 881 | "requires": { 882 | "@babel/helper-plugin-utils": "^7.10.4" 883 | } 884 | }, 885 | "@babel/plugin-transform-unicode-regex": { 886 | "version": "7.10.4", 887 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", 888 | "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", 889 | "dev": true, 890 | "requires": { 891 | "@babel/helper-create-regexp-features-plugin": "^7.10.4", 892 | "@babel/helper-plugin-utils": "^7.10.4" 893 | } 894 | }, 895 | "@babel/preset-env": { 896 | "version": "7.11.5", 897 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", 898 | "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", 899 | "dev": true, 900 | "requires": { 901 | "@babel/compat-data": "^7.11.0", 902 | "@babel/helper-compilation-targets": "^7.10.4", 903 | "@babel/helper-module-imports": "^7.10.4", 904 | "@babel/helper-plugin-utils": "^7.10.4", 905 | "@babel/plugin-proposal-async-generator-functions": "^7.10.4", 906 | "@babel/plugin-proposal-class-properties": "^7.10.4", 907 | "@babel/plugin-proposal-dynamic-import": "^7.10.4", 908 | "@babel/plugin-proposal-export-namespace-from": "^7.10.4", 909 | "@babel/plugin-proposal-json-strings": "^7.10.4", 910 | "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", 911 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", 912 | "@babel/plugin-proposal-numeric-separator": "^7.10.4", 913 | "@babel/plugin-proposal-object-rest-spread": "^7.11.0", 914 | "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", 915 | "@babel/plugin-proposal-optional-chaining": "^7.11.0", 916 | "@babel/plugin-proposal-private-methods": "^7.10.4", 917 | "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", 918 | "@babel/plugin-syntax-async-generators": "^7.8.0", 919 | "@babel/plugin-syntax-class-properties": "^7.10.4", 920 | "@babel/plugin-syntax-dynamic-import": "^7.8.0", 921 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3", 922 | "@babel/plugin-syntax-json-strings": "^7.8.0", 923 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", 924 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", 925 | "@babel/plugin-syntax-numeric-separator": "^7.10.4", 926 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 927 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", 928 | "@babel/plugin-syntax-optional-chaining": "^7.8.0", 929 | "@babel/plugin-syntax-top-level-await": "^7.10.4", 930 | "@babel/plugin-transform-arrow-functions": "^7.10.4", 931 | "@babel/plugin-transform-async-to-generator": "^7.10.4", 932 | "@babel/plugin-transform-block-scoped-functions": "^7.10.4", 933 | "@babel/plugin-transform-block-scoping": "^7.10.4", 934 | "@babel/plugin-transform-classes": "^7.10.4", 935 | "@babel/plugin-transform-computed-properties": "^7.10.4", 936 | "@babel/plugin-transform-destructuring": "^7.10.4", 937 | "@babel/plugin-transform-dotall-regex": "^7.10.4", 938 | "@babel/plugin-transform-duplicate-keys": "^7.10.4", 939 | "@babel/plugin-transform-exponentiation-operator": "^7.10.4", 940 | "@babel/plugin-transform-for-of": "^7.10.4", 941 | "@babel/plugin-transform-function-name": "^7.10.4", 942 | "@babel/plugin-transform-literals": "^7.10.4", 943 | "@babel/plugin-transform-member-expression-literals": "^7.10.4", 944 | "@babel/plugin-transform-modules-amd": "^7.10.4", 945 | "@babel/plugin-transform-modules-commonjs": "^7.10.4", 946 | "@babel/plugin-transform-modules-systemjs": "^7.10.4", 947 | "@babel/plugin-transform-modules-umd": "^7.10.4", 948 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", 949 | "@babel/plugin-transform-new-target": "^7.10.4", 950 | "@babel/plugin-transform-object-super": "^7.10.4", 951 | "@babel/plugin-transform-parameters": "^7.10.4", 952 | "@babel/plugin-transform-property-literals": "^7.10.4", 953 | "@babel/plugin-transform-regenerator": "^7.10.4", 954 | "@babel/plugin-transform-reserved-words": "^7.10.4", 955 | "@babel/plugin-transform-shorthand-properties": "^7.10.4", 956 | "@babel/plugin-transform-spread": "^7.11.0", 957 | "@babel/plugin-transform-sticky-regex": "^7.10.4", 958 | "@babel/plugin-transform-template-literals": "^7.10.4", 959 | "@babel/plugin-transform-typeof-symbol": "^7.10.4", 960 | "@babel/plugin-transform-unicode-escapes": "^7.10.4", 961 | "@babel/plugin-transform-unicode-regex": "^7.10.4", 962 | "@babel/preset-modules": "^0.1.3", 963 | "@babel/types": "^7.11.5", 964 | "browserslist": "^4.12.0", 965 | "core-js-compat": "^3.6.2", 966 | "invariant": "^2.2.2", 967 | "levenary": "^1.1.1", 968 | "semver": "^5.5.0" 969 | } 970 | }, 971 | "@babel/preset-modules": { 972 | "version": "0.1.4", 973 | "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", 974 | "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", 975 | "dev": true, 976 | "requires": { 977 | "@babel/helper-plugin-utils": "^7.0.0", 978 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", 979 | "@babel/plugin-transform-dotall-regex": "^7.4.4", 980 | "@babel/types": "^7.4.4", 981 | "esutils": "^2.0.2" 982 | } 983 | }, 984 | "@babel/runtime": { 985 | "version": "7.11.2", 986 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", 987 | "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", 988 | "dev": true, 989 | "requires": { 990 | "regenerator-runtime": "^0.13.4" 991 | } 992 | }, 993 | "@babel/template": { 994 | "version": "7.10.4", 995 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", 996 | "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", 997 | "dev": true, 998 | "requires": { 999 | "@babel/code-frame": "^7.10.4", 1000 | "@babel/parser": "^7.10.4", 1001 | "@babel/types": "^7.10.4" 1002 | } 1003 | }, 1004 | "@babel/traverse": { 1005 | "version": "7.11.5", 1006 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", 1007 | "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", 1008 | "dev": true, 1009 | "requires": { 1010 | "@babel/code-frame": "^7.10.4", 1011 | "@babel/generator": "^7.11.5", 1012 | "@babel/helper-function-name": "^7.10.4", 1013 | "@babel/helper-split-export-declaration": "^7.11.0", 1014 | "@babel/parser": "^7.11.5", 1015 | "@babel/types": "^7.11.5", 1016 | "debug": "^4.1.0", 1017 | "globals": "^11.1.0", 1018 | "lodash": "^4.17.19" 1019 | } 1020 | }, 1021 | "@babel/types": { 1022 | "version": "7.11.5", 1023 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", 1024 | "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", 1025 | "dev": true, 1026 | "requires": { 1027 | "@babel/helper-validator-identifier": "^7.10.4", 1028 | "lodash": "^4.17.19", 1029 | "to-fast-properties": "^2.0.0" 1030 | } 1031 | }, 1032 | "@rollup/plugin-babel": { 1033 | "version": "5.2.0", 1034 | "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.0.tgz", 1035 | "integrity": "sha512-CPABsajaKjINgBQ3it+yMnfVO3ibsrMBxRzbUOUw2cL1hsZJ7aogU8mgglQm3S2hHJgjnAmxPz0Rq7DVdmHsTw==", 1036 | "dev": true, 1037 | "requires": { 1038 | "@babel/helper-module-imports": "^7.10.4", 1039 | "@rollup/pluginutils": "^3.1.0" 1040 | } 1041 | }, 1042 | "@rollup/pluginutils": { 1043 | "version": "3.1.0", 1044 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 1045 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 1046 | "dev": true, 1047 | "requires": { 1048 | "@types/estree": "0.0.39", 1049 | "estree-walker": "^1.0.1", 1050 | "picomatch": "^2.2.2" 1051 | } 1052 | }, 1053 | "@types/estree": { 1054 | "version": "0.0.39", 1055 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 1056 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 1057 | "dev": true 1058 | }, 1059 | "@types/node": { 1060 | "version": "14.6.4", 1061 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.4.tgz", 1062 | "integrity": "sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ==", 1063 | "dev": true 1064 | }, 1065 | "ansi-styles": { 1066 | "version": "3.2.1", 1067 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1068 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1069 | "dev": true, 1070 | "requires": { 1071 | "color-convert": "^1.9.0" 1072 | } 1073 | }, 1074 | "babel-plugin-dynamic-import-node": { 1075 | "version": "2.3.3", 1076 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", 1077 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", 1078 | "dev": true, 1079 | "requires": { 1080 | "object.assign": "^4.1.0" 1081 | } 1082 | }, 1083 | "browserslist": { 1084 | "version": "4.14.0", 1085 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", 1086 | "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", 1087 | "dev": true, 1088 | "requires": { 1089 | "caniuse-lite": "^1.0.30001111", 1090 | "electron-to-chromium": "^1.3.523", 1091 | "escalade": "^3.0.2", 1092 | "node-releases": "^1.1.60" 1093 | } 1094 | }, 1095 | "buffer-from": { 1096 | "version": "1.1.1", 1097 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1098 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1099 | "dev": true 1100 | }, 1101 | "caniuse-lite": { 1102 | "version": "1.0.30001124", 1103 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001124.tgz", 1104 | "integrity": "sha512-zQW8V3CdND7GHRH6rxm6s59Ww4g/qGWTheoboW9nfeMg7sUoopIfKCcNZUjwYRCOrvereh3kwDpZj4VLQ7zGtA==", 1105 | "dev": true 1106 | }, 1107 | "chalk": { 1108 | "version": "2.4.2", 1109 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1110 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1111 | "dev": true, 1112 | "requires": { 1113 | "ansi-styles": "^3.2.1", 1114 | "escape-string-regexp": "^1.0.5", 1115 | "supports-color": "^5.3.0" 1116 | } 1117 | }, 1118 | "color-convert": { 1119 | "version": "1.9.3", 1120 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1121 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1122 | "dev": true, 1123 | "requires": { 1124 | "color-name": "1.1.3" 1125 | } 1126 | }, 1127 | "color-name": { 1128 | "version": "1.1.3", 1129 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1130 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1131 | "dev": true 1132 | }, 1133 | "commander": { 1134 | "version": "2.20.3", 1135 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1136 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1137 | "dev": true 1138 | }, 1139 | "convert-source-map": { 1140 | "version": "1.7.0", 1141 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", 1142 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", 1143 | "dev": true, 1144 | "requires": { 1145 | "safe-buffer": "~5.1.1" 1146 | }, 1147 | "dependencies": { 1148 | "safe-buffer": { 1149 | "version": "5.1.2", 1150 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1151 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1152 | "dev": true 1153 | } 1154 | } 1155 | }, 1156 | "core-js-compat": { 1157 | "version": "3.6.5", 1158 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", 1159 | "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", 1160 | "dev": true, 1161 | "requires": { 1162 | "browserslist": "^4.8.5", 1163 | "semver": "7.0.0" 1164 | }, 1165 | "dependencies": { 1166 | "semver": { 1167 | "version": "7.0.0", 1168 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1169 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1170 | "dev": true 1171 | } 1172 | } 1173 | }, 1174 | "debug": { 1175 | "version": "4.1.1", 1176 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1177 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1178 | "dev": true, 1179 | "requires": { 1180 | "ms": "^2.1.1" 1181 | } 1182 | }, 1183 | "define-properties": { 1184 | "version": "1.1.3", 1185 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1186 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1187 | "dev": true, 1188 | "requires": { 1189 | "object-keys": "^1.0.12" 1190 | } 1191 | }, 1192 | "electron-to-chromium": { 1193 | "version": "1.3.562", 1194 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.562.tgz", 1195 | "integrity": "sha512-WhRe6liQ2q/w1MZc8mD8INkenHivuHdrr4r5EQHNomy3NJux+incP6M6lDMd0paShP3MD0WGe5R1TWmEClf+Bg==", 1196 | "dev": true 1197 | }, 1198 | "escalade": { 1199 | "version": "3.0.2", 1200 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", 1201 | "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", 1202 | "dev": true 1203 | }, 1204 | "escape-string-regexp": { 1205 | "version": "1.0.5", 1206 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1207 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1208 | "dev": true 1209 | }, 1210 | "estree-walker": { 1211 | "version": "1.0.1", 1212 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 1213 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 1214 | "dev": true 1215 | }, 1216 | "esutils": { 1217 | "version": "2.0.3", 1218 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1219 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1220 | "dev": true 1221 | }, 1222 | "fsevents": { 1223 | "version": "2.1.3", 1224 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 1225 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 1226 | "dev": true, 1227 | "optional": true 1228 | }, 1229 | "function-bind": { 1230 | "version": "1.1.1", 1231 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1232 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1233 | "dev": true 1234 | }, 1235 | "gensync": { 1236 | "version": "1.0.0-beta.1", 1237 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", 1238 | "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", 1239 | "dev": true 1240 | }, 1241 | "globals": { 1242 | "version": "11.12.0", 1243 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1244 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1245 | "dev": true 1246 | }, 1247 | "has-flag": { 1248 | "version": "3.0.0", 1249 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1250 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1251 | "dev": true 1252 | }, 1253 | "has-symbols": { 1254 | "version": "1.0.1", 1255 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 1256 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 1257 | "dev": true 1258 | }, 1259 | "invariant": { 1260 | "version": "2.2.4", 1261 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 1262 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 1263 | "dev": true, 1264 | "requires": { 1265 | "loose-envify": "^1.0.0" 1266 | } 1267 | }, 1268 | "jest-worker": { 1269 | "version": "26.3.0", 1270 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", 1271 | "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", 1272 | "dev": true, 1273 | "requires": { 1274 | "@types/node": "*", 1275 | "merge-stream": "^2.0.0", 1276 | "supports-color": "^7.0.0" 1277 | }, 1278 | "dependencies": { 1279 | "has-flag": { 1280 | "version": "4.0.0", 1281 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1282 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1283 | "dev": true 1284 | }, 1285 | "supports-color": { 1286 | "version": "7.2.0", 1287 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1288 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1289 | "dev": true, 1290 | "requires": { 1291 | "has-flag": "^4.0.0" 1292 | } 1293 | } 1294 | } 1295 | }, 1296 | "js-tokens": { 1297 | "version": "4.0.0", 1298 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1299 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1300 | "dev": true 1301 | }, 1302 | "jsesc": { 1303 | "version": "2.5.2", 1304 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1305 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1306 | "dev": true 1307 | }, 1308 | "json5": { 1309 | "version": "2.1.3", 1310 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", 1311 | "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", 1312 | "dev": true, 1313 | "requires": { 1314 | "minimist": "^1.2.5" 1315 | } 1316 | }, 1317 | "leven": { 1318 | "version": "3.1.0", 1319 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 1320 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 1321 | "dev": true 1322 | }, 1323 | "levenary": { 1324 | "version": "1.1.1", 1325 | "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", 1326 | "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", 1327 | "dev": true, 1328 | "requires": { 1329 | "leven": "^3.1.0" 1330 | } 1331 | }, 1332 | "lodash": { 1333 | "version": "4.17.20", 1334 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 1335 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", 1336 | "dev": true 1337 | }, 1338 | "loose-envify": { 1339 | "version": "1.4.0", 1340 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1341 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1342 | "dev": true, 1343 | "requires": { 1344 | "js-tokens": "^3.0.0 || ^4.0.0" 1345 | } 1346 | }, 1347 | "merge-stream": { 1348 | "version": "2.0.0", 1349 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1350 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1351 | "dev": true 1352 | }, 1353 | "minimist": { 1354 | "version": "1.2.5", 1355 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1356 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1357 | "dev": true 1358 | }, 1359 | "ms": { 1360 | "version": "2.1.2", 1361 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1362 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1363 | "dev": true 1364 | }, 1365 | "node-releases": { 1366 | "version": "1.1.60", 1367 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", 1368 | "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", 1369 | "dev": true 1370 | }, 1371 | "object-keys": { 1372 | "version": "1.1.1", 1373 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1374 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1375 | "dev": true 1376 | }, 1377 | "object.assign": { 1378 | "version": "4.1.0", 1379 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1380 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1381 | "dev": true, 1382 | "requires": { 1383 | "define-properties": "^1.1.2", 1384 | "function-bind": "^1.1.1", 1385 | "has-symbols": "^1.0.0", 1386 | "object-keys": "^1.0.11" 1387 | } 1388 | }, 1389 | "path-parse": { 1390 | "version": "1.0.6", 1391 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1392 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1393 | "dev": true 1394 | }, 1395 | "picomatch": { 1396 | "version": "2.2.2", 1397 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1398 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1399 | "dev": true 1400 | }, 1401 | "randombytes": { 1402 | "version": "2.1.0", 1403 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1404 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1405 | "dev": true, 1406 | "requires": { 1407 | "safe-buffer": "^5.1.0" 1408 | } 1409 | }, 1410 | "regenerate": { 1411 | "version": "1.4.1", 1412 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", 1413 | "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", 1414 | "dev": true 1415 | }, 1416 | "regenerate-unicode-properties": { 1417 | "version": "8.2.0", 1418 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", 1419 | "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", 1420 | "dev": true, 1421 | "requires": { 1422 | "regenerate": "^1.4.0" 1423 | } 1424 | }, 1425 | "regenerator-runtime": { 1426 | "version": "0.13.7", 1427 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", 1428 | "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", 1429 | "dev": true 1430 | }, 1431 | "regenerator-transform": { 1432 | "version": "0.14.5", 1433 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", 1434 | "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", 1435 | "dev": true, 1436 | "requires": { 1437 | "@babel/runtime": "^7.8.4" 1438 | } 1439 | }, 1440 | "regexpu-core": { 1441 | "version": "4.7.0", 1442 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", 1443 | "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", 1444 | "dev": true, 1445 | "requires": { 1446 | "regenerate": "^1.4.0", 1447 | "regenerate-unicode-properties": "^8.2.0", 1448 | "regjsgen": "^0.5.1", 1449 | "regjsparser": "^0.6.4", 1450 | "unicode-match-property-ecmascript": "^1.0.4", 1451 | "unicode-match-property-value-ecmascript": "^1.2.0" 1452 | } 1453 | }, 1454 | "regjsgen": { 1455 | "version": "0.5.2", 1456 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", 1457 | "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", 1458 | "dev": true 1459 | }, 1460 | "regjsparser": { 1461 | "version": "0.6.4", 1462 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", 1463 | "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", 1464 | "dev": true, 1465 | "requires": { 1466 | "jsesc": "~0.5.0" 1467 | }, 1468 | "dependencies": { 1469 | "jsesc": { 1470 | "version": "0.5.0", 1471 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 1472 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 1473 | "dev": true 1474 | } 1475 | } 1476 | }, 1477 | "resolve": { 1478 | "version": "1.17.0", 1479 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1480 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1481 | "dev": true, 1482 | "requires": { 1483 | "path-parse": "^1.0.6" 1484 | } 1485 | }, 1486 | "rollup": { 1487 | "version": "2.26.10", 1488 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.10.tgz", 1489 | "integrity": "sha512-dUnjCWOA0h9qNX6qtcHidyatz8FAFZxVxt1dbcGtKdlJkpSxGK3G9+DLCYvtZr9v94D129ij9zUhG+xbRoqepw==", 1490 | "dev": true, 1491 | "requires": { 1492 | "fsevents": "~2.1.2" 1493 | } 1494 | }, 1495 | "rollup-plugin-terser": { 1496 | "version": "7.0.1", 1497 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.1.tgz", 1498 | "integrity": "sha512-HL0dgzSxBYG/Ly9i/E5Sc+PuKKZ0zBzk11VmLCfdUtpqH4yYqkLclPkTqRy85FU9246yetImOClaQ/ufnj08vg==", 1499 | "dev": true, 1500 | "requires": { 1501 | "@babel/code-frame": "^7.10.4", 1502 | "jest-worker": "^26.2.1", 1503 | "serialize-javascript": "^4.0.0", 1504 | "terser": "^5.0.0" 1505 | } 1506 | }, 1507 | "safe-buffer": { 1508 | "version": "5.2.1", 1509 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1510 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1511 | "dev": true 1512 | }, 1513 | "semver": { 1514 | "version": "5.7.1", 1515 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1516 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1517 | "dev": true 1518 | }, 1519 | "serialize-javascript": { 1520 | "version": "4.0.0", 1521 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1522 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1523 | "dev": true, 1524 | "requires": { 1525 | "randombytes": "^2.1.0" 1526 | } 1527 | }, 1528 | "source-map": { 1529 | "version": "0.6.1", 1530 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1531 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1532 | "dev": true 1533 | }, 1534 | "source-map-support": { 1535 | "version": "0.5.19", 1536 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1537 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1538 | "dev": true, 1539 | "requires": { 1540 | "buffer-from": "^1.0.0", 1541 | "source-map": "^0.6.0" 1542 | } 1543 | }, 1544 | "supports-color": { 1545 | "version": "5.5.0", 1546 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1547 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1548 | "dev": true, 1549 | "requires": { 1550 | "has-flag": "^3.0.0" 1551 | } 1552 | }, 1553 | "terser": { 1554 | "version": "5.3.0", 1555 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", 1556 | "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", 1557 | "dev": true, 1558 | "requires": { 1559 | "commander": "^2.20.0", 1560 | "source-map": "~0.6.1", 1561 | "source-map-support": "~0.5.12" 1562 | } 1563 | }, 1564 | "to-fast-properties": { 1565 | "version": "2.0.0", 1566 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1567 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 1568 | "dev": true 1569 | }, 1570 | "unicode-canonical-property-names-ecmascript": { 1571 | "version": "1.0.4", 1572 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 1573 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 1574 | "dev": true 1575 | }, 1576 | "unicode-match-property-ecmascript": { 1577 | "version": "1.0.4", 1578 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 1579 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 1580 | "dev": true, 1581 | "requires": { 1582 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 1583 | "unicode-property-aliases-ecmascript": "^1.0.4" 1584 | } 1585 | }, 1586 | "unicode-match-property-value-ecmascript": { 1587 | "version": "1.2.0", 1588 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", 1589 | "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", 1590 | "dev": true 1591 | }, 1592 | "unicode-property-aliases-ecmascript": { 1593 | "version": "1.1.0", 1594 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", 1595 | "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", 1596 | "dev": true 1597 | } 1598 | } 1599 | } 1600 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "native-smooth-scroll", 3 | "version": "1.1.0", 4 | "main": "src/native.smooth.scroll.js", 5 | "author": { 6 | "name": "Martin Laxenaire", 7 | "email": "martin.laxenaire@gmail.com", 8 | "url": "https://twitter.com/webdesign_ml" 9 | }, 10 | "homepage": "https://github.com/martinlaxenaire/native-smooth-scroll", 11 | "description": "Simple native smooth scroll library.", 12 | "devDependencies": { 13 | "@babel/core": "^7.11.6", 14 | "@babel/preset-env": "^7.11.5", 15 | "@rollup/plugin-babel": "^5.2.0", 16 | "rollup": "^2.26.10", 17 | "rollup-plugin-terser": "^7.0.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import { getBabelOutputPlugin } from '@rollup/plugin-babel'; 2 | import {terser} from 'rollup-plugin-terser'; 3 | 4 | export default [{ 5 | input: 'src/native.smooth.scroll.js', 6 | output: [ 7 | { 8 | file: 'dist/native.smooth.scroll.umd.js', 9 | format: 'umd', 10 | name: 'window', 11 | extend: true, 12 | plugins: [ 13 | getBabelOutputPlugin({ 14 | allowAllFormats: true, 15 | babelrc: false, 16 | presets: [ 17 | '@babel/preset-env', 18 | ] 19 | }) 20 | ] 21 | }, 22 | { 23 | file: 'dist/native.smooth.scroll.umd.min.js', 24 | format: 'umd', 25 | name: 'window', 26 | extend: true, 27 | plugins: [ 28 | getBabelOutputPlugin({ 29 | allowAllFormats: true, 30 | babelrc: false, 31 | presets: [ 32 | '@babel/preset-env', 33 | ] 34 | }), 35 | terser() 36 | ] 37 | }, 38 | ], 39 | }]; -------------------------------------------------------------------------------- /src/native.smooth.scroll.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SmoothScroll v1.0.0 3 | * https://github.com/martinlaxenaire/native-smooth-scroll 4 | * 5 | * Author: Martin Laxenaire 6 | * https://www.martin-laxenaire.fr/ 7 | * 8 | * */ 9 | 10 | "use strict"; 11 | 12 | export class SmoothScroll { 13 | 14 | /** 15 | * Init our class 16 | * 17 | * @param container (HTML element): container that will be translated to according scroll values 18 | * @param inertia (float): easing value. Default to 0.1. 19 | * @param threshold (float): when to stop the easing. Default to 0.5. 20 | * @param useRaf (bool): whether to use the built-in requestAnimationFrame callback. Default to false. 21 | */ 22 | constructor({ 23 | container, 24 | inertia = 0.1, 25 | threshold = 0.5, 26 | useRaf = false, 27 | } = {}) { 28 | this.container = container; 29 | 30 | // no container, return 31 | if(!this.container) { 32 | console.warn("Can't init SmoothScroll class because the container passed does not exist:", container); 33 | return; 34 | } 35 | 36 | this.inertia = inertia; 37 | this.threshold = threshold; 38 | 39 | this._useRaf = useRaf; 40 | this._raf = null; 41 | 42 | // are we currently animating the scroll 43 | this._isScrolling = false; 44 | 45 | // will hold our scroll values 46 | this.scroll = {}; 47 | 48 | // will hold our sizes values 49 | this.store = {}; 50 | 51 | // set sizes and init everything 52 | this.resize(); 53 | this.init(); 54 | } 55 | 56 | /** 57 | * Apply fixed position to our container and start listening to scroll event 58 | */ 59 | init() { 60 | // set container styles 61 | this.container.style.position = "fixed"; 62 | this.container.style.top = 0; 63 | this.container.style.left = 0; 64 | this.container.style.width = "100%"; 65 | 66 | // page scrolled on load 67 | if(this.scroll.current !== 0) { 68 | this.scrollTo(this.scroll.current); 69 | setTimeout(() => { 70 | this.emitScroll(); 71 | }, 0); 72 | } 73 | 74 | window.addEventListener("scroll", () => this.scrollEvent()); 75 | 76 | if(this._useRaf) { 77 | this.animate(); 78 | } 79 | } 80 | 81 | /** 82 | * Update our store sizes 83 | */ 84 | update() { 85 | this.store.documentHeight = this.container.clientHeight; 86 | this.store.windowHeight = window.innerHeight; 87 | 88 | document.body.style.height = this.store.documentHeight + "px"; 89 | } 90 | 91 | /** 92 | * Reset our store and scroll values 93 | * Should be called in a window resize event to update the values 94 | */ 95 | resize() { 96 | this.update(); 97 | 98 | let newScrollValue = window.pageYOffset; 99 | 100 | this.scroll = { 101 | target: newScrollValue, 102 | current: newScrollValue, 103 | velocity: 0, 104 | }; 105 | 106 | this.scrollTo(this.scroll.current); 107 | } 108 | 109 | /** 110 | * Simple utility function to linear interpolate values 111 | * 112 | * @param start (float): value to lerp 113 | * @param end (float): target value 114 | * @param amount (float): easing 115 | * 116 | * @returns (float): lerped value 117 | */ 118 | lerp(start, end, amount) { 119 | return ((1 - amount) * start + amount * end).toFixed(2); 120 | } 121 | 122 | /** 123 | * Add our scroll event listener and update our scroll target value on scroll 124 | */ 125 | scrollEvent() { 126 | this.scroll.target = window.pageYOffset; 127 | } 128 | 129 | /** 130 | * Emit our onScroll event with our current, target and velocity scroll values 131 | */ 132 | emitScroll() { 133 | if(this.onScrollCallback) { 134 | this.onScrollCallback({ 135 | current: this.scroll.current, 136 | target: this.scroll.target, 137 | velocity: this.scroll.velocity 138 | }); 139 | } 140 | } 141 | 142 | /** 143 | * Immediately scroll to a defined position 144 | * 145 | * @param value (float): new scroll position 146 | */ 147 | scrollTo(value) { 148 | value = Math.max(0, Math.min(value, this.store.documentHeight - this.store.windowHeight)); 149 | 150 | this.scroll.current = value; 151 | this.scroll.target = value; 152 | this.scroll.velocity = 0; 153 | // force window scroll to update as well 154 | window.scrollTo(0, value); 155 | this.updatePosition(); 156 | 157 | this.emitScroll(); 158 | } 159 | 160 | /** 161 | * Translate our container 162 | */ 163 | updatePosition() { 164 | this.container.style.transform = "translateY(" + -this.scroll.current + "px)"; 165 | } 166 | 167 | /** 168 | * Update our current scroll and velocity values, translate the container and emit our onScroll event 169 | * Should be called at each tick of a requestAnimationFrame callback 170 | */ 171 | render() { 172 | // update current and velocity scroll values 173 | let previous = this.scroll.current; 174 | this.scroll.current = this.lerp(this.scroll.current, this.scroll.target, this.inertia); 175 | this.scroll.velocity = this.scroll.current - previous; 176 | 177 | // if we haven't reached our threshold value, update our position and emit scroll 178 | if(Math.abs(this.scroll.current - this.scroll.target) >= this.threshold) { 179 | this._isScrolling = true; 180 | this.updatePosition(); 181 | this.emitScroll(); 182 | } 183 | else if(this._isScrolling) { 184 | // if we have reached the threshold value, reset our current and velocity scroll values 185 | // and emit one last onScroll event 186 | this._isScrolling = false; 187 | this.scroll.current = this.scroll.target; 188 | this.scroll.velocity = 0; 189 | this.updatePosition(); 190 | this.emitScroll(); 191 | } 192 | } 193 | 194 | animate() { 195 | this.render(); 196 | 197 | this._raf = window.requestAnimationFrame(() => this.animate()); 198 | } 199 | 200 | /** 201 | * onScroll event 202 | * 203 | * @param callback (function): the callback function 204 | */ 205 | onScroll(callback) { 206 | if(callback) { 207 | this.onScrollCallback = callback; 208 | } 209 | } 210 | 211 | /** 212 | * Destroy the smooth scroll instance 213 | */ 214 | destroy() { 215 | if(this._raf) { 216 | window.cancelAnimationFrame(this._raf); 217 | } 218 | 219 | window.removeEventListener(this.scrollEvent); 220 | } 221 | } --------------------------------------------------------------------------------