├── .gitignore ├── LICENSE ├── README.md ├── build ├── __snowpack__ │ └── env.js ├── counting-clicks.html ├── expandable-sections.html ├── index.html ├── js │ ├── counting-clicks.js │ ├── expandable-sections.js │ └── quiz.js ├── quiz.html └── web_modules │ ├── common │ └── index-609ee1d4.js │ ├── htm │ └── react.js │ ├── immer.js │ ├── import-map.json │ ├── react-dom.js │ └── react.js ├── html ├── counting-clicks.html ├── expandable-sections.html ├── index.html └── quiz.html ├── js ├── counting-clicks.js ├── expandable-sections.js └── quiz.js ├── package-lock.json ├── package.json └── snowpack.config.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Axel Rauschmayer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Minimal React project 2 | 3 | Trying out the examples online: https://rauschma.github.io/minimal-react/build/ 4 | 5 | ## Installing the examples on your computer 6 | 7 | * Download and install [Node.js](https://nodejs.org/en/) (this also installs the npm package manager). 8 | * Install the npm packages that this repository depends on: 9 | ``` 10 | cd minimal-react 11 | npm install 12 | ``` 13 | 14 | ## Running the examples locally 15 | 16 | * Start the development server: 17 | ``` 18 | cd minimal-react 19 | npm start 20 | ``` 21 | * The dev server prints root URLs to the console, e.g.: [`http://localhost:8080/`](http://localhost:8080/) 22 | * Open one of them in a web browser. 23 | * The browser tab is refreshed automatically when you change either HTML or JavaScript code. 24 | 25 | ## Building the examples 26 | 27 | You can also create a stand-alone version of this web app that doesn’t need the development server to run: 28 | 29 | ```js 30 | npm run build 31 | ``` 32 | 33 | Afterwards, the complete web app is in directory `minimal-react/build`, ready to be deployed. 34 | 35 | ## Technologies used in this project 36 | 37 | This is an exhaustive list of dependencies: 38 | 39 | * [Snowpack](https://www.snowpack.dev): `snowpack`, `@snowpack/plugin-react-refresh` 40 | * [React](https://reactjs.org): `react`, `react-dom` 41 | * [HTM](https://github.com/developit/htm): `htm` 42 | * [Immer](https://immerjs.github.io/immer/docs/introduction): `immer` -------------------------------------------------------------------------------- /build/__snowpack__/env.js: -------------------------------------------------------------------------------- 1 | export default {"MODE":"production","NODE_ENV":"production"}; -------------------------------------------------------------------------------- /build/counting-clicks.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Counting clicks 6 | 7 | 8 |

Counting clicks

9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /build/expandable-sections.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Expandable sections 6 | 7 | 8 |

Expandable sections

9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Examples in this project 6 | 7 | 8 |

Examples in this project

9 | 10 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /build/js/counting-clicks.js: -------------------------------------------------------------------------------- 1 | import s from"../web_modules/react-dom.js";import{html as r}from"../web_modules/htm/react.js";import{useState as d}from"../web_modules/react.js";const i={numberOfClicks:0};function u({rootModel:l}){const[o,t]=d(l);return r` 2 |
3 | Number of clicks: ${o.numberOfClicks} 4 |

5 | 6 |

7 | `;function c(n){n.preventDefault();const e={numberOfClicks:o.numberOfClicks+1};t(e)}function m(n){const e={numberOfClicks:0};t(e)}}s.render(r`<${u} rootModel=${i} />`,document.getElementById("root")); 8 | -------------------------------------------------------------------------------- /build/js/expandable-sections.js: -------------------------------------------------------------------------------- 1 | import r from"../web_modules/react-dom.js";import{html as s}from"../web_modules/htm/react.js";import{useState as c}from"../web_modules/react.js";const l=[{title:"Introduction",body:"In this section, we are taking a first look at the ideas are covered by this document."},{title:"The details",body:"In this section, we examine the ideas in more details."},{title:"Conclusion",body:"In this section, we’ll look at what we have learned and next steps you can take."}];function m(n){return n.map(e=>({...e,expanded:!1}))}function u(n,e){return n.map((t,o)=>({...t,expanded:o===e}))}function p({sections:n}){const[e,t]=c(n);return e.map((o,i)=>s` 2 | <${h} key=${i} sections=${e} setSections=${t} section=${o} sectionIndex=${i} /> 3 | `)}function h({sections:n,setSections:e,section:t,sectionIndex:o}){return s` 4 |
5 |

6 | 7 | ${t.expanded?"▼ ":"▶︎ "} 8 | ${t.title} 9 | 10 |

11 | ${t.expanded?s` 12 |
13 | ${t.body} 14 |
15 | `:null} 16 |
17 | `;function i(d,a){a.preventDefault(),e(u(n,d))}}r.render(s`<${p} sections=${m(l)} />`,document.getElementById("root")); 18 | -------------------------------------------------------------------------------- /build/js/quiz.js: -------------------------------------------------------------------------------- 1 | import u,{useState as l}from"../web_modules/react.js";import d from"../web_modules/react-dom.js";import{html as s}from"../web_modules/htm/react.js";import i from"../web_modules/immer.js";const m=[{question:"When was JavaScript created?",answers:[{text:"1984",correct:!1},{text:"1995",correct:!0},{text:"2001",correct:!1}]},{question:"What does “Ecma” mean?",answers:[{text:"European Computer Manufacturers Association",correct:!1},{text:"Enterprise Content Management Association",correct:!1},{text:"Electronic Component Manufacturers Association",correct:!1},{text:"It’s a proper name",correct:!0}]},{question:"What does “TC39” mean?",answers:[{text:"Ecma Technical Committee 39",correct:!0},{text:"Ecma Transactions on Computers 39",correct:!1},{text:"Ecma Technical Communications 39",correct:!1}]}];function h(t){return i(t,e=>{for(const n of e){n.open=!0;for(const r of n.answers)r.checked=!1}})}function a(t){return t.answers.every(e=>e.checked==e.correct)}class ${constructor(t,e){this.entries=t,this.setEntries=e}setAnswerChecked(t,e,n){const r=i(this.entries,o=>{o[t].answers[e].checked=n});this.setEntries(r)}closeEntry(t){const e=i(this.entries,n=>{n[t].open=!1});this.setEntries(e)}}function p({entries:t}){const[e,n]=l(t),r=new $(e,n);return s` 2 | <${u.Fragment}> 3 |

Quiz

4 | <${C} root=${r} entries=${e} /> 5 |
6 | <${f} entries=${e} /> 7 | 8 | `}function f({entries:t}){const e=t.reduce((r,o)=>r+(o.open?0:1),0),n=t.reduce((r,o)=>r+(!o.open&&a(o)?1:0),0);return s` 9 | Correct: ${n} of ${e} 10 | ${e===1?" entry":" entries"} 11 | `}function C({root:t,entries:e}){return e.map((n,r)=>{const o=n.open?E:b;return s` 12 | <${o} key=${r} root=${t} entryIndex=${r} entry=${n} />`})}function E({root:t,entryIndex:e,entry:n}){return s` 13 |
14 |

${n.question}

15 | ${n.answers.map((o,c)=>s` 16 | <${w} key=${c} root=${t} 17 | entryIndex=${e} answerIndex=${c} answer=${o} /> 18 | `)} 19 |

20 |
`;function r(o){o.preventDefault(),t.closeEntry(e)}}function w({root:t,entryIndex:e,answerIndex:n,answer:r}){return s` 21 |
22 | 26 |
27 | `;function o(c){t.setAnswerChecked(e,n,!r.checked)}}function b({root:t,entryIndex:e,entry:n}){return s` 28 |
29 |

${n.question}

30 | ${n.answers.map((r,o)=>s` 31 | <${k} key=${o} root=${t} entryIndex=${e} answer=${r} answerIndex=${o} /> 32 | `)} 33 | ${a(n)?s`

Correct!

`:s`

Wrong!

`} 34 |
`}function k({root:t,entryIndex:e,answerIndex:n,answer:r}){const o=r.correct?{backgroundColor:"lightgreen"}:{};return s` 35 |
36 | 40 |
41 | `}d.render(s`<${p} entries=${h(m)} />`,document.getElementById("root")); 42 | -------------------------------------------------------------------------------- /build/quiz.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Quiz 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /build/web_modules/common/index-609ee1d4.js: -------------------------------------------------------------------------------- 1 | function h(e,r,t){return t={path:r,exports:{},require:function(o,n){return M(o,n??t.path)}},e(t,t.exports),t.exports}function M(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}/* 2 | object-assign 3 | (c) Sindre Sorhus 4 | @license MIT 5 | */var C=Object.getOwnPropertySymbols,N=Object.prototype.hasOwnProperty,F=Object.prototype.propertyIsEnumerable;function T(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function V(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var r={},t=0;t<10;t++)r["_"+String.fromCharCode(t)]=t;var o=Object.getOwnPropertyNames(r).map(function(c){return r[c]});if(o.join("")!=="0123456789")return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(c){n[c]=c}),!(Object.keys(Object.assign({},n)).join("")!=="abcdefghijklmnopqrst")}catch(c){return!1}}var d=V()?Object.assign:function(e,r){for(var t,o=T(e),n,c=1;cm.length&&m.push(e)}function w(e,r,t,o){var n=typeof e;(n==="undefined"||n==="boolean")&&(e=null);var c=!1;if(e===null)c=!0;else switch(n){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case y:case B:c=!0}}if(c)return t(o,e,r===""?"."+j(e,0):r),1;if(c=0,r=r===""?".":r+":",Array.isArray(e))for(var l=0;l=5&&((o||!g&&n===5)&&(t.push(n,0,o,f),n=6),g&&(t.push(n,g,0,f),n=6)),o=""},v=0;v"?(n=1,o=""):o=u+o[0]:c?u===c?c="":o+=u:u==='"'||u==="'"?c=u:u===">"?(m(),n=1):n&&(u==="="?(n=5,f=o,o=""):u==="/"&&(n<5||s[v][b+1]===">")?(m(),n===3&&(t=t[0]),n=t,(t=t[0]).push(2,0,n),n=0):u===" "||u===" "||u===` 2 | `||u==="\r"?(m(),n=2):o+=u),n===3&&o==="!--"&&(n=4,t=t[0])}return m(),t}(d)),i),arguments,[])).length>1?i:i[0]}var y=M.bind(x.createElement);export{y as html}; 3 | -------------------------------------------------------------------------------- /build/web_modules/immer.js: -------------------------------------------------------------------------------- 1 | var ne={title:"browser",browser:!0,env:{NODE_ENV:"production"},argv:[],version:"",versions:{},platform:"browser",release:{},config:{}};function p(e){for(var r=arguments.length,t=Array(r>1?r-1:0),o=1;o3?r.i-4:r.i:Array.isArray(e)?1:k(e)?2:F(e)?3:0}function x(e,r){return g(e)===2?e.has(r):Object.prototype.hasOwnProperty.call(e,r)}function ie(e,r){return g(e)===2?e.get(r):e[r]}function G(e,r,t){var o=g(e);o===2?e.set(r,t):o===3?(e.delete(r),e.add(t)):e[r]=t}function ue(e,r){return e===r?e!==0||1/e==1/r:e!=e&&r!=r}function k(e){return se&&e instanceof Map}function F(e){return le&&e instanceof Set}function b(e){return e.o||e.t}function I(e){if(Array.isArray(e))return e.slice();var r=pe(e);delete r[s];for(var t=X(r),o=0;o1&&(e.set=e.add=e.clear=e.delete=fe),Object.freeze(e),r&&m(e,function(t,o){return z(o,!0)},!0))}function fe(){p(2)}function R(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function y(e){var r=ve[e];return r||p(19,e),r}function H(){return O}function W(e,r){r&&(y("Patches"),e.u=[],e.s=[],e.v=r)}function A(e){K(e),e.p.forEach(ce),e.p=null}function K(e){e===O&&(O=e.l)}function J(e){return O={p:[],l:O,h:e,m:!0,_:0}}function ce(e){var r=e[s];r.i===0||r.i===1?r.j():r.g=!0}function M(e,r){r._=r.p.length;var t=r.p[0],o=e!==void 0&&e!==t;return r.h.O||y("ES5").S(r,e,o),o?(t[s].P&&(A(r),p(4)),h(e)&&(e=S(r,e),r.l||D(r,e)),r.u&&y("Patches").M(t[s],e,r.u,r.s)):e=S(r,t,[]),A(r),r.u&&r.v(r.u,r.s),e!==re?e:void 0}function S(e,r,t){if(R(r))return r;var o=r[s];if(!o)return m(r,function(i,f){return Q(e,o,r,i,f,t)},!0),r;if(o.A!==e)return r;if(!o.P)return D(e,o.t,!0),o.t;if(!o.I){o.I=!0,o.A._--;var n=o.i===4||o.i===5?o.o=I(o.k):o.o;m(o.i===3?new Set(n):n,function(i,f){return Q(e,o,n,i,f,t)}),D(e,n,!1),t&&e.u&&y("Patches").R(o,t,e.u,e.s)}return o.o}function Q(e,r,t,o,n,i){if(P(n)){var f=S(e,n,i&&r&&r.i!==3&&!x(r.D,o)?i.concat(o):void 0);if(G(t,o,f),!P(f))return;e.m=!1}if(h(n)&&!R(n)){if(!e.h.N&&e._<1)return;S(e,n),r&&r.A.l||D(e,n)}}function D(e,r,t){t===void 0&&(t=!1),e.h.N&&e.m&&z(r,t)}function L(e,r){var t=e[s];return(t?b(t):e)[r]}function T(e,r){if(r in e)for(var t=Object.getPrototypeOf(e);t;){var o=Object.getOwnPropertyDescriptor(t,r);if(o)return o;t=Object.getPrototypeOf(t)}}function U(e){e.P||(e.P=!0,e.l&&U(e.l))}function C(e){e.o||(e.o=I(e.t))}function $(e,r,t){var o=k(r)?y("MapSet").T(r,t):F(r)?y("MapSet").F(r,t):e.O?function(n,i){var f=Array.isArray(n),u={i:f?1:0,A:i?i.A:H(),P:!1,I:!1,D:{},l:i,t:n,k:null,o:null,j:null,C:!1},c=u,d=E;f&&(c=[u],d=N);var v=Proxy.revocable(c,d),l=v.revoke,w=v.proxy;return u.k=w,u.j=l,w}(r,t):y("ES5").J(r,t);return(t?t.A:H()).p.push(o),o}function ae(e){return P(e)||p(22,e),function r(t){if(!h(t))return t;var o,n=t[s],i=g(t);if(n){if(!n.P&&(n.i<4||!y("ES5").K(n)))return n.t;n.I=!0,o=Y(t,i),n.I=!1}else o=Y(t,i);return m(o,function(f,u){n&&ie(n.t,f)===u||G(o,f,r(u))}),i===3?new Set(o):o}(e)}function Y(e,r){switch(r){case 2:return new Map(e);case 3:return Array.from(e)}return I(e)}var Z,O,V=typeof Symbol!="undefined"&&typeof Symbol("x")=="symbol",se=typeof Map!="undefined",le=typeof Set!="undefined",ee=typeof Proxy!="undefined"&&Proxy.revocable!==void 0&&typeof Reflect!="undefined",re=V?Symbol.for("immer-nothing"):((Z={})["immer-nothing"]=!0,Z),te=V?Symbol.for("immer-draftable"):"__$immer_draftable",s=V?Symbol.for("immer-state"):"__$immer_state",X=typeof Reflect!="undefined"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,pe=Object.getOwnPropertyDescriptors||function(e){var r={};return X(e).forEach(function(t){r[t]=Object.getOwnPropertyDescriptor(e,t)}),r},ve={},E={get:function(e,r){if(r===s)return e;var t=b(e);if(!x(t,r))return function(n,i,f){var u,c=T(i,f);return c?"value"in c?c.value:(u=c.get)===null||u===void 0?void 0:u.call(n.k):void 0}(e,t,r);var o=t[r];return e.I||!h(o)?o:o===L(e.t,r)?(C(e),e.o[r]=$(e.A.h,o,e)):o},has:function(e,r){return r in b(e)},ownKeys:function(e){return Reflect.ownKeys(b(e))},set:function(e,r,t){var o=T(b(e),r);if(o==null?void 0:o.set)return o.set.call(e.k,t),!0;if(e.D[r]=!0,!e.P){if(ue(t,L(b(e),r))&&(t!==void 0||x(e.t,r)))return!0;C(e),U(e)}return e.o[r]=t,!0},deleteProperty:function(e,r){return L(e.t,r)!==void 0||r in e.t?(e.D[r]=!1,C(e),U(e)):delete e.D[r],e.o&&delete e.o[r],!0},getOwnPropertyDescriptor:function(e,r){var t=b(e),o=Reflect.getOwnPropertyDescriptor(t,r);return o&&{writable:!0,configurable:e.i!==1||r!=="length",enumerable:o.enumerable,value:t[r]}},defineProperty:function(){p(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){p(12)}},N={};m(E,function(e,r){N[e]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}}),N.deleteProperty=function(e,r){return E.deleteProperty.call(this,e[0],r)},N.set=function(e,r,t){return E.set.call(this,e[0],r,t,e[0])};var ye=function(){function e(t){this.O=ee,this.N=ne.env.NODE_ENV!=="production",typeof(t==null?void 0:t.useProxies)=="boolean"&&this.setUseProxies(t.useProxies),typeof(t==null?void 0:t.autoFreeze)=="boolean"&&this.setAutoFreeze(t.autoFreeze),this.produce=this.produce.bind(this),this.produceWithPatches=this.produceWithPatches.bind(this)}var r=e.prototype;return r.produce=function(t,o,n){if(typeof t=="function"&&typeof o!="function"){var i=o;o=t;var f=this;return function(l){var w=this;l===void 0&&(l=i);for(var _=arguments.length,q=Array(_>1?_-1:0),j=1;j<_;j++)q[j-1]=arguments[j];return f.produce(l,function(oe){var B;return(B=o).call.apply(B,[w,oe].concat(q))})}}var u;if(typeof o!="function"&&p(6),n!==void 0&&typeof n!="function"&&p(7),h(t)){var c=J(this),d=$(this,t,void 0),v=!0;try{u=o(d),v=!1}finally{v?A(c):K(c)}return typeof Promise!="undefined"&&u instanceof Promise?u.then(function(l){return W(c,n),M(l,c)},function(l){throw A(c),l}):(W(c,n),M(u,c))}if(!t||typeof t!="object")return(u=o(t))===re?void 0:(u===void 0&&(u=t),this.N&&z(u,!0),u);p(21,t)},r.produceWithPatches=function(t,o){var n,i,f=this;return typeof t=="function"?function(u){for(var c=arguments.length,d=Array(c>1?c-1:0),v=1;v=0;n--){var i=o[n];if(i.path.length===0&&i.op==="replace"){t=i.value;break}}var f=y("Patches").$;return P(t)?f(t,o):this.produce(t,function(u){return f(u,o.slice(n+1))})},e}(),a=new ye(),de=a.produce,be=a.produceWithPatches.bind(a),Pe=a.setAutoFreeze.bind(a),ge=a.setUseProxies.bind(a),me=a.applyPatches.bind(a),Oe=a.createDraft.bind(a),we=a.finishDraft.bind(a);export default de; 2 | -------------------------------------------------------------------------------- /build/web_modules/import-map.json: -------------------------------------------------------------------------------- 1 | { 2 | "imports": { 3 | "htm/react": "./htm/react.js", 4 | "immer": "./immer.js", 5 | "react": "./react.js", 6 | "react-dom": "./react-dom.js" 7 | } 8 | } -------------------------------------------------------------------------------- /build/web_modules/react.js: -------------------------------------------------------------------------------- 1 | import{r as e}from"./common/index-609ee1d4.js";export{r as default}from"./common/index-609ee1d4.js";var o=e.useState;export{o as useState}; 2 | -------------------------------------------------------------------------------- /html/counting-clicks.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Counting clicks 6 | 7 | 8 |

Counting clicks

9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /html/expandable-sections.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Expandable sections 6 | 7 | 8 |

Expandable sections

9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Examples in this project 6 | 7 | 8 |

Examples in this project

9 | 10 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /html/quiz.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Quiz 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /js/counting-clicks.js: -------------------------------------------------------------------------------- 1 | import ReactDOM from 'react-dom'; 2 | import {html} from 'htm/react'; 3 | import {useState} from 'react'; 4 | 5 | //========== Model 6 | 7 | const rootModel = { 8 | numberOfClicks: 0, 9 | }; 10 | 11 | //========== Component 12 | 13 | function CountingClicks({rootModel: initialRootModel}) { 14 | const [rootModel, setRootModel] = useState(initialRootModel); 15 | return html` 16 | 21 | `; 22 | 23 | function handleIncrement(event) { 24 | event.preventDefault(); 25 | const nextRootModel = { 26 | numberOfClicks: rootModel.numberOfClicks + 1, 27 | }; 28 | setRootModel(nextRootModel); 29 | } 30 | function handleReset(event) { 31 | const nextRootModel = { 32 | numberOfClicks: 0, 33 | }; 34 | setRootModel(nextRootModel); 35 | } 36 | } 37 | 38 | //========== Entry point 39 | 40 | ReactDOM.render( 41 | html`<${CountingClicks} rootModel=${rootModel} />`, 42 | document.getElementById('root')); 43 | -------------------------------------------------------------------------------- /js/expandable-sections.js: -------------------------------------------------------------------------------- 1 | import ReactDOM from 'react-dom'; 2 | import {html} from 'htm/react'; 3 | import {useState} from 'react'; 4 | 5 | //========== Model 6 | 7 | const sections = [ 8 | { 9 | title: 'Introduction', 10 | body: 'In this section, we are taking a first look at the ideas are covered by this document.', 11 | }, 12 | { 13 | title: 'The details', 14 | body: 'In this section, we examine the ideas in more details.', 15 | }, 16 | { 17 | title: 'Conclusion', 18 | body: 'In this section, we’ll look at what we have learned and next steps you can take.', 19 | }, 20 | ]; 21 | 22 | function addUiProperties(sections) { 23 | return sections.map((section) => ({ 24 | ...section, 25 | expanded: false, 26 | })); 27 | } 28 | 29 | function expandExactlyOneSection(sections, onlyExpandedIndex) { 30 | return sections.map((section, index) => ({ 31 | ...section, 32 | expanded: (index === onlyExpandedIndex), 33 | })); 34 | } 35 | 36 | //========== Components 37 | 38 | function Sections({sections: initialSections}) { 39 | const [sections, setSections] = useState(initialSections); 40 | return sections.map((section, index) => html` 41 | <${Section} key=${index} sections=${sections} setSections=${setSections} section=${section} sectionIndex=${index} /> 42 | `); 43 | } 44 | 45 | function Section({sections, setSections, section, sectionIndex}) { 46 | return html` 47 |
48 |

49 | 50 | ${section.expanded ? '▼ ' : '▶︎ '} 51 | ${section.title} 52 | 53 |

54 | ${ 55 | !section.expanded 56 | ? null 57 | : html` 58 |
59 | ${section.body} 60 |
61 | ` 62 | } 63 |
64 | `; 65 | 66 | function handleClick(sectionIndex, event) { 67 | event.preventDefault(); 68 | setSections(expandExactlyOneSection(sections, sectionIndex)); 69 | } 70 | } 71 | 72 | //========== Entry point 73 | 74 | ReactDOM.render( 75 | html`<${Sections} sections=${addUiProperties(sections)} />`, 76 | document.getElementById('root')); 77 | -------------------------------------------------------------------------------- /js/quiz.js: -------------------------------------------------------------------------------- 1 | import React, {useState} from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import {html} from 'htm/react'; 4 | import produce from 'immer'; 5 | 6 | //========== Model 7 | 8 | const entries = [ 9 | { 10 | question: 'When was JavaScript created?', 11 | answers: [ 12 | {text: '1984', correct: false}, 13 | {text: '1995', correct: true}, 14 | {text: '2001', correct: false}, 15 | ], 16 | }, 17 | { 18 | question: 'What does “Ecma” mean?', 19 | answers: [ 20 | {text: 'European Computer Manufacturers Association', correct: false}, 21 | {text: 'Enterprise Content Management Association', correct: false}, 22 | {text: 'Electronic Component Manufacturers Association', correct: false}, 23 | {text: 'It’s a proper name', correct: true}, 24 | ], 25 | }, 26 | { 27 | question: 'What does “TC39” mean?', 28 | answers: [ 29 | {text: 'Ecma Technical Committee 39', correct: true}, 30 | {text: 'Ecma Transactions on Computers 39', correct: false}, 31 | {text: 'Ecma Technical Communications 39', correct: false}, 32 | ], 33 | }, 34 | ]; 35 | 36 | function addUiProperties(entries) { 37 | return produce(entries, (draftEntries) => { 38 | for (const entry of draftEntries) { 39 | entry.open = true; 40 | for (const answer of entry.answers) { 41 | answer.checked = false; 42 | } 43 | } 44 | }); 45 | } 46 | 47 | function areAnswersCorrect(entry) { 48 | return entry.answers.every((answer) => answer.checked == answer.correct); 49 | } 50 | 51 | class RootController { 52 | constructor(entries, setEntries) { 53 | this.entries = entries; 54 | this.setEntries = setEntries; 55 | } 56 | setAnswerChecked(entryIndex, answerIndex, checked) { 57 | const newEntries = produce(this.entries, (draftEntries) => { 58 | draftEntries[entryIndex].answers[answerIndex].checked = checked; 59 | }); 60 | this.setEntries(newEntries); // refresh UI 61 | } 62 | closeEntry(entryIndex) { 63 | const newEntries = produce(this.entries, (draftEntries) => { 64 | draftEntries[entryIndex].open = false; 65 | }); 66 | this.setEntries(newEntries); // refresh UI 67 | } 68 | } 69 | 70 | //========== Components 71 | 72 | function Quiz({entries: initialEntries}) { 73 | const [entries, setEntries] = useState(initialEntries); 74 | const root = new RootController(entries, setEntries); 75 | return html` 76 | <${React.Fragment}> 77 |

Quiz

78 | <${AllEntries} root=${root} entries=${entries} /> 79 |
80 | <${Summary} entries=${entries} /> 81 | 82 | `; 83 | } 84 | 85 | function Summary({entries}) { 86 | const numberOfClosedEntries = entries.reduce( 87 | (acc, entry) => acc + (entry.open ? 0 : 1), 0); 88 | const numberOfCorrectEntries = entries.reduce( 89 | (acc, entry) => acc + (!entry.open && areAnswersCorrect(entry) ? 1 : 0), 0); 90 | return html` 91 | Correct: ${numberOfCorrectEntries} of ${numberOfClosedEntries} 92 | ${numberOfClosedEntries === 1 ? ' entry' : ' entries'} 93 | `; 94 | } 95 | 96 | function AllEntries({root, entries}) { 97 | return entries.map((entry, index) => { 98 | const entryKind = entry.open ? OpenEntry : ClosedEntry; 99 | return html` 100 | <${entryKind} key=${index} root=${root} entryIndex=${index} entry=${entry} />` 101 | }); 102 | } 103 | 104 | //----- OpenEntry 105 | 106 | function OpenEntry({root, entryIndex, entry}) { 107 | return html` 108 |
109 |

${entry.question}

110 | ${ 111 | entry.answers.map((answer, index) => html` 112 | <${OpenAnswer} key=${index} root=${root} 113 | entryIndex=${entryIndex} answerIndex=${index} answer=${answer} /> 114 | `) 115 | } 116 |

117 |
`; 118 | 119 | function handleClick(event) { 120 | event.preventDefault(); 121 | root.closeEntry(entryIndex); 122 | } 123 | } 124 | 125 | function OpenAnswer({root, entryIndex, answerIndex, answer}) { 126 | return html` 127 |
128 | 132 |
133 | `; 134 | 135 | function handleChange(_event) { 136 | // Toggle the checkbox 137 | root.setAnswerChecked(entryIndex, answerIndex, !answer.checked); 138 | } 139 | } 140 | 141 | //----- ClosedEntry 142 | 143 | function ClosedEntry({root, entryIndex, entry}) { 144 | return html` 145 |
146 |

${entry.question}

147 | ${ 148 | entry.answers.map((answer, index) => html` 149 | <${ClosedAnswer} key=${index} root=${root} entryIndex=${entryIndex} answer=${answer} answerIndex=${index} /> 150 | `) 151 | } 152 | ${ 153 | areAnswersCorrect(entry) 154 | ? html`

Correct!

` 155 | : html`

Wrong!

` 156 | } 157 |
`; 158 | } 159 | 160 | function ClosedAnswer({root, entryIndex, answerIndex, answer}) { 161 | const style = answer.correct ? {backgroundColor: 'lightgreen'} : {}; 162 | return html` 163 |
164 | 168 |
169 | `; 170 | } 171 | 172 | //========== Entry point 173 | 174 | ReactDOM.render( 175 | html`<${Quiz} entries=${addUiProperties(entries)} />`, 176 | document.getElementById('root')); 177 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-react", 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/helper-plugin-utils": { 17 | "version": "7.10.4", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", 19 | "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", 20 | "dev": true 21 | }, 22 | "@babel/helper-validator-identifier": { 23 | "version": "7.10.4", 24 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 25 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 26 | "dev": true 27 | }, 28 | "@babel/highlight": { 29 | "version": "7.10.4", 30 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 31 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 32 | "dev": true, 33 | "requires": { 34 | "@babel/helper-validator-identifier": "^7.10.4", 35 | "chalk": "^2.0.0", 36 | "js-tokens": "^4.0.0" 37 | } 38 | }, 39 | "@babel/plugin-syntax-import-meta": { 40 | "version": "7.10.4", 41 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", 42 | "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", 43 | "dev": true, 44 | "requires": { 45 | "@babel/helper-plugin-utils": "^7.10.4" 46 | } 47 | }, 48 | "@npmcli/move-file": { 49 | "version": "1.0.1", 50 | "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", 51 | "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", 52 | "dev": true, 53 | "requires": { 54 | "mkdirp": "^1.0.4" 55 | } 56 | }, 57 | "@rollup/plugin-alias": { 58 | "version": "3.1.1", 59 | "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.1.tgz", 60 | "integrity": "sha512-hNcQY4bpBUIvxekd26DBPgF7BT4mKVNDF5tBG4Zi+3IgwLxGYRY0itHs9D0oLVwXM5pvJDWJlBQro+au8WaUWw==", 61 | "dev": true, 62 | "requires": { 63 | "slash": "^3.0.0" 64 | } 65 | }, 66 | "@rollup/plugin-commonjs": { 67 | "version": "15.0.0", 68 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.0.0.tgz", 69 | "integrity": "sha512-8uAdikHqVyrT32w1zB9VhW6uGwGjhKgnDNP4pQJsjdnyF4FgCj6/bmv24c7v2CuKhq32CcyCwRzMPEElaKkn0w==", 70 | "dev": true, 71 | "requires": { 72 | "@rollup/pluginutils": "^3.1.0", 73 | "commondir": "^1.0.1", 74 | "estree-walker": "^2.0.1", 75 | "glob": "^7.1.6", 76 | "is-reference": "^1.2.1", 77 | "magic-string": "^0.25.7", 78 | "resolve": "^1.17.0" 79 | } 80 | }, 81 | "@rollup/plugin-inject": { 82 | "version": "4.0.2", 83 | "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.2.tgz", 84 | "integrity": "sha512-TSLMA8waJ7Dmgmoc8JfPnwUwVZgLjjIAM6MqeIFqPO2ODK36JqE0Cf2F54UTgCUuW8da93Mvoj75a6KAVWgylw==", 85 | "dev": true, 86 | "requires": { 87 | "@rollup/pluginutils": "^3.0.4", 88 | "estree-walker": "^1.0.1", 89 | "magic-string": "^0.25.5" 90 | }, 91 | "dependencies": { 92 | "estree-walker": { 93 | "version": "1.0.1", 94 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 95 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 96 | "dev": true 97 | } 98 | } 99 | }, 100 | "@rollup/plugin-json": { 101 | "version": "4.1.0", 102 | "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", 103 | "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", 104 | "dev": true, 105 | "requires": { 106 | "@rollup/pluginutils": "^3.0.8" 107 | } 108 | }, 109 | "@rollup/plugin-node-resolve": { 110 | "version": "9.0.0", 111 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", 112 | "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", 113 | "dev": true, 114 | "requires": { 115 | "@rollup/pluginutils": "^3.1.0", 116 | "@types/resolve": "1.17.1", 117 | "builtin-modules": "^3.1.0", 118 | "deepmerge": "^4.2.2", 119 | "is-module": "^1.0.0", 120 | "resolve": "^1.17.0" 121 | } 122 | }, 123 | "@rollup/pluginutils": { 124 | "version": "3.1.0", 125 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 126 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 127 | "dev": true, 128 | "requires": { 129 | "@types/estree": "0.0.39", 130 | "estree-walker": "^1.0.1", 131 | "picomatch": "^2.2.2" 132 | }, 133 | "dependencies": { 134 | "estree-walker": { 135 | "version": "1.0.1", 136 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 137 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 138 | "dev": true 139 | } 140 | } 141 | }, 142 | "@sindresorhus/is": { 143 | "version": "3.1.2", 144 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz", 145 | "integrity": "sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==", 146 | "dev": true 147 | }, 148 | "@snowpack/plugin-build-script": { 149 | "version": "2.0.6", 150 | "resolved": "https://registry.npmjs.org/@snowpack/plugin-build-script/-/plugin-build-script-2.0.6.tgz", 151 | "integrity": "sha512-qtvXQq54MaBYJrCTa+DaK/KzUXYBkRukaGzIdhpqW/xzOknCjpufiQIy0VUzxwRQk0OlLC6/h3sV1hSMsoTVJw==", 152 | "dev": true, 153 | "requires": { 154 | "execa": "^4.0.3", 155 | "npm-run-path": "^4.0.1" 156 | } 157 | }, 158 | "@snowpack/plugin-react-refresh": { 159 | "version": "2.1.0", 160 | "resolved": "https://registry.npmjs.org/@snowpack/plugin-react-refresh/-/plugin-react-refresh-2.1.0.tgz", 161 | "integrity": "sha512-q372QFJSESxgV3SM/BkrkCWFswamp8X9G9gLrBpY+NHOPEvmyzW4njha+7huwwesCsuHgDf+WDqVxF0fnrW/gQ==", 162 | "dev": true, 163 | "requires": { 164 | "react-refresh": "^0.8.3" 165 | } 166 | }, 167 | "@snowpack/plugin-run-script": { 168 | "version": "2.1.1", 169 | "resolved": "https://registry.npmjs.org/@snowpack/plugin-run-script/-/plugin-run-script-2.1.1.tgz", 170 | "integrity": "sha512-ZLOcu6n+eLDNxTxKlKK/+smn9PWr/epUKGPw8tBHr3qdKQ64WNpCVr0jnafanzWpzQWD8k92J8POfskKMuEI5Q==", 171 | "dev": true, 172 | "requires": { 173 | "execa": "^4.0.3", 174 | "npm-run-path": "^4.0.1" 175 | } 176 | }, 177 | "@szmarczak/http-timer": { 178 | "version": "4.0.5", 179 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", 180 | "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", 181 | "dev": true, 182 | "requires": { 183 | "defer-to-connect": "^2.0.0" 184 | } 185 | }, 186 | "@types/cacheable-request": { 187 | "version": "6.0.1", 188 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", 189 | "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", 190 | "dev": true, 191 | "requires": { 192 | "@types/http-cache-semantics": "*", 193 | "@types/keyv": "*", 194 | "@types/node": "*", 195 | "@types/responselike": "*" 196 | } 197 | }, 198 | "@types/estree": { 199 | "version": "0.0.39", 200 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 201 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 202 | "dev": true 203 | }, 204 | "@types/http-cache-semantics": { 205 | "version": "4.0.0", 206 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", 207 | "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", 208 | "dev": true 209 | }, 210 | "@types/keyv": { 211 | "version": "3.1.1", 212 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", 213 | "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", 214 | "dev": true, 215 | "requires": { 216 | "@types/node": "*" 217 | } 218 | }, 219 | "@types/node": { 220 | "version": "14.6.0", 221 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz", 222 | "integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==", 223 | "dev": true 224 | }, 225 | "@types/parse-json": { 226 | "version": "4.0.0", 227 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 228 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 229 | "dev": true 230 | }, 231 | "@types/resolve": { 232 | "version": "1.17.1", 233 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 234 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 235 | "dev": true, 236 | "requires": { 237 | "@types/node": "*" 238 | } 239 | }, 240 | "@types/responselike": { 241 | "version": "1.0.0", 242 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 243 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 244 | "dev": true, 245 | "requires": { 246 | "@types/node": "*" 247 | } 248 | }, 249 | "address": { 250 | "version": "1.1.2", 251 | "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", 252 | "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", 253 | "dev": true 254 | }, 255 | "aggregate-error": { 256 | "version": "3.1.0", 257 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 258 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 259 | "dev": true, 260 | "requires": { 261 | "clean-stack": "^2.0.0", 262 | "indent-string": "^4.0.0" 263 | } 264 | }, 265 | "ansi-regex": { 266 | "version": "2.1.1", 267 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 268 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 269 | "dev": true 270 | }, 271 | "ansi-styles": { 272 | "version": "3.2.1", 273 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 274 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 275 | "dev": true, 276 | "requires": { 277 | "color-convert": "^1.9.0" 278 | } 279 | }, 280 | "anymatch": { 281 | "version": "3.1.1", 282 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 283 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 284 | "dev": true, 285 | "requires": { 286 | "normalize-path": "^3.0.0", 287 | "picomatch": "^2.0.4" 288 | } 289 | }, 290 | "balanced-match": { 291 | "version": "1.0.0", 292 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 293 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 294 | "dev": true 295 | }, 296 | "binary-extensions": { 297 | "version": "2.1.0", 298 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", 299 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", 300 | "dev": true 301 | }, 302 | "brace-expansion": { 303 | "version": "1.1.11", 304 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 305 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 306 | "dev": true, 307 | "requires": { 308 | "balanced-match": "^1.0.0", 309 | "concat-map": "0.0.1" 310 | } 311 | }, 312 | "braces": { 313 | "version": "3.0.2", 314 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 315 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 316 | "dev": true, 317 | "requires": { 318 | "fill-range": "^7.0.1" 319 | } 320 | }, 321 | "builtin-modules": { 322 | "version": "3.1.0", 323 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 324 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 325 | "dev": true 326 | }, 327 | "builtins": { 328 | "version": "1.0.3", 329 | "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", 330 | "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", 331 | "dev": true 332 | }, 333 | "cacache": { 334 | "version": "15.0.5", 335 | "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", 336 | "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", 337 | "dev": true, 338 | "requires": { 339 | "@npmcli/move-file": "^1.0.1", 340 | "chownr": "^2.0.0", 341 | "fs-minipass": "^2.0.0", 342 | "glob": "^7.1.4", 343 | "infer-owner": "^1.0.4", 344 | "lru-cache": "^6.0.0", 345 | "minipass": "^3.1.1", 346 | "minipass-collect": "^1.0.2", 347 | "minipass-flush": "^1.0.5", 348 | "minipass-pipeline": "^1.2.2", 349 | "mkdirp": "^1.0.3", 350 | "p-map": "^4.0.0", 351 | "promise-inflight": "^1.0.1", 352 | "rimraf": "^3.0.2", 353 | "ssri": "^8.0.0", 354 | "tar": "^6.0.2", 355 | "unique-filename": "^1.1.1" 356 | } 357 | }, 358 | "cacheable-lookup": { 359 | "version": "5.0.3", 360 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", 361 | "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==", 362 | "dev": true 363 | }, 364 | "cacheable-request": { 365 | "version": "7.0.1", 366 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", 367 | "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", 368 | "dev": true, 369 | "requires": { 370 | "clone-response": "^1.0.2", 371 | "get-stream": "^5.1.0", 372 | "http-cache-semantics": "^4.0.0", 373 | "keyv": "^4.0.0", 374 | "lowercase-keys": "^2.0.0", 375 | "normalize-url": "^4.1.0", 376 | "responselike": "^2.0.0" 377 | } 378 | }, 379 | "cachedir": { 380 | "version": "2.3.0", 381 | "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", 382 | "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", 383 | "dev": true 384 | }, 385 | "callsites": { 386 | "version": "3.1.0", 387 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 388 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 389 | "dev": true 390 | }, 391 | "camelcase": { 392 | "version": "5.3.1", 393 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 394 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 395 | "dev": true 396 | }, 397 | "chalk": { 398 | "version": "2.4.2", 399 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 400 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 401 | "dev": true, 402 | "requires": { 403 | "ansi-styles": "^3.2.1", 404 | "escape-string-regexp": "^1.0.5", 405 | "supports-color": "^5.3.0" 406 | } 407 | }, 408 | "chokidar": { 409 | "version": "3.4.2", 410 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", 411 | "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", 412 | "dev": true, 413 | "requires": { 414 | "anymatch": "~3.1.1", 415 | "braces": "~3.0.2", 416 | "fsevents": "~2.1.2", 417 | "glob-parent": "~5.1.0", 418 | "is-binary-path": "~2.1.0", 419 | "is-glob": "~4.0.1", 420 | "normalize-path": "~3.0.0", 421 | "readdirp": "~3.4.0" 422 | } 423 | }, 424 | "chownr": { 425 | "version": "2.0.0", 426 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 427 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 428 | "dev": true 429 | }, 430 | "clean-stack": { 431 | "version": "2.2.0", 432 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 433 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 434 | "dev": true 435 | }, 436 | "clone-response": { 437 | "version": "1.0.2", 438 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 439 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 440 | "dev": true, 441 | "requires": { 442 | "mimic-response": "^1.0.0" 443 | } 444 | }, 445 | "color-convert": { 446 | "version": "1.9.3", 447 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 448 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 449 | "dev": true, 450 | "requires": { 451 | "color-name": "1.1.3" 452 | } 453 | }, 454 | "color-name": { 455 | "version": "1.1.3", 456 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 457 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 458 | "dev": true 459 | }, 460 | "commondir": { 461 | "version": "1.0.1", 462 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 463 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 464 | "dev": true 465 | }, 466 | "compressible": { 467 | "version": "2.0.18", 468 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 469 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 470 | "dev": true, 471 | "requires": { 472 | "mime-db": ">= 1.43.0 < 2" 473 | } 474 | }, 475 | "concat-map": { 476 | "version": "0.0.1", 477 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 478 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 479 | "dev": true 480 | }, 481 | "cosmiconfig": { 482 | "version": "6.0.0", 483 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", 484 | "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", 485 | "dev": true, 486 | "requires": { 487 | "@types/parse-json": "^4.0.0", 488 | "import-fresh": "^3.1.0", 489 | "parse-json": "^5.0.0", 490 | "path-type": "^4.0.0", 491 | "yaml": "^1.7.2" 492 | } 493 | }, 494 | "cross-spawn": { 495 | "version": "7.0.3", 496 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 497 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 498 | "dev": true, 499 | "requires": { 500 | "path-key": "^3.1.0", 501 | "shebang-command": "^2.0.0", 502 | "which": "^2.0.1" 503 | } 504 | }, 505 | "css-modules-loader-core": { 506 | "version": "1.1.0", 507 | "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", 508 | "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", 509 | "dev": true, 510 | "requires": { 511 | "icss-replace-symbols": "1.1.0", 512 | "postcss": "6.0.1", 513 | "postcss-modules-extract-imports": "1.1.0", 514 | "postcss-modules-local-by-default": "1.2.0", 515 | "postcss-modules-scope": "1.1.0", 516 | "postcss-modules-values": "1.3.0" 517 | } 518 | }, 519 | "css-selector-tokenizer": { 520 | "version": "0.7.3", 521 | "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", 522 | "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", 523 | "dev": true, 524 | "requires": { 525 | "cssesc": "^3.0.0", 526 | "fastparse": "^1.1.2" 527 | } 528 | }, 529 | "cssesc": { 530 | "version": "3.0.0", 531 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 532 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 533 | "dev": true 534 | }, 535 | "debug": { 536 | "version": "2.6.9", 537 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 538 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 539 | "dev": true, 540 | "requires": { 541 | "ms": "2.0.0" 542 | } 543 | }, 544 | "decamelize": { 545 | "version": "1.2.0", 546 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 547 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 548 | "dev": true 549 | }, 550 | "decompress-response": { 551 | "version": "6.0.0", 552 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 553 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 554 | "dev": true, 555 | "requires": { 556 | "mimic-response": "^3.1.0" 557 | }, 558 | "dependencies": { 559 | "mimic-response": { 560 | "version": "3.1.0", 561 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 562 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 563 | "dev": true 564 | } 565 | } 566 | }, 567 | "deepmerge": { 568 | "version": "4.2.2", 569 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 570 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 571 | "dev": true 572 | }, 573 | "defer-to-connect": { 574 | "version": "2.0.0", 575 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", 576 | "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", 577 | "dev": true 578 | }, 579 | "detect-port": { 580 | "version": "1.3.0", 581 | "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", 582 | "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", 583 | "dev": true, 584 | "requires": { 585 | "address": "^1.0.1", 586 | "debug": "^2.6.0" 587 | } 588 | }, 589 | "end-of-stream": { 590 | "version": "1.4.4", 591 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 592 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 593 | "dev": true, 594 | "requires": { 595 | "once": "^1.4.0" 596 | } 597 | }, 598 | "error-ex": { 599 | "version": "1.3.2", 600 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 601 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 602 | "dev": true, 603 | "requires": { 604 | "is-arrayish": "^0.2.1" 605 | } 606 | }, 607 | "es-module-lexer": { 608 | "version": "0.3.24", 609 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.24.tgz", 610 | "integrity": "sha512-jm/i7KdJtaMDle921xIsA/MQQOGuZ6goYxhlV+k+gQNI7FtP4N6jknrmJvj++3ODpiyFGwQ4PIstJfHJQJNc+g==", 611 | "dev": true 612 | }, 613 | "esbuild": { 614 | "version": "0.6.27", 615 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.6.27.tgz", 616 | "integrity": "sha512-oonxxg/ExZt9tYMPnEUDYAN7YefEPsC21pXez5rwKcCPAF6gzMuxLvAdbU4dCT8Tp0I2avODz61vrGyu5wR/uA==", 617 | "dev": true 618 | }, 619 | "escape-string-regexp": { 620 | "version": "1.0.5", 621 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 622 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 623 | "dev": true 624 | }, 625 | "estree-walker": { 626 | "version": "2.0.1", 627 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz", 628 | "integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==", 629 | "dev": true 630 | }, 631 | "etag": { 632 | "version": "1.8.1", 633 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 634 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 635 | "dev": true 636 | }, 637 | "eventemitter3": { 638 | "version": "4.0.5", 639 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.5.tgz", 640 | "integrity": "sha512-QR0rh0YiPuxuDQ6+T9GAO/xWTExXpxIes1Nl9RykNGTnE1HJmkuEfxJH9cubjIOQZ/GH4qNBR4u8VSHaKiWs4g==", 641 | "dev": true 642 | }, 643 | "execa": { 644 | "version": "4.0.3", 645 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", 646 | "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", 647 | "dev": true, 648 | "requires": { 649 | "cross-spawn": "^7.0.0", 650 | "get-stream": "^5.0.0", 651 | "human-signals": "^1.1.1", 652 | "is-stream": "^2.0.0", 653 | "merge-stream": "^2.0.0", 654 | "npm-run-path": "^4.0.0", 655 | "onetime": "^5.1.0", 656 | "signal-exit": "^3.0.2", 657 | "strip-final-newline": "^2.0.0" 658 | } 659 | }, 660 | "fastparse": { 661 | "version": "1.1.2", 662 | "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", 663 | "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", 664 | "dev": true 665 | }, 666 | "fill-range": { 667 | "version": "7.0.1", 668 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 669 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 670 | "dev": true, 671 | "requires": { 672 | "to-regex-range": "^5.0.1" 673 | } 674 | }, 675 | "find-cache-dir": { 676 | "version": "3.3.1", 677 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", 678 | "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", 679 | "dev": true, 680 | "requires": { 681 | "commondir": "^1.0.1", 682 | "make-dir": "^3.0.2", 683 | "pkg-dir": "^4.1.0" 684 | } 685 | }, 686 | "find-up": { 687 | "version": "4.1.0", 688 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 689 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 690 | "dev": true, 691 | "requires": { 692 | "locate-path": "^5.0.0", 693 | "path-exists": "^4.0.0" 694 | } 695 | }, 696 | "follow-redirects": { 697 | "version": "1.13.0", 698 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", 699 | "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", 700 | "dev": true 701 | }, 702 | "fs-minipass": { 703 | "version": "2.1.0", 704 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 705 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 706 | "dev": true, 707 | "requires": { 708 | "minipass": "^3.0.0" 709 | } 710 | }, 711 | "fs.realpath": { 712 | "version": "1.0.0", 713 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 714 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 715 | "dev": true 716 | }, 717 | "fsevents": { 718 | "version": "2.1.3", 719 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 720 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 721 | "dev": true, 722 | "optional": true 723 | }, 724 | "get-stream": { 725 | "version": "5.2.0", 726 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 727 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 728 | "dev": true, 729 | "requires": { 730 | "pump": "^3.0.0" 731 | } 732 | }, 733 | "glob": { 734 | "version": "7.1.6", 735 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 736 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 737 | "dev": true, 738 | "requires": { 739 | "fs.realpath": "^1.0.0", 740 | "inflight": "^1.0.4", 741 | "inherits": "2", 742 | "minimatch": "^3.0.4", 743 | "once": "^1.3.0", 744 | "path-is-absolute": "^1.0.0" 745 | } 746 | }, 747 | "glob-parent": { 748 | "version": "5.1.1", 749 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 750 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 751 | "dev": true, 752 | "requires": { 753 | "is-glob": "^4.0.1" 754 | } 755 | }, 756 | "got": { 757 | "version": "11.5.2", 758 | "resolved": "https://registry.npmjs.org/got/-/got-11.5.2.tgz", 759 | "integrity": "sha512-yUhpEDLeuGiGJjRSzEq3kvt4zJtAcjKmhIiwNp/eUs75tRlXfWcHo5tcBaMQtnjHWC7nQYT5HkY/l0QOQTkVww==", 760 | "dev": true, 761 | "requires": { 762 | "@sindresorhus/is": "^3.0.0", 763 | "@szmarczak/http-timer": "^4.0.5", 764 | "@types/cacheable-request": "^6.0.1", 765 | "@types/responselike": "^1.0.0", 766 | "cacheable-lookup": "^5.0.3", 767 | "cacheable-request": "^7.0.1", 768 | "decompress-response": "^6.0.0", 769 | "http2-wrapper": "^1.0.0-beta.5.0", 770 | "lowercase-keys": "^2.0.0", 771 | "p-cancelable": "^2.0.0", 772 | "responselike": "^2.0.0" 773 | } 774 | }, 775 | "has-ansi": { 776 | "version": "2.0.0", 777 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 778 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 779 | "dev": true, 780 | "requires": { 781 | "ansi-regex": "^2.0.0" 782 | } 783 | }, 784 | "has-flag": { 785 | "version": "3.0.0", 786 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 787 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 788 | "dev": true 789 | }, 790 | "htm": { 791 | "version": "3.0.4", 792 | "resolved": "https://registry.npmjs.org/htm/-/htm-3.0.4.tgz", 793 | "integrity": "sha512-VRdvxX3tmrXuT/Ovt59NMp/ORMFi4bceFMDjos1PV4E0mV+5votuID8R60egR9A4U8nLt238R/snlJGz3UYiTQ==" 794 | }, 795 | "http-cache-semantics": { 796 | "version": "4.1.0", 797 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 798 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 799 | "dev": true 800 | }, 801 | "http-proxy": { 802 | "version": "1.18.1", 803 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", 804 | "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", 805 | "dev": true, 806 | "requires": { 807 | "eventemitter3": "^4.0.0", 808 | "follow-redirects": "^1.0.0", 809 | "requires-port": "^1.0.0" 810 | } 811 | }, 812 | "http2-wrapper": { 813 | "version": "1.0.0-beta.5.2", 814 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", 815 | "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", 816 | "dev": true, 817 | "requires": { 818 | "quick-lru": "^5.1.1", 819 | "resolve-alpn": "^1.0.0" 820 | } 821 | }, 822 | "human-signals": { 823 | "version": "1.1.1", 824 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 825 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", 826 | "dev": true 827 | }, 828 | "icss-replace-symbols": { 829 | "version": "1.1.0", 830 | "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", 831 | "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", 832 | "dev": true 833 | }, 834 | "immer": { 835 | "version": "7.0.7", 836 | "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.7.tgz", 837 | "integrity": "sha512-Q8yYwVADJXrNfp1ZUAh4XDHkcoE3wpdpb4mC5abDSajs2EbW8+cGdPyAnglMyLnm7EF6ojD2xBFX7L5i4TIytw==" 838 | }, 839 | "import-fresh": { 840 | "version": "3.2.1", 841 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 842 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 843 | "dev": true, 844 | "requires": { 845 | "parent-module": "^1.0.0", 846 | "resolve-from": "^4.0.0" 847 | }, 848 | "dependencies": { 849 | "resolve-from": { 850 | "version": "4.0.0", 851 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 852 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 853 | "dev": true 854 | } 855 | } 856 | }, 857 | "imurmurhash": { 858 | "version": "0.1.4", 859 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 860 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 861 | "dev": true 862 | }, 863 | "indent-string": { 864 | "version": "4.0.0", 865 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 866 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 867 | "dev": true 868 | }, 869 | "infer-owner": { 870 | "version": "1.0.4", 871 | "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", 872 | "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", 873 | "dev": true 874 | }, 875 | "inflight": { 876 | "version": "1.0.6", 877 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 878 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 879 | "dev": true, 880 | "requires": { 881 | "once": "^1.3.0", 882 | "wrappy": "1" 883 | } 884 | }, 885 | "inherits": { 886 | "version": "2.0.4", 887 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 888 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 889 | "dev": true 890 | }, 891 | "is-arrayish": { 892 | "version": "0.2.1", 893 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 894 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 895 | "dev": true 896 | }, 897 | "is-binary-path": { 898 | "version": "2.1.0", 899 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 900 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 901 | "dev": true, 902 | "requires": { 903 | "binary-extensions": "^2.0.0" 904 | } 905 | }, 906 | "is-builtin-module": { 907 | "version": "3.0.0", 908 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.0.0.tgz", 909 | "integrity": "sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw==", 910 | "dev": true, 911 | "requires": { 912 | "builtin-modules": "^3.0.0" 913 | } 914 | }, 915 | "is-docker": { 916 | "version": "2.1.1", 917 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", 918 | "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", 919 | "dev": true 920 | }, 921 | "is-extglob": { 922 | "version": "2.1.1", 923 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 924 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 925 | "dev": true 926 | }, 927 | "is-glob": { 928 | "version": "4.0.1", 929 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 930 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 931 | "dev": true, 932 | "requires": { 933 | "is-extglob": "^2.1.1" 934 | } 935 | }, 936 | "is-module": { 937 | "version": "1.0.0", 938 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 939 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 940 | "dev": true 941 | }, 942 | "is-number": { 943 | "version": "7.0.0", 944 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 945 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 946 | "dev": true 947 | }, 948 | "is-reference": { 949 | "version": "1.2.1", 950 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 951 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 952 | "dev": true, 953 | "requires": { 954 | "@types/estree": "*" 955 | } 956 | }, 957 | "is-stream": { 958 | "version": "2.0.0", 959 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 960 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 961 | "dev": true 962 | }, 963 | "is-wsl": { 964 | "version": "2.2.0", 965 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 966 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 967 | "dev": true, 968 | "requires": { 969 | "is-docker": "^2.0.0" 970 | } 971 | }, 972 | "isexe": { 973 | "version": "2.0.0", 974 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 975 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 976 | "dev": true 977 | }, 978 | "js-tokens": { 979 | "version": "4.0.0", 980 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 981 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 982 | }, 983 | "json-buffer": { 984 | "version": "3.0.1", 985 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 986 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 987 | "dev": true 988 | }, 989 | "json-parse-even-better-errors": { 990 | "version": "2.3.0", 991 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz", 992 | "integrity": "sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q==", 993 | "dev": true 994 | }, 995 | "jsonschema": { 996 | "version": "1.2.6", 997 | "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.6.tgz", 998 | "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==", 999 | "dev": true 1000 | }, 1001 | "keyv": { 1002 | "version": "4.0.1", 1003 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz", 1004 | "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==", 1005 | "dev": true, 1006 | "requires": { 1007 | "json-buffer": "3.0.1" 1008 | } 1009 | }, 1010 | "kleur": { 1011 | "version": "4.1.1", 1012 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.1.tgz", 1013 | "integrity": "sha512-BsNhM6T/yTWFG580CRnYhT3LfUuPK7Hwrm+W2H0G8lK/nogalP5Nsrh/cHjxVVkzl0sFm7z8b8rNcZCfKxeoxA==", 1014 | "dev": true 1015 | }, 1016 | "lines-and-columns": { 1017 | "version": "1.1.6", 1018 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 1019 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", 1020 | "dev": true 1021 | }, 1022 | "locate-path": { 1023 | "version": "5.0.0", 1024 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1025 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1026 | "dev": true, 1027 | "requires": { 1028 | "p-locate": "^4.1.0" 1029 | } 1030 | }, 1031 | "loose-envify": { 1032 | "version": "1.4.0", 1033 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1034 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1035 | "requires": { 1036 | "js-tokens": "^3.0.0 || ^4.0.0" 1037 | } 1038 | }, 1039 | "lowercase-keys": { 1040 | "version": "2.0.0", 1041 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1042 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 1043 | "dev": true 1044 | }, 1045 | "lru-cache": { 1046 | "version": "6.0.0", 1047 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1048 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1049 | "dev": true, 1050 | "requires": { 1051 | "yallist": "^4.0.0" 1052 | } 1053 | }, 1054 | "magic-string": { 1055 | "version": "0.25.7", 1056 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1057 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1058 | "dev": true, 1059 | "requires": { 1060 | "sourcemap-codec": "^1.4.4" 1061 | } 1062 | }, 1063 | "make-dir": { 1064 | "version": "3.1.0", 1065 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1066 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1067 | "dev": true, 1068 | "requires": { 1069 | "semver": "^6.0.0" 1070 | } 1071 | }, 1072 | "merge-stream": { 1073 | "version": "2.0.0", 1074 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1075 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1076 | "dev": true 1077 | }, 1078 | "mime-db": { 1079 | "version": "1.44.0", 1080 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1081 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", 1082 | "dev": true 1083 | }, 1084 | "mime-types": { 1085 | "version": "2.1.27", 1086 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1087 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1088 | "dev": true, 1089 | "requires": { 1090 | "mime-db": "1.44.0" 1091 | } 1092 | }, 1093 | "mimic-fn": { 1094 | "version": "2.1.0", 1095 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1096 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1097 | "dev": true 1098 | }, 1099 | "mimic-response": { 1100 | "version": "1.0.1", 1101 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1102 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1103 | "dev": true 1104 | }, 1105 | "minimatch": { 1106 | "version": "3.0.4", 1107 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1108 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1109 | "dev": true, 1110 | "requires": { 1111 | "brace-expansion": "^1.1.7" 1112 | } 1113 | }, 1114 | "minipass": { 1115 | "version": "3.1.3", 1116 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", 1117 | "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", 1118 | "dev": true, 1119 | "requires": { 1120 | "yallist": "^4.0.0" 1121 | } 1122 | }, 1123 | "minipass-collect": { 1124 | "version": "1.0.2", 1125 | "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", 1126 | "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", 1127 | "dev": true, 1128 | "requires": { 1129 | "minipass": "^3.0.0" 1130 | } 1131 | }, 1132 | "minipass-flush": { 1133 | "version": "1.0.5", 1134 | "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", 1135 | "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", 1136 | "dev": true, 1137 | "requires": { 1138 | "minipass": "^3.0.0" 1139 | } 1140 | }, 1141 | "minipass-pipeline": { 1142 | "version": "1.2.4", 1143 | "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", 1144 | "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", 1145 | "dev": true, 1146 | "requires": { 1147 | "minipass": "^3.0.0" 1148 | } 1149 | }, 1150 | "minizlib": { 1151 | "version": "2.1.2", 1152 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 1153 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 1154 | "dev": true, 1155 | "requires": { 1156 | "minipass": "^3.0.0", 1157 | "yallist": "^4.0.0" 1158 | } 1159 | }, 1160 | "mkdirp": { 1161 | "version": "1.0.4", 1162 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1163 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1164 | "dev": true 1165 | }, 1166 | "ms": { 1167 | "version": "2.0.0", 1168 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1169 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1170 | "dev": true 1171 | }, 1172 | "normalize-path": { 1173 | "version": "3.0.0", 1174 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1175 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1176 | "dev": true 1177 | }, 1178 | "normalize-url": { 1179 | "version": "4.5.0", 1180 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1181 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 1182 | "dev": true 1183 | }, 1184 | "npm-run-path": { 1185 | "version": "4.0.1", 1186 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 1187 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1188 | "dev": true, 1189 | "requires": { 1190 | "path-key": "^3.0.0" 1191 | } 1192 | }, 1193 | "object-assign": { 1194 | "version": "4.1.1", 1195 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1196 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1197 | }, 1198 | "once": { 1199 | "version": "1.4.0", 1200 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1201 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1202 | "dev": true, 1203 | "requires": { 1204 | "wrappy": "1" 1205 | } 1206 | }, 1207 | "onetime": { 1208 | "version": "5.1.2", 1209 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1210 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1211 | "dev": true, 1212 | "requires": { 1213 | "mimic-fn": "^2.1.0" 1214 | } 1215 | }, 1216 | "open": { 1217 | "version": "7.2.0", 1218 | "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", 1219 | "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", 1220 | "dev": true, 1221 | "requires": { 1222 | "is-docker": "^2.0.0", 1223 | "is-wsl": "^2.1.1" 1224 | } 1225 | }, 1226 | "p-cancelable": { 1227 | "version": "2.0.0", 1228 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", 1229 | "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", 1230 | "dev": true 1231 | }, 1232 | "p-finally": { 1233 | "version": "1.0.0", 1234 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1235 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1236 | "dev": true 1237 | }, 1238 | "p-limit": { 1239 | "version": "2.3.0", 1240 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1241 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1242 | "dev": true, 1243 | "requires": { 1244 | "p-try": "^2.0.0" 1245 | } 1246 | }, 1247 | "p-locate": { 1248 | "version": "4.1.0", 1249 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1250 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1251 | "dev": true, 1252 | "requires": { 1253 | "p-limit": "^2.2.0" 1254 | } 1255 | }, 1256 | "p-map": { 1257 | "version": "4.0.0", 1258 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 1259 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 1260 | "dev": true, 1261 | "requires": { 1262 | "aggregate-error": "^3.0.0" 1263 | } 1264 | }, 1265 | "p-queue": { 1266 | "version": "6.6.1", 1267 | "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.1.tgz", 1268 | "integrity": "sha512-miQiSxLYPYBxGkrldecZC18OTLjdUqnlRebGzPRiVxB8mco7usCmm7hFuxiTvp93K18JnLtE4KMMycjAu/cQQg==", 1269 | "dev": true, 1270 | "requires": { 1271 | "eventemitter3": "^4.0.4", 1272 | "p-timeout": "^3.1.0" 1273 | } 1274 | }, 1275 | "p-timeout": { 1276 | "version": "3.2.0", 1277 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", 1278 | "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", 1279 | "dev": true, 1280 | "requires": { 1281 | "p-finally": "^1.0.0" 1282 | } 1283 | }, 1284 | "p-try": { 1285 | "version": "2.2.0", 1286 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1287 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1288 | "dev": true 1289 | }, 1290 | "parent-module": { 1291 | "version": "1.0.1", 1292 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1293 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1294 | "dev": true, 1295 | "requires": { 1296 | "callsites": "^3.0.0" 1297 | } 1298 | }, 1299 | "parse-json": { 1300 | "version": "5.1.0", 1301 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", 1302 | "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", 1303 | "dev": true, 1304 | "requires": { 1305 | "@babel/code-frame": "^7.0.0", 1306 | "error-ex": "^1.3.1", 1307 | "json-parse-even-better-errors": "^2.3.0", 1308 | "lines-and-columns": "^1.1.6" 1309 | } 1310 | }, 1311 | "path-exists": { 1312 | "version": "4.0.0", 1313 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1314 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1315 | "dev": true 1316 | }, 1317 | "path-is-absolute": { 1318 | "version": "1.0.1", 1319 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1320 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1321 | "dev": true 1322 | }, 1323 | "path-key": { 1324 | "version": "3.1.1", 1325 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1326 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1327 | "dev": true 1328 | }, 1329 | "path-parse": { 1330 | "version": "1.0.6", 1331 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1332 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1333 | "dev": true 1334 | }, 1335 | "path-type": { 1336 | "version": "4.0.0", 1337 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1338 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1339 | "dev": true 1340 | }, 1341 | "picomatch": { 1342 | "version": "2.2.2", 1343 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1344 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1345 | "dev": true 1346 | }, 1347 | "pkg-dir": { 1348 | "version": "4.2.0", 1349 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1350 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1351 | "dev": true, 1352 | "requires": { 1353 | "find-up": "^4.0.0" 1354 | } 1355 | }, 1356 | "postcss": { 1357 | "version": "6.0.1", 1358 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", 1359 | "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", 1360 | "dev": true, 1361 | "requires": { 1362 | "chalk": "^1.1.3", 1363 | "source-map": "^0.5.6", 1364 | "supports-color": "^3.2.3" 1365 | }, 1366 | "dependencies": { 1367 | "ansi-styles": { 1368 | "version": "2.2.1", 1369 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 1370 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 1371 | "dev": true 1372 | }, 1373 | "chalk": { 1374 | "version": "1.1.3", 1375 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1376 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1377 | "dev": true, 1378 | "requires": { 1379 | "ansi-styles": "^2.2.1", 1380 | "escape-string-regexp": "^1.0.2", 1381 | "has-ansi": "^2.0.0", 1382 | "strip-ansi": "^3.0.0", 1383 | "supports-color": "^2.0.0" 1384 | }, 1385 | "dependencies": { 1386 | "supports-color": { 1387 | "version": "2.0.0", 1388 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1389 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1390 | "dev": true 1391 | } 1392 | } 1393 | }, 1394 | "has-flag": { 1395 | "version": "1.0.0", 1396 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 1397 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 1398 | "dev": true 1399 | }, 1400 | "supports-color": { 1401 | "version": "3.2.3", 1402 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 1403 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 1404 | "dev": true, 1405 | "requires": { 1406 | "has-flag": "^1.0.0" 1407 | } 1408 | } 1409 | } 1410 | }, 1411 | "postcss-modules-extract-imports": { 1412 | "version": "1.1.0", 1413 | "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", 1414 | "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", 1415 | "dev": true, 1416 | "requires": { 1417 | "postcss": "^6.0.1" 1418 | } 1419 | }, 1420 | "postcss-modules-local-by-default": { 1421 | "version": "1.2.0", 1422 | "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", 1423 | "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", 1424 | "dev": true, 1425 | "requires": { 1426 | "css-selector-tokenizer": "^0.7.0", 1427 | "postcss": "^6.0.1" 1428 | } 1429 | }, 1430 | "postcss-modules-scope": { 1431 | "version": "1.1.0", 1432 | "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", 1433 | "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", 1434 | "dev": true, 1435 | "requires": { 1436 | "css-selector-tokenizer": "^0.7.0", 1437 | "postcss": "^6.0.1" 1438 | } 1439 | }, 1440 | "postcss-modules-values": { 1441 | "version": "1.3.0", 1442 | "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", 1443 | "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", 1444 | "dev": true, 1445 | "requires": { 1446 | "icss-replace-symbols": "^1.1.0", 1447 | "postcss": "^6.0.1" 1448 | } 1449 | }, 1450 | "promise-inflight": { 1451 | "version": "1.0.1", 1452 | "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", 1453 | "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", 1454 | "dev": true 1455 | }, 1456 | "prop-types": { 1457 | "version": "15.7.2", 1458 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", 1459 | "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", 1460 | "requires": { 1461 | "loose-envify": "^1.4.0", 1462 | "object-assign": "^4.1.1", 1463 | "react-is": "^16.8.1" 1464 | } 1465 | }, 1466 | "pump": { 1467 | "version": "3.0.0", 1468 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1469 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1470 | "dev": true, 1471 | "requires": { 1472 | "end-of-stream": "^1.1.0", 1473 | "once": "^1.3.1" 1474 | } 1475 | }, 1476 | "quick-lru": { 1477 | "version": "5.1.1", 1478 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1479 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1480 | "dev": true 1481 | }, 1482 | "react": { 1483 | "version": "16.13.1", 1484 | "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", 1485 | "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", 1486 | "requires": { 1487 | "loose-envify": "^1.1.0", 1488 | "object-assign": "^4.1.1", 1489 | "prop-types": "^15.6.2" 1490 | } 1491 | }, 1492 | "react-dom": { 1493 | "version": "16.13.1", 1494 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", 1495 | "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", 1496 | "requires": { 1497 | "loose-envify": "^1.1.0", 1498 | "object-assign": "^4.1.1", 1499 | "prop-types": "^15.6.2", 1500 | "scheduler": "^0.19.1" 1501 | } 1502 | }, 1503 | "react-is": { 1504 | "version": "16.13.1", 1505 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 1506 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 1507 | }, 1508 | "react-refresh": { 1509 | "version": "0.8.3", 1510 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", 1511 | "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", 1512 | "dev": true 1513 | }, 1514 | "readdirp": { 1515 | "version": "3.4.0", 1516 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", 1517 | "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", 1518 | "dev": true, 1519 | "requires": { 1520 | "picomatch": "^2.2.1" 1521 | } 1522 | }, 1523 | "requires-port": { 1524 | "version": "1.0.0", 1525 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1526 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 1527 | "dev": true 1528 | }, 1529 | "resolve": { 1530 | "version": "1.17.0", 1531 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1532 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1533 | "dev": true, 1534 | "requires": { 1535 | "path-parse": "^1.0.6" 1536 | } 1537 | }, 1538 | "resolve-alpn": { 1539 | "version": "1.0.0", 1540 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", 1541 | "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", 1542 | "dev": true 1543 | }, 1544 | "resolve-from": { 1545 | "version": "5.0.0", 1546 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1547 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1548 | "dev": true 1549 | }, 1550 | "responselike": { 1551 | "version": "2.0.0", 1552 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", 1553 | "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", 1554 | "dev": true, 1555 | "requires": { 1556 | "lowercase-keys": "^2.0.0" 1557 | } 1558 | }, 1559 | "rimraf": { 1560 | "version": "3.0.2", 1561 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1562 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1563 | "dev": true, 1564 | "requires": { 1565 | "glob": "^7.1.3" 1566 | } 1567 | }, 1568 | "rollup": { 1569 | "version": "2.26.5", 1570 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.5.tgz", 1571 | "integrity": "sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA==", 1572 | "dev": true, 1573 | "requires": { 1574 | "fsevents": "~2.1.2" 1575 | } 1576 | }, 1577 | "rollup-plugin-inject": { 1578 | "version": "3.0.2", 1579 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 1580 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 1581 | "dev": true, 1582 | "requires": { 1583 | "estree-walker": "^0.6.1", 1584 | "magic-string": "^0.25.3", 1585 | "rollup-pluginutils": "^2.8.1" 1586 | }, 1587 | "dependencies": { 1588 | "estree-walker": { 1589 | "version": "0.6.1", 1590 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1591 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1592 | "dev": true 1593 | } 1594 | } 1595 | }, 1596 | "rollup-plugin-node-polyfills": { 1597 | "version": "0.2.1", 1598 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 1599 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 1600 | "dev": true, 1601 | "requires": { 1602 | "rollup-plugin-inject": "^3.0.0" 1603 | } 1604 | }, 1605 | "rollup-pluginutils": { 1606 | "version": "2.8.2", 1607 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1608 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1609 | "dev": true, 1610 | "requires": { 1611 | "estree-walker": "^0.6.1" 1612 | }, 1613 | "dependencies": { 1614 | "estree-walker": { 1615 | "version": "0.6.1", 1616 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1617 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1618 | "dev": true 1619 | } 1620 | } 1621 | }, 1622 | "scheduler": { 1623 | "version": "0.19.1", 1624 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", 1625 | "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", 1626 | "requires": { 1627 | "loose-envify": "^1.1.0", 1628 | "object-assign": "^4.1.1" 1629 | } 1630 | }, 1631 | "semver": { 1632 | "version": "6.3.0", 1633 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1634 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1635 | "dev": true 1636 | }, 1637 | "shebang-command": { 1638 | "version": "2.0.0", 1639 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1640 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1641 | "dev": true, 1642 | "requires": { 1643 | "shebang-regex": "^3.0.0" 1644 | } 1645 | }, 1646 | "shebang-regex": { 1647 | "version": "3.0.0", 1648 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1649 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1650 | "dev": true 1651 | }, 1652 | "signal-exit": { 1653 | "version": "3.0.3", 1654 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1655 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 1656 | "dev": true 1657 | }, 1658 | "slash": { 1659 | "version": "3.0.0", 1660 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1661 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1662 | "dev": true 1663 | }, 1664 | "snowpack": { 1665 | "version": "2.9.0", 1666 | "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-2.9.0.tgz", 1667 | "integrity": "sha512-dw1pJYqGV4No7LtSXnTnWXuoGkU/7X45vYrx95UxqH5+e7bgZXrDR8eh6KX+/tP8sAEF5lJWYZDucv/8eRr5gQ==", 1668 | "dev": true, 1669 | "requires": { 1670 | "@babel/plugin-syntax-import-meta": "^7.10.4", 1671 | "@rollup/plugin-alias": "^3.0.1", 1672 | "@rollup/plugin-commonjs": "^15.0.0", 1673 | "@rollup/plugin-inject": "^4.0.2", 1674 | "@rollup/plugin-json": "^4.0.0", 1675 | "@rollup/plugin-node-resolve": "^9.0.0", 1676 | "@snowpack/plugin-build-script": "^2.0.6", 1677 | "@snowpack/plugin-run-script": "^2.1.1", 1678 | "cacache": "^15.0.0", 1679 | "cachedir": "^2.3.0", 1680 | "chokidar": "^3.4.0", 1681 | "compressible": "^2.0.18", 1682 | "cosmiconfig": "^6.0.0", 1683 | "css-modules-loader-core": "^1.1.0", 1684 | "deepmerge": "^4.2.2", 1685 | "detect-port": "^1.3.0", 1686 | "es-module-lexer": "^0.3.17", 1687 | "esbuild": "^0.6.11", 1688 | "etag": "^1.8.1", 1689 | "execa": "^4.0.3", 1690 | "find-cache-dir": "^3.3.1", 1691 | "find-up": "^4.1.0", 1692 | "glob": "^7.1.4", 1693 | "got": "^11.1.4", 1694 | "http-proxy": "^1.18.1", 1695 | "is-builtin-module": "^3.0.0", 1696 | "jsonschema": "^1.2.5", 1697 | "kleur": "^4.1.0", 1698 | "mime-types": "^2.1.26", 1699 | "mkdirp": "^1.0.3", 1700 | "npm-run-path": "^4.0.1", 1701 | "open": "^7.0.4", 1702 | "p-queue": "^6.2.1", 1703 | "resolve-from": "^5.0.0", 1704 | "rimraf": "^3.0.0", 1705 | "rollup": "^2.23.0", 1706 | "rollup-plugin-node-polyfills": "^0.2.1", 1707 | "signal-exit": "^3.0.3", 1708 | "strip-comments": "^2.0.1", 1709 | "tar": "^6.0.1", 1710 | "validate-npm-package-name": "^3.0.0", 1711 | "ws": "^7.3.0", 1712 | "yargs-parser": "^18.1.3" 1713 | } 1714 | }, 1715 | "source-map": { 1716 | "version": "0.5.7", 1717 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1718 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1719 | "dev": true 1720 | }, 1721 | "sourcemap-codec": { 1722 | "version": "1.4.8", 1723 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1724 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1725 | "dev": true 1726 | }, 1727 | "ssri": { 1728 | "version": "8.0.0", 1729 | "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", 1730 | "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", 1731 | "dev": true, 1732 | "requires": { 1733 | "minipass": "^3.1.1" 1734 | } 1735 | }, 1736 | "strip-ansi": { 1737 | "version": "3.0.1", 1738 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1739 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1740 | "dev": true, 1741 | "requires": { 1742 | "ansi-regex": "^2.0.0" 1743 | } 1744 | }, 1745 | "strip-comments": { 1746 | "version": "2.0.1", 1747 | "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", 1748 | "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", 1749 | "dev": true 1750 | }, 1751 | "strip-final-newline": { 1752 | "version": "2.0.0", 1753 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 1754 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 1755 | "dev": true 1756 | }, 1757 | "supports-color": { 1758 | "version": "5.5.0", 1759 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1760 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1761 | "dev": true, 1762 | "requires": { 1763 | "has-flag": "^3.0.0" 1764 | } 1765 | }, 1766 | "tar": { 1767 | "version": "6.0.5", 1768 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", 1769 | "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", 1770 | "dev": true, 1771 | "requires": { 1772 | "chownr": "^2.0.0", 1773 | "fs-minipass": "^2.0.0", 1774 | "minipass": "^3.0.0", 1775 | "minizlib": "^2.1.1", 1776 | "mkdirp": "^1.0.3", 1777 | "yallist": "^4.0.0" 1778 | } 1779 | }, 1780 | "to-regex-range": { 1781 | "version": "5.0.1", 1782 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1783 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1784 | "dev": true, 1785 | "requires": { 1786 | "is-number": "^7.0.0" 1787 | } 1788 | }, 1789 | "unique-filename": { 1790 | "version": "1.1.1", 1791 | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", 1792 | "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", 1793 | "dev": true, 1794 | "requires": { 1795 | "unique-slug": "^2.0.0" 1796 | } 1797 | }, 1798 | "unique-slug": { 1799 | "version": "2.0.2", 1800 | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", 1801 | "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", 1802 | "dev": true, 1803 | "requires": { 1804 | "imurmurhash": "^0.1.4" 1805 | } 1806 | }, 1807 | "validate-npm-package-name": { 1808 | "version": "3.0.0", 1809 | "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", 1810 | "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", 1811 | "dev": true, 1812 | "requires": { 1813 | "builtins": "^1.0.3" 1814 | } 1815 | }, 1816 | "which": { 1817 | "version": "2.0.2", 1818 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1819 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1820 | "dev": true, 1821 | "requires": { 1822 | "isexe": "^2.0.0" 1823 | } 1824 | }, 1825 | "wrappy": { 1826 | "version": "1.0.2", 1827 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1828 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1829 | "dev": true 1830 | }, 1831 | "ws": { 1832 | "version": "7.3.1", 1833 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", 1834 | "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", 1835 | "dev": true 1836 | }, 1837 | "yallist": { 1838 | "version": "4.0.0", 1839 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1840 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1841 | "dev": true 1842 | }, 1843 | "yaml": { 1844 | "version": "1.10.0", 1845 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", 1846 | "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", 1847 | "dev": true 1848 | }, 1849 | "yargs-parser": { 1850 | "version": "18.1.3", 1851 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 1852 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 1853 | "dev": true, 1854 | "requires": { 1855 | "camelcase": "^5.0.0", 1856 | "decamelize": "^1.2.0" 1857 | } 1858 | } 1859 | } 1860 | } 1861 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "minimal-react", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "start": "snowpack dev", 6 | "build": "snowpack build" 7 | }, 8 | "devDependencies": { 9 | "@snowpack/plugin-react-refresh": "^2.1.0", 10 | "snowpack": "^2.9.0" 11 | }, 12 | "dependencies": { 13 | "htm": "^3.0.4", 14 | "immer": "^7.0.7", 15 | "react": "^16.13.1", 16 | "react-dom": "^16.13.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /snowpack.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "mount": { 3 | "html": "/", 4 | "js": "/js" 5 | }, 6 | "devOptions": { 7 | "open": "none" 8 | }, 9 | "// devOptions": [ 10 | "Switch off automatic opening of browser tabs" 11 | ] 12 | } 13 | --------------------------------------------------------------------------------