├── .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 | }
--------------------------------------------------------------------------------