├── .github ├── CODEOWNERS ├── FUNDING.yml └── workflows │ └── ci.yml ├── .gitignore ├── .nvmrc ├── LICENSE ├── README.md ├── examples ├── 01-blur-up │ ├── index.html │ ├── package.json │ ├── src │ │ ├── App.tsx │ │ ├── Img.tsx │ │ ├── assets │ │ │ └── blur.jpg │ │ ├── img.css │ │ ├── irrelevant │ │ │ ├── index.css │ │ │ └── index.tsx │ │ ├── main.tsx │ │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vite.config.ts ├── 02-blur-down │ ├── index.html │ ├── package.json │ ├── src │ │ ├── App.tsx │ │ ├── Img.tsx │ │ ├── assets │ │ │ └── blur.jpg │ │ ├── img.css │ │ ├── irrelevant │ │ │ ├── index.css │ │ │ └── index.tsx │ │ ├── main.tsx │ │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vite.config.ts └── 03-blur-comparison │ ├── index.html │ ├── package.json │ ├── src │ ├── App.tsx │ ├── Img.tsx │ ├── assets │ │ └── blur.jpg │ ├── img.css │ ├── irrelevant │ │ ├── index.css │ │ └── index.tsx │ ├── main.tsx │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vite.config.ts ├── package.json ├── pnpm-lock.yaml └── pnpm-workspace.yaml /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # global 2 | * @joe-bell 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: joe-bell 2 | custom: https://plaiceholder.co 3 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | 15 | - name: Read .nvmrc 16 | run: echo ::set-output name=NVMRC::$(cat .nvmrc) 17 | id: nvm 18 | 19 | - name: Setup Node.js 20 | uses: actions/setup-node@v2.1.5 21 | with: 22 | node-version: "${{ steps.nvm.outputs.NVMRC }}" 23 | 24 | - run: npm run setup && pnpm install 25 | - run: pnpx prettier . --check --ignore-path .gitignore 26 | - run: pnpm run build 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | .pnpm-debug.log -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 14.17.5 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | ⚠️ Disclaimer
3 | Please avoid copying any code without reading the article in full.
4 | This is an experimental technique that comes with caveats. 5 |

6 | 7 | --- 8 | 9 |

10 | "Blur Down" 11 |

12 | 13 |

14 | An experimental approach to deblurring images on load 🌫 15 |

16 | 17 |

18 | 19 | Apache 2.0 License 20 | 21 | 22 | Follow @joebell_ on Twitter 23 | 24 |

25 | -------------------------------------------------------------------------------- /examples/01-blur-up/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Demo: Loading Images With the “Blur Down” Technique 7 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /examples/01-blur-up/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "01-blur-up", 3 | "scripts": { 4 | "lint": "tsc --noEmit", 5 | "start": "vite", 6 | "build": "tsc && vite build" 7 | }, 8 | "dependencies": { 9 | "react": "^17.0.0", 10 | "react-dom": "^17.0.0" 11 | }, 12 | "devDependencies": { 13 | "@types/react": "^17.0.0", 14 | "@types/react-dom": "^17.0.0", 15 | "@vitejs/plugin-react-refresh": "^1.3.1", 16 | "typescript": "^4.3.5", 17 | "vite": "^2.5.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /examples/01-blur-up/src/App.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { Layout, LayoutItem, LayoutTitle } from "./irrelevant"; 3 | import { Img } from "./Img"; 4 | 5 | import blurImgSrc from "./assets/blur.jpg"; 6 | 7 | const blurImg = { 8 | alt: "Damon Albarn of the band 'Blur'", 9 | src: blurImgSrc, 10 | height: 1338, 11 | width: 2373, 12 | // Note: In production, you should generate your placeholder on the 13 | // server-side or at build time (e.g. via https://plaiceholder.co) 14 | // 15 | // In this example we'll use https://plaiceholder.co's unique CSS-only 16 | // placeholder approach, but these transitions will work just the same with 17 | // base64, blurhash and more… 18 | placeholder: { 19 | backgroundImage: 20 | "linear-gradient(90deg, rgb(62,38,99) 25%,rgb(48,23,55) 25% 50%,rgb(60,32,51) 50% 75%,rgb(12,5,27) 75% 100%),linear-gradient(90deg, rgb(46,24,75) 25%,rgb(49,23,40) 25% 50%,rgb(41,20,25) 50% 75%,rgb(11,7,17) 75% 100%)", 21 | backgroundPosition: "0 0 ,0 100%", 22 | backgroundSize: "100% 50%", 23 | backgroundRepeat: "no-repeat", 24 | }, 25 | }; 26 | 27 | const App = () => ( 28 | 29 | 30 | Blur Up 31 | 32 | 33 | 34 | ); 35 | 36 | export default App; 37 | -------------------------------------------------------------------------------- /examples/01-blur-up/src/Img.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import "./img.css"; 3 | 4 | interface IImageProps { 5 | src: string; 6 | alt: string; 7 | height: number; 8 | placeholder: React.CSSProperties; 9 | width: number; 10 | variant: "blur-down" | "blur-up"; 11 | } 12 | 13 | export const Img: React.FC = ({ 14 | alt, 15 | src, 16 | height, 17 | placeholder, 18 | width, 19 | variant, 20 | }) => { 21 | const [isLoaded, setIsLoaded] = React.useState(false); 22 | 23 | return ( 24 |
34 |
35 | {alt} setIsLoaded(true)} 40 | /> 41 |
42 | ); 43 | }; 44 | -------------------------------------------------------------------------------- /examples/01-blur-up/src/assets/blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joe-bell/blur-down/3d7b9d2a6e3d2d5d2bffc8dffaf095bef7d3c749/examples/01-blur-up/src/assets/blur.jpg -------------------------------------------------------------------------------- /examples/01-blur-up/src/img.css: -------------------------------------------------------------------------------- 1 | /* Base 2 | =========================================== */ 3 | 4 | /** 5 | * 1. Enforce hardware acceleration 6 | * 2. Optional: prevent CLS by defining the aspect ratio up front. 7 | * `--img-aspect-ratio` is set via inline `style`, and determined via the 8 | * required `width` and `height` props. 9 | * 3. Visually hide alt-text 10 | */ 11 | .img { 12 | --img-blur: 42px; 13 | --img-scale: 1.5; 14 | --img-transition-duration: 1.2s; 15 | display: block; 16 | position: relative; 17 | overflow: hidden; 18 | transform: translateZ(0); /* [1] */ 19 | padding-bottom: var(--img-aspect-ratio); /* [2] */ 20 | } 21 | 22 | .img__element /* [2] */, 23 | .img__placeholder { 24 | inset: 0; 25 | position: absolute; 26 | display: block; 27 | max-width: 100%; 28 | width: 100%; 29 | height: 100%; 30 | } 31 | 32 | .img__element { 33 | font-size: 0; /* [3] */ 34 | opacity: 0; 35 | } 36 | 37 | /* Variants 38 | =========================================== */ 39 | 40 | /** 41 | * "Blur Down" 42 | */ 43 | .img--blur-down .img__element, 44 | .img--blur-down .img__placeholder { 45 | filter: blur(var(--img-blur)); 46 | transform: scale(var(--img-scale)); 47 | } 48 | 49 | @media (prefers-reduced-motion: no-preference) { 50 | .img--blur-down .img__element { 51 | transition: var(--img-transition-duration) ease; 52 | transition-property: filter, opacity, transform; 53 | will-change: filter, transform; 54 | } 55 | } 56 | 57 | .img--blur-down.is-loaded .img__element { 58 | opacity: 1; 59 | transform: scale(1); 60 | filter: blur(0); 61 | } 62 | 63 | /** 64 | * "Blur Up" 65 | */ 66 | .img--blur-up .img__placeholder { 67 | filter: blur(var(--img-blur)); 68 | transform: scale(var(--img-scale)); 69 | } 70 | 71 | @media (prefers-reduced-motion: no-preference) { 72 | .img--blur-up .img__element { 73 | transition: calc(var(--img-transition-duration) * 2) ease; 74 | transition-property: opacity; 75 | } 76 | } 77 | 78 | .img--blur-up.is-loaded .img__element { 79 | opacity: 1; 80 | } 81 | -------------------------------------------------------------------------------- /examples/01-blur-up/src/irrelevant/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --space-md: 1rem; 3 | --space-sm: 0.5rem; 4 | } 5 | 6 | html, 7 | blockquote, 8 | body, 9 | p, 10 | ul, 11 | li { 12 | margin: 0; 13 | padding: 0; 14 | } 15 | 16 | html { 17 | font-family: Inter var, ui-sans-serif, system-ui, -apple-system, 18 | BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, 19 | sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, 20 | Noto Color Emoji; 21 | font-size: 100%; 22 | line-height: 1.2; 23 | -webkit-font-smoothing: antialiased; 24 | -moz-osx-font-smoothing: grayscale; 25 | } 26 | 27 | code { 28 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 29 | monospace; 30 | } 31 | 32 | a { 33 | color: inherit; 34 | font-weight: 600; 35 | text-decoration: underline; 36 | } 37 | 38 | .container { 39 | max-width: 640px; 40 | margin: var(--space-md) auto 0 auto; 41 | padding-left: var(--space-md); 42 | padding-right: var(--space-md); 43 | margin-top: var(--space-md); 44 | } 45 | 46 | .header { 47 | display: flex; 48 | color: #c05621; 49 | background: #fffaf0; 50 | padding: 0.75rem; 51 | border-radius: 0.5rem; 52 | border: 1px solid #fed7aa; 53 | } 54 | 55 | .header__icon { 56 | margin-right: 0.75rem; 57 | } 58 | 59 | .layout { 60 | display: flex; 61 | list-style-type: none; 62 | align-items: center; 63 | justify-content: center; 64 | } 65 | 66 | .layout__item { 67 | width: 100%; 68 | text-align: center; 69 | } 70 | 71 | .layout__item + .layout__item { 72 | margin-left: var(--space-md); 73 | } 74 | 75 | .layout__item > * + * { 76 | margin-top: var(--space-sm); 77 | } 78 | 79 | .layout__title { 80 | font-size: 1.2rem; 81 | font-weight: 600; 82 | } 83 | 84 | .mt-md { 85 | margin-top: var(--space-md); 86 | } 87 | -------------------------------------------------------------------------------- /examples/01-blur-up/src/irrelevant/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | export const Layout: React.FC = (props) => ( 4 | 5 |
6 |
7 | 8 | ⚠️ 9 | 10 |

11 | Please avoid copying any code until{" "} 12 | 13 | reading the article in full 14 | 15 | . 16 |

17 |
18 |
19 |
20 |
    {props.children}
21 |
22 |
23 | ); 24 | 25 | export const LayoutItem: React.FC = (props) => ( 26 |
  • {props.children}
  • 27 | ); 28 | 29 | export const LayoutTitle: React.FC = (props) => ( 30 |

    {props.children}

    31 | ); 32 | -------------------------------------------------------------------------------- /examples/01-blur-up/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./irrelevant/index.css"; 4 | import App from "./App"; 5 | 6 | ReactDOM.render( 7 | 8 | 9 | , 10 | document.getElementById("root") 11 | ); 12 | -------------------------------------------------------------------------------- /examples/01-blur-up/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /examples/01-blur-up/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "allowJs": false, 6 | "skipLibCheck": false, 7 | "esModuleInterop": false, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "module": "ESNext", 12 | "moduleResolution": "Node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "noEmit": true, 16 | "jsx": "react" 17 | }, 18 | "include": ["./src"] 19 | } 20 | -------------------------------------------------------------------------------- /examples/01-blur-up/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import reactRefresh from "@vitejs/plugin-react-refresh"; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [reactRefresh()], 7 | }); 8 | -------------------------------------------------------------------------------- /examples/02-blur-down/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Demo: Loading Images With the “Blur Down” Technique 7 | 11 | 12 | 13 | 14 |
    15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /examples/02-blur-down/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "02-blur-down", 3 | "scripts": { 4 | "lint": "tsc --noEmit", 5 | "start": "vite", 6 | "build": "tsc && vite build" 7 | }, 8 | "dependencies": { 9 | "react": "^17.0.0", 10 | "react-dom": "^17.0.0" 11 | }, 12 | "devDependencies": { 13 | "@types/react": "^17.0.0", 14 | "@types/react-dom": "^17.0.0", 15 | "@vitejs/plugin-react-refresh": "^1.3.1", 16 | "typescript": "^4.3.5", 17 | "vite": "^2.5.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /examples/02-blur-down/src/App.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { Layout, LayoutItem, LayoutTitle } from "./irrelevant"; 3 | import { Img } from "./Img"; 4 | 5 | import blurImgSrc from "./assets/blur.jpg"; 6 | 7 | const blurImg = { 8 | alt: "Damon Albarn of the band 'Blur'", 9 | src: blurImgSrc, 10 | height: 1338, 11 | width: 2373, 12 | // Note: In production, you should generate your placeholder on the 13 | // server-side or at build time (e.g. via https://plaiceholder.co) 14 | // 15 | // In this example we'll use https://plaiceholder.co's unique CSS-only 16 | // placeholder approach, but these transitions will work just the same with 17 | // base64, blurhash and more… 18 | placeholder: { 19 | backgroundImage: 20 | "linear-gradient(90deg, rgb(62,38,99) 25%,rgb(48,23,55) 25% 50%,rgb(60,32,51) 50% 75%,rgb(12,5,27) 75% 100%),linear-gradient(90deg, rgb(46,24,75) 25%,rgb(49,23,40) 25% 50%,rgb(41,20,25) 50% 75%,rgb(11,7,17) 75% 100%)", 21 | backgroundPosition: "0 0 ,0 100%", 22 | backgroundSize: "100% 50%", 23 | backgroundRepeat: "no-repeat", 24 | }, 25 | }; 26 | 27 | const App = () => ( 28 | 29 | 30 | Blur Down 31 | 32 | 33 | 34 | ); 35 | 36 | export default App; 37 | -------------------------------------------------------------------------------- /examples/02-blur-down/src/Img.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import "./img.css"; 3 | 4 | interface IImageProps { 5 | src: string; 6 | alt: string; 7 | height: number; 8 | placeholder: React.CSSProperties; 9 | width: number; 10 | variant: "blur-down" | "blur-up"; 11 | } 12 | 13 | export const Img: React.FC = ({ 14 | alt, 15 | src, 16 | height, 17 | placeholder, 18 | width, 19 | variant, 20 | }) => { 21 | const [isLoaded, setIsLoaded] = React.useState(false); 22 | 23 | return ( 24 |
    34 |
    35 | {alt} setIsLoaded(true)} 40 | /> 41 |
    42 | ); 43 | }; 44 | -------------------------------------------------------------------------------- /examples/02-blur-down/src/assets/blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joe-bell/blur-down/3d7b9d2a6e3d2d5d2bffc8dffaf095bef7d3c749/examples/02-blur-down/src/assets/blur.jpg -------------------------------------------------------------------------------- /examples/02-blur-down/src/img.css: -------------------------------------------------------------------------------- 1 | /* Base 2 | =========================================== */ 3 | 4 | /** 5 | * 1. Enforce hardware acceleration 6 | * 2. Optional: prevent CLS by defining the aspect ratio up front. 7 | * `--img-aspect-ratio` is set via inline `style`, and determined via the 8 | * required `width` and `height` props. 9 | * 3. Visually hide alt-text 10 | */ 11 | .img { 12 | --img-blur: 42px; 13 | --img-scale: 1.5; 14 | --img-transition-duration: 1.2s; 15 | display: block; 16 | position: relative; 17 | overflow: hidden; 18 | transform: translateZ(0); /* [1] */ 19 | padding-bottom: var(--img-aspect-ratio); /* [2] */ 20 | } 21 | 22 | .img__element /* [2] */, 23 | .img__placeholder { 24 | inset: 0; 25 | position: absolute; 26 | display: block; 27 | max-width: 100%; 28 | width: 100%; 29 | height: 100%; 30 | } 31 | 32 | .img__element { 33 | font-size: 0; /* [3] */ 34 | opacity: 0; 35 | } 36 | 37 | /* Variants 38 | =========================================== */ 39 | 40 | /** 41 | * "Blur Down" 42 | */ 43 | .img--blur-down .img__element, 44 | .img--blur-down .img__placeholder { 45 | filter: blur(var(--img-blur)); 46 | transform: scale(var(--img-scale)); 47 | } 48 | 49 | @media (prefers-reduced-motion: no-preference) { 50 | .img--blur-down .img__element { 51 | transition: var(--img-transition-duration) ease; 52 | transition-property: filter, opacity, transform; 53 | will-change: filter, transform; 54 | } 55 | } 56 | 57 | .img--blur-down.is-loaded .img__element { 58 | opacity: 1; 59 | transform: scale(1); 60 | filter: blur(0); 61 | } 62 | 63 | /** 64 | * "Blur Up" 65 | */ 66 | .img--blur-up .img__placeholder { 67 | filter: blur(var(--img-blur)); 68 | transform: scale(var(--img-scale)); 69 | } 70 | 71 | @media (prefers-reduced-motion: no-preference) { 72 | .img--blur-up .img__element { 73 | transition: calc(var(--img-transition-duration) * 2) ease; 74 | transition-property: opacity; 75 | } 76 | } 77 | 78 | .img--blur-up.is-loaded .img__element { 79 | opacity: 1; 80 | } 81 | -------------------------------------------------------------------------------- /examples/02-blur-down/src/irrelevant/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --space-md: 1rem; 3 | --space-sm: 0.5rem; 4 | } 5 | 6 | html, 7 | blockquote, 8 | body, 9 | p, 10 | ul, 11 | li { 12 | margin: 0; 13 | padding: 0; 14 | } 15 | 16 | html { 17 | font-family: Inter var, ui-sans-serif, system-ui, -apple-system, 18 | BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, 19 | sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, 20 | Noto Color Emoji; 21 | font-size: 100%; 22 | line-height: 1.2; 23 | -webkit-font-smoothing: antialiased; 24 | -moz-osx-font-smoothing: grayscale; 25 | } 26 | 27 | code { 28 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 29 | monospace; 30 | } 31 | 32 | a { 33 | color: inherit; 34 | font-weight: 600; 35 | text-decoration: underline; 36 | } 37 | 38 | .container { 39 | max-width: 640px; 40 | margin: var(--space-md) auto 0 auto; 41 | padding-left: var(--space-md); 42 | padding-right: var(--space-md); 43 | margin-top: var(--space-md); 44 | } 45 | 46 | .header { 47 | display: flex; 48 | color: #c05621; 49 | background: #fffaf0; 50 | padding: 0.75rem; 51 | border-radius: 0.5rem; 52 | border: 1px solid #fed7aa; 53 | } 54 | 55 | .header__icon { 56 | margin-right: 0.75rem; 57 | } 58 | 59 | .layout { 60 | display: flex; 61 | list-style-type: none; 62 | align-items: center; 63 | justify-content: center; 64 | } 65 | 66 | .layout__item { 67 | width: 100%; 68 | text-align: center; 69 | } 70 | 71 | .layout__item + .layout__item { 72 | margin-left: var(--space-md); 73 | } 74 | 75 | .layout__item > * + * { 76 | margin-top: var(--space-sm); 77 | } 78 | 79 | .layout__title { 80 | font-size: 1.2rem; 81 | font-weight: 600; 82 | } 83 | 84 | .mt-md { 85 | margin-top: var(--space-md); 86 | } 87 | -------------------------------------------------------------------------------- /examples/02-blur-down/src/irrelevant/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | export const Layout: React.FC = (props) => ( 4 | 5 |
    6 |
    7 | 8 | ⚠️ 9 | 10 |

    11 | Please avoid copying any code until{" "} 12 | 13 | reading the article in full 14 | 15 | . 16 |

    17 |
    18 |
    19 |
    20 |
      {props.children}
    21 |
    22 |
    23 | ); 24 | 25 | export const LayoutItem: React.FC = (props) => ( 26 |
  • {props.children}
  • 27 | ); 28 | 29 | export const LayoutTitle: React.FC = (props) => ( 30 |

    {props.children}

    31 | ); 32 | -------------------------------------------------------------------------------- /examples/02-blur-down/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./irrelevant/index.css"; 4 | import App from "./App"; 5 | 6 | ReactDOM.render( 7 | 8 | 9 | , 10 | document.getElementById("root") 11 | ); 12 | -------------------------------------------------------------------------------- /examples/02-blur-down/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /examples/02-blur-down/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "allowJs": false, 6 | "skipLibCheck": false, 7 | "esModuleInterop": false, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "module": "ESNext", 12 | "moduleResolution": "Node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "noEmit": true, 16 | "jsx": "react" 17 | }, 18 | "include": ["./src"] 19 | } 20 | -------------------------------------------------------------------------------- /examples/02-blur-down/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import reactRefresh from "@vitejs/plugin-react-refresh"; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [reactRefresh()], 7 | }); 8 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Demo: Loading Images With the “Blur Down” Technique 7 | 11 | 12 | 13 | 14 |
    15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "03-blur-comparison", 3 | "scripts": { 4 | "lint": "tsc --noEmit", 5 | "start": "vite", 6 | "build": "tsc && vite build" 7 | }, 8 | "dependencies": { 9 | "react": "^17.0.0", 10 | "react-dom": "^17.0.0" 11 | }, 12 | "devDependencies": { 13 | "@types/react": "^17.0.0", 14 | "@types/react-dom": "^17.0.0", 15 | "@vitejs/plugin-react-refresh": "^1.3.1", 16 | "typescript": "^4.3.5", 17 | "vite": "^2.5.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/App.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { Layout, LayoutItem, LayoutTitle } from "./irrelevant"; 3 | import { Img } from "./Img"; 4 | 5 | import blurImgSrc from "./assets/blur.jpg"; 6 | 7 | const blurImg = { 8 | alt: "Damon Albarn of the band 'Blur'", 9 | src: blurImgSrc, 10 | height: 1338, 11 | width: 2373, 12 | // Note: In production, you should generate your placeholder on the 13 | // server-side or at build time (e.g. via https://plaiceholder.co) 14 | // 15 | // In this example we'll use https://plaiceholder.co's unique CSS-only 16 | // placeholder approach, but these transitions will work just the same with 17 | // base64, blurhash and more… 18 | placeholder: { 19 | backgroundImage: 20 | "linear-gradient(90deg, rgb(62,38,99) 25%,rgb(48,23,55) 25% 50%,rgb(60,32,51) 50% 75%,rgb(12,5,27) 75% 100%),linear-gradient(90deg, rgb(46,24,75) 25%,rgb(49,23,40) 25% 50%,rgb(41,20,25) 50% 75%,rgb(11,7,17) 75% 100%)", 21 | backgroundPosition: "0 0 ,0 100%", 22 | backgroundSize: "100% 50%", 23 | backgroundRepeat: "no-repeat", 24 | }, 25 | }; 26 | 27 | const App = () => ( 28 | 29 | 30 | Blur Down 31 | 32 | 33 | 34 | 35 | Blur Up 36 | 37 | 38 | 39 | ); 40 | 41 | export default App; 42 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/Img.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import "./img.css"; 3 | 4 | interface IImageProps { 5 | src: string; 6 | alt: string; 7 | height: number; 8 | placeholder: React.CSSProperties; 9 | width: number; 10 | variant: "blur-down" | "blur-up"; 11 | } 12 | 13 | export const Img: React.FC = ({ 14 | alt, 15 | src, 16 | height, 17 | placeholder, 18 | width, 19 | variant, 20 | }) => { 21 | const [isLoaded, setIsLoaded] = React.useState(false); 22 | 23 | return ( 24 |
    34 |
    35 | {alt} setIsLoaded(true)} 40 | /> 41 |
    42 | ); 43 | }; 44 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/assets/blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joe-bell/blur-down/3d7b9d2a6e3d2d5d2bffc8dffaf095bef7d3c749/examples/03-blur-comparison/src/assets/blur.jpg -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/img.css: -------------------------------------------------------------------------------- 1 | /* Base 2 | =========================================== */ 3 | 4 | /** 5 | * 1. Enforce hardware acceleration 6 | * 2. Optional: prevent CLS by defining the aspect ratio up front. 7 | * `--img-aspect-ratio` is set via inline `style`, and determined via the 8 | * required `width` and `height` props. 9 | * 3. Visually hide alt-text 10 | */ 11 | .img { 12 | --img-blur: 42px; 13 | --img-scale: 1.5; 14 | --img-transition-duration: 1.2s; 15 | display: block; 16 | position: relative; 17 | overflow: hidden; 18 | transform: translateZ(0); /* [1] */ 19 | padding-bottom: var(--img-aspect-ratio); /* [2] */ 20 | } 21 | 22 | .img__element /* [2] */, 23 | .img__placeholder { 24 | inset: 0; 25 | position: absolute; 26 | display: block; 27 | max-width: 100%; 28 | width: 100%; 29 | height: 100%; 30 | } 31 | 32 | .img__element { 33 | font-size: 0; /* [3] */ 34 | opacity: 0; 35 | } 36 | 37 | /* Variants 38 | =========================================== */ 39 | 40 | /** 41 | * "Blur Down" 42 | */ 43 | .img--blur-down .img__element, 44 | .img--blur-down .img__placeholder { 45 | filter: blur(var(--img-blur)); 46 | transform: scale(var(--img-scale)); 47 | } 48 | 49 | @media (prefers-reduced-motion: no-preference) { 50 | .img--blur-down .img__element { 51 | transition: var(--img-transition-duration) ease; 52 | transition-property: filter, opacity, transform; 53 | will-change: filter, transform; 54 | } 55 | } 56 | 57 | .img--blur-down.is-loaded .img__element { 58 | opacity: 1; 59 | transform: scale(1); 60 | filter: blur(0); 61 | } 62 | 63 | /** 64 | * "Blur Up" 65 | */ 66 | .img--blur-up .img__placeholder { 67 | filter: blur(var(--img-blur)); 68 | transform: scale(var(--img-scale)); 69 | } 70 | 71 | @media (prefers-reduced-motion: no-preference) { 72 | .img--blur-up .img__element { 73 | transition: calc(var(--img-transition-duration) * 2) ease; 74 | transition-property: opacity; 75 | } 76 | } 77 | 78 | .img--blur-up.is-loaded .img__element { 79 | opacity: 1; 80 | } 81 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/irrelevant/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --space-md: 1rem; 3 | --space-sm: 0.5rem; 4 | } 5 | 6 | html, 7 | blockquote, 8 | body, 9 | p, 10 | ul, 11 | li { 12 | margin: 0; 13 | padding: 0; 14 | } 15 | 16 | html { 17 | font-family: Inter var, ui-sans-serif, system-ui, -apple-system, 18 | BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, 19 | sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, 20 | Noto Color Emoji; 21 | font-size: 100%; 22 | line-height: 1.2; 23 | -webkit-font-smoothing: antialiased; 24 | -moz-osx-font-smoothing: grayscale; 25 | } 26 | 27 | code { 28 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 29 | monospace; 30 | } 31 | 32 | a { 33 | color: inherit; 34 | font-weight: 600; 35 | text-decoration: underline; 36 | } 37 | 38 | .container { 39 | max-width: 640px; 40 | margin: var(--space-md) auto 0 auto; 41 | padding-left: var(--space-md); 42 | padding-right: var(--space-md); 43 | margin-top: var(--space-md); 44 | } 45 | 46 | .header { 47 | display: flex; 48 | color: #c05621; 49 | background: #fffaf0; 50 | padding: 0.75rem; 51 | border-radius: 0.5rem; 52 | border: 1px solid #fed7aa; 53 | } 54 | 55 | .header__icon { 56 | margin-right: 0.75rem; 57 | } 58 | 59 | .layout { 60 | display: flex; 61 | list-style-type: none; 62 | align-items: center; 63 | justify-content: center; 64 | } 65 | 66 | .layout__item { 67 | width: 100%; 68 | text-align: center; 69 | } 70 | 71 | .layout__item + .layout__item { 72 | margin-left: var(--space-md); 73 | } 74 | 75 | .layout__item > * + * { 76 | margin-top: var(--space-sm); 77 | } 78 | 79 | .layout__title { 80 | font-size: 1.2rem; 81 | font-weight: 600; 82 | } 83 | 84 | .mt-md { 85 | margin-top: var(--space-md); 86 | } 87 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/irrelevant/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | export const Layout: React.FC = (props) => ( 4 | 5 |
    6 |
    7 | 8 | ⚠️ 9 | 10 |

    11 | Please avoid copying any code until{" "} 12 | 13 | reading the article in full 14 | 15 | . 16 |

    17 |
    18 |
    19 |
    20 |
      {props.children}
    21 |
    22 |
    23 | ); 24 | 25 | export const LayoutItem: React.FC = (props) => ( 26 |
  • {props.children}
  • 27 | ); 28 | 29 | export const LayoutTitle: React.FC = (props) => ( 30 |

    {props.children}

    31 | ); 32 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./irrelevant/index.css"; 4 | import App from "./App"; 5 | 6 | ReactDOM.render( 7 | 8 | 9 | , 10 | document.getElementById("root") 11 | ); 12 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "allowJs": false, 6 | "skipLibCheck": false, 7 | "esModuleInterop": false, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "module": "ESNext", 12 | "moduleResolution": "Node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "noEmit": true, 16 | "jsx": "react" 17 | }, 18 | "include": ["./src"] 19 | } 20 | -------------------------------------------------------------------------------- /examples/03-blur-comparison/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import reactRefresh from "@vitejs/plugin-react-refresh"; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [reactRefresh()], 7 | }); 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "root", 4 | "scripts": { 5 | "preinstall": "npx only-allow pnpm", 6 | "build": "pnpm run build --r --stream", 7 | "lint": "pnpm run lint --r --stream", 8 | "setup": "npm i -g pnpm@6.14.3", 9 | "commit": "git-cz" 10 | }, 11 | "engines": { 12 | "pnpm": ">=6.14.3" 13 | }, 14 | "commitlint": { 15 | "extends": [ 16 | "@commitlint/config-conventional" 17 | ] 18 | }, 19 | "config": { 20 | "commitizen": { 21 | "path": "cz-conventional-changelog" 22 | } 23 | }, 24 | "husky": { 25 | "hooks": { 26 | "pre-commit": "pnpm run lint && lint-staged" 27 | } 28 | }, 29 | "lint-staged": { 30 | "*": "prettier --ignore-unknown --write" 31 | }, 32 | "devDependencies": { 33 | "commitizen": "4.2.4", 34 | "cz-conventional-changelog": "3.3.0", 35 | "husky": "4.3.8", 36 | "lint-staged": "11.1.2", 37 | "prettier": "2.3.2" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | importers: 4 | .: 5 | specifiers: 6 | commitizen: 4.2.4 7 | cz-conventional-changelog: 3.3.0 8 | husky: 4.3.8 9 | lint-staged: 11.1.2 10 | prettier: 2.3.2 11 | devDependencies: 12 | commitizen: 4.2.4 13 | cz-conventional-changelog: 3.3.0 14 | husky: 4.3.8 15 | lint-staged: 11.1.2 16 | prettier: 2.3.2 17 | 18 | examples/01-blur-up: 19 | specifiers: 20 | "@types/react": ^17.0.0 21 | "@types/react-dom": ^17.0.0 22 | "@vitejs/plugin-react-refresh": ^1.3.1 23 | react: ^17.0.0 24 | react-dom: ^17.0.0 25 | typescript: ^4.3.5 26 | vite: ^2.5.1 27 | dependencies: 28 | react: 17.0.2 29 | react-dom: 17.0.2_react@17.0.2 30 | devDependencies: 31 | "@types/react": 17.0.19 32 | "@types/react-dom": 17.0.9 33 | "@vitejs/plugin-react-refresh": 1.3.6 34 | typescript: 4.3.5 35 | vite: 2.5.1 36 | 37 | examples/02-blur-down: 38 | specifiers: 39 | "@types/react": ^17.0.0 40 | "@types/react-dom": ^17.0.0 41 | "@vitejs/plugin-react-refresh": ^1.3.1 42 | react: ^17.0.0 43 | react-dom: ^17.0.0 44 | typescript: ^4.3.5 45 | vite: ^2.5.1 46 | dependencies: 47 | react: 17.0.2 48 | react-dom: 17.0.2_react@17.0.2 49 | devDependencies: 50 | "@types/react": 17.0.19 51 | "@types/react-dom": 17.0.9 52 | "@vitejs/plugin-react-refresh": 1.3.6 53 | typescript: 4.3.5 54 | vite: 2.5.1 55 | 56 | examples/03-blur-comparison: 57 | specifiers: 58 | "@types/react": ^17.0.0 59 | "@types/react-dom": ^17.0.0 60 | "@vitejs/plugin-react-refresh": ^1.3.1 61 | react: ^17.0.0 62 | react-dom: ^17.0.0 63 | typescript: ^4.3.5 64 | vite: ^2.5.1 65 | dependencies: 66 | react: 17.0.2 67 | react-dom: 17.0.2_react@17.0.2 68 | devDependencies: 69 | "@types/react": 17.0.19 70 | "@types/react-dom": 17.0.9 71 | "@vitejs/plugin-react-refresh": 1.3.6 72 | typescript: 4.3.5 73 | vite: 2.5.1 74 | 75 | packages: 76 | /@babel/code-frame/7.14.5: 77 | resolution: 78 | { 79 | integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==, 80 | } 81 | engines: { node: ">=6.9.0" } 82 | dependencies: 83 | "@babel/highlight": 7.14.5 84 | dev: true 85 | 86 | /@babel/compat-data/7.15.0: 87 | resolution: 88 | { 89 | integrity: sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==, 90 | } 91 | engines: { node: ">=6.9.0" } 92 | dev: true 93 | 94 | /@babel/core/7.15.0: 95 | resolution: 96 | { 97 | integrity: sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==, 98 | } 99 | engines: { node: ">=6.9.0" } 100 | dependencies: 101 | "@babel/code-frame": 7.14.5 102 | "@babel/generator": 7.15.0 103 | "@babel/helper-compilation-targets": 7.15.0_@babel+core@7.15.0 104 | "@babel/helper-module-transforms": 7.15.0 105 | "@babel/helpers": 7.15.3 106 | "@babel/parser": 7.15.3 107 | "@babel/template": 7.14.5 108 | "@babel/traverse": 7.15.0 109 | "@babel/types": 7.15.0 110 | convert-source-map: 1.8.0 111 | debug: 4.3.2 112 | gensync: 1.0.0-beta.2 113 | json5: 2.2.0 114 | semver: 6.3.0 115 | source-map: 0.5.7 116 | transitivePeerDependencies: 117 | - supports-color 118 | dev: true 119 | 120 | /@babel/generator/7.15.0: 121 | resolution: 122 | { 123 | integrity: sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==, 124 | } 125 | engines: { node: ">=6.9.0" } 126 | dependencies: 127 | "@babel/types": 7.15.0 128 | jsesc: 2.5.2 129 | source-map: 0.5.7 130 | dev: true 131 | 132 | /@babel/helper-compilation-targets/7.15.0_@babel+core@7.15.0: 133 | resolution: 134 | { 135 | integrity: sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==, 136 | } 137 | engines: { node: ">=6.9.0" } 138 | peerDependencies: 139 | "@babel/core": ^7.0.0 140 | dependencies: 141 | "@babel/compat-data": 7.15.0 142 | "@babel/core": 7.15.0 143 | "@babel/helper-validator-option": 7.14.5 144 | browserslist: 4.16.8 145 | semver: 6.3.0 146 | dev: true 147 | 148 | /@babel/helper-function-name/7.14.5: 149 | resolution: 150 | { 151 | integrity: sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==, 152 | } 153 | engines: { node: ">=6.9.0" } 154 | dependencies: 155 | "@babel/helper-get-function-arity": 7.14.5 156 | "@babel/template": 7.14.5 157 | "@babel/types": 7.15.0 158 | dev: true 159 | 160 | /@babel/helper-get-function-arity/7.14.5: 161 | resolution: 162 | { 163 | integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==, 164 | } 165 | engines: { node: ">=6.9.0" } 166 | dependencies: 167 | "@babel/types": 7.15.0 168 | dev: true 169 | 170 | /@babel/helper-hoist-variables/7.14.5: 171 | resolution: 172 | { 173 | integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==, 174 | } 175 | engines: { node: ">=6.9.0" } 176 | dependencies: 177 | "@babel/types": 7.15.0 178 | dev: true 179 | 180 | /@babel/helper-member-expression-to-functions/7.15.0: 181 | resolution: 182 | { 183 | integrity: sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==, 184 | } 185 | engines: { node: ">=6.9.0" } 186 | dependencies: 187 | "@babel/types": 7.15.0 188 | dev: true 189 | 190 | /@babel/helper-module-imports/7.14.5: 191 | resolution: 192 | { 193 | integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==, 194 | } 195 | engines: { node: ">=6.9.0" } 196 | dependencies: 197 | "@babel/types": 7.15.0 198 | dev: true 199 | 200 | /@babel/helper-module-transforms/7.15.0: 201 | resolution: 202 | { 203 | integrity: sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==, 204 | } 205 | engines: { node: ">=6.9.0" } 206 | dependencies: 207 | "@babel/helper-module-imports": 7.14.5 208 | "@babel/helper-replace-supers": 7.15.0 209 | "@babel/helper-simple-access": 7.14.8 210 | "@babel/helper-split-export-declaration": 7.14.5 211 | "@babel/helper-validator-identifier": 7.14.9 212 | "@babel/template": 7.14.5 213 | "@babel/traverse": 7.15.0 214 | "@babel/types": 7.15.0 215 | transitivePeerDependencies: 216 | - supports-color 217 | dev: true 218 | 219 | /@babel/helper-optimise-call-expression/7.14.5: 220 | resolution: 221 | { 222 | integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==, 223 | } 224 | engines: { node: ">=6.9.0" } 225 | dependencies: 226 | "@babel/types": 7.15.0 227 | dev: true 228 | 229 | /@babel/helper-plugin-utils/7.14.5: 230 | resolution: 231 | { 232 | integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==, 233 | } 234 | engines: { node: ">=6.9.0" } 235 | dev: true 236 | 237 | /@babel/helper-replace-supers/7.15.0: 238 | resolution: 239 | { 240 | integrity: sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==, 241 | } 242 | engines: { node: ">=6.9.0" } 243 | dependencies: 244 | "@babel/helper-member-expression-to-functions": 7.15.0 245 | "@babel/helper-optimise-call-expression": 7.14.5 246 | "@babel/traverse": 7.15.0 247 | "@babel/types": 7.15.0 248 | transitivePeerDependencies: 249 | - supports-color 250 | dev: true 251 | 252 | /@babel/helper-simple-access/7.14.8: 253 | resolution: 254 | { 255 | integrity: sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==, 256 | } 257 | engines: { node: ">=6.9.0" } 258 | dependencies: 259 | "@babel/types": 7.15.0 260 | dev: true 261 | 262 | /@babel/helper-split-export-declaration/7.14.5: 263 | resolution: 264 | { 265 | integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==, 266 | } 267 | engines: { node: ">=6.9.0" } 268 | dependencies: 269 | "@babel/types": 7.15.0 270 | dev: true 271 | 272 | /@babel/helper-validator-identifier/7.14.9: 273 | resolution: 274 | { 275 | integrity: sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==, 276 | } 277 | engines: { node: ">=6.9.0" } 278 | dev: true 279 | 280 | /@babel/helper-validator-option/7.14.5: 281 | resolution: 282 | { 283 | integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==, 284 | } 285 | engines: { node: ">=6.9.0" } 286 | dev: true 287 | 288 | /@babel/helpers/7.15.3: 289 | resolution: 290 | { 291 | integrity: sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==, 292 | } 293 | engines: { node: ">=6.9.0" } 294 | dependencies: 295 | "@babel/template": 7.14.5 296 | "@babel/traverse": 7.15.0 297 | "@babel/types": 7.15.0 298 | transitivePeerDependencies: 299 | - supports-color 300 | dev: true 301 | 302 | /@babel/highlight/7.14.5: 303 | resolution: 304 | { 305 | integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==, 306 | } 307 | engines: { node: ">=6.9.0" } 308 | dependencies: 309 | "@babel/helper-validator-identifier": 7.14.9 310 | chalk: 2.4.2 311 | js-tokens: 4.0.0 312 | dev: true 313 | 314 | /@babel/parser/7.15.3: 315 | resolution: 316 | { 317 | integrity: sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==, 318 | } 319 | engines: { node: ">=6.0.0" } 320 | hasBin: true 321 | dev: true 322 | 323 | /@babel/plugin-transform-react-jsx-self/7.14.9_@babel+core@7.15.0: 324 | resolution: 325 | { 326 | integrity: sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw==, 327 | } 328 | engines: { node: ">=6.9.0" } 329 | peerDependencies: 330 | "@babel/core": ^7.0.0-0 331 | dependencies: 332 | "@babel/core": 7.15.0 333 | "@babel/helper-plugin-utils": 7.14.5 334 | dev: true 335 | 336 | /@babel/plugin-transform-react-jsx-source/7.14.5_@babel+core@7.15.0: 337 | resolution: 338 | { 339 | integrity: sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==, 340 | } 341 | engines: { node: ">=6.9.0" } 342 | peerDependencies: 343 | "@babel/core": ^7.0.0-0 344 | dependencies: 345 | "@babel/core": 7.15.0 346 | "@babel/helper-plugin-utils": 7.14.5 347 | dev: true 348 | 349 | /@babel/template/7.14.5: 350 | resolution: 351 | { 352 | integrity: sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==, 353 | } 354 | engines: { node: ">=6.9.0" } 355 | dependencies: 356 | "@babel/code-frame": 7.14.5 357 | "@babel/parser": 7.15.3 358 | "@babel/types": 7.15.0 359 | dev: true 360 | 361 | /@babel/traverse/7.15.0: 362 | resolution: 363 | { 364 | integrity: sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==, 365 | } 366 | engines: { node: ">=6.9.0" } 367 | dependencies: 368 | "@babel/code-frame": 7.14.5 369 | "@babel/generator": 7.15.0 370 | "@babel/helper-function-name": 7.14.5 371 | "@babel/helper-hoist-variables": 7.14.5 372 | "@babel/helper-split-export-declaration": 7.14.5 373 | "@babel/parser": 7.15.3 374 | "@babel/types": 7.15.0 375 | debug: 4.3.2 376 | globals: 11.12.0 377 | transitivePeerDependencies: 378 | - supports-color 379 | dev: true 380 | 381 | /@babel/types/7.15.0: 382 | resolution: 383 | { 384 | integrity: sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==, 385 | } 386 | engines: { node: ">=6.9.0" } 387 | dependencies: 388 | "@babel/helper-validator-identifier": 7.14.9 389 | to-fast-properties: 2.0.0 390 | dev: true 391 | 392 | /@commitlint/execute-rule/13.0.0: 393 | resolution: 394 | { 395 | integrity: sha512-lBz2bJhNAgkkU/rFMAw3XBNujbxhxlaFHY3lfKB/MxpAa+pIfmWB3ig9i1VKe0wCvujk02O0WiMleNaRn2KJqw==, 396 | } 397 | engines: { node: ">=v12" } 398 | dev: true 399 | optional: true 400 | 401 | /@commitlint/load/13.1.0: 402 | resolution: 403 | { 404 | integrity: sha512-zlZbjJCWnWmBOSwTXis8H7I6pYk6JbDwOCuARA6B9Y/qt2PD+NCo0E/7EuaaFoxjHl+o56QR5QttuMBrf+BJzg==, 405 | } 406 | engines: { node: ">=v12" } 407 | dependencies: 408 | "@commitlint/execute-rule": 13.0.0 409 | "@commitlint/resolve-extends": 13.0.0 410 | "@commitlint/types": 13.1.0 411 | chalk: 4.1.2 412 | cosmiconfig: 7.0.1 413 | lodash: 4.17.21 414 | resolve-from: 5.0.0 415 | dev: true 416 | optional: true 417 | 418 | /@commitlint/resolve-extends/13.0.0: 419 | resolution: 420 | { 421 | integrity: sha512-1SyaE+UOsYTkQlTPUOoj4NwxQhGFtYildVS/d0TJuK8a9uAJLw7bhCLH2PEeH5cC2D1do4Eqhx/3bLDrSLH3hg==, 422 | } 423 | engines: { node: ">=v12" } 424 | dependencies: 425 | import-fresh: 3.3.0 426 | lodash: 4.17.21 427 | resolve-from: 5.0.0 428 | resolve-global: 1.0.0 429 | dev: true 430 | optional: true 431 | 432 | /@commitlint/types/13.1.0: 433 | resolution: 434 | { 435 | integrity: sha512-zcVjuT+OfKt8h91vhBxt05RMcTGEx6DM7Q9QZeuMbXFk6xgbsSEDMMapbJPA1bCZ81fa/1OQBijSYPrKvtt06g==, 436 | } 437 | engines: { node: ">=v12" } 438 | dependencies: 439 | chalk: 4.1.2 440 | dev: true 441 | optional: true 442 | 443 | /@rollup/pluginutils/4.1.1: 444 | resolution: 445 | { 446 | integrity: sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==, 447 | } 448 | engines: { node: ">= 8.0.0" } 449 | dependencies: 450 | estree-walker: 2.0.2 451 | picomatch: 2.3.0 452 | dev: true 453 | 454 | /@types/parse-json/4.0.0: 455 | resolution: 456 | { 457 | integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==, 458 | } 459 | dev: true 460 | 461 | /@types/prop-types/15.7.4: 462 | resolution: 463 | { 464 | integrity: sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==, 465 | } 466 | dev: true 467 | 468 | /@types/react-dom/17.0.9: 469 | resolution: 470 | { 471 | integrity: sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==, 472 | } 473 | dependencies: 474 | "@types/react": 17.0.19 475 | dev: true 476 | 477 | /@types/react/17.0.19: 478 | resolution: 479 | { 480 | integrity: sha512-sX1HisdB1/ZESixMTGnMxH9TDe8Sk709734fEQZzCV/4lSu9kJCPbo2PbTRoZM+53Pp0P10hYVyReUueGwUi4A==, 481 | } 482 | dependencies: 483 | "@types/prop-types": 15.7.4 484 | "@types/scheduler": 0.16.2 485 | csstype: 3.0.8 486 | dev: true 487 | 488 | /@types/scheduler/0.16.2: 489 | resolution: 490 | { 491 | integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==, 492 | } 493 | dev: true 494 | 495 | /@vitejs/plugin-react-refresh/1.3.6: 496 | resolution: 497 | { 498 | integrity: sha512-iNR/UqhUOmFFxiezt0em9CgmiJBdWR+5jGxB2FihaoJfqGt76kiwaKoVOJVU5NYcDWMdN06LbyN2VIGIoYdsEA==, 499 | } 500 | engines: { node: ">=12.0.0" } 501 | dependencies: 502 | "@babel/core": 7.15.0 503 | "@babel/plugin-transform-react-jsx-self": 7.14.9_@babel+core@7.15.0 504 | "@babel/plugin-transform-react-jsx-source": 7.14.5_@babel+core@7.15.0 505 | "@rollup/pluginutils": 4.1.1 506 | react-refresh: 0.10.0 507 | transitivePeerDependencies: 508 | - supports-color 509 | dev: true 510 | 511 | /aggregate-error/3.1.0: 512 | resolution: 513 | { 514 | integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, 515 | } 516 | engines: { node: ">=8" } 517 | dependencies: 518 | clean-stack: 2.2.0 519 | indent-string: 4.0.0 520 | dev: true 521 | 522 | /ansi-colors/4.1.1: 523 | resolution: 524 | { 525 | integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==, 526 | } 527 | engines: { node: ">=6" } 528 | dev: true 529 | 530 | /ansi-escapes/3.2.0: 531 | resolution: 532 | { 533 | integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==, 534 | } 535 | engines: { node: ">=4" } 536 | dev: true 537 | 538 | /ansi-escapes/4.3.2: 539 | resolution: 540 | { 541 | integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, 542 | } 543 | engines: { node: ">=8" } 544 | dependencies: 545 | type-fest: 0.21.3 546 | dev: true 547 | 548 | /ansi-regex/3.0.0: 549 | resolution: { integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= } 550 | engines: { node: ">=4" } 551 | dev: true 552 | 553 | /ansi-regex/4.1.0: 554 | resolution: 555 | { 556 | integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==, 557 | } 558 | engines: { node: ">=6" } 559 | dev: true 560 | 561 | /ansi-regex/5.0.0: 562 | resolution: 563 | { 564 | integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==, 565 | } 566 | engines: { node: ">=8" } 567 | dev: true 568 | 569 | /ansi-styles/3.2.1: 570 | resolution: 571 | { 572 | integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, 573 | } 574 | engines: { node: ">=4" } 575 | dependencies: 576 | color-convert: 1.9.3 577 | dev: true 578 | 579 | /ansi-styles/4.3.0: 580 | resolution: 581 | { 582 | integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, 583 | } 584 | engines: { node: ">=8" } 585 | dependencies: 586 | color-convert: 2.0.1 587 | dev: true 588 | 589 | /astral-regex/2.0.0: 590 | resolution: 591 | { 592 | integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, 593 | } 594 | engines: { node: ">=8" } 595 | dev: true 596 | 597 | /balanced-match/1.0.2: 598 | resolution: 599 | { 600 | integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, 601 | } 602 | dev: true 603 | 604 | /brace-expansion/1.1.11: 605 | resolution: 606 | { 607 | integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, 608 | } 609 | dependencies: 610 | balanced-match: 1.0.2 611 | concat-map: 0.0.1 612 | dev: true 613 | 614 | /braces/3.0.2: 615 | resolution: 616 | { 617 | integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, 618 | } 619 | engines: { node: ">=8" } 620 | dependencies: 621 | fill-range: 7.0.1 622 | dev: true 623 | 624 | /browserslist/4.16.8: 625 | resolution: 626 | { 627 | integrity: sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==, 628 | } 629 | engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } 630 | hasBin: true 631 | dependencies: 632 | caniuse-lite: 1.0.30001252 633 | colorette: 1.3.0 634 | electron-to-chromium: 1.3.818 635 | escalade: 3.1.1 636 | node-releases: 1.1.75 637 | dev: true 638 | 639 | /cachedir/2.2.0: 640 | resolution: 641 | { 642 | integrity: sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==, 643 | } 644 | engines: { node: ">=6" } 645 | dev: true 646 | 647 | /callsites/3.1.0: 648 | resolution: 649 | { 650 | integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, 651 | } 652 | engines: { node: ">=6" } 653 | dev: true 654 | 655 | /caniuse-lite/1.0.30001252: 656 | resolution: 657 | { 658 | integrity: sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==, 659 | } 660 | dev: true 661 | 662 | /chalk/2.4.2: 663 | resolution: 664 | { 665 | integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, 666 | } 667 | engines: { node: ">=4" } 668 | dependencies: 669 | ansi-styles: 3.2.1 670 | escape-string-regexp: 1.0.5 671 | supports-color: 5.5.0 672 | dev: true 673 | 674 | /chalk/4.1.2: 675 | resolution: 676 | { 677 | integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, 678 | } 679 | engines: { node: ">=10" } 680 | dependencies: 681 | ansi-styles: 4.3.0 682 | supports-color: 7.2.0 683 | dev: true 684 | 685 | /chardet/0.7.0: 686 | resolution: 687 | { 688 | integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, 689 | } 690 | dev: true 691 | 692 | /ci-info/2.0.0: 693 | resolution: 694 | { 695 | integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, 696 | } 697 | dev: true 698 | 699 | /clean-stack/2.2.0: 700 | resolution: 701 | { 702 | integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, 703 | } 704 | engines: { node: ">=6" } 705 | dev: true 706 | 707 | /cli-cursor/2.1.0: 708 | resolution: { integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= } 709 | engines: { node: ">=4" } 710 | dependencies: 711 | restore-cursor: 2.0.0 712 | dev: true 713 | 714 | /cli-cursor/3.1.0: 715 | resolution: 716 | { 717 | integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, 718 | } 719 | engines: { node: ">=8" } 720 | dependencies: 721 | restore-cursor: 3.1.0 722 | dev: true 723 | 724 | /cli-truncate/2.1.0: 725 | resolution: 726 | { 727 | integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==, 728 | } 729 | engines: { node: ">=8" } 730 | dependencies: 731 | slice-ansi: 3.0.0 732 | string-width: 4.2.2 733 | dev: true 734 | 735 | /cli-width/2.2.1: 736 | resolution: 737 | { 738 | integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==, 739 | } 740 | dev: true 741 | 742 | /color-convert/1.9.3: 743 | resolution: 744 | { 745 | integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, 746 | } 747 | dependencies: 748 | color-name: 1.1.3 749 | dev: true 750 | 751 | /color-convert/2.0.1: 752 | resolution: 753 | { 754 | integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, 755 | } 756 | engines: { node: ">=7.0.0" } 757 | dependencies: 758 | color-name: 1.1.4 759 | dev: true 760 | 761 | /color-name/1.1.3: 762 | resolution: { integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= } 763 | dev: true 764 | 765 | /color-name/1.1.4: 766 | resolution: 767 | { 768 | integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, 769 | } 770 | dev: true 771 | 772 | /colorette/1.3.0: 773 | resolution: 774 | { 775 | integrity: sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==, 776 | } 777 | dev: true 778 | 779 | /commander/7.2.0: 780 | resolution: 781 | { 782 | integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, 783 | } 784 | engines: { node: ">= 10" } 785 | dev: true 786 | 787 | /commitizen/4.2.4: 788 | resolution: 789 | { 790 | integrity: sha512-LlZChbDzg3Ir3O2S7jSo/cgWp5/QwylQVr59K4xayVq8S4/RdKzSyJkghAiZZHfhh5t4pxunUoyeg0ml1q/7aw==, 791 | } 792 | engines: { node: ">= 10" } 793 | hasBin: true 794 | dependencies: 795 | cachedir: 2.2.0 796 | cz-conventional-changelog: 3.2.0 797 | dedent: 0.7.0 798 | detect-indent: 6.0.0 799 | find-node-modules: 2.1.2 800 | find-root: 1.1.0 801 | fs-extra: 8.1.0 802 | glob: 7.1.4 803 | inquirer: 6.5.2 804 | is-utf8: 0.2.1 805 | lodash: 4.17.21 806 | minimist: 1.2.5 807 | strip-bom: 4.0.0 808 | strip-json-comments: 3.0.1 809 | dev: true 810 | 811 | /compare-versions/3.6.0: 812 | resolution: 813 | { 814 | integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==, 815 | } 816 | dev: true 817 | 818 | /concat-map/0.0.1: 819 | resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } 820 | dev: true 821 | 822 | /conventional-commit-types/3.0.0: 823 | resolution: 824 | { 825 | integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==, 826 | } 827 | dev: true 828 | 829 | /convert-source-map/1.8.0: 830 | resolution: 831 | { 832 | integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==, 833 | } 834 | dependencies: 835 | safe-buffer: 5.1.2 836 | dev: true 837 | 838 | /cosmiconfig/7.0.1: 839 | resolution: 840 | { 841 | integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==, 842 | } 843 | engines: { node: ">=10" } 844 | dependencies: 845 | "@types/parse-json": 4.0.0 846 | import-fresh: 3.3.0 847 | parse-json: 5.2.0 848 | path-type: 4.0.0 849 | yaml: 1.10.2 850 | dev: true 851 | 852 | /cross-spawn/7.0.3: 853 | resolution: 854 | { 855 | integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, 856 | } 857 | engines: { node: ">= 8" } 858 | dependencies: 859 | path-key: 3.1.1 860 | shebang-command: 2.0.0 861 | which: 2.0.2 862 | dev: true 863 | 864 | /csstype/3.0.8: 865 | resolution: 866 | { 867 | integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==, 868 | } 869 | dev: true 870 | 871 | /cz-conventional-changelog/3.2.0: 872 | resolution: 873 | { 874 | integrity: sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==, 875 | } 876 | engines: { node: ">= 10" } 877 | dependencies: 878 | chalk: 2.4.2 879 | commitizen: 4.2.4 880 | conventional-commit-types: 3.0.0 881 | lodash.map: 4.6.0 882 | longest: 2.0.1 883 | word-wrap: 1.2.3 884 | optionalDependencies: 885 | "@commitlint/load": 13.1.0 886 | dev: true 887 | 888 | /cz-conventional-changelog/3.3.0: 889 | resolution: 890 | { 891 | integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==, 892 | } 893 | engines: { node: ">= 10" } 894 | dependencies: 895 | chalk: 2.4.2 896 | commitizen: 4.2.4 897 | conventional-commit-types: 3.0.0 898 | lodash.map: 4.6.0 899 | longest: 2.0.1 900 | word-wrap: 1.2.3 901 | optionalDependencies: 902 | "@commitlint/load": 13.1.0 903 | dev: true 904 | 905 | /debug/4.3.2: 906 | resolution: 907 | { 908 | integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==, 909 | } 910 | engines: { node: ">=6.0" } 911 | peerDependencies: 912 | supports-color: "*" 913 | peerDependenciesMeta: 914 | supports-color: 915 | optional: true 916 | dependencies: 917 | ms: 2.1.2 918 | dev: true 919 | 920 | /dedent/0.7.0: 921 | resolution: { integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= } 922 | dev: true 923 | 924 | /detect-file/1.0.0: 925 | resolution: { integrity: sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= } 926 | engines: { node: ">=0.10.0" } 927 | dev: true 928 | 929 | /detect-indent/6.0.0: 930 | resolution: 931 | { 932 | integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==, 933 | } 934 | engines: { node: ">=8" } 935 | dev: true 936 | 937 | /electron-to-chromium/1.3.818: 938 | resolution: 939 | { 940 | integrity: sha512-c/Z9gIr+jDZAR9q+mn40hEc1NharBT+8ejkarjbCDnBNFviI6hvcC5j2ezkAXru//bTnQp5n6iPi0JA83Tla1Q==, 941 | } 942 | dev: true 943 | 944 | /emoji-regex/8.0.0: 945 | resolution: 946 | { 947 | integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, 948 | } 949 | dev: true 950 | 951 | /enquirer/2.3.6: 952 | resolution: 953 | { 954 | integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, 955 | } 956 | engines: { node: ">=8.6" } 957 | dependencies: 958 | ansi-colors: 4.1.1 959 | dev: true 960 | 961 | /error-ex/1.3.2: 962 | resolution: 963 | { 964 | integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, 965 | } 966 | dependencies: 967 | is-arrayish: 0.2.1 968 | dev: true 969 | 970 | /esbuild/0.12.23: 971 | resolution: 972 | { 973 | integrity: sha512-qvS4aKnmKikoWGscd5lVAzgobMovlH/JhaWitRiQ8xJx0x1Fym0pqVjMFs43Nvff8WpibeWm+fWoLK88T1U0Xw==, 974 | } 975 | hasBin: true 976 | requiresBuild: true 977 | dev: true 978 | 979 | /escalade/3.1.1: 980 | resolution: 981 | { 982 | integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, 983 | } 984 | engines: { node: ">=6" } 985 | dev: true 986 | 987 | /escape-string-regexp/1.0.5: 988 | resolution: { integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= } 989 | engines: { node: ">=0.8.0" } 990 | dev: true 991 | 992 | /estree-walker/2.0.2: 993 | resolution: 994 | { 995 | integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, 996 | } 997 | dev: true 998 | 999 | /execa/5.1.1: 1000 | resolution: 1001 | { 1002 | integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, 1003 | } 1004 | engines: { node: ">=10" } 1005 | dependencies: 1006 | cross-spawn: 7.0.3 1007 | get-stream: 6.0.1 1008 | human-signals: 2.1.0 1009 | is-stream: 2.0.1 1010 | merge-stream: 2.0.0 1011 | npm-run-path: 4.0.1 1012 | onetime: 5.1.2 1013 | signal-exit: 3.0.3 1014 | strip-final-newline: 2.0.0 1015 | dev: true 1016 | 1017 | /expand-tilde/2.0.2: 1018 | resolution: { integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= } 1019 | engines: { node: ">=0.10.0" } 1020 | dependencies: 1021 | homedir-polyfill: 1.0.3 1022 | dev: true 1023 | 1024 | /external-editor/3.1.0: 1025 | resolution: 1026 | { 1027 | integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, 1028 | } 1029 | engines: { node: ">=4" } 1030 | dependencies: 1031 | chardet: 0.7.0 1032 | iconv-lite: 0.4.24 1033 | tmp: 0.0.33 1034 | dev: true 1035 | 1036 | /figures/2.0.0: 1037 | resolution: { integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= } 1038 | engines: { node: ">=4" } 1039 | dependencies: 1040 | escape-string-regexp: 1.0.5 1041 | dev: true 1042 | 1043 | /fill-range/7.0.1: 1044 | resolution: 1045 | { 1046 | integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, 1047 | } 1048 | engines: { node: ">=8" } 1049 | dependencies: 1050 | to-regex-range: 5.0.1 1051 | dev: true 1052 | 1053 | /find-node-modules/2.1.2: 1054 | resolution: 1055 | { 1056 | integrity: sha512-x+3P4mbtRPlSiVE1Qco0Z4YLU8WFiFcuWTf3m75OV9Uzcfs2Bg+O9N+r/K0AnmINBW06KpfqKwYJbFlFq4qNug==, 1057 | } 1058 | dependencies: 1059 | findup-sync: 4.0.0 1060 | merge: 2.1.1 1061 | dev: true 1062 | 1063 | /find-root/1.1.0: 1064 | resolution: 1065 | { 1066 | integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==, 1067 | } 1068 | dev: true 1069 | 1070 | /find-up/5.0.0: 1071 | resolution: 1072 | { 1073 | integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, 1074 | } 1075 | engines: { node: ">=10" } 1076 | dependencies: 1077 | locate-path: 6.0.0 1078 | path-exists: 4.0.0 1079 | dev: true 1080 | 1081 | /find-versions/4.0.0: 1082 | resolution: 1083 | { 1084 | integrity: sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==, 1085 | } 1086 | engines: { node: ">=10" } 1087 | dependencies: 1088 | semver-regex: 3.1.2 1089 | dev: true 1090 | 1091 | /findup-sync/4.0.0: 1092 | resolution: 1093 | { 1094 | integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==, 1095 | } 1096 | engines: { node: ">= 8" } 1097 | dependencies: 1098 | detect-file: 1.0.0 1099 | is-glob: 4.0.1 1100 | micromatch: 4.0.4 1101 | resolve-dir: 1.0.1 1102 | dev: true 1103 | 1104 | /fs-extra/8.1.0: 1105 | resolution: 1106 | { 1107 | integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, 1108 | } 1109 | engines: { node: ">=6 <7 || >=8" } 1110 | dependencies: 1111 | graceful-fs: 4.2.8 1112 | jsonfile: 4.0.0 1113 | universalify: 0.1.2 1114 | dev: true 1115 | 1116 | /fs.realpath/1.0.0: 1117 | resolution: { integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= } 1118 | dev: true 1119 | 1120 | /fsevents/2.3.2: 1121 | resolution: 1122 | { 1123 | integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, 1124 | } 1125 | engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } 1126 | os: [darwin] 1127 | requiresBuild: true 1128 | dev: true 1129 | optional: true 1130 | 1131 | /function-bind/1.1.1: 1132 | resolution: 1133 | { 1134 | integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, 1135 | } 1136 | dev: true 1137 | 1138 | /gensync/1.0.0-beta.2: 1139 | resolution: 1140 | { 1141 | integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, 1142 | } 1143 | engines: { node: ">=6.9.0" } 1144 | dev: true 1145 | 1146 | /get-own-enumerable-property-symbols/3.0.2: 1147 | resolution: 1148 | { 1149 | integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, 1150 | } 1151 | dev: true 1152 | 1153 | /get-stream/6.0.1: 1154 | resolution: 1155 | { 1156 | integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, 1157 | } 1158 | engines: { node: ">=10" } 1159 | dev: true 1160 | 1161 | /glob/7.1.4: 1162 | resolution: 1163 | { 1164 | integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==, 1165 | } 1166 | dependencies: 1167 | fs.realpath: 1.0.0 1168 | inflight: 1.0.6 1169 | inherits: 2.0.4 1170 | minimatch: 3.0.4 1171 | once: 1.4.0 1172 | path-is-absolute: 1.0.1 1173 | dev: true 1174 | 1175 | /global-dirs/0.1.1: 1176 | resolution: { integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= } 1177 | engines: { node: ">=4" } 1178 | dependencies: 1179 | ini: 1.3.8 1180 | dev: true 1181 | optional: true 1182 | 1183 | /global-modules/1.0.0: 1184 | resolution: 1185 | { 1186 | integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==, 1187 | } 1188 | engines: { node: ">=0.10.0" } 1189 | dependencies: 1190 | global-prefix: 1.0.2 1191 | is-windows: 1.0.2 1192 | resolve-dir: 1.0.1 1193 | dev: true 1194 | 1195 | /global-prefix/1.0.2: 1196 | resolution: { integrity: sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= } 1197 | engines: { node: ">=0.10.0" } 1198 | dependencies: 1199 | expand-tilde: 2.0.2 1200 | homedir-polyfill: 1.0.3 1201 | ini: 1.3.8 1202 | is-windows: 1.0.2 1203 | which: 1.3.1 1204 | dev: true 1205 | 1206 | /globals/11.12.0: 1207 | resolution: 1208 | { 1209 | integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, 1210 | } 1211 | engines: { node: ">=4" } 1212 | dev: true 1213 | 1214 | /graceful-fs/4.2.8: 1215 | resolution: 1216 | { 1217 | integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==, 1218 | } 1219 | dev: true 1220 | 1221 | /has-flag/3.0.0: 1222 | resolution: { integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= } 1223 | engines: { node: ">=4" } 1224 | dev: true 1225 | 1226 | /has-flag/4.0.0: 1227 | resolution: 1228 | { 1229 | integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, 1230 | } 1231 | engines: { node: ">=8" } 1232 | dev: true 1233 | 1234 | /has/1.0.3: 1235 | resolution: 1236 | { 1237 | integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, 1238 | } 1239 | engines: { node: ">= 0.4.0" } 1240 | dependencies: 1241 | function-bind: 1.1.1 1242 | dev: true 1243 | 1244 | /homedir-polyfill/1.0.3: 1245 | resolution: 1246 | { 1247 | integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, 1248 | } 1249 | engines: { node: ">=0.10.0" } 1250 | dependencies: 1251 | parse-passwd: 1.0.0 1252 | dev: true 1253 | 1254 | /human-signals/2.1.0: 1255 | resolution: 1256 | { 1257 | integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, 1258 | } 1259 | engines: { node: ">=10.17.0" } 1260 | dev: true 1261 | 1262 | /husky/4.3.8: 1263 | resolution: 1264 | { 1265 | integrity: sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==, 1266 | } 1267 | engines: { node: ">=10" } 1268 | hasBin: true 1269 | requiresBuild: true 1270 | dependencies: 1271 | chalk: 4.1.2 1272 | ci-info: 2.0.0 1273 | compare-versions: 3.6.0 1274 | cosmiconfig: 7.0.1 1275 | find-versions: 4.0.0 1276 | opencollective-postinstall: 2.0.3 1277 | pkg-dir: 5.0.0 1278 | please-upgrade-node: 3.2.0 1279 | slash: 3.0.0 1280 | which-pm-runs: 1.0.0 1281 | dev: true 1282 | 1283 | /iconv-lite/0.4.24: 1284 | resolution: 1285 | { 1286 | integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, 1287 | } 1288 | engines: { node: ">=0.10.0" } 1289 | dependencies: 1290 | safer-buffer: 2.1.2 1291 | dev: true 1292 | 1293 | /import-fresh/3.3.0: 1294 | resolution: 1295 | { 1296 | integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, 1297 | } 1298 | engines: { node: ">=6" } 1299 | dependencies: 1300 | parent-module: 1.0.1 1301 | resolve-from: 4.0.0 1302 | dev: true 1303 | 1304 | /indent-string/4.0.0: 1305 | resolution: 1306 | { 1307 | integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, 1308 | } 1309 | engines: { node: ">=8" } 1310 | dev: true 1311 | 1312 | /inflight/1.0.6: 1313 | resolution: { integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= } 1314 | dependencies: 1315 | once: 1.4.0 1316 | wrappy: 1.0.2 1317 | dev: true 1318 | 1319 | /inherits/2.0.4: 1320 | resolution: 1321 | { 1322 | integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, 1323 | } 1324 | dev: true 1325 | 1326 | /ini/1.3.8: 1327 | resolution: 1328 | { 1329 | integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, 1330 | } 1331 | dev: true 1332 | 1333 | /inquirer/6.5.2: 1334 | resolution: 1335 | { 1336 | integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==, 1337 | } 1338 | engines: { node: ">=6.0.0" } 1339 | dependencies: 1340 | ansi-escapes: 3.2.0 1341 | chalk: 2.4.2 1342 | cli-cursor: 2.1.0 1343 | cli-width: 2.2.1 1344 | external-editor: 3.1.0 1345 | figures: 2.0.0 1346 | lodash: 4.17.21 1347 | mute-stream: 0.0.7 1348 | run-async: 2.4.1 1349 | rxjs: 6.6.7 1350 | string-width: 2.1.1 1351 | strip-ansi: 5.2.0 1352 | through: 2.3.8 1353 | dev: true 1354 | 1355 | /is-arrayish/0.2.1: 1356 | resolution: { integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= } 1357 | dev: true 1358 | 1359 | /is-core-module/2.6.0: 1360 | resolution: 1361 | { 1362 | integrity: sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==, 1363 | } 1364 | dependencies: 1365 | has: 1.0.3 1366 | dev: true 1367 | 1368 | /is-extglob/2.1.1: 1369 | resolution: { integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= } 1370 | engines: { node: ">=0.10.0" } 1371 | dev: true 1372 | 1373 | /is-fullwidth-code-point/2.0.0: 1374 | resolution: { integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= } 1375 | engines: { node: ">=4" } 1376 | dev: true 1377 | 1378 | /is-fullwidth-code-point/3.0.0: 1379 | resolution: 1380 | { 1381 | integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, 1382 | } 1383 | engines: { node: ">=8" } 1384 | dev: true 1385 | 1386 | /is-glob/4.0.1: 1387 | resolution: 1388 | { 1389 | integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==, 1390 | } 1391 | engines: { node: ">=0.10.0" } 1392 | dependencies: 1393 | is-extglob: 2.1.1 1394 | dev: true 1395 | 1396 | /is-number/7.0.0: 1397 | resolution: 1398 | { 1399 | integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, 1400 | } 1401 | engines: { node: ">=0.12.0" } 1402 | dev: true 1403 | 1404 | /is-obj/1.0.1: 1405 | resolution: { integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8= } 1406 | engines: { node: ">=0.10.0" } 1407 | dev: true 1408 | 1409 | /is-regexp/1.0.0: 1410 | resolution: { integrity: sha1-/S2INUXEa6xaYz57mgnof6LLUGk= } 1411 | engines: { node: ">=0.10.0" } 1412 | dev: true 1413 | 1414 | /is-stream/2.0.1: 1415 | resolution: 1416 | { 1417 | integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, 1418 | } 1419 | engines: { node: ">=8" } 1420 | dev: true 1421 | 1422 | /is-unicode-supported/0.1.0: 1423 | resolution: 1424 | { 1425 | integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, 1426 | } 1427 | engines: { node: ">=10" } 1428 | dev: true 1429 | 1430 | /is-utf8/0.2.1: 1431 | resolution: { integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= } 1432 | dev: true 1433 | 1434 | /is-windows/1.0.2: 1435 | resolution: 1436 | { 1437 | integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, 1438 | } 1439 | engines: { node: ">=0.10.0" } 1440 | dev: true 1441 | 1442 | /isexe/2.0.0: 1443 | resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } 1444 | dev: true 1445 | 1446 | /js-tokens/4.0.0: 1447 | resolution: 1448 | { 1449 | integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, 1450 | } 1451 | 1452 | /jsesc/2.5.2: 1453 | resolution: 1454 | { 1455 | integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, 1456 | } 1457 | engines: { node: ">=4" } 1458 | hasBin: true 1459 | dev: true 1460 | 1461 | /json-parse-even-better-errors/2.3.1: 1462 | resolution: 1463 | { 1464 | integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, 1465 | } 1466 | dev: true 1467 | 1468 | /json5/2.2.0: 1469 | resolution: 1470 | { 1471 | integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==, 1472 | } 1473 | engines: { node: ">=6" } 1474 | hasBin: true 1475 | dependencies: 1476 | minimist: 1.2.5 1477 | dev: true 1478 | 1479 | /jsonfile/4.0.0: 1480 | resolution: { integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= } 1481 | optionalDependencies: 1482 | graceful-fs: 4.2.8 1483 | dev: true 1484 | 1485 | /lines-and-columns/1.1.6: 1486 | resolution: { integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= } 1487 | dev: true 1488 | 1489 | /lint-staged/11.1.2: 1490 | resolution: 1491 | { 1492 | integrity: sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==, 1493 | } 1494 | hasBin: true 1495 | dependencies: 1496 | chalk: 4.1.2 1497 | cli-truncate: 2.1.0 1498 | commander: 7.2.0 1499 | cosmiconfig: 7.0.1 1500 | debug: 4.3.2 1501 | enquirer: 2.3.6 1502 | execa: 5.1.1 1503 | listr2: 3.11.0_enquirer@2.3.6 1504 | log-symbols: 4.1.0 1505 | micromatch: 4.0.4 1506 | normalize-path: 3.0.0 1507 | please-upgrade-node: 3.2.0 1508 | string-argv: 0.3.1 1509 | stringify-object: 3.3.0 1510 | transitivePeerDependencies: 1511 | - supports-color 1512 | dev: true 1513 | 1514 | /listr2/3.11.0_enquirer@2.3.6: 1515 | resolution: 1516 | { 1517 | integrity: sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ==, 1518 | } 1519 | engines: { node: ">=10.0.0" } 1520 | peerDependencies: 1521 | enquirer: ">= 2.3.0 < 3" 1522 | dependencies: 1523 | cli-truncate: 2.1.0 1524 | colorette: 1.3.0 1525 | enquirer: 2.3.6 1526 | log-update: 4.0.0 1527 | p-map: 4.0.0 1528 | rxjs: 6.6.7 1529 | through: 2.3.8 1530 | wrap-ansi: 7.0.0 1531 | dev: true 1532 | 1533 | /locate-path/6.0.0: 1534 | resolution: 1535 | { 1536 | integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, 1537 | } 1538 | engines: { node: ">=10" } 1539 | dependencies: 1540 | p-locate: 5.0.0 1541 | dev: true 1542 | 1543 | /lodash.map/4.6.0: 1544 | resolution: { integrity: sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= } 1545 | dev: true 1546 | 1547 | /lodash/4.17.21: 1548 | resolution: 1549 | { 1550 | integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, 1551 | } 1552 | dev: true 1553 | 1554 | /log-symbols/4.1.0: 1555 | resolution: 1556 | { 1557 | integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, 1558 | } 1559 | engines: { node: ">=10" } 1560 | dependencies: 1561 | chalk: 4.1.2 1562 | is-unicode-supported: 0.1.0 1563 | dev: true 1564 | 1565 | /log-update/4.0.0: 1566 | resolution: 1567 | { 1568 | integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==, 1569 | } 1570 | engines: { node: ">=10" } 1571 | dependencies: 1572 | ansi-escapes: 4.3.2 1573 | cli-cursor: 3.1.0 1574 | slice-ansi: 4.0.0 1575 | wrap-ansi: 6.2.0 1576 | dev: true 1577 | 1578 | /longest/2.0.1: 1579 | resolution: { integrity: sha1-eB4YMpaqlPbU2RbcM10NF676I/g= } 1580 | engines: { node: ">=0.10.0" } 1581 | dev: true 1582 | 1583 | /loose-envify/1.4.0: 1584 | resolution: 1585 | { 1586 | integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, 1587 | } 1588 | hasBin: true 1589 | dependencies: 1590 | js-tokens: 4.0.0 1591 | dev: false 1592 | 1593 | /merge-stream/2.0.0: 1594 | resolution: 1595 | { 1596 | integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, 1597 | } 1598 | dev: true 1599 | 1600 | /merge/2.1.1: 1601 | resolution: 1602 | { 1603 | integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==, 1604 | } 1605 | dev: true 1606 | 1607 | /micromatch/4.0.4: 1608 | resolution: 1609 | { 1610 | integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==, 1611 | } 1612 | engines: { node: ">=8.6" } 1613 | dependencies: 1614 | braces: 3.0.2 1615 | picomatch: 2.3.0 1616 | dev: true 1617 | 1618 | /mimic-fn/1.2.0: 1619 | resolution: 1620 | { 1621 | integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, 1622 | } 1623 | engines: { node: ">=4" } 1624 | dev: true 1625 | 1626 | /mimic-fn/2.1.0: 1627 | resolution: 1628 | { 1629 | integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, 1630 | } 1631 | engines: { node: ">=6" } 1632 | dev: true 1633 | 1634 | /minimatch/3.0.4: 1635 | resolution: 1636 | { 1637 | integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==, 1638 | } 1639 | dependencies: 1640 | brace-expansion: 1.1.11 1641 | dev: true 1642 | 1643 | /minimist/1.2.5: 1644 | resolution: 1645 | { 1646 | integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==, 1647 | } 1648 | dev: true 1649 | 1650 | /ms/2.1.2: 1651 | resolution: 1652 | { 1653 | integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, 1654 | } 1655 | dev: true 1656 | 1657 | /mute-stream/0.0.7: 1658 | resolution: { integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= } 1659 | dev: true 1660 | 1661 | /nanoid/3.1.25: 1662 | resolution: 1663 | { 1664 | integrity: sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==, 1665 | } 1666 | engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } 1667 | hasBin: true 1668 | dev: true 1669 | 1670 | /node-releases/1.1.75: 1671 | resolution: 1672 | { 1673 | integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==, 1674 | } 1675 | dev: true 1676 | 1677 | /normalize-path/3.0.0: 1678 | resolution: 1679 | { 1680 | integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, 1681 | } 1682 | engines: { node: ">=0.10.0" } 1683 | dev: true 1684 | 1685 | /npm-run-path/4.0.1: 1686 | resolution: 1687 | { 1688 | integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, 1689 | } 1690 | engines: { node: ">=8" } 1691 | dependencies: 1692 | path-key: 3.1.1 1693 | dev: true 1694 | 1695 | /object-assign/4.1.1: 1696 | resolution: { integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= } 1697 | engines: { node: ">=0.10.0" } 1698 | dev: false 1699 | 1700 | /once/1.4.0: 1701 | resolution: { integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= } 1702 | dependencies: 1703 | wrappy: 1.0.2 1704 | dev: true 1705 | 1706 | /onetime/2.0.1: 1707 | resolution: { integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= } 1708 | engines: { node: ">=4" } 1709 | dependencies: 1710 | mimic-fn: 1.2.0 1711 | dev: true 1712 | 1713 | /onetime/5.1.2: 1714 | resolution: 1715 | { 1716 | integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, 1717 | } 1718 | engines: { node: ">=6" } 1719 | dependencies: 1720 | mimic-fn: 2.1.0 1721 | dev: true 1722 | 1723 | /opencollective-postinstall/2.0.3: 1724 | resolution: 1725 | { 1726 | integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==, 1727 | } 1728 | hasBin: true 1729 | dev: true 1730 | 1731 | /os-tmpdir/1.0.2: 1732 | resolution: { integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= } 1733 | engines: { node: ">=0.10.0" } 1734 | dev: true 1735 | 1736 | /p-limit/3.1.0: 1737 | resolution: 1738 | { 1739 | integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, 1740 | } 1741 | engines: { node: ">=10" } 1742 | dependencies: 1743 | yocto-queue: 0.1.0 1744 | dev: true 1745 | 1746 | /p-locate/5.0.0: 1747 | resolution: 1748 | { 1749 | integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, 1750 | } 1751 | engines: { node: ">=10" } 1752 | dependencies: 1753 | p-limit: 3.1.0 1754 | dev: true 1755 | 1756 | /p-map/4.0.0: 1757 | resolution: 1758 | { 1759 | integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, 1760 | } 1761 | engines: { node: ">=10" } 1762 | dependencies: 1763 | aggregate-error: 3.1.0 1764 | dev: true 1765 | 1766 | /parent-module/1.0.1: 1767 | resolution: 1768 | { 1769 | integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, 1770 | } 1771 | engines: { node: ">=6" } 1772 | dependencies: 1773 | callsites: 3.1.0 1774 | dev: true 1775 | 1776 | /parse-json/5.2.0: 1777 | resolution: 1778 | { 1779 | integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, 1780 | } 1781 | engines: { node: ">=8" } 1782 | dependencies: 1783 | "@babel/code-frame": 7.14.5 1784 | error-ex: 1.3.2 1785 | json-parse-even-better-errors: 2.3.1 1786 | lines-and-columns: 1.1.6 1787 | dev: true 1788 | 1789 | /parse-passwd/1.0.0: 1790 | resolution: { integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= } 1791 | engines: { node: ">=0.10.0" } 1792 | dev: true 1793 | 1794 | /path-exists/4.0.0: 1795 | resolution: 1796 | { 1797 | integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, 1798 | } 1799 | engines: { node: ">=8" } 1800 | dev: true 1801 | 1802 | /path-is-absolute/1.0.1: 1803 | resolution: { integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= } 1804 | engines: { node: ">=0.10.0" } 1805 | dev: true 1806 | 1807 | /path-key/3.1.1: 1808 | resolution: 1809 | { 1810 | integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, 1811 | } 1812 | engines: { node: ">=8" } 1813 | dev: true 1814 | 1815 | /path-parse/1.0.7: 1816 | resolution: 1817 | { 1818 | integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, 1819 | } 1820 | dev: true 1821 | 1822 | /path-type/4.0.0: 1823 | resolution: 1824 | { 1825 | integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, 1826 | } 1827 | engines: { node: ">=8" } 1828 | dev: true 1829 | 1830 | /picomatch/2.3.0: 1831 | resolution: 1832 | { 1833 | integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==, 1834 | } 1835 | engines: { node: ">=8.6" } 1836 | dev: true 1837 | 1838 | /pkg-dir/5.0.0: 1839 | resolution: 1840 | { 1841 | integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==, 1842 | } 1843 | engines: { node: ">=10" } 1844 | dependencies: 1845 | find-up: 5.0.0 1846 | dev: true 1847 | 1848 | /please-upgrade-node/3.2.0: 1849 | resolution: 1850 | { 1851 | integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==, 1852 | } 1853 | dependencies: 1854 | semver-compare: 1.0.0 1855 | dev: true 1856 | 1857 | /postcss/8.3.6: 1858 | resolution: 1859 | { 1860 | integrity: sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==, 1861 | } 1862 | engines: { node: ^10 || ^12 || >=14 } 1863 | dependencies: 1864 | colorette: 1.3.0 1865 | nanoid: 3.1.25 1866 | source-map-js: 0.6.2 1867 | dev: true 1868 | 1869 | /prettier/2.3.2: 1870 | resolution: 1871 | { 1872 | integrity: sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==, 1873 | } 1874 | engines: { node: ">=10.13.0" } 1875 | hasBin: true 1876 | dev: true 1877 | 1878 | /react-dom/17.0.2_react@17.0.2: 1879 | resolution: 1880 | { 1881 | integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==, 1882 | } 1883 | peerDependencies: 1884 | react: 17.0.2 1885 | dependencies: 1886 | loose-envify: 1.4.0 1887 | object-assign: 4.1.1 1888 | react: 17.0.2 1889 | scheduler: 0.20.2 1890 | dev: false 1891 | 1892 | /react-refresh/0.10.0: 1893 | resolution: 1894 | { 1895 | integrity: sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==, 1896 | } 1897 | engines: { node: ">=0.10.0" } 1898 | dev: true 1899 | 1900 | /react/17.0.2: 1901 | resolution: 1902 | { 1903 | integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==, 1904 | } 1905 | engines: { node: ">=0.10.0" } 1906 | dependencies: 1907 | loose-envify: 1.4.0 1908 | object-assign: 4.1.1 1909 | dev: false 1910 | 1911 | /resolve-dir/1.0.1: 1912 | resolution: { integrity: sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= } 1913 | engines: { node: ">=0.10.0" } 1914 | dependencies: 1915 | expand-tilde: 2.0.2 1916 | global-modules: 1.0.0 1917 | dev: true 1918 | 1919 | /resolve-from/4.0.0: 1920 | resolution: 1921 | { 1922 | integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, 1923 | } 1924 | engines: { node: ">=4" } 1925 | dev: true 1926 | 1927 | /resolve-from/5.0.0: 1928 | resolution: 1929 | { 1930 | integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, 1931 | } 1932 | engines: { node: ">=8" } 1933 | dev: true 1934 | optional: true 1935 | 1936 | /resolve-global/1.0.0: 1937 | resolution: 1938 | { 1939 | integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==, 1940 | } 1941 | engines: { node: ">=8" } 1942 | dependencies: 1943 | global-dirs: 0.1.1 1944 | dev: true 1945 | optional: true 1946 | 1947 | /resolve/1.20.0: 1948 | resolution: 1949 | { 1950 | integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==, 1951 | } 1952 | dependencies: 1953 | is-core-module: 2.6.0 1954 | path-parse: 1.0.7 1955 | dev: true 1956 | 1957 | /restore-cursor/2.0.0: 1958 | resolution: { integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368= } 1959 | engines: { node: ">=4" } 1960 | dependencies: 1961 | onetime: 2.0.1 1962 | signal-exit: 3.0.3 1963 | dev: true 1964 | 1965 | /restore-cursor/3.1.0: 1966 | resolution: 1967 | { 1968 | integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, 1969 | } 1970 | engines: { node: ">=8" } 1971 | dependencies: 1972 | onetime: 5.1.2 1973 | signal-exit: 3.0.3 1974 | dev: true 1975 | 1976 | /rollup/2.56.3: 1977 | resolution: 1978 | { 1979 | integrity: sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==, 1980 | } 1981 | engines: { node: ">=10.0.0" } 1982 | hasBin: true 1983 | optionalDependencies: 1984 | fsevents: 2.3.2 1985 | dev: true 1986 | 1987 | /run-async/2.4.1: 1988 | resolution: 1989 | { 1990 | integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, 1991 | } 1992 | engines: { node: ">=0.12.0" } 1993 | dev: true 1994 | 1995 | /rxjs/6.6.7: 1996 | resolution: 1997 | { 1998 | integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, 1999 | } 2000 | engines: { npm: ">=2.0.0" } 2001 | dependencies: 2002 | tslib: 1.14.1 2003 | dev: true 2004 | 2005 | /safe-buffer/5.1.2: 2006 | resolution: 2007 | { 2008 | integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, 2009 | } 2010 | dev: true 2011 | 2012 | /safer-buffer/2.1.2: 2013 | resolution: 2014 | { 2015 | integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, 2016 | } 2017 | dev: true 2018 | 2019 | /scheduler/0.20.2: 2020 | resolution: 2021 | { 2022 | integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==, 2023 | } 2024 | dependencies: 2025 | loose-envify: 1.4.0 2026 | object-assign: 4.1.1 2027 | dev: false 2028 | 2029 | /semver-compare/1.0.0: 2030 | resolution: { integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w= } 2031 | dev: true 2032 | 2033 | /semver-regex/3.1.2: 2034 | resolution: 2035 | { 2036 | integrity: sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==, 2037 | } 2038 | engines: { node: ">=8" } 2039 | dev: true 2040 | 2041 | /semver/6.3.0: 2042 | resolution: 2043 | { 2044 | integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, 2045 | } 2046 | hasBin: true 2047 | dev: true 2048 | 2049 | /shebang-command/2.0.0: 2050 | resolution: 2051 | { 2052 | integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, 2053 | } 2054 | engines: { node: ">=8" } 2055 | dependencies: 2056 | shebang-regex: 3.0.0 2057 | dev: true 2058 | 2059 | /shebang-regex/3.0.0: 2060 | resolution: 2061 | { 2062 | integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, 2063 | } 2064 | engines: { node: ">=8" } 2065 | dev: true 2066 | 2067 | /signal-exit/3.0.3: 2068 | resolution: 2069 | { 2070 | integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==, 2071 | } 2072 | dev: true 2073 | 2074 | /slash/3.0.0: 2075 | resolution: 2076 | { 2077 | integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, 2078 | } 2079 | engines: { node: ">=8" } 2080 | dev: true 2081 | 2082 | /slice-ansi/3.0.0: 2083 | resolution: 2084 | { 2085 | integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==, 2086 | } 2087 | engines: { node: ">=8" } 2088 | dependencies: 2089 | ansi-styles: 4.3.0 2090 | astral-regex: 2.0.0 2091 | is-fullwidth-code-point: 3.0.0 2092 | dev: true 2093 | 2094 | /slice-ansi/4.0.0: 2095 | resolution: 2096 | { 2097 | integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, 2098 | } 2099 | engines: { node: ">=10" } 2100 | dependencies: 2101 | ansi-styles: 4.3.0 2102 | astral-regex: 2.0.0 2103 | is-fullwidth-code-point: 3.0.0 2104 | dev: true 2105 | 2106 | /source-map-js/0.6.2: 2107 | resolution: 2108 | { 2109 | integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==, 2110 | } 2111 | engines: { node: ">=0.10.0" } 2112 | dev: true 2113 | 2114 | /source-map/0.5.7: 2115 | resolution: { integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= } 2116 | engines: { node: ">=0.10.0" } 2117 | dev: true 2118 | 2119 | /string-argv/0.3.1: 2120 | resolution: 2121 | { 2122 | integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==, 2123 | } 2124 | engines: { node: ">=0.6.19" } 2125 | dev: true 2126 | 2127 | /string-width/2.1.1: 2128 | resolution: 2129 | { 2130 | integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, 2131 | } 2132 | engines: { node: ">=4" } 2133 | dependencies: 2134 | is-fullwidth-code-point: 2.0.0 2135 | strip-ansi: 4.0.0 2136 | dev: true 2137 | 2138 | /string-width/4.2.2: 2139 | resolution: 2140 | { 2141 | integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==, 2142 | } 2143 | engines: { node: ">=8" } 2144 | dependencies: 2145 | emoji-regex: 8.0.0 2146 | is-fullwidth-code-point: 3.0.0 2147 | strip-ansi: 6.0.0 2148 | dev: true 2149 | 2150 | /stringify-object/3.3.0: 2151 | resolution: 2152 | { 2153 | integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, 2154 | } 2155 | engines: { node: ">=4" } 2156 | dependencies: 2157 | get-own-enumerable-property-symbols: 3.0.2 2158 | is-obj: 1.0.1 2159 | is-regexp: 1.0.0 2160 | dev: true 2161 | 2162 | /strip-ansi/4.0.0: 2163 | resolution: { integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= } 2164 | engines: { node: ">=4" } 2165 | dependencies: 2166 | ansi-regex: 3.0.0 2167 | dev: true 2168 | 2169 | /strip-ansi/5.2.0: 2170 | resolution: 2171 | { 2172 | integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, 2173 | } 2174 | engines: { node: ">=6" } 2175 | dependencies: 2176 | ansi-regex: 4.1.0 2177 | dev: true 2178 | 2179 | /strip-ansi/6.0.0: 2180 | resolution: 2181 | { 2182 | integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==, 2183 | } 2184 | engines: { node: ">=8" } 2185 | dependencies: 2186 | ansi-regex: 5.0.0 2187 | dev: true 2188 | 2189 | /strip-bom/4.0.0: 2190 | resolution: 2191 | { 2192 | integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, 2193 | } 2194 | engines: { node: ">=8" } 2195 | dev: true 2196 | 2197 | /strip-final-newline/2.0.0: 2198 | resolution: 2199 | { 2200 | integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, 2201 | } 2202 | engines: { node: ">=6" } 2203 | dev: true 2204 | 2205 | /strip-json-comments/3.0.1: 2206 | resolution: 2207 | { 2208 | integrity: sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==, 2209 | } 2210 | engines: { node: ">=8" } 2211 | dev: true 2212 | 2213 | /supports-color/5.5.0: 2214 | resolution: 2215 | { 2216 | integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, 2217 | } 2218 | engines: { node: ">=4" } 2219 | dependencies: 2220 | has-flag: 3.0.0 2221 | dev: true 2222 | 2223 | /supports-color/7.2.0: 2224 | resolution: 2225 | { 2226 | integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, 2227 | } 2228 | engines: { node: ">=8" } 2229 | dependencies: 2230 | has-flag: 4.0.0 2231 | dev: true 2232 | 2233 | /through/2.3.8: 2234 | resolution: { integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= } 2235 | dev: true 2236 | 2237 | /tmp/0.0.33: 2238 | resolution: 2239 | { 2240 | integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, 2241 | } 2242 | engines: { node: ">=0.6.0" } 2243 | dependencies: 2244 | os-tmpdir: 1.0.2 2245 | dev: true 2246 | 2247 | /to-fast-properties/2.0.0: 2248 | resolution: { integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= } 2249 | engines: { node: ">=4" } 2250 | dev: true 2251 | 2252 | /to-regex-range/5.0.1: 2253 | resolution: 2254 | { 2255 | integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, 2256 | } 2257 | engines: { node: ">=8.0" } 2258 | dependencies: 2259 | is-number: 7.0.0 2260 | dev: true 2261 | 2262 | /tslib/1.14.1: 2263 | resolution: 2264 | { 2265 | integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, 2266 | } 2267 | dev: true 2268 | 2269 | /type-fest/0.21.3: 2270 | resolution: 2271 | { 2272 | integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, 2273 | } 2274 | engines: { node: ">=10" } 2275 | dev: true 2276 | 2277 | /typescript/4.3.5: 2278 | resolution: 2279 | { 2280 | integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==, 2281 | } 2282 | engines: { node: ">=4.2.0" } 2283 | hasBin: true 2284 | dev: true 2285 | 2286 | /universalify/0.1.2: 2287 | resolution: 2288 | { 2289 | integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, 2290 | } 2291 | engines: { node: ">= 4.0.0" } 2292 | dev: true 2293 | 2294 | /vite/2.5.1: 2295 | resolution: 2296 | { 2297 | integrity: sha512-FwmLbbz8MB1pBs9dKoRDgpiqoijif8hSK1+NNUYc12/cnf+pM2UFhhQ1rcpXgbMhm/5c2USZdVAf0FSkSxaFDA==, 2298 | } 2299 | engines: { node: ">=12.2.0" } 2300 | hasBin: true 2301 | dependencies: 2302 | esbuild: 0.12.23 2303 | postcss: 8.3.6 2304 | resolve: 1.20.0 2305 | rollup: 2.56.3 2306 | optionalDependencies: 2307 | fsevents: 2.3.2 2308 | dev: true 2309 | 2310 | /which-pm-runs/1.0.0: 2311 | resolution: { integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= } 2312 | dev: true 2313 | 2314 | /which/1.3.1: 2315 | resolution: 2316 | { 2317 | integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, 2318 | } 2319 | hasBin: true 2320 | dependencies: 2321 | isexe: 2.0.0 2322 | dev: true 2323 | 2324 | /which/2.0.2: 2325 | resolution: 2326 | { 2327 | integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, 2328 | } 2329 | engines: { node: ">= 8" } 2330 | hasBin: true 2331 | dependencies: 2332 | isexe: 2.0.0 2333 | dev: true 2334 | 2335 | /word-wrap/1.2.3: 2336 | resolution: 2337 | { 2338 | integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, 2339 | } 2340 | engines: { node: ">=0.10.0" } 2341 | dev: true 2342 | 2343 | /wrap-ansi/6.2.0: 2344 | resolution: 2345 | { 2346 | integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, 2347 | } 2348 | engines: { node: ">=8" } 2349 | dependencies: 2350 | ansi-styles: 4.3.0 2351 | string-width: 4.2.2 2352 | strip-ansi: 6.0.0 2353 | dev: true 2354 | 2355 | /wrap-ansi/7.0.0: 2356 | resolution: 2357 | { 2358 | integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, 2359 | } 2360 | engines: { node: ">=10" } 2361 | dependencies: 2362 | ansi-styles: 4.3.0 2363 | string-width: 4.2.2 2364 | strip-ansi: 6.0.0 2365 | dev: true 2366 | 2367 | /wrappy/1.0.2: 2368 | resolution: { integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= } 2369 | dev: true 2370 | 2371 | /yaml/1.10.2: 2372 | resolution: 2373 | { 2374 | integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, 2375 | } 2376 | engines: { node: ">= 6" } 2377 | dev: true 2378 | 2379 | /yocto-queue/0.1.0: 2380 | resolution: 2381 | { 2382 | integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, 2383 | } 2384 | engines: { node: ">=10" } 2385 | dev: true 2386 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "examples/*" 3 | --------------------------------------------------------------------------------